Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "Claude Runner VSCode Extension",
"runArgs": ["--name", "claude-runner-devcontainer"],
"build": {
"dockerfile": "./Dockerfile.devcontainer",
"context": "..",
Expand All @@ -17,6 +18,9 @@
"ghcr.io/devcontainers/features/python:1": {
"version": "3.12",
"installTools": true
},
"ghcr.io/devcontainers/features/go:1": {
"version": "1.24.3"
}
},
"customizations": {
Expand Down
12 changes: 12 additions & 0 deletions .devcontainer/postinstall.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,19 @@ npm install -g @anthropic-ai/claude-code
# Add useful aliases for development
echo 'alias ll="ls -alF"' >> ~/.bashrc
echo 'alias cl="claude --dangerously-skip-permissions"' >> ~/.bashrc
echo 'alias g="git"' >> ~/.bashrc
echo 'alias gc="git add -A && git commit -m"' >> ~/.bashrc
echo 'alias gp="git fetch --all && git pull"' >> ~/.bashrc
echo 'alias gf="git fetch --all && git rebase origin/master"' >> ~/.bashrc
echo 'alias gn="git checkout -b"' >> ~/.bashrc
echo 'alias pr="git push origin $(git rev-parse --abbrev-ref HEAD)"' >> ~/.bashrc
echo 'alias gpr="gc pr"' >> ~/.bashrc
echo 'export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1' >> ~/.bashrc
echo 'export SONAR_SCANNER_VERSION=7.0.2.4839'
echo 'export SONAR_SCANNER_HOME=$HOME/.sonar/sonar-scanner-$SONAR_SCANNER_VERSION-linux-x64'
echo 'export PATH=$SONAR_SCANNER_HOME/bin:$PATH'

yes | npx playwright install --with-deps --no-shell

# Setup SonarQube Scanner (optional for code quality)
if [ -f .sonar ]; then
Expand Down
167 changes: 156 additions & 11 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,24 @@
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module",
"project": ["./tsconfig.json", "./tsconfig.test.json"],
"project": [
"./tsconfig.json",
"./tsconfig.test.json",
"./tsconfig.cli.json",
"./tsconfig.cli-tests.json"
],
"ecmaFeatures": {
"jsx": true
}
},
"plugins": ["@typescript-eslint"],
"plugins": [
"@typescript-eslint",
"complexity",
"sonarjs",
"import",
"unicorn",
"jsdoc"
],
"extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
"rules": {
"@typescript-eslint/naming-convention": [
Expand All @@ -21,8 +33,8 @@
],
"@typescript-eslint/semi": "warn",
"curly": "warn",
"eqeqeq": "warn",
"no-throw-literal": "warn",
"eqeqeq": ["error", "always"],
"no-throw-literal": "error",
"semi": "off",
"@typescript-eslint/no-unused-vars": [
"error",
Expand All @@ -33,18 +45,126 @@
"@typescript-eslint/no-explicit-any": "warn",
"no-console": ["warn", { "allow": ["warn", "error"] }],
"prefer-const": "error",
"@typescript-eslint/prefer-nullish-coalescing": "warn",
"@typescript-eslint/prefer-optional-chain": "warn",
"@typescript-eslint/no-non-null-assertion": "warn",
"@typescript-eslint/prefer-nullish-coalescing": "error",
"@typescript-eslint/prefer-optional-chain": "error",
"@typescript-eslint/no-non-null-assertion": "error",
"@typescript-eslint/consistent-type-definitions": ["error", "interface"],
"@typescript-eslint/prefer-readonly": "warn"
"@typescript-eslint/prefer-readonly": "warn",

"complexity": ["warn", { "max": 40 }],
"max-depth": ["warn", 8],
"max-lines": ["warn", 1000],
"max-lines-per-function": ["warn", 300],
"max-nested-callbacks": "off",
"max-params": ["warn", 10],
"max-statements": ["warn", 100],
"max-statements-per-line": "off",

"sonarjs/cognitive-complexity": ["warn", 30],
"sonarjs/no-duplicate-string": ["warn", { "threshold": 8 }],
"sonarjs/no-identical-functions": "warn",
"sonarjs/no-redundant-jump": "off",
"sonarjs/prefer-immediate-return": "off",
"sonarjs/prefer-object-literal": "off",
"sonarjs/prefer-single-boolean-return": "off",

"import/order": "off",
"import/no-unresolved": "off",
"import/no-unused-modules": "off",
"import/no-cycle": "warn",
"import/no-self-import": "warn",
"import/no-useless-path-segments": "off",

"no-restricted-imports": [
"error",
{
"paths": [
"crypto",
"http",
"https",
"net",
"dgram",
"dns",
"url",
"stream",
"events",
"buffer",
"querystring",
"cluster",
"tls"
],
"patterns": ["node:*"]
}
],

"unicorn/prevent-abbreviations": "off",
"unicorn/filename-case": "off",
"unicorn/no-null": "off",
"unicorn/prefer-module": "off",
"unicorn/prefer-node-protocol": "off",
"unicorn/no-array-reduce": "off",
"unicorn/no-process-exit": "off",
"unicorn/prefer-top-level-await": "off",
"unicorn/prefer-string-replace-all": "off",
"unicorn/no-useless-undefined": "off",
"unicorn/no-array-for-each": "off",
"unicorn/numeric-separators-style": "off",
"unicorn/switch-case-braces": "off",
"unicorn/better-regex": "off",
"unicorn/text-encoding-identifier-case": "off",
"unicorn/consistent-function-scoping": "off",
"unicorn/explicit-length-check": "off",
"unicorn/prefer-array-some": "off",
"unicorn/prefer-includes": "off",
"unicorn/prefer-string-starts-ends-with": "off",
"unicorn/prefer-ternary": "off",
"unicorn/import-style": "off",

"jsdoc/require-jsdoc": "off",
"jsdoc/require-param-description": "off",
"jsdoc/require-returns-description": "off",
"jsdoc/require-description": "off",
"jsdoc/require-param": "off",
"jsdoc/require-returns": "off",
"jsdoc/check-param-names": "off",
"jsdoc/check-tag-names": "off",
"jsdoc/check-types": "off"
},
"settings": {
"import/resolver": {
"node": {
"extensions": [".js", ".jsx", ".ts", ".tsx"]
}
}
},
"ignorePatterns": ["out", "dist", "**/*.d.ts", "docs/**"],
"env": {
"node": true,
"es6": true
},
"overrides": [
{
"files": ["src/components/**/*.{ts,tsx}"],
"rules": {
"max-lines-per-function": ["warn", 600],
"complexity": "off",
"sonarjs/cognitive-complexity": "off"
}
},
{
"files": ["src/contexts/**/*.{ts,tsx}"],
"rules": {
"max-lines-per-function": ["warn", 450],
"complexity": "off",
"sonarjs/cognitive-complexity": "off"
}
},
{
"files": ["src/controllers/**/*.ts"],
"rules": {
"max-lines": ["warn", 1200]
}
},
{
"files": ["src/webview/**/*.{ts,tsx}"],
"env": {
Expand All @@ -56,15 +176,40 @@
"plugin:@typescript-eslint/recommended"
],
"rules": {
"no-undef": "off"
"no-undef": "off",
"unicorn/prefer-query-selector": "off",
"unicorn/prefer-dom-node-text-content": "off"
}
},
{
"files": ["**/test/**/*.{ts,tsx}", "**/utils/testUsageReport.ts"],
"files": [
"**/test/**/*.{ts,tsx}",
"**/tests/**/*.{ts,tsx}",
"**/utils/testUsageReport.ts"
],
"rules": {
"@typescript-eslint/no-explicit-any": "off",
"no-console": "off",
"@typescript-eslint/prefer-readonly": "off"
"@typescript-eslint/prefer-readonly": "off",
"complexity": "off",
"max-lines": "off",
"max-lines-per-function": "off",
"max-statements": "off",
"max-nested-callbacks": "off",
"sonarjs/cognitive-complexity": "off",
"sonarjs/no-duplicate-string": "off",
"import/no-unused-modules": "off",
"import/no-unresolved": "off",
"unicorn/consistent-function-scoping": "off",
"unicorn/no-useless-undefined": "off",
"jsdoc/require-jsdoc": "off",
"no-restricted-imports": "off"
}
},
{
"files": ["cli/**/*.{ts,tsx}", "scripts/**/*.{js,ts}"],
"rules": {
"no-restricted-imports": "off"
}
}
]
Expand Down
Loading
Loading