From 8e86d34aaae49eef89fd0651a14bc040bad506d1 Mon Sep 17 00:00:00 2001 From: Huynh Duc Dung Date: Mon, 16 Oct 2023 01:09:22 +0800 Subject: [PATCH] feat: add linter and typecheck --- .eslintrc.cjs | 3 ++ .github/ISSUE_TEMPLATE/sweep-template.yml | 2 +- .github/workflows/linter.yml | 50 ++++++++++++++++++++++ .gitignore | 1 + bun.lockb | Bin 23663 -> 119293 bytes cli/index.js | 2 +- cspell.json | 11 ++--- index.ts | 6 ++- package.json | 10 ++++- sweep.yaml | 16 +++---- 10 files changed, 80 insertions(+), 21 deletions(-) create mode 100644 .eslintrc.cjs create mode 100644 .github/workflows/linter.yml diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..e5760eb --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,3 @@ +module.exports = { + extends: ["productsway/typescript"], +}; diff --git a/.github/ISSUE_TEMPLATE/sweep-template.yml b/.github/ISSUE_TEMPLATE/sweep-template.yml index 98811de..09212ab 100644 --- a/.github/ISSUE_TEMPLATE/sweep-template.yml +++ b/.github/ISSUE_TEMPLATE/sweep-template.yml @@ -1,5 +1,5 @@ name: Sweep Issue -title: 'Sweep: ' +title: "Sweep: " description: For small bugs, features, refactors, and tests to be handled by Sweep, an AI-powered junior developer. labels: sweep body: diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml new file mode 100644 index 0000000..c542272 --- /dev/null +++ b/.github/workflows/linter.yml @@ -0,0 +1,50 @@ +name: Linter & Typecheck +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: +jobs: + typecheck: + runs-on: ubuntu-latest + continue-on-error: true + steps: + - id: checkout + name: Checkout + uses: actions/checkout@v4 + - id: setup-bun + name: Setup Bun + uses: oven-sh/setup-bun@v1 + with: + bun-version: latest + - id: install-bun + name: Bun Install + run: | + bun install + - id: Typecheck + name: Checking Typescript Error + run: | + bun run typecheck + linter: + runs-on: ubuntu-latest + continue-on-error: true + steps: + - id: checkout + name: Checkout + uses: actions/checkout@v4 + - id: setup-bun + name: Setup Bun + uses: oven-sh/setup-bun@v1 + with: + bun-version: latest + - id: install-bun + name: Bun Install + run: | + bun install + - id: linter + name: Linter check + run: | + bun run lint diff --git a/.gitignore b/.gitignore index ab5afb2..ce0663f 100644 --- a/.gitignore +++ b/.gitignore @@ -174,3 +174,4 @@ dist # Finder (MacOS) folder config .DS_Store +tsconfig.tsbuildinfo diff --git a/bun.lockb b/bun.lockb index 7cbc1b2d44fd212764adb8d5e03b33d6f4a67d7d..483827c8ef1d3d09225c61da23780d03d14cdb2e 100755 GIT binary patch literal 119293 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

