pi-lens 3.8.52 β 3.8.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +151 -7
- package/LICENSE +21 -0
- package/README.md +137 -386
- package/dist/clients/bootstrap.js +3 -1
- package/dist/clients/dispatch/auxiliary-lsp.js +106 -0
- package/dist/clients/dispatch/dispatcher.js +27 -2
- package/dist/clients/dispatch/integration.js +96 -42
- package/dist/clients/dispatch/plan.js +6 -2
- package/dist/clients/dispatch/rules/high-complexity.js +29 -4
- package/dist/clients/dispatch/rules/high-fan-out.js +24 -4
- package/dist/clients/dispatch/runners/ast-grep-napi.js +134 -108
- package/dist/clients/dispatch/runners/credo.js +10 -3
- package/dist/clients/dispatch/runners/detekt.js +1 -1
- package/dist/clients/dispatch/runners/elixir-check.js +79 -15
- package/dist/clients/dispatch/runners/go-vet.js +41 -18
- package/dist/clients/dispatch/runners/index.js +4 -2
- package/dist/clients/dispatch/runners/lsp.js +31 -1
- package/dist/clients/dispatch/runners/markdownlint.js +11 -3
- package/dist/clients/dispatch/runners/mypy.js +15 -3
- package/dist/clients/dispatch/runners/phpstan.js +13 -3
- package/dist/clients/dispatch/runners/pyright.js +4 -1
- package/dist/clients/dispatch/runners/rust-clippy.js +27 -7
- package/dist/clients/dispatch/runners/shellcheck.js +16 -4
- package/dist/clients/dispatch/runners/shfmt.js +25 -1
- package/dist/clients/dispatch/runners/spotbugs.js +258 -0
- package/dist/clients/dispatch/runners/taplo.js +8 -1
- package/dist/clients/dispatch/runners/trivy-config.js +180 -0
- package/dist/clients/dispatch/runners/utils/runner-helpers.js +29 -2
- package/dist/clients/dispatch/runners/yaml-rule-parser.js +12 -1
- package/dist/clients/dispatch/runners/zig-check.js +3 -1
- package/dist/clients/dispatch/tool-profile.js +2 -1
- package/dist/clients/file-utils.js +48 -3
- package/dist/clients/formatters.js +52 -3
- package/dist/clients/gitleaks-client.js +9 -61
- package/dist/clients/govulncheck-client.js +8 -43
- package/dist/clients/host-edit-normalize.js +139 -0
- package/dist/clients/installer/index.js +713 -40
- package/dist/clients/knip-client.js +11 -10
- package/dist/clients/language-policy.js +14 -12
- package/dist/clients/language-profile.js +10 -1
- package/dist/clients/lens-config.js +7 -0
- package/dist/clients/lens-engine.js +5 -14
- package/dist/clients/lsp/client.js +316 -46
- package/dist/clients/lsp/index.js +164 -33
- package/dist/clients/lsp/jvm-runtime.js +158 -0
- package/dist/clients/lsp/launch.js +25 -14
- package/dist/clients/lsp/lombok.js +158 -0
- package/dist/clients/lsp/position-encoding.js +61 -0
- package/dist/clients/lsp/server-strategies.js +88 -1
- package/dist/clients/lsp/server.js +618 -190
- package/dist/clients/lsp/watch-queue.js +61 -0
- package/dist/clients/lsp-status.js +59 -0
- package/dist/clients/mcp/session.js +2 -1
- package/dist/clients/module-report-lsp.js +193 -0
- package/dist/clients/module-report.js +592 -0
- package/dist/clients/oldtext-autopatch.js +8 -7
- package/dist/clients/opengrep-config.js +80 -0
- package/dist/clients/partial-edit-apply.js +10 -8
- package/dist/clients/path-utils.js +22 -0
- package/dist/clients/pipeline.js +132 -63
- package/dist/clients/production-readiness.js +45 -69
- package/dist/clients/project-diagnostics/cache.js +44 -1
- package/dist/clients/project-diagnostics/scanner.js +64 -2
- package/dist/clients/project-lens-config.js +159 -0
- package/dist/clients/read-expansion.js +8 -0
- package/dist/clients/read-guard-tool-lines.js +19 -5
- package/dist/clients/read-guard.js +34 -0
- package/dist/clients/review-graph/builder.js +418 -110
- package/dist/clients/review-graph/import-resolvers.js +291 -0
- package/dist/clients/review-graph/workspace-modules.js +5 -0
- package/dist/clients/runtime-session.js +87 -17
- package/dist/clients/runtime-turn.js +95 -13
- package/dist/clients/safe-spawn.js +17 -1
- package/dist/clients/secret-findings.js +114 -0
- package/dist/clients/security-scan-client.js +103 -0
- package/dist/clients/sgconfig.js +68 -0
- package/dist/clients/source-filter.js +12 -1
- package/dist/clients/startup-scan.js +13 -4
- package/dist/clients/tool-policy.js +189 -9
- package/dist/clients/tree-sitter-client.js +328 -4
- package/dist/clients/tree-sitter-query-loader.js +18 -1
- package/dist/clients/tree-sitter-symbol-extractor.js +247 -72
- package/dist/clients/trivy-client.js +441 -0
- package/dist/clients/typos-config.js +33 -0
- package/dist/clients/widget-state.js +47 -1
- package/dist/clients/zizmor-config.js +77 -0
- package/dist/index.js +51 -104
- package/dist/mcp/server.js +87 -42
- package/dist/tools/ast-dump.js +1 -1
- package/dist/tools/ast-grep-replace.js +1 -1
- package/dist/tools/ast-grep-search.js +1 -1
- package/dist/tools/lens-diagnostics.js +77 -25
- package/dist/tools/lsp-diagnostics.js +31 -23
- package/dist/tools/lsp-navigation.js +145 -58
- package/dist/tools/lsp-structured-output.js +294 -0
- package/dist/tools/module-report.js +131 -0
- package/package.json +13 -7
- package/rules/ast-grep-rules/.sgconfig.yml +9 -0
- package/rules/ast-grep-rules/coderabbit/LICENSE +201 -0
- package/rules/ast-grep-rules/coderabbit/README.md +9 -0
- package/rules/ast-grep-rules/coderabbit/rules/c/security/dont-call-system-c.yml +57 -0
- package/rules/ast-grep-rules/coderabbit/rules/c/security/file-access-before-action-c.yml +182 -0
- package/rules/ast-grep-rules/coderabbit/rules/c/security/file-stat-before-action-c.yml +331 -0
- package/rules/ast-grep-rules/coderabbit/rules/c/security/insecure-hash-c.yml +286 -0
- package/rules/ast-grep-rules/coderabbit/rules/c/security/libxml2-audit-parser-c.yml +258 -0
- package/rules/ast-grep-rules/coderabbit/rules/c/security/null-library-function-c.yml +254 -0
- package/rules/ast-grep-rules/coderabbit/rules/c/security/sizeof-this-c.yml +121 -0
- package/rules/ast-grep-rules/coderabbit/rules/c/security/small-key-size-c.yml +40 -0
- package/rules/ast-grep-rules/coderabbit/rules/c/security/world-writable-file-c.yml +317 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/dont-call-system-cpp.yml +57 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/file-access-before-action-cpp.yml +271 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/file-stat-before-action-cpp.yml +494 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/fix-format-security-error-cpp.yml +18 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/insecure-hash-cpp.yml +122 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/libxml2-audit-parser-cpp.yml +258 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/missing-nul-cpp-string-memcpy-cpp.yml +393 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/null-library-function-cpp.yml +254 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/return-c-str-cpp.yml +124 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/sizeof-this-cpp.yml +41 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/small-key-size-cpp.yml +40 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/std-return-data-cpp.yml +93 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/std-vector-invalidation-cpp.yml +147 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/string-view-temporary-string-cpp.yml +924 -0
- package/rules/ast-grep-rules/coderabbit/rules/cpp/security/world-writable-file-cpp.yml +317 -0
- package/rules/ast-grep-rules/coderabbit/rules/csharp/security/httponly-false-csharp.yml +42 -0
- package/rules/ast-grep-rules/coderabbit/rules/csharp/security/insecure-binaryformatter-deserialization-csharp.yml +38 -0
- package/rules/ast-grep-rules/coderabbit/rules/csharp/security/jwt-decode-without-verify-csharp.yml +700 -0
- package/rules/ast-grep-rules/coderabbit/rules/csharp/security/jwt-hardcoded-secret-csharp.yml +672 -0
- package/rules/ast-grep-rules/coderabbit/rules/csharp/security/jwt-tokenvalidationparameters-no-expiry-validation-csharp.yml +136 -0
- package/rules/ast-grep-rules/coderabbit/rules/csharp/security/networkcredential-hardcoded-secret-python.yml +394 -0
- package/rules/ast-grep-rules/coderabbit/rules/csharp/security/npgsqlconnectionstringbuilder-hardcoded-secret-csharp.yml +339 -0
- package/rules/ast-grep-rules/coderabbit/rules/csharp/security/oracleconnectionstringbuilder-hardcoded-secret-csharp.yml +339 -0
- package/rules/ast-grep-rules/coderabbit/rules/csharp/security/sqlconnectionstringbuilder-hardcoded-secret-csharp.yml +339 -0
- package/rules/ast-grep-rules/coderabbit/rules/csharp/security/stacktrace-disclosure-csharp.yml +48 -0
- package/rules/ast-grep-rules/coderabbit/rules/csharp/security/use-ecb-mode-csharp.yml +177 -0
- package/rules/ast-grep-rules/coderabbit/rules/go/security/avoid-bind-to-all-interfaces-go.yml +27 -0
- package/rules/ast-grep-rules/coderabbit/rules/go/security/gorilla-cookie-store-hardcoded-session-key-go.yml +90 -0
- package/rules/ast-grep-rules/coderabbit/rules/go/security/gorilla-csrf-hardcoded-auth-key-go.yml +79 -0
- package/rules/ast-grep-rules/coderabbit/rules/go/security/grpc-client-insecure-connection-go.yml +60 -0
- package/rules/ast-grep-rules/coderabbit/rules/go/security/jwt-go-none-algorithm-go.yml +35 -0
- package/rules/ast-grep-rules/coderabbit/rules/go/security/missing-ssl-minversion-go.yml +42 -0
- package/rules/ast-grep-rules/coderabbit/rules/go/security/openai-empty-secret-go.yml +199 -0
- package/rules/ast-grep-rules/coderabbit/rules/go/security/openai-hardcoded-secret-go.yml +208 -0
- package/rules/ast-grep-rules/coderabbit/rules/go/security/ssl-v3-is-insecure-go.yml +40 -0
- package/rules/ast-grep-rules/coderabbit/rules/go/security/tls-with-insecure-cipher-go.yml +65 -0
- package/rules/ast-grep-rules/coderabbit/rules/go/security/use-of-weak-rsa-key-go.yml +253 -0
- package/rules/ast-grep-rules/coderabbit/rules/html/security/plaintext-http-link-html.yml +76 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/cbc-padding-oracle-java.yml +17 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/cookie-httponly-false-java.yml +9 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/cookie-missing-httponly-java.yml +21 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/cookie-missing-samesite-java.yml +64 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/cookie-missing-secure-flag-java.yml +51 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/cookie-secure-flag-false-java.yml +13 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/datanucleus-hardcoded-connection-password-java.yml +575 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/des-is-deprecated-java.yml +15 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/desede-is-deprecated-java.yml +92 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/documentbuilderfactory-disallow-doctype-decl-false-java.yml +45 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/documentbuilderfactory-external-general-entities-true-java.yml +279 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/documentbuilderfactory-external-parameter-entities-true-java.yml +279 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/drivermanager-hardcoded-secret-java.yml +142 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/ecb-cipher-java.yml +47 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/hardcoded-connection-password-java.yml +341 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/hardcoded-secret-in-credentials-java.yml +281 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/java-jwt-hardcoded-secret-java.yml +124 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/jedis-jedisclientconfig-hardcoded-password-java.yml +804 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/jedis-jedisfactory-hardcoded-password-java.yml +930 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/missing-httponly-java.yml +583 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/missing-secure-java.yml +584 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/no-null-cipher-java.yml +38 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/passwordauthentication-hardcoded-password-java.yml +651 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/rsa-no-padding-java.yml +13 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/simple-command-injection-direct-input-java.yml +55 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/system-setproperty-hardcoded-secret-java.yml +312 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/unencrypted-socket-java.yml +20 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/use-of-aes-ecb-java.yml +68 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/use-of-blowfish-java.yml +45 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/use-of-default-aes-java.yml +318 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/use-of-md5-digest-utils-java.yml +38 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/use-of-md5-java.yml +104 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/use-of-rc2-java.yml +84 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/use-of-rc4-java.yml +38 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/use-of-sha1-java.yml +165 -0
- package/rules/ast-grep-rules/coderabbit/rules/java/security/weak-ssl-context-java.yml +56 -0
- package/rules/ast-grep-rules/coderabbit/rules/javascript/security/detect-angular-sce-disabled-javascript.yml +14 -0
- package/rules/ast-grep-rules/coderabbit/rules/javascript/security/express-jwt-hardcoded-secret-javascript.yml +289 -0
- package/rules/ast-grep-rules/coderabbit/rules/javascript/security/express-session-hardcoded-secret-javascript.yml +101 -0
- package/rules/ast-grep-rules/coderabbit/rules/javascript/security/jwt-simple-noverify-javascript.yml +43 -0
- package/rules/ast-grep-rules/coderabbit/rules/javascript/security/node-rsa-weak-key-javascript.yml +577 -0
- package/rules/ast-grep-rules/coderabbit/rules/javascript/security/node-sequelize-empty-password-argument-javascript.yml +191 -0
- package/rules/ast-grep-rules/coderabbit/rules/javascript/security/node-sequelize-hardcoded-secret-argument-javascript.yml +94 -0
- package/rules/ast-grep-rules/coderabbit/rules/kotlin/security/des-is-deprecated-kotlin.yml +15 -0
- package/rules/ast-grep-rules/coderabbit/rules/kotlin/security/desede-is-deprecated-kotlin.yml +462 -0
- package/rules/ast-grep-rules/coderabbit/rules/kotlin/security/jwt-hardcode-kotlin.yml +567 -0
- package/rules/ast-grep-rules/coderabbit/rules/kotlin/security/rsa-no-padding-kotlin.yml +13 -0
- package/rules/ast-grep-rules/coderabbit/rules/kotlin/security/system-setproperty-hardcoded-secret-kotlin.yml +51 -0
- package/rules/ast-grep-rules/coderabbit/rules/php/security/openssl-cbc-static-iv-php.yml +641 -0
- package/rules/ast-grep-rules/coderabbit/rules/php/security/search-active-debug-php.yml +153 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/avoid-mktemp-python.yml +71 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/avoid_app_run_with_bad_host-python.yml +69 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/debug-enabled-python.yml +91 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/hashids-with-django-secret-python.yml +273 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/hashids-with-flask-secret-python.yml +190 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/insecure-cipher-algorithm-rc4-python.yml +75 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/jwt-python-hardcoded-secret-python.yml +116 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/openai-hardcoded-secret-python.yml +21 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-cassandra-empty-password-python.yml +227 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-cassandra-hardcoded-secret-python.yml +396 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-couchbase-empty-password-python.yml +72 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-couchbase-hardcoded-secret-python.yml +183 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-elasticsearch-hardcoded-bearer-auth-python.yml +64 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-ldap3-empty-password-python.yml +92 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-ldap3-hardcoded-secret-python.yml +145 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-mariadb-empty-password-python.yml +194 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-mariadb-hardcoded-secret-python.yml +193 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-mysql-empty-password-python.yml +192 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-mysql-hardcoded-secret-python.yml +195 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-mysqlclient-empty-password-python.yml +189 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-mysqlclient-hardcoded-secret-python.yml +191 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-neo4j-empty-password-python.yml +203 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-neo4j-hardcoded-secret-python.yml +205 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-peewee-mysql-empty-password-python.yml +50 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-peewee-mysql-hardcoded-secret-python.yml +48 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-peewee-pg-empty-password-python.yml +51 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-peewee-pg-hardcoded-secret-python.yml +49 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-pg8000-empty-password-python.yml +43 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-pg8000-hardcoded-secret-python.yml +67 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-psycopg2-empty-password-python.yml +65 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-psycopg2-hardcoded-secret-python.yml +64 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-pyjwt-hardcoded-secret-python.yml +38 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-pymongo-empty-password-python.yml +50 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-pymongo-hardcoded-secret-python.yml +48 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-pymssql-empty-password-python.yml +50 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-pymssql-hardcoded-secret-python.yml +48 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-pymysql-empty-password-python.yml +49 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-pymysql-hardcoded-secret-python.yml +47 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-redis-empty-password-python.yml +66 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-redis-hardcoded-secret-python.yml +65 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-requests-empty-password-python.yml +42 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-requests-hardcoded-secret-python.yml +146 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-requests-oauth-hardcoded-secret-python.yml +278 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-tormysql-empty-password-python.yml +301 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-tormysql-hardcoded-secret-python.yml +292 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-urllib3-hardcoded-secret-python.yml +52 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-webrepl-empty-password-python.yml +49 -0
- package/rules/ast-grep-rules/coderabbit/rules/python/security/python-webrepl-hardcoded-secret-python.yml +47 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/force-ssl-false-ruby.yml +23 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/hardcoded-http-auth-in-controller-ruby.yml +55 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/hardcoded-secret-rsa-passphrase-ruby.yml +218 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/insufficient-rsa-key-size-ruby.yml +84 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-aws-sdk-hardcoded-secret-ruby.yml +140 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-cassandra-empty-password-ruby.yml +141 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-cassandra-hardcoded-secret-ruby.yml +138 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-excon-hardcoded-secret-ruby.yml +226 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-faraday-hardcoded-secret-ruby.yml +490 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-mongo-empty-password-ruby.yml +356 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-mongo-hardcoded-secret-ruby.yml +400 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-mysql2-empty-password-ruby.yml +227 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-mysql2-hardcoded-secret-ruby.yml +248 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-octokit-hardcoded-secret-ruby.yml +125 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-pg-empty-password-ruby.yml +150 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-pg-hardcoded-secret-ruby.yml +189 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-redis-empty-password-ruby.yml +72 -0
- package/rules/ast-grep-rules/coderabbit/rules/ruby/security/ruby-redis-hardcoded-secret-ruby.yml +70 -0
- package/rules/ast-grep-rules/coderabbit/rules/rust/security/empty-password-rust.yml +1039 -0
- package/rules/ast-grep-rules/coderabbit/rules/rust/security/hardcoded-password-rust.yml +1016 -0
- package/rules/ast-grep-rules/coderabbit/rules/rust/security/postgres-empty-password-rust.yml +283 -0
- package/rules/ast-grep-rules/coderabbit/rules/rust/security/reqwest-accept-invalid-rust.yml +21 -0
- package/rules/ast-grep-rules/coderabbit/rules/rust/security/secrets-reqwest-hardcoded-auth-rust.yml +290 -0
- package/rules/ast-grep-rules/coderabbit/rules/rust/security/ssl-verify-none-rust.yml +100 -0
- package/rules/ast-grep-rules/coderabbit/rules/rust/security/tokio-postgres-empty-password-rust.yml +235 -0
- package/rules/ast-grep-rules/coderabbit/rules/rust/security/tokio-postgres-hardcoded-password-rust.yml +229 -0
- package/rules/ast-grep-rules/coderabbit/rules/scala/security/jwt-scala-hardcode-scala.yml +109 -0
- package/rules/ast-grep-rules/coderabbit/rules/scala/security/scala-jwt-hardcoded-secret-scala.yml +176 -0
- package/rules/ast-grep-rules/coderabbit/rules/swift/security/aes-hardcoded-secret-swift.yml +345 -0
- package/rules/ast-grep-rules/coderabbit/rules/swift/security/blowfish-hardcoded-secret-swift.yml +345 -0
- package/rules/ast-grep-rules/coderabbit/rules/swift/security/chacha20-hardcoded-secret-swift.yml +345 -0
- package/rules/ast-grep-rules/coderabbit/rules/swift/security/insecure-biometrics-swift.yml +43 -0
- package/rules/ast-grep-rules/coderabbit/rules/swift/security/rabbit-hardcoded-secret-swift.yml +345 -0
- package/rules/ast-grep-rules/coderabbit/rules/typescript/security/detect-angular-sce-disabled-typescript.yml +36 -0
- package/rules/ast-grep-rules/coderabbit/rules/typescript/security/express-session-hardcoded-secret-typescript.yml +203 -0
- package/rules/ast-grep-rules/coderabbit/rules/typescript/security/jwt-simple-noverify-typescript.yml +112 -0
- package/rules/ast-grep-rules/coderabbit/rules/typescript/security/node-rsa-weak-key-typescript.yml +1483 -0
- package/rules/ast-grep-rules/coderabbit/rules/typescript/security/node-sequelize-empty-password-argument-typescript.yml +169 -0
- package/rules/ast-grep-rules/coderabbit/rules/typescript/security/node-sequelize-hardcoded-secret-argument-typescript.yml +154 -0
- package/rules/ast-grep-rules/rule-schema.json +7 -7
- package/rules/ast-grep-rules/rule-tests/array-callback-return-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/array-callback-return-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/avoid-duplicate-export-test.yml +14 -0
- package/rules/ast-grep-rules/rule-tests/consistent-existence-index-check-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/consistent-existence-index-check-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/defer-in-loop-test.yml +20 -0
- package/rules/ast-grep-rules/rule-tests/enforce-node-protocol-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/enforce-node-protocol-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/find-import-file-without-extension-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/go-defer-func-call-antipattern-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/go-test-functions-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/gorm-find-without-where-test.yml +15 -0
- package/rules/ast-grep-rules/rule-tests/gorm-n-plus-one-test.yml +20 -0
- package/rules/ast-grep-rules/rule-tests/hardcoded-url-js-test.yml +7 -0
- package/rules/ast-grep-rules/rule-tests/hardcoded-url-test.yml +7 -0
- package/rules/ast-grep-rules/rule-tests/inline-styles-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/jsx-boolean-short-circuit-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/jwt-no-verify-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/jwt-no-verify-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/large-class-test.yml +15 -0
- package/rules/ast-grep-rules/rule-tests/long-parameter-list-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/loop-var-capture-test.yml +25 -0
- package/rules/ast-grep-rules/rule-tests/missing-component-decorator-test.yml +7 -0
- package/rules/ast-grep-rules/rule-tests/mutex-unlock-mismatch-test.yml +29 -0
- package/rules/ast-grep-rules/rule-tests/nested-ternary-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/nested-ternary-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/nil-map-assignment-test.yml +50 -0
- package/rules/ast-grep-rules/rule-tests/no-absolute-path-import-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-absolute-path-import-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-accumulating-spread-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-alert-js-test.yml +7 -0
- package/rules/ast-grep-rules/rule-tests/no-alert-test.yml +7 -0
- package/rules/ast-grep-rules/rule-tests/no-any-type-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-array-constructor-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-array-constructor-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-array-reverse-mutation-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-array-reverse-mutation-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-as-any-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-assert-tuple-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/no-async-promise-executor-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-async-promise-executor-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-await-expression-member-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-await-expression-member-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-await-in-promise-all-js-test.yml +7 -0
- package/rules/ast-grep-rules/rule-tests/no-await-in-promise-all-test.yml +7 -0
- package/rules/ast-grep-rules/rule-tests/no-await-in-promise-methods-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-await-in-promise-methods-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-aws-access-key-literal-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-aws-apigateway-no-auth-test.yml +12 -0
- package/rules/ast-grep-rules/rule-tests/no-aws-s3-public-access-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-bare-except-test.yml +28 -0
- package/rules/ast-grep-rules/rule-tests/no-blank-target-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-boolean-in-except-test.yml +28 -0
- package/rules/ast-grep-rules/rule-tests/no-case-declarations-js-test.yml +24 -0
- package/rules/ast-grep-rules/rule-tests/no-case-declarations-test.yml +24 -0
- package/rules/ast-grep-rules/rule-tests/no-compare-neg-zero-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-compare-neg-zero-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-comparison-to-none-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/no-comparison-to-true-false-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/no-compile-call-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-cond-assign-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-cond-assign-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-console-except-error-js-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/no-console-except-error-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/no-constant-condition-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-constant-condition-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-db-string-literal-password-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-demeter-message-chain-test.yml +16 -0
- package/rules/ast-grep-rules/rule-tests/no-discarded-error-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-discarded-error-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-dunder-exit-wrong-arity-test.yml +27 -0
- package/rules/ast-grep-rules/rule-tests/no-dupe-class-members-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/no-dupe-keys-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-dupe-keys-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-duplicate-kwarg-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-ellipsis-body-test.yml +20 -0
- package/rules/ast-grep-rules/rule-tests/no-except-non-exception-test.yml +23 -0
- package/rules/ast-grep-rules/rule-tests/no-extra-boolean-cast-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-extra-boolean-cast-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-fastapi-router-prefix-outside-init-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-flag-argument-js-test.yml +37 -0
- package/rules/ast-grep-rules/rule-tests/no-flag-argument-test.yml +37 -0
- package/rules/ast-grep-rules/rule-tests/no-flask-preprocess-request-ignored-test.yml +16 -0
- package/rules/ast-grep-rules/rule-tests/no-flask-secret-key-literal-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/no-flask-sendfile-without-mimetype-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-global-eval-js-test.yml +17 -0
- package/rules/ast-grep-rules/rule-tests/no-hardcoded-password-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-html-autoescape-off-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/no-http-headers-bracket-access-test.yml +7 -0
- package/rules/ast-grep-rules/rule-tests/no-identity-operator-on-literals-test.yml +14 -0
- package/rules/ast-grep-rules/rule-tests/no-implied-eval-js-test.yml +12 -0
- package/rules/ast-grep-rules/rule-tests/no-implied-eval-test.yml +12 -0
- package/rules/ast-grep-rules/rule-tests/no-init-return-test.yml +26 -0
- package/rules/ast-grep-rules/rule-tests/no-inner-html-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-inner-html-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-insecure-randomness-js-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/no-insecure-randomness-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/no-instanceof-array-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-instanceof-array-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-instanceof-builtins-js-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/no-instanceof-builtins-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/no-javascript-url-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-javascript-url-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-jinja2-autoescape-off-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/no-marshal-load-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-mutable-contextvar-default-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-mutable-default-test.yml +12 -0
- package/rules/ast-grep-rules/rule-tests/no-mutable-export-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-nan-comparison-js-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/no-nan-comparison-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/no-negation-in-equality-check-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-negation-in-equality-check-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-nested-links-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-new-symbol-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-new-symbol-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-new-wrappers-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-new-wrappers-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-non-null-assertion-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-notimplemented-in-bool-test.yml +20 -0
- package/rules/ast-grep-rules/rule-tests/no-numpy-nan-equality-test.yml +22 -0
- package/rules/ast-grep-rules/rule-tests/no-octal-literal-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-only-defined-names-in-dunder-all-test.yml +17 -0
- package/rules/ast-grep-rules/rule-tests/no-open-redirect-js-test.yml +12 -0
- package/rules/ast-grep-rules/rule-tests/no-open-redirect-test.yml +12 -0
- package/rules/ast-grep-rules/rule-tests/no-prototype-builtins-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-prototype-builtins-native-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-prototype-builtins-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-python-sql-string-concat-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-raise-not-implemented-test.yml +21 -0
- package/rules/ast-grep-rules/rule-tests/no-raise-stopiteration-in-generator-test.yml +22 -0
- package/rules/ast-grep-rules/rule-tests/no-relative-cross-package-import-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-requests-verify-false-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/no-requests-without-timeout-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-return-await-test.yml +12 -0
- package/rules/ast-grep-rules/rule-tests/no-return-value-in-generator-test.yml +22 -0
- package/rules/ast-grep-rules/rule-tests/no-secret-in-env-var-name-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/no-server-bind-wildcard-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-single-promise-in-promise-methods-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-single-promise-in-promise-methods-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-singledispatch-on-method-test.yml +25 -0
- package/rules/ast-grep-rules/rule-tests/no-sort-without-comparator-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-sql-in-code-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-sql-in-code-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-star-imports-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-string-ref-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-template-string-concat-test.yml +14 -0
- package/rules/ast-grep-rules/rule-tests/no-testclient-text-without-content-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-throw-string-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-throw-string-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-typeof-undefined-js-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/no-typeof-undefined-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/no-unimplemented-stub-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-unimplemented-stub-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-unnecessary-array-flat-depth-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-unnecessary-array-flat-depth-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-unnecessary-state-initializer-test.yml +7 -0
- package/rules/ast-grep-rules/rule-tests/no-useless-length-check-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-useless-length-check-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/no-useless-promise-resolve-reject-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-useless-promise-resolve-reject-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-useless-rest-spread-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-useless-rest-spread-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-uvicorn-non-import-string-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-xxe-vulnerable-xml-parser-test.yml +19 -0
- package/rules/ast-grep-rules/rule-tests/no-yield-from-non-iterable-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/no-yield-return-outside-function-test.yml +19 -0
- package/rules/ast-grep-rules/rule-tests/only-strings-in-dunder-all-test.yml +18 -0
- package/rules/ast-grep-rules/rule-tests/prefer-array-find-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-array-find-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-array-flat-map-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-array-flat-map-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-array-some-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-array-some-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-at-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-at-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-date-now-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-date-now-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-dom-node-append-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-dom-node-append-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-dom-node-text-content-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-dom-node-text-content-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-keyboard-event-key-js-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/prefer-keyboard-event-key-test.yml +11 -0
- package/rules/ast-grep-rules/rule-tests/prefer-math-min-max-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/prefer-math-min-max-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/prefer-number-properties-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-number-properties-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-optional-chain-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-prototype-methods-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-prototype-methods-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-query-selector-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-query-selector-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-string-slice-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-string-slice-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-string-starts-ends-with-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-string-starts-ends-with-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-string-trim-start-end-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-string-trim-start-end-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/prefer-structured-clone-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/prefer-structured-clone-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/redos-nested-quantifier-test.yml +14 -0
- package/rules/ast-grep-rules/rule-tests/redundant-state-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/redundant-unsafe-function-test.yml +25 -0
- package/rules/ast-grep-rules/rule-tests/redundant-usestate-type-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/require-await-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/ruby-detect-path-traversal-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/rust-2024-let-chain-candidate-test.yml +27 -0
- package/rules/ast-grep-rules/rule-tests/strict-equality-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/strict-equality-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/strict-inequality-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/strict-inequality-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/string-concat-in-loop-test.yml +20 -0
- package/rules/ast-grep-rules/rule-tests/switch-without-default-test.yml +16 -0
- package/rules/ast-grep-rules/rule-tests/throw-new-error-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/throw-new-error-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/ts-array-concat-spread-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/ts-array-every-some-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/ts-boolean-return-if-else-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/ts-defensive-null-guard-test.yml +14 -0
- package/rules/ast-grep-rules/rule-tests/ts-delete-property-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/ts-double-negation-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/ts-function-constructor-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/ts-in-operator-loop-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/ts-isnan-check-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/ts-json-stringify-parse-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/ts-manual-array-contains-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/ts-nullish-coalescing-opportunity-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/ts-object-hasown-check-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/ts-optional-chaining-default-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/ts-parseint-no-radix-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/ts-pointless-bool-cast-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/ts-redundant-filter-map-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/ts-slice-copy-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/ts-string-split-index-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/ts-unnecessary-array-concat-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/ts-unnecessary-array-from-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/ts-unnecessary-bind-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/ts-unnecessary-else-return-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/ts-void-zero-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/ts-while-index-length-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/unchecked-throwing-call-js-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/unchecked-throwing-call-python-test.yml +23 -0
- package/rules/ast-grep-rules/rule-tests/unchecked-throwing-call-test.yml +13 -0
- package/rules/ast-grep-rules/rule-tests/unlock-in-loop-test.yml +19 -0
- package/rules/ast-grep-rules/rule-tests/unmarshal-tag-is-dash-test.yml +23 -0
- package/rules/ast-grep-rules/rule-tests/unnecessary-react-hook-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/waitgroup-done-scope-test.yml +20 -0
- package/rules/ast-grep-rules/rule-tests/weak-rsa-key-js-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests/weak-rsa-key-test.yml +9 -0
- package/rules/ast-grep-rules/rule-tests-disabled/no-method-field-name-collision-test.yml +23 -0
- package/rules/ast-grep-rules/rules/array-callback-return-js.yml +17 -10
- package/rules/ast-grep-rules/rules/array-callback-return.yml +16 -9
- package/rules/ast-grep-rules/rules/avoid-duplicate-export.yml +19 -0
- package/rules/ast-grep-rules/rules/defer-in-loop.yml +10 -0
- package/rules/ast-grep-rules/rules/find-import-file-without-extension.yml +22 -0
- package/rules/ast-grep-rules/rules/go-defer-func-call-antipattern.yml +34 -0
- package/rules/ast-grep-rules/rules/go-test-functions.yml +32 -0
- package/rules/ast-grep-rules/rules/gorm-find-without-where.yml +26 -0
- package/rules/ast-grep-rules/rules/gorm-n-plus-one.yml +16 -0
- package/rules/ast-grep-rules/rules/hardcoded-url-js.yml +10 -5
- package/rules/ast-grep-rules/rules/hardcoded-url.yml +9 -4
- package/rules/ast-grep-rules/rules/jsx-boolean-short-circuit.yml +33 -13
- package/rules/ast-grep-rules/rules/jwt-no-verify-js.yml +16 -3
- package/rules/ast-grep-rules/rules/jwt-no-verify.yml +15 -2
- package/rules/ast-grep-rules/rules/loop-var-capture.yml +42 -0
- package/rules/ast-grep-rules/rules/missing-component-decorator.yml +21 -0
- package/rules/ast-grep-rules/rules/mutex-unlock-mismatch.yml +14 -0
- package/rules/ast-grep-rules/rules/nil-map-assignment.yml +43 -0
- package/rules/ast-grep-rules/rules/no-any-type.yml +13 -4
- package/rules/ast-grep-rules/rules/no-assert-tuple.yml +24 -0
- package/rules/ast-grep-rules/rules/no-aws-access-key-literal.yml +30 -0
- package/rules/ast-grep-rules/rules/no-aws-apigateway-no-auth.yml +29 -0
- package/rules/ast-grep-rules/rules/no-aws-s3-public-access.yml +28 -0
- package/rules/ast-grep-rules/rules/no-bare-except.yml +21 -3
- package/rules/ast-grep-rules/rules/no-blank-target-js.yml +17 -6
- package/rules/ast-grep-rules/rules/no-boolean-in-except.yml +23 -0
- package/rules/ast-grep-rules/rules/no-comparison-to-none.yml +5 -0
- package/rules/ast-grep-rules/rules/no-comparison-to-true-false.yml +25 -0
- package/rules/ast-grep-rules/rules/no-compile-call.yml +29 -0
- package/rules/ast-grep-rules/rules/no-console-except-error-js.yml +20 -0
- package/rules/ast-grep-rules/rules/no-console-except-error.yml +20 -0
- package/rules/ast-grep-rules/rules/no-db-string-literal-password.yml +44 -0
- package/rules/ast-grep-rules/rules/no-demeter-message-chain.yml +25 -0
- package/rules/ast-grep-rules/rules/no-dunder-exit-wrong-arity.yml +25 -0
- package/rules/ast-grep-rules/rules/no-duplicate-kwarg.yml +26 -0
- package/rules/ast-grep-rules/rules/no-except-non-exception.yml +47 -0
- package/rules/ast-grep-rules/rules/no-extra-boolean-cast-js.yml +26 -21
- package/rules/ast-grep-rules/rules/no-extra-boolean-cast.yml +25 -20
- package/rules/ast-grep-rules/rules/no-fastapi-router-prefix-outside-init.yml +29 -0
- package/rules/ast-grep-rules/rules/no-flag-argument-js.yml +37 -0
- package/rules/ast-grep-rules/rules/no-flag-argument.yml +36 -0
- package/rules/ast-grep-rules/rules/no-flask-preprocess-request-ignored.yml +26 -0
- package/rules/ast-grep-rules/rules/no-flask-secret-key-literal.yml +36 -0
- package/rules/ast-grep-rules/rules/no-flask-sendfile-without-mimetype.yml +42 -0
- package/rules/ast-grep-rules/rules/no-global-eval-js.yml +5 -0
- package/rules/ast-grep-rules/rules/no-hardcoded-password.yml +42 -0
- package/rules/ast-grep-rules/rules/no-html-autoescape-off.yml +25 -0
- package/rules/ast-grep-rules/rules/no-http-headers-bracket-access.yml +22 -0
- package/rules/ast-grep-rules/rules/no-identity-operator-on-literals.yml +69 -0
- package/rules/ast-grep-rules/rules/no-implied-eval-js.yml +8 -5
- package/rules/ast-grep-rules/rules/no-implied-eval.yml +7 -4
- package/rules/ast-grep-rules/rules/no-init-return.yml +27 -0
- package/rules/ast-grep-rules/rules/no-inline-styles.yml +13 -6
- package/rules/ast-grep-rules/rules/no-javascript-url-js.yml +8 -4
- package/rules/ast-grep-rules/rules/no-javascript-url.yml +7 -3
- package/rules/ast-grep-rules/rules/no-jinja2-autoescape-off.yml +24 -0
- package/rules/ast-grep-rules/rules/no-marshal-load.yml +24 -0
- package/rules/ast-grep-rules/rules/no-mutable-contextvar-default.yml +38 -0
- package/rules/ast-grep-rules/rules/no-mutable-default.yml +8 -2
- package/rules/ast-grep-rules/rules/no-notimplemented-in-bool.yml +21 -0
- package/rules/ast-grep-rules/rules/no-numpy-nan-equality.yml +31 -0
- package/rules/ast-grep-rules/rules/no-only-defined-names-in-dunder-all.yml +36 -0
- package/rules/ast-grep-rules/rules/no-python-sql-string-concat.yml +37 -0
- package/rules/ast-grep-rules/rules/no-raise-stopiteration-in-generator.yml +28 -0
- package/rules/ast-grep-rules/rules/no-relative-imports.yml +13 -14
- package/rules/ast-grep-rules/rules/no-requests-verify-false.yml +27 -0
- package/rules/ast-grep-rules/rules/no-requests-without-timeout.yml +113 -0
- package/rules/ast-grep-rules/rules/no-return-value-in-generator.yml +31 -0
- package/rules/ast-grep-rules/rules/no-secret-in-env-var-name.yml +37 -0
- package/rules/ast-grep-rules/rules/no-server-bind-wildcard.yml +28 -0
- package/rules/ast-grep-rules/rules/no-singledispatch-on-method.yml +27 -0
- package/rules/ast-grep-rules/rules/no-sql-in-code-js.yml +15 -4
- package/rules/ast-grep-rules/rules/no-sql-in-code.yml +14 -3
- package/rules/ast-grep-rules/rules/no-string-ref.yml +13 -6
- package/rules/ast-grep-rules/rules/no-template-string-concat.yml +21 -0
- package/rules/ast-grep-rules/rules/no-testclient-text-without-content.yml +39 -0
- package/rules/ast-grep-rules/rules/no-uvicorn-non-import-string.yml +46 -0
- package/rules/ast-grep-rules/rules/no-xxe-vulnerable-xml-parser.yml +32 -0
- package/rules/ast-grep-rules/rules/no-yield-from-non-iterable.yml +33 -0
- package/rules/ast-grep-rules/rules/no-yield-return-outside-function.yml +31 -0
- package/rules/ast-grep-rules/rules/only-strings-in-dunder-all.yml +32 -0
- package/rules/ast-grep-rules/rules/redundant-unsafe-function.yml +21 -0
- package/rules/ast-grep-rules/rules/redundant-usestate-type.yml +15 -0
- package/rules/ast-grep-rules/rules/ruby-detect-path-traversal.yml +33 -0
- package/rules/ast-grep-rules/rules/rust-2024-let-chain-candidate.yml +56 -0
- package/rules/ast-grep-rules/rules/string-concat-in-loop.yml +31 -0
- package/rules/ast-grep-rules/rules/ts-array-concat-spread.yml +10 -0
- package/rules/ast-grep-rules/rules/ts-array-every-some.yml +22 -0
- package/rules/ast-grep-rules/rules/ts-boolean-return-if-else.yml +12 -0
- package/rules/ast-grep-rules/rules/ts-defensive-null-guard.yml +12 -0
- package/rules/ast-grep-rules/rules/ts-delete-property.yml +10 -0
- package/rules/ast-grep-rules/rules/ts-double-negation.yml +10 -0
- package/rules/ast-grep-rules/rules/ts-function-constructor.yml +12 -0
- package/rules/ast-grep-rules/rules/ts-in-operator-loop.yml +22 -0
- package/rules/ast-grep-rules/rules/ts-isnan-check.yml +10 -0
- package/rules/ast-grep-rules/rules/ts-json-stringify-parse.yml +17 -0
- package/rules/ast-grep-rules/rules/ts-manual-array-contains.yml +25 -0
- package/rules/ast-grep-rules/rules/ts-nullish-coalescing-opportunity.yml +20 -0
- package/rules/ast-grep-rules/rules/ts-object-hasown-check.yml +9 -0
- package/rules/ast-grep-rules/rules/ts-optional-chaining-default.yml +21 -0
- package/rules/ast-grep-rules/rules/ts-parseint-no-radix.yml +18 -0
- package/rules/ast-grep-rules/rules/ts-pointless-bool-cast.yml +10 -0
- package/rules/ast-grep-rules/rules/ts-redundant-filter-map.yml +10 -0
- package/rules/ast-grep-rules/rules/ts-slice-copy.yml +11 -0
- package/rules/ast-grep-rules/rules/ts-string-split-index.yml +12 -0
- package/rules/ast-grep-rules/rules/ts-unnecessary-array-concat.yml +9 -0
- package/rules/ast-grep-rules/rules/ts-unnecessary-array-from.yml +9 -0
- package/rules/ast-grep-rules/rules/ts-unnecessary-bind.yml +10 -0
- package/rules/ast-grep-rules/rules/ts-unnecessary-else-return.yml +19 -0
- package/rules/ast-grep-rules/rules/ts-void-zero.yml +10 -0
- package/rules/ast-grep-rules/rules/ts-while-index-length.yml +10 -0
- package/rules/ast-grep-rules/rules/unlock-in-loop.yml +22 -0
- package/rules/ast-grep-rules/rules/unmarshal-tag-is-dash.yml +20 -0
- package/rules/ast-grep-rules/rules/unnecessary-react-hook.yml +27 -0
- package/rules/ast-grep-rules/rules/waitgroup-done-scope.yml +11 -0
- package/rules/ast-grep-rules/rules/weak-rsa-key-js.yml +16 -3
- package/rules/ast-grep-rules/rules/weak-rsa-key.yml +15 -2
- package/rules/ast-grep-rules/rules-disabled/gorm-unbounded-preload.yml +41 -0
- package/rules/ast-grep-rules/rules-disabled/no-method-field-name-collision.yml +42 -0
- package/rules/ast-grep-rules/rules-disabled/shadow-err-variable.yml +38 -0
- package/rules/rule-catalog.json +1721 -133
- package/rules/tree-sitter-queries/python/aws-public-access-policy.yml +68 -0
- package/rules/tree-sitter-queries/python/endpoint-204-with-body.yml +62 -0
- package/rules/tree-sitter-queries/python/open-invalid-mode.yml +58 -0
- package/rules/tree-sitter-queries/python/python-special-method-arity.yml +67 -0
- package/rules/tree-sitter-queries/python/python-sql-injection.yml +12 -3
- package/rules/tree-sitter-queries/python/python-thread-global-write.yml +6 -0
- package/rules/tree-sitter-queries/python/python-unsafe-regex.yml +20 -19
- package/rules/tree-sitter-queries/python/slots-assignment-mismatch.yml +73 -0
- package/rules/tree-sitter-queries/python/string-format-arity-mismatch.yml +52 -0
- package/rules/tree-sitter-queries/{python β python-disabled}/python-print-statement.yml +14 -0
- package/skills/lsp-navigation/SKILL.md +4 -0
- package/skills/write-ast-grep-rule/SKILL.md +74 -4
- package/dist/clients/dispatch/runners/semgrep.js +0 -197
- package/dist/clients/secrets-scanner.js +0 -181
- package/dist/clients/semgrep-config.js +0 -157
- package/rules/ast-grep-rules/slop-patterns.yml +0 -469
package/README.md
CHANGED
|
@@ -4,63 +4,24 @@
|
|
|
4
4
|
|
|
5
5
|
# pi-lens
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
8
|
+
[](#contributors-)
|
|
9
|
+
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
### At Session Start
|
|
12
|
-
|
|
13
|
-
At `session_start`, pi-lens:
|
|
14
|
-
|
|
15
|
-
- resets runtime state and diagnostic telemetry
|
|
16
|
-
- detects project root, language profile, and active tools
|
|
17
|
-
- applies language-aware startup defaults for tool preinstall
|
|
18
|
-
- warms caches and optional indexes (with overlap/session guardrails)
|
|
19
|
-
- emits missing-tool install hints for detected languages when relevant
|
|
20
|
-
- prepends session guidance before the user's prompt so provider bridges keep the real prompt active
|
|
21
|
-
- opens `warmFiles` (if configured in `.pi-lens/lsp.json`) to seed lazy-indexing language servers like clangd before the first symbol query
|
|
22
|
-
|
|
23
|
-
Startup scan context and language profile are cached in the project snapshot and reused on subsequent `/new` invocations when the project has not changed, avoiding repeated full filesystem walks (~2.5 s saved on medium-to-large projects). Background startup scans are deferred past the interactive session-start path so they do not inflate visible `/new` latency.
|
|
24
|
-
|
|
25
|
-
For one-shot print sessions (for example `pi --print ...`), pi-lens auto-uses a quick startup path that skips heavy bootstrap work to reduce startup latency. Override with `PI_LENS_STARTUP_MODE=full|minimal|quick`.
|
|
26
|
-
|
|
27
|
-
### On Write/Edit
|
|
28
|
-
|
|
29
|
-
On every `write` and `edit`, pi-lens runs a fast, language-aware pipeline (checks depend on file language, project config, and installed tools):
|
|
30
|
-
|
|
31
|
-
1. **Secrets scan** β blocking; aborts the write if credentials are detected
|
|
32
|
-
2. **Auto-format** β deferred to `agent_end` by default; queued files are formatted once after all agent tool calls complete. Use `--immediate-format` or global config `format.mode: "immediate"` for per-edit formatting
|
|
33
|
-
3. **Auto-fix** β safe autofixes from 6 tools (Biome `check --write`, Ruff `check --fix`, ESLint `--fix`, stylelint `--fix`, sqlfluff `fix`, RuboCop `-a`) applied before analysis
|
|
34
|
-
4. **Edit autopatch** β before an `edit` tool call lands, pi-lens silently corrects two classes of `oldText` mismatch: leading tab/space indentation (when the corrected text matches exactly one location) and trailing whitespace stripped by formatters. Both corrections also retarget `newText` so the replacement matches the file's whitespace style
|
|
35
|
-
5. **LSP file sync** β opens/updates the file in active language servers
|
|
36
|
-
5. **Dispatch lint** β parallel runner groups: LSP diagnostics, tree-sitter structural rules, ast-grep security/correctness rules, fact rules, language-specific linters, experimental Semgrep security scans, similarity detection
|
|
37
|
-
6. **Cascade diagnostics** β review-graph impact cascade showing which other files were affected and how diagnostics propagated
|
|
38
|
-
|
|
39
|
-
Results are inline and actionable:
|
|
40
|
-
|
|
41
|
-
- **Blocking issues** β stop progress until fixed
|
|
42
|
-
- **Warnings** β summarized inline, detail in `/lens-booboo`
|
|
43
|
-
- **Health/telemetry** β available in `/lens-health`
|
|
44
|
-
|
|
45
|
-
### Agent End
|
|
11
|
+
pi-lens gives AI coding agents fast, language-aware feedback while they write/edit.
|
|
46
12
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
- **Deferred formatting** β any files queued during the turn are formatted once, synced to LSP, and tracked for read-guard coverage
|
|
50
|
-
- **Conservative LSP warning autofix** β when `actionableWarnings.autoFix.enabled` is set, applies up to 5 preferred LSP quickfixes for warnings flagged in the turn's actionable warnings report. Each fix is re-validated against the live LSP server at apply time, checked for ambiguity (skipped if multiple eligible actions exist), and gated by a safety check before any write occurs. Changed files are registered with the read-guard and cache manager
|
|
51
|
-
- **Summary notification** β concise status: how many files were formatted, which changed, and whether any formatter failed
|
|
52
|
-
|
|
53
|
-
### Turn End
|
|
54
|
-
|
|
55
|
-
At `turn_end`, pi-lens:
|
|
13
|
+
## What It Does
|
|
56
14
|
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
|
|
15
|
+
- LSP diagnostics and navigation across supported languages
|
|
16
|
+
- Impact cascade diagnostics that show which related files were affected and run LSP diagnostics on them
|
|
17
|
+
- Language-specific linters, type-checkers, and scanners on every write/edit
|
|
18
|
+
- Safe formatting/autofix where tools are configured or confidently detected
|
|
19
|
+
- ast-grep and tree-sitter structural rules for correctness/security smells
|
|
20
|
+
- Agent-facing tools for LSP navigation/diagnostics, AST search/replace,
|
|
21
|
+
diagnostics state, and project intelligence
|
|
22
|
+
- Review-graph intelligence for supported languages via bundled tree-sitter WASMs
|
|
23
|
+
- Read-guard and edit-autopatch support to reduce bad edits
|
|
24
|
+
- Background security/dependency scans for opted-in projects
|
|
64
25
|
|
|
65
26
|
## Install
|
|
66
27
|
|
|
@@ -74,335 +35,125 @@ Or from git:
|
|
|
74
35
|
pi install git:github.com/apmantza/pi-lens
|
|
75
36
|
```
|
|
76
37
|
|
|
77
|
-
##
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
- Without a local config, Semgrep stays skipped unless explicitly configured with `--lens-semgrep --lens-semgrep-config <auto|p/pack|path>` or `/lens-semgrep enable --config <auto|p/pack|path>`.
|
|
200
|
-
- Local `.semgrep.yml` scans do not require a Semgrep token. Semgrep AppSec/Pro/managed configurations may require `semgrep login` or `SEMGREP_APP_TOKEN`.
|
|
201
|
-
- pi-lens passes `--metrics=off` for dispatch scans.
|
|
202
|
-
|
|
203
|
-
Commands:
|
|
204
|
-
|
|
205
|
-
- `/lens-semgrep status` β show CLI availability, discovered local config, persisted pi-lens config, and effective dispatch state
|
|
206
|
-
- `/lens-semgrep init` β create a starter `.semgrep.yml` with a blocking `eval(...)` rule and enable Semgrep dispatch
|
|
207
|
-
- `/lens-semgrep enable [--config <auto|p/pack|path>]` β persist Semgrep dispatch activation in `.pi-lens/semgrep.json`
|
|
208
|
-
- `/lens-semgrep disable` β persistently disable Semgrep dispatch for this project
|
|
209
|
-
- `/lens-semgrep clear` β remove `.pi-lens/semgrep.json` and return to local-config auto-discovery
|
|
210
|
-
|
|
211
|
-
Local rules can opt into pi-lens blocking semantics with metadata:
|
|
212
|
-
|
|
213
|
-
```yaml
|
|
214
|
-
metadata:
|
|
215
|
-
pi-lens:
|
|
216
|
-
semantic: blocking
|
|
217
|
-
defect_class: injection
|
|
218
|
-
confidence: high
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
## Run
|
|
222
|
-
|
|
223
|
-
```bash
|
|
224
|
-
# Standard mode (LSP enabled by default)
|
|
225
|
-
pi
|
|
226
|
-
|
|
227
|
-
# Optional switches
|
|
228
|
-
pi --no-lens # Start pi-lens disabled for this session; /lens-toggle can re-enable
|
|
229
|
-
pi --no-lens-context # Disable automatic context injection only (tools/LSP/read-guard/format stay on); /lens-context-toggle
|
|
230
|
-
pi --no-lsp # Disable unified LSP diagnostics
|
|
231
|
-
pi --no-autoformat # Skip auto-formatting entirely
|
|
232
|
-
pi --immediate-format # Format immediately after each edit instead of deferring to agent_end
|
|
233
|
-
pi --no-autofix # Skip auto-fix (Biome, Ruff, ESLint, stylelint, sqlfluff, RuboCop)
|
|
234
|
-
pi --no-tests # Skip test runner
|
|
235
|
-
pi --no-delta # Disable delta mode (show all diagnostics, not just new ones)
|
|
236
|
-
pi --lens-guard # Block git commit/push when unresolved blockers exist (experimental)
|
|
237
|
-
pi --lens-semgrep # Enable Semgrep dispatch when a local/configured Semgrep config exists
|
|
238
|
-
pi --lens-semgrep-config p/ci # Explicit Semgrep config for dispatch (requires --lens-semgrep)
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
## Global Config
|
|
242
|
-
|
|
243
|
-
pi-lens reads optional user preferences from `~/.pi-lens/config.json` (`%USERPROFILE%\\.pi-lens\\config.json` on Windows). Unknown keys are ignored, and missing or invalid config falls back to defaults.
|
|
244
|
-
|
|
245
|
-
Hide the diagnostics widget by default, run formatting immediately after write/edit tool calls instead of at `agent_end`, and enable actionable warnings with conservative autofix:
|
|
246
|
-
|
|
247
|
-
```json
|
|
248
|
-
{
|
|
249
|
-
"widget": {
|
|
250
|
-
"visible": false
|
|
251
|
-
},
|
|
252
|
-
"format": {
|
|
253
|
-
"enabled": true,
|
|
254
|
-
"mode": "immediate"
|
|
255
|
-
},
|
|
256
|
-
"actionableWarnings": {
|
|
257
|
-
"enabled": true,
|
|
258
|
-
"includeLspCodeActions": true,
|
|
259
|
-
"deltaOnly": true,
|
|
260
|
-
"autoFix": {
|
|
261
|
-
"enabled": false,
|
|
262
|
-
"maxFixes": 5
|
|
263
|
-
}
|
|
264
|
-
},
|
|
265
|
-
"contextInjection": {
|
|
266
|
-
"enabled": false
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
`format.mode` can be `"deferred"` (default) or `"immediate"`. Set `format.enabled` to `false` to match `--no-autoformat`. `/lens-widget-toggle` still works as a session-only override.
|
|
272
|
-
|
|
273
|
-
`contextInjection.enabled` (default `true`) controls whether pi-lens prepends automatic findings β session-start guidance, turn-end findings, and test findings β into the next model turn. Set it to `false` (or use `--no-lens-context` / `PI_LENS_NO_CONTEXT_INJECTION=1` / `/lens-context-toggle`) to keep tools, LSP, read-guard, and formatting running while avoiding the prompt-cache invalidation that injected messages cause in long, cache-sensitive sessions. Findings are still cached, so `lens_diagnostics` and `/lens-health` keep working.
|
|
274
|
-
|
|
275
|
-
`actionableWarnings.enabled` gates the turn_end report. `includeLspCodeActions` fetches LSP code actions for each warning (requires an active language server). `deltaOnly` (default `true`) limits the report to lines touched in the current turn. `autoFix.enabled` applies conservative LSP quickfixes at `agent_end`; `autoFix.maxFixes` caps the number applied per turn (default `5`).
|
|
276
|
-
|
|
277
|
-
## Environment Variables
|
|
278
|
-
|
|
279
|
-
- `PILENS_DATA_DIR` β redirect per-project state (scanner caches,
|
|
280
|
-
turn-state.json) to a base directory outside the project. By default
|
|
281
|
-
pi-lens writes to `~/.pi-lens/projects/<sanitized-cwd-slug>/`. The one
|
|
282
|
-
exception is a legacy `<cwd>/.pi-lens/` directory: if that already exists
|
|
283
|
-
in the project, pi-lens continues to use it. Set `PILENS_DATA_DIR` to
|
|
284
|
-
permanently override both cases and write to
|
|
285
|
-
`<PILENS_DATA_DIR>/<sanitized-cwd-slug>/` instead. Particularly useful
|
|
286
|
-
when running pi with a local model server (llama.cpp, Ollama, etc.) that
|
|
287
|
-
monitors the project directory β cache-file churn inside the workspace can
|
|
288
|
-
disrupt the model's context scoring. Tool binaries always live in
|
|
289
|
-
`~/.pi-lens/bin/` regardless.
|
|
290
|
-
- `PI_LENS_STARTUP_MODE` β `full` | `minimal` | `quick`. Override the
|
|
291
|
-
auto-selected startup path. One-shot `pi --print` sessions auto-use `quick`
|
|
292
|
-
to reduce latency.
|
|
293
|
-
- `PI_LENS_NO_CONTEXT_INJECTION` β set to `1` to disable automatic context
|
|
294
|
-
injection (equivalent to `--no-lens-context` / `contextInjection.enabled:
|
|
295
|
-
false`). Tools, LSP, read-guard, and formatting stay active; findings are
|
|
296
|
-
still cached for `lens_diagnostics` and `/lens-health`.
|
|
297
|
-
|
|
298
|
-
## Key Commands
|
|
299
|
-
|
|
300
|
-
- `/lens-toggle` β toggle pi-lens on/off for the current session without restarting
|
|
301
|
-
- `/lens-context-toggle` β toggle automatic context injection on/off for the session (tools/LSP/read-guard/formatting stay active)
|
|
302
|
-
- `/lens-widget-toggle` β show/hide the pi-lens diagnostics widget below the editor
|
|
303
|
-
- `/lens-booboo` β full quality report for current project state
|
|
304
|
-
- `/lens-health` β runtime health, latency, and diagnostic telemetry
|
|
305
|
-
- `/lens-allow-edit <path>` β override the read-before-edit guard for a single edit
|
|
306
|
-
- `/lens-tools` β tool installation status: globally installed, auto-installed, or npx fallback
|
|
307
|
-
- `/lens-tdi` β Technical Debt Index (TDI) and project health trend
|
|
308
|
-
- `/lens-semgrep` β manage experimental Semgrep dispatch (`status`, `init`, `enable`, `disable`, `clear`)
|
|
309
|
-
|
|
310
|
-
## Language Coverage
|
|
311
|
-
|
|
312
|
-
pi-lens supports **36+ languages** through dispatch runners and LSP integration.
|
|
313
|
-
|
|
314
|
-
Formatting uses a single selected formatter per file: explicit project config wins, otherwise pi-lens uses a smart default where supported, and config-first ecosystems do not autoformat without config.
|
|
315
|
-
|
|
316
|
-
Dispatch is diagnostics-oriented: automatic formatting and safe autofix happen in the post-write pipeline rather than through dispatch format-check runners.
|
|
317
|
-
|
|
318
|
-
| Language | LSP | Dispatch Runners | Formatter |
|
|
319
|
-
| --------------------- | --- | -------------------------------------------------------------------------------------------------------------- | ----------------------- |
|
|
320
|
-
| JavaScript/TypeScript | β | lsp, ts-lsp, biome-check-json, tree-sitter, ast-grep-napi, type-safety, similarity, fact-rules, eslint, oxlint | biome, prettier |
|
|
321
|
-
| Python | β | lsp, pyright, ruff-lint, tree-sitter, python-slop | ruff, black |
|
|
322
|
-
| Go | β | lsp, go-vet, golangci-lint, tree-sitter | gofmt |
|
|
323
|
-
| Rust | β | lsp, rust-clippy, tree-sitter | rustfmt |
|
|
324
|
-
| Ruby | β | lsp, rubocop, tree-sitter | rubocop, standardrb |
|
|
325
|
-
| C/C++ | β | lsp, cpp-check, tree-sitter | clang-format |
|
|
326
|
-
| Shell | β | lsp, shellcheck | shfmt |
|
|
327
|
-
| Fish | β | lsp, fish-indent | fish_indent |
|
|
328
|
-
| CSS/SCSS/Less | β | lsp, stylelint | biome, prettier |
|
|
329
|
-
| HTML | β | lsp, htmlhint | prettier |
|
|
330
|
-
| YAML | β | lsp, yamllint, actionlint (GitHub workflows) | prettier |
|
|
331
|
-
| JSON | β | lsp | biome, prettier |
|
|
332
|
-
| Svelte | β | lsp | β |
|
|
333
|
-
| Vue | β | lsp | β |
|
|
334
|
-
| SQL | β | sqlfluff | sqlfluff |
|
|
335
|
-
| Markdown | β | spellcheck, markdownlint, vale | prettier |
|
|
336
|
-
| Docker | β | lsp, hadolint | β |
|
|
337
|
-
| PHP | β | lsp, php-lint, phpstan | php-cs-fixer |
|
|
338
|
-
| PowerShell | β | lsp, psscriptanalyzer | psscriptanalyzer-format |
|
|
339
|
-
| Prisma | β | lsp, prisma-validate | β |
|
|
340
|
-
| C# | β | lsp, dotnet-build | csharpier |
|
|
341
|
-
| F# | β | lsp | fantomas |
|
|
342
|
-
| Java | β | lsp, javac | google-java-format |
|
|
343
|
-
| Kotlin | β | lsp, ktlint, detekt | ktlint |
|
|
344
|
-
| Swift | β | lsp, swiftlint | swiftformat |
|
|
345
|
-
| Dart | β | lsp, dart-analyze | dart format |
|
|
346
|
-
| Lua | β | lsp | stylua |
|
|
347
|
-
| Zig | β | lsp, zig-check | zig fmt |
|
|
348
|
-
| Haskell | β | lsp | ormolu |
|
|
349
|
-
| Elixir | β | lsp, elixir-check, credo | mix format |
|
|
350
|
-
| Gleam | β | lsp, gleam-check | gleam format |
|
|
351
|
-
| OCaml | β | lsp | ocamlformat |
|
|
352
|
-
| Clojure | β | lsp | cljfmt |
|
|
353
|
-
| Terraform | β | lsp, tflint | terraform fmt |
|
|
354
|
-
| Nix | β | lsp | nixfmt |
|
|
355
|
-
| TOML | β | lsp, taplo | taplo |
|
|
356
|
-
| CMake | β | lsp | cmake-format |
|
|
357
|
-
|
|
358
|
-
## Dependencies
|
|
359
|
-
|
|
360
|
-
Auto-install behavior depends on gate type:
|
|
361
|
-
|
|
362
|
-
- **Config-gated**: installs only when project config/deps indicate usage
|
|
363
|
-
- **Flow/language-gated**: installs when the runtime path needs it for the current file/session flow
|
|
364
|
-
- **Operational prewarm**: installs during session warm scans / turn-end analysis paths
|
|
365
|
-
- **GitHub release**: platform-specific binary downloaded from GitHub releases to `~/.pi-lens/bin/`
|
|
366
|
-
|
|
367
|
-
| Tool | Purpose | Auto-installed | Gate |
|
|
368
|
-
| ----------------------------------- | -------------------------------- | -------------- | ---------------------------------- |
|
|
369
|
-
| `@biomejs/biome` | JS/TS lint/format/autofix | Yes | Config-gated |
|
|
370
|
-
| `prettier` | Formatting fallback | Yes | Config-gated |
|
|
371
|
-
| `yamllint` | YAML linting | Yes | Config-gated |
|
|
372
|
-
| `actionlint` | GitHub Actions workflow linting | Yes | GitHub release |
|
|
373
|
-
| `sqlfluff` | SQL linting/formatting | Yes | Config-gated |
|
|
374
|
-
| `ruff` | Python lint/format/autofix | Yes | Language-default + flow-gated |
|
|
375
|
-
| `typescript-language-server` | Unified LSP diagnostics | Yes | Language-default |
|
|
376
|
-
| `typescript` | TypeScript compiler | Yes | Language-default |
|
|
377
|
-
| `pyright` | Python type diagnostics fallback | Yes | Flow/language-gated |
|
|
378
|
-
| `@ast-grep/cli` (sg) | AST scans/search/replace | Yes | Operational prewarm |
|
|
379
|
-
| `knip` | Dead code analysis | Yes | Operational prewarm + config-gated |
|
|
380
|
-
| `jscpd` | Duplicate code detection | Yes | Operational prewarm + config-gated |
|
|
381
|
-
| `madge` | Circular dependency analysis | Yes | Turn-end analysis flow |
|
|
382
|
-
| `mypy` | Python type checking | Yes | Flow-gated |
|
|
383
|
-
| `stylelint` | CSS/SCSS/Less linting | Yes | Config-gated |
|
|
384
|
-
| `markdownlint-cli2` | Markdown linting | Yes | Config-gated |
|
|
385
|
-
| `shellcheck` | Shell script linting | Yes | GitHub release |
|
|
386
|
-
| `shfmt` | Shell script formatting | Yes | GitHub release |
|
|
387
|
-
| `rust-analyzer` | Rust LSP | Yes | GitHub release |
|
|
388
|
-
| `golangci-lint` | Go linting | Yes | GitHub release |
|
|
389
|
-
| `hadolint` | Dockerfile linting | Yes | GitHub release |
|
|
390
|
-
| `ktlint` | Kotlin linting | Yes | GitHub release |
|
|
391
|
-
| `tflint` | Terraform linting | Yes | GitHub release |
|
|
392
|
-
| `taplo` | TOML linting/formatting | Yes | GitHub release |
|
|
393
|
-
| `terraform-ls` | Terraform LSP | Yes | GitHub release |
|
|
394
|
-
| `htmlhint` | HTML linting | Yes | Config-gated |
|
|
395
|
-
| `@prisma/language-server` | Prisma LSP | Yes | Flow-gated |
|
|
396
|
-
| `dockerfile-language-server-nodejs` | Dockerfile LSP | Yes | Flow-gated |
|
|
397
|
-
| `intelephense` | PHP LSP | Yes | Flow-gated |
|
|
398
|
-
| `bash-language-server` | Bash LSP | Yes | Language-default |
|
|
399
|
-
| `yaml-language-server` | YAML LSP | Yes | Language-default |
|
|
400
|
-
| `vscode-langservers-extracted` | JSON/ESLint/CSS/HTML LSP | Yes | Language-default |
|
|
401
|
-
| `vscode-css-languageserver` | CSS LSP | Yes | Language-default |
|
|
402
|
-
| `vscode-html-languageserver-bin` | HTML LSP | Yes | Language-default |
|
|
403
|
-
| `svelte-language-server` | Svelte LSP | Yes | Flow-gated |
|
|
404
|
-
| `@vue/language-server` | Vue LSP | Yes | Flow-gated |
|
|
405
|
-
| `semgrep` | Experimental security dispatch | Manual | Local config / explicit opt-in |
|
|
406
|
-
| `psscriptanalyzer` | PowerShell linting | Manual | β |
|
|
407
|
-
|
|
408
|
-
Additional language servers (gopls, ruby-lsp, solargraph, etc.) are auto-detected from PATH or installed via native package managers (`go install`, `gem install`) when their language is detected.
|
|
38
|
+
## Documentation
|
|
39
|
+
|
|
40
|
+
- [Agent tools](docs/agent-tools.md) β pi tool names, scopes, and arguments
|
|
41
|
+
- [Usage guide](docs/usage.md) β lifecycle, tool behavior, MCP notes, and
|
|
42
|
+
troubleshooting
|
|
43
|
+
- [Features](docs/features.md) β detailed feature reference
|
|
44
|
+
- [Tools and commands](docs/tools.md) β runtime flags and slash commands
|
|
45
|
+
- [Configuration](docs/globalconfig.md) β global and project config files
|
|
46
|
+
- [Environment variables](docs/env_variables.md) β common env vars and full
|
|
47
|
+
reference link
|
|
48
|
+
- [Language coverage](docs/language-coverage.md) β supported languages, runners,
|
|
49
|
+
and formatters
|
|
50
|
+
- [Dependencies](docs/dependencies.md) β auto-install policy and external tools
|
|
51
|
+
- [Custom rules](docs/custom-rules.md) β project ast-grep and tree-sitter rules
|
|
52
|
+
|
|
53
|
+
## Contributing
|
|
54
|
+
|
|
55
|
+
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the development workflow, runner,
|
|
56
|
+
LSP, formatter, and rule checklists, and issue/PR conventions.
|
|
57
|
+
|
|
58
|
+
Security issues should be reported privately; see [`SECURITY.md`](SECURITY.md).
|
|
59
|
+
pi-lens is released under the [MIT License](LICENSE).
|
|
60
|
+
|
|
61
|
+
## Contributors
|
|
62
|
+
|
|
63
|
+
Thanks goes to these wonderful people:
|
|
64
|
+
|
|
65
|
+
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
|
66
|
+
<!-- prettier-ignore-start -->
|
|
67
|
+
<!-- markdownlint-disable -->
|
|
68
|
+
<table>
|
|
69
|
+
<tbody>
|
|
70
|
+
<tr>
|
|
71
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wastedC"><img src="https://avatars.githubusercontent.com/u/917574?v=4" width="100px;" alt=""/><br /><sub><b>wastedC</b></sub></a><br /><a href="#code-wastedC" title="Code">π»</a> <a href="#ideas-wastedC" title="Ideas & Planning">π€</a> <a href="#maintenance-wastedC" title="Maintenance">π§</a> <a href="#review-wastedC" title="Reviewed Pull Requests">π</a></td>
|
|
72
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/apmantza"><img src="https://avatars.githubusercontent.com/u/247365598?v=4" width="100px;" alt=""/><br /><sub><b>Apostolos Mantzaris</b></sub></a><br /><a href="#code-apmantza" title="Code">π»</a> <a href="#doc-apmantza" title="Documentation">π</a> <a href="#ideas-apmantza" title="Ideas & Planning">π€</a> <a href="#maintenance-apmantza" title="Maintenance">π§</a> <a href="#review-apmantza" title="Reviewed Pull Requests">π</a></td>
|
|
73
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/apps/dependabot"><img src="https://avatars.githubusercontent.com/in/29110?v=4" width="100px;" alt=""/><br /><sub><b>Dependabot</b></sub></a><br /><a href="#maintenance-dependabot[bot]" title="Maintenance">π§</a></td>
|
|
74
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/silvanshade"><img src="https://avatars.githubusercontent.com/u/11022302?v=4" width="100px;" alt=""/><br /><sub><b>silvanshade</b></sub></a><br /><a href="#code-silvanshade" title="Code">π»</a></td>
|
|
75
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anh-chu"><img src="https://avatars.githubusercontent.com/u/34973633?v=4" width="100px;" alt=""/><br /><sub><b>Anh Chu</b></sub></a><br /><a href="#code-anh-chu" title="Code">π»</a></td>
|
|
76
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Istar-Eldritch"><img src="https://avatars.githubusercontent.com/u/3746468?v=4" width="100px;" alt=""/><br /><sub><b>Ruben Paz</b></sub></a><br /><a href="#code-Istar-Eldritch" title="Code">π»</a> <a href="#bug-Istar-Eldritch" title="Bug reports">π</a></td>
|
|
77
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tifandotme"><img src="https://avatars.githubusercontent.com/u/33323177?v=4" width="100px;" alt=""/><br /><sub><b>Tifan Dwi Avianto</b></sub></a><br /><a href="#code-tifandotme" title="Code">π»</a></td>
|
|
78
|
+
</tr>
|
|
79
|
+
<tr>
|
|
80
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ricardoraposo"><img src="https://avatars.githubusercontent.com/u/50217712?v=4" width="100px;" alt=""/><br /><sub><b>Ricardo Raposo</b></sub></a><br /><a href="#code-ricardoraposo" title="Code">π»</a></td>
|
|
81
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cjunxiang"><img src="https://avatars.githubusercontent.com/u/26619858?v=4" width="100px;" alt=""/><br /><sub><b>C.Junxiang</b></sub></a><br /><a href="#code-cjunxiang" title="Code">π»</a> <a href="#bug-cjunxiang" title="Bug reports">π</a></td>
|
|
82
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chenxin-yan"><img src="https://avatars.githubusercontent.com/u/71162231?v=4" width="100px;" alt=""/><br /><sub><b>Chenxin Yan</b></sub></a><br /><a href="#code-chenxin-yan" title="Code">π»</a> <a href="#doc-chenxin-yan" title="Documentation">π</a> <a href="#bug-chenxin-yan" title="Bug reports">π</a></td>
|
|
83
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/feoh"><img src="https://avatars.githubusercontent.com/u/330070?v=4" width="100px;" alt=""/><br /><sub><b>Chris Patti</b></sub></a><br /><a href="#code-feoh" title="Code">π»</a> <a href="#bug-feoh" title="Bug reports">π</a></td>
|
|
84
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fractiunate"><img src="https://avatars.githubusercontent.com/u/78024279?v=4" width="100px;" alt=""/><br /><sub><b>Fractiunate // David RahΓ€user</b></sub></a><br /><a href="#code-fractiunate" title="Code">π»</a></td>
|
|
85
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bloodf"><img src="https://avatars.githubusercontent.com/u/1626923?v=4" width="100px;" alt=""/><br /><sub><b>Heitor Ramon Ribeiro</b></sub></a><br /><a href="#code-bloodf" title="Code">π»</a></td>
|
|
86
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/JayceFreeman"><img src="https://avatars.githubusercontent.com/u/92962110?v=4" width="100px;" alt=""/><br /><sub><b>JayceFreeman</b></sub></a><br /><a href="#code-JayceFreeman" title="Code">π»</a></td>
|
|
87
|
+
</tr>
|
|
88
|
+
<tr>
|
|
89
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/shaDmx"><img src="https://avatars.githubusercontent.com/u/91132641?v=4" width="100px;" alt=""/><br /><sub><b>Max L.</b></sub></a><br /><a href="#code-shaDmx" title="Code">π»</a></td>
|
|
90
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Roman-Galeev"><img src="https://avatars.githubusercontent.com/u/40388226?v=4" width="100px;" alt=""/><br /><sub><b>Roman Galeev</b></sub></a><br /><a href="#code-Roman-Galeev" title="Code">π»</a></td>
|
|
91
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/StartupBros"><img src="https://avatars.githubusercontent.com/u/16693591?v=4" width="100px;" alt=""/><br /><sub><b>Will Mitchell</b></sub></a><br /><a href="#code-StartupBros" title="Code">π»</a></td>
|
|
92
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amit-gshe"><img src="https://avatars.githubusercontent.com/u/7383028?v=4" width="100px;" alt=""/><br /><sub><b>Amit</b></sub></a><br /><a href="#code-amit-gshe" title="Code">π»</a> <a href="#bug-amit-gshe" title="Bug reports">π</a></td>
|
|
93
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/flowing-abyss"><img src="https://avatars.githubusercontent.com/u/98622217?v=4" width="100px;" alt=""/><br /><sub><b>flowing-abyss</b></sub></a><br /><a href="#code-flowing-abyss" title="Code">π»</a></td>
|
|
94
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jerryfan"><img src="https://avatars.githubusercontent.com/u/2540814?v=4" width="100px;" alt=""/><br /><sub><b>jerryfan</b></sub></a><br /><a href="#code-jerryfan" title="Code">π»</a></td>
|
|
95
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/loss-and-quick"><img src="https://avatars.githubusercontent.com/u/39405619?v=4" width="100px;" alt=""/><br /><sub><b>minicx</b></sub></a><br /><a href="#code-loss-and-quick" title="Code">π»</a></td>
|
|
96
|
+
</tr>
|
|
97
|
+
<tr>
|
|
98
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/spyrosbazios"><img src="https://avatars.githubusercontent.com/u/37960233?v=4" width="100px;" alt=""/><br /><sub><b>spyrosbazios</b></sub></a><br /><a href="#code-spyrosbazios" title="Code">π»</a></td>
|
|
99
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/trvon"><img src="https://avatars.githubusercontent.com/u/6031322?v=4" width="100px;" alt=""/><br /><sub><b>Trevon</b></sub></a><br /><a href="#code-trvon" title="Code">π»</a></td>
|
|
100
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/carolitascl"><img src="https://avatars.githubusercontent.com/u/26188349?v=4" width="100px;" alt=""/><br /><sub><b>Carolina</b></sub></a><br /><a href="#bug-carolitascl" title="Bug reports">π</a></td>
|
|
101
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/leakedby"><img src="https://avatars.githubusercontent.com/u/4213260?v=4" width="100px;" alt=""/><br /><sub><b>LeakedBy</b></sub></a><br /><a href="#bug-leakedby" title="Bug reports">π</a></td>
|
|
102
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mdbooth"><img src="https://avatars.githubusercontent.com/u/1318691?v=4" width="100px;" alt=""/><br /><sub><b>Matthew Booth</b></sub></a><br /><a href="#bug-mdbooth" title="Bug reports">π</a></td>
|
|
103
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Wiedzmin89"><img src="https://avatars.githubusercontent.com/u/61706855?v=4" width="100px;" alt=""/><br /><sub><b>Wiedzmin89</b></sub></a><br /><a href="#ideas-Wiedzmin89" title="Ideas & Planning">π€</a></td>
|
|
104
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grodingo"><img src="https://avatars.githubusercontent.com/u/244184972?v=4" width="100px;" alt=""/><br /><sub><b>Virgile</b></sub></a><br /><a href="#bug-grodingo" title="Bug reports">π</a></td>
|
|
105
|
+
</tr>
|
|
106
|
+
<tr>
|
|
107
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/finnvyrn"><img src="https://avatars.githubusercontent.com/u/90801772?v=4" width="100px;" alt=""/><br /><sub><b>Finn</b></sub></a><br /><a href="#ideas-finnvyrn" title="Ideas & Planning">π€</a></td>
|
|
108
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ywh555hhh"><img src="https://avatars.githubusercontent.com/u/121592812?v=4" width="100px;" alt=""/><br /><sub><b>Wayne E</b></sub></a><br /><a href="#bug-ywh555hhh" title="Bug reports">π</a></td>
|
|
109
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RimuruW"><img src="https://avatars.githubusercontent.com/u/59136309?v=4" width="100px;" alt=""/><br /><sub><b>RimuruW</b></sub></a><br /><a href="#ideas-RimuruW" title="Ideas & Planning">π€</a></td>
|
|
110
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bjynt"><img src="https://avatars.githubusercontent.com/u/22177300?v=4" width="100px;" alt=""/><br /><sub><b>Bjynt</b></sub></a><br /><a href="#bug-Bjynt" title="Bug reports">π</a> <a href="#ideas-Bjynt" title="Ideas & Planning">π€</a></td>
|
|
111
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pvtri96"><img src="https://avatars.githubusercontent.com/u/28696888?v=4" width="100px;" alt=""/><br /><sub><b>Tri Van Pham</b></sub></a><br /><a href="#bug-pvtri96" title="Bug reports">π</a></td>
|
|
112
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BingWuJ"><img src="https://avatars.githubusercontent.com/u/117666511?v=4" width="100px;" alt=""/><br /><sub><b>BingWuJ</b></sub></a><br /><a href="#bug-BingWuJ" title="Bug reports">π</a></td>
|
|
113
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tackleberrybey"><img src="https://avatars.githubusercontent.com/u/156954032?v=4" width="100px;" alt=""/><br /><sub><b>tackleberrybey</b></sub></a><br /><a href="#bug-tackleberrybey" title="Bug reports">π</a></td>
|
|
114
|
+
</tr>
|
|
115
|
+
<tr>
|
|
116
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TaterDoge"><img src="https://avatars.githubusercontent.com/u/121467933?v=4" width="100px;" alt=""/><br /><sub><b>Mariann Abshire</b></sub></a><br /><a href="#bug-TaterDoge" title="Bug reports">π</a></td>
|
|
117
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ProbabilityEngineer"><img src="https://avatars.githubusercontent.com/u/38498804?v=4" width="100px;" alt=""/><br /><sub><b>ProbabilityEngineer</b></sub></a><br /><a href="#ideas-ProbabilityEngineer" title="Ideas & Planning">π€</a></td>
|
|
118
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/LeonardoRick"><img src="https://avatars.githubusercontent.com/u/17517057?v=4" width="100px;" alt=""/><br /><sub><b>Leonardo Rick</b></sub></a><br /><a href="#bug-LeonardoRick" title="Bug reports">π</a> <a href="#ideas-LeonardoRick" title="Ideas & Planning">π€</a></td>
|
|
119
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kenbanks-peng"><img src="https://avatars.githubusercontent.com/u/26904200?v=4" width="100px;" alt=""/><br /><sub><b>Ken Banks</b></sub></a><br /><a href="#bug-kenbanks-peng" title="Bug reports">π</a></td>
|
|
120
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rstacruz"><img src="https://avatars.githubusercontent.com/u/74385?v=4" width="100px;" alt=""/><br /><sub><b>Rico Sta. Cruz</b></sub></a><br /><a href="#ideas-rstacruz" title="Ideas & Planning">π€</a></td>
|
|
121
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/acidnik"><img src="https://avatars.githubusercontent.com/u/1227955?v=4" width="100px;" alt=""/><br /><sub><b>Nikita Bilous</b></sub></a><br /><a href="#bug-acidnik" title="Bug reports">π</a></td>
|
|
122
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/av1155"><img src="https://avatars.githubusercontent.com/u/117413846?v=4" width="100px;" alt=""/><br /><sub><b>Andrea Arturo Venti Fuentes</b></sub></a><br /><a href="#bug-av1155" title="Bug reports">π</a></td>
|
|
123
|
+
</tr>
|
|
124
|
+
<tr>
|
|
125
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dacec354"><img src="https://avatars.githubusercontent.com/u/90093629?v=4" width="100px;" alt=""/><br /><sub><b>dacec354</b></sub></a><br /><a href="#bug-dacec354" title="Bug reports">π</a></td>
|
|
126
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xuli500177"><img src="https://avatars.githubusercontent.com/u/62830942?v=4" width="100px;" alt=""/><br /><sub><b>Xu Yili</b></sub></a><br /><a href="#bug-xuli500177" title="Bug reports">π</a></td>
|
|
127
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nodnarbnitram"><img src="https://avatars.githubusercontent.com/u/44812862?v=4" width="100px;" alt=""/><br /><sub><b>Brandon Martin</b></sub></a><br /><a href="#bug-nodnarbnitram" title="Bug reports">π</a></td>
|
|
128
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/alpertarhan"><img src="https://avatars.githubusercontent.com/u/50966980?v=4" width="100px;" alt=""/><br /><sub><b>Alper Tarhan</b></sub></a><br /><a href="#bug-alpertarhan" title="Bug reports">π</a></td>
|
|
129
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/asolopovas"><img src="https://avatars.githubusercontent.com/u/6893216?v=4" width="100px;" alt=""/><br /><sub><b>Andrius Solopovas</b></sub></a><br /><a href="#bug-asolopovas" title="Bug reports">π</a></td>
|
|
130
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/GrahamJenkins"><img src="https://avatars.githubusercontent.com/u/6607975?v=4" width="100px;" alt=""/><br /><sub><b>Graham Jenkins</b></sub></a><br /><a href="#bug-GrahamJenkins" title="Bug reports">π</a></td>
|
|
131
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wings1848"><img src="https://avatars.githubusercontent.com/u/120104016?v=4" width="100px;" alt=""/><br /><sub><b>Wings Butterfly</b></sub></a><br /><a href="#bug-wings1848" title="Bug reports">π</a></td>
|
|
132
|
+
</tr>
|
|
133
|
+
<tr>
|
|
134
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/JohannesKlauss"><img src="https://avatars.githubusercontent.com/u/6214415?v=4" width="100px;" alt=""/><br /><sub><b>Johannes Klauss</b></sub></a><br /><a href="#ideas-JohannesKlauss" title="Ideas & Planning">π€</a></td>
|
|
135
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tan-yong-sheng"><img src="https://avatars.githubusercontent.com/u/64836390?v=4" width="100px;" alt=""/><br /><sub><b>Tan Yong Sheng</b></sub></a><br /><a href="#ideas-tan-yong-sheng" title="Ideas & Planning">π€</a></td>
|
|
136
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4" width="100px;" alt=""/><br /><sub><b>FrΓ©dΓ©ric</b></sub></a><br /><a href="#bug-fmatray" title="Bug reports">π</a></td>
|
|
137
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fuentesjr"><img src="https://avatars.githubusercontent.com/u/9240?v=4" width="100px;" alt=""/><br /><sub><b>Salvador Fuentes Jr</b></sub></a><br /><a href="#bug-fuentesjr" title="Bug reports">π</a></td>
|
|
138
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Viterkim"><img src="https://avatars.githubusercontent.com/u/17838985?v=4" width="100px;" alt=""/><br /><sub><b>Viktor</b></sub></a><br /><a href="#bug-Viterkim" title="Bug reports">π</a></td>
|
|
139
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ortonomy"><img src="https://avatars.githubusercontent.com/u/6688676?v=4" width="100px;" alt=""/><br /><sub><b>Gregory Orton</b></sub></a><br /><a href="#bug-ortonomy" title="Bug reports">π</a></td>
|
|
140
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jimallen"><img src="https://avatars.githubusercontent.com/u/868773?v=4" width="100px;" alt=""/><br /><sub><b>Jim Allen</b></sub></a><br /><a href="#bug-jimallen" title="Bug reports">π</a></td>
|
|
141
|
+
</tr>
|
|
142
|
+
<tr>
|
|
143
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/quantfiction"><img src="https://avatars.githubusercontent.com/u/49965454?v=4" width="100px;" alt=""/><br /><sub><b>quantfiction</b></sub></a><br /><a href="#bug-quantfiction" title="Bug reports">π</a></td>
|
|
144
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Artawower"><img src="https://avatars.githubusercontent.com/u/16963833?v=4" width="100px;" alt=""/><br /><sub><b>Art</b></sub></a><br /><a href="#bug-Artawower" title="Bug reports">π</a></td>
|
|
145
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chozandrias76"><img src="https://avatars.githubusercontent.com/u/2087677?v=4" width="100px;" alt=""/><br /><sub><b>Colin Swenson-Healey</b></sub></a><br /><a href="#bug-chozandrias76" title="Bug reports">π</a></td>
|
|
146
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/JustlyAI"><img src="https://avatars.githubusercontent.com/u/12634140?v=4" width="100px;" alt=""/><br /><sub><b>Laurent Wiesel</b></sub></a><br /><a href="#bug-JustlyAI" title="Bug reports">π</a></td>
|
|
147
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/stark-bit"><img src="https://avatars.githubusercontent.com/u/44064758?v=4" width="100px;" alt=""/><br /><sub><b>Rei Starks</b></sub></a><br /><a href="#bug-stark-bit" title="Bug reports">π</a></td>
|
|
148
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/robertoecf"><img src="https://avatars.githubusercontent.com/u/54923863?v=4" width="100px;" alt=""/><br /><sub><b>Roberto Freitas</b></sub></a><br /><a href="#bug-robertoecf" title="Bug reports">π</a></td>
|
|
149
|
+
</tr>
|
|
150
|
+
</tbody>
|
|
151
|
+
</table>
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
<!-- markdownlint-restore -->
|
|
155
|
+
<!-- prettier-ignore-end -->
|
|
156
|
+
|
|
157
|
+
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
|
158
|
+
|
|
159
|
+
If you land a pull request or report an issue that gets fixed, we'll add you here.
|