7~*dL56+q(ezg8k9DmY4d{@AS{!y7+ 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 X>d$YH=V03zGDsOO(<&7?OE3NnzT`#` diff --git a/cli/index.js b/cli/index.js index 1eb34d6..a142649 100755 --- a/cli/index.js +++ b/cli/index.js @@ -1,2 +1,2 @@ #!/usr/bin/env node -import{$ as B} from"zx";import{exec as K} from"child_process";import{writeFileSync as J} from"node:fs";function y(g,q){J(g,q)}var D=!1;try{await B`cspell --version`,D=!0}catch(g){console.error("cSpell is not installed. Please install with your package manager."),console.info("Hint: npm install -g cspell@latest")}var L=await B`pwd`,b=String(L.stdout.split("/").slice(-1)[0]).trim(),M={$schema:"https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json",version:"0.2",language:"en",globRoot:".",dictionaryDefinitions:[{name:b,path:`./${b}.txt`,addWords:!0}],dictionaries:[b],ignorePaths:["node_modules",`/${b}.txt`]};y(`./${b}.txt`,"");y("./cspell.json",JSON.stringify(M,null,2));var O=`${D?"":"npx "}cspell --words-only --unique --no-progress --show-context "**/**/*.md" "**/**/*.ts" "**/**/*.json"`,E=await new Promise((g)=>{K(O,(q,A)=>{if(q)console.error(`Error running cspell: ${q}`);const G=A?A.split("\n").filter((H)=>H):[];g(G)})});console.log(`Found ${E.length} unknown words.`);y(`./${b}.txt`,E.join("\n"));console.log("cSpell setup completed.");process.exit(0); +import{$ as D} from"zx";import{exec as L} from"child_process";import{writeFileSync as K} from"node:fs";function A(b,q){K(b,q)}var E=!1;try{await D`cspell --version`,E=!0}catch(b){console.error("cSpell is not installed. Please install with your package manager."),console.info("Hint: npm install -g cspell@latest")}var M=await D`pwd`,g=String(M.stdout.split("/").slice(-1)[0]).trim(),O={$schema:"https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json",version:"0.2",language:"en",globRoot:".",dictionaryDefinitions:[{name:g,path:`./${g}.txt`,addWords:!0}],dictionaries:[g],ignorePaths:["node_modules",`/${g}.txt`]};A(`./${g}.txt`,"");A("./cspell.json",JSON.stringify(O,null,2));var Q=`${E?"":"npx "}cspell --words-only --unique --no-progress --show-context "**/**/*.md" "**/**/*.ts" "**/**/*.json"`,G=await new Promise((b)=>{L(Q,(q,B)=>{if(q)console.error(`Error running cspell: ${q}`);const H=B?B.split("\n").filter((J)=>J):[];b(H)})});console.log(`Found ${G.length} unknown words.`);A(`./${g}.txt`,G.join("\n"));console.log("cSpell setup completed.");process.exit(0); diff --git a/cspell.json b/cspell.json index 53b44d8..4965816 100644 --- a/cspell.json +++ b/cspell.json @@ -10,11 +10,6 @@ "addWords": true } ], - "dictionaries": [ - "cspell-tool" - ], - "ignorePaths": [ - "node_modules", - "/cspell-tool.txt" - ] -} \ No newline at end of file + "dictionaries": ["cspell-tool"], + "ignorePaths": ["node_modules", "/cspell-tool.txt"] +} diff --git a/index.ts b/index.ts index 81f115d..15472a6 100644 --- a/index.ts +++ b/index.ts @@ -45,13 +45,15 @@ writeFile("./cspell.json", JSON.stringify(cSpellContent, null, 2)); // TODO: Support other file types // Run cspell on Markdown files to get unknown words -const cmd = `${isInstalled ? "" : "npx " - }cspell --words-only --unique --no-progress --show-context "**/**/*.md" "**/**/*.ts" "**/**/*.json"`; +const cmd = `${ + isInstalled ? "" : "npx " +}cspell --words-only --unique --no-progress --show-context "**/**/*.md" "**/**/*.ts" "**/**/*.json"`; const unknownWords = await new Promise((resolve) => { exec(cmd, (error: any, stdout: string) => { if (error) { console.error(`Error running cspell: ${error}`); } + const words = stdout ? stdout.split("\n").filter((word: any) => word) : []; resolve(words); }); diff --git a/package.json b/package.json index 7d0e3ec..039417a 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,9 @@ "scripts": { "build": "bun build index.ts --outdir ./cli --target node --format esm --minify --external zx", "clean": "rm -rf cli && echo 'Done.'", + "lint": "eslint --ext .ts .", + "typecheck": "tsc --noEmit", + "format": "prettier --write .", "dev": "bun run --watch index.ts" }, "dependencies": { @@ -34,7 +37,12 @@ }, "devDependencies": { "@skypack/package-check": "0.2.2", - "bun-types": "latest" + "@typescript-eslint/eslint-plugin": "^6", + "@typescript-eslint/parser": "^6", + "bun-types": "latest", + "eslint": "^8", + "eslint-config-productsway": "1.3.0", + "prettier": "^3" }, "peerDependencies": { "typescript": "^5.0.0" diff --git a/sweep.yaml b/sweep.yaml index 3e7a499..41f00e9 100644 --- a/sweep.yaml +++ b/sweep.yaml @@ -3,15 +3,15 @@ # This setting contains a list of rules that Sweep will check for. If any of these rules are broken in a new commit, Sweep will create an pull request to fix the broken rule. rules: -- "All docstrings and comments should be up to date." -- "Code should be properly formatted and indented." -- "Variable and function names should be descriptive and follow a consistent naming convention." -- "There should be no unused imports or variables." -- "Code should be free of unnecessary comments and commented-out code." -- "There should be no hard-coded values or magic numbers in the code." + - "All docstrings and comments should be up to date." + - "Code should be properly formatted and indented." + - "Variable and function names should be descriptive and follow a consistent naming convention." + - "There should be no unused imports or variables." + - "Code should be free of unnecessary comments and commented-out code." + - "There should be no hard-coded values or magic numbers in the code." # This is the branch that Sweep will develop from and make pull requests to. Most people use 'main' or 'master' but some users also use 'dev' or 'staging'. -branch: 'main' +branch: "main" # By default Sweep will read the logs and outputs from your existing Github Actions. To disable this, set this to false. gha_enabled: True @@ -21,7 +21,7 @@ gha_enabled: True # Example: # # description: sweepai/sweep is a python project. The main api endpoints are in sweepai/api.py. Write code that adheres to PEP8. -description: '' +description: "" # This sets whether to create pull requests as drafts. If this is set to True, then all pull requests will be created as drafts and GitHub Actions will not be triggered. draft: False