@kernlang/review 3.1.5 → 3.1.7
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/LICENSE +17 -0
- package/dist/cache.d.ts +1 -1
- package/dist/cache.js +5 -3
- package/dist/cache.js.map +1 -1
- package/dist/call-graph.d.ts +63 -0
- package/dist/call-graph.js +380 -0
- package/dist/call-graph.js.map +1 -0
- package/dist/concept-rules/boundary-mutation.d.ts +1 -1
- package/dist/concept-rules/boundary-mutation.js.map +1 -1
- package/dist/concept-rules/ignored-error.d.ts +1 -1
- package/dist/concept-rules/ignored-error.js.map +1 -1
- package/dist/concept-rules/illegal-dependency.d.ts +1 -1
- package/dist/concept-rules/illegal-dependency.js.map +1 -1
- package/dist/concept-rules/index.js +1 -6
- package/dist/concept-rules/index.js.map +1 -1
- package/dist/concept-rules/unguarded-effect.d.ts +1 -1
- package/dist/concept-rules/unguarded-effect.js.map +1 -1
- package/dist/concept-rules/unrecovered-effect.d.ts +1 -1
- package/dist/concept-rules/unrecovered-effect.js +2 -1
- package/dist/concept-rules/unrecovered-effect.js.map +1 -1
- package/dist/confidence.js +12 -8
- package/dist/confidence.js.map +1 -1
- package/dist/differ.js +3 -7
- package/dist/differ.js.map +1 -1
- package/dist/external-tools.js +5 -6
- package/dist/external-tools.js.map +1 -1
- package/dist/file-context.d.ts +21 -0
- package/dist/file-context.js +234 -0
- package/dist/file-context.js.map +1 -0
- package/dist/file-role.js +14 -7
- package/dist/file-role.js.map +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/graph.js +24 -16
- package/dist/graph.js.map +1 -1
- package/dist/index.d.ts +44 -35
- package/dist/index.js +221 -68
- package/dist/index.js.map +1 -1
- package/dist/inferrer.d.ts +8 -2
- package/dist/inferrer.js +80 -47
- package/dist/inferrer.js.map +1 -1
- package/dist/kern-lint.d.ts +3 -4
- package/dist/kern-lint.js +7 -5
- package/dist/kern-lint.js.map +1 -1
- package/dist/llm-bridge.d.ts +23 -7
- package/dist/llm-bridge.js +267 -31
- package/dist/llm-bridge.js.map +1 -1
- package/dist/llm-review.d.ts +16 -2
- package/dist/llm-review.js +240 -35
- package/dist/llm-review.js.map +1 -1
- package/dist/mappers/ts-concepts.d.ts +1 -1
- package/dist/mappers/ts-concepts.js +303 -32
- package/dist/mappers/ts-concepts.js.map +1 -1
- package/dist/norm-miner.d.ts +31 -0
- package/dist/norm-miner.js +119 -0
- package/dist/norm-miner.js.map +1 -0
- package/dist/obligations.d.ts +63 -0
- package/dist/obligations.js +158 -0
- package/dist/obligations.js.map +1 -0
- package/dist/quality-rules.d.ts +3 -3
- package/dist/quality-rules.js +4 -2
- package/dist/quality-rules.js.map +1 -1
- package/dist/reporter.d.ts +7 -2
- package/dist/reporter.js +82 -51
- package/dist/reporter.js.map +1 -1
- package/dist/rule-eval.d.ts +1 -2
- package/dist/rule-eval.js +5 -9
- package/dist/rule-eval.js.map +1 -1
- package/dist/rule-loader.js +16 -14
- package/dist/rule-loader.js.map +1 -1
- package/dist/rules/base.js +153 -69
- package/dist/rules/base.js.map +1 -1
- package/dist/rules/cli.d.ts +7 -0
- package/dist/rules/cli.js +99 -0
- package/dist/rules/cli.js.map +1 -0
- package/dist/rules/confidence.d.ts +1 -1
- package/dist/rules/confidence.js +5 -5
- package/dist/rules/confidence.js.map +1 -1
- package/dist/rules/dead-code.d.ts +10 -0
- package/dist/rules/dead-code.js +75 -0
- package/dist/rules/dead-code.js.map +1 -0
- package/dist/rules/dead-logic.js +35 -31
- package/dist/rules/dead-logic.js.map +1 -1
- package/dist/rules/express.d.ts +2 -1
- package/dist/rules/express.js +380 -126
- package/dist/rules/express.js.map +1 -1
- package/dist/rules/fastapi.d.ts +10 -0
- package/dist/rules/fastapi.js +183 -0
- package/dist/rules/fastapi.js.map +1 -0
- package/dist/rules/ground-layer.js +3 -3
- package/dist/rules/ground-layer.js.map +1 -1
- package/dist/rules/index.d.ts +5 -1
- package/dist/rules/index.js +602 -84
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/ink.d.ts +8 -0
- package/dist/rules/ink.js +88 -0
- package/dist/rules/ink.js.map +1 -0
- package/dist/rules/kern-source.js +202 -63
- package/dist/rules/kern-source.js.map +1 -1
- package/dist/rules/nextjs.js +88 -33
- package/dist/rules/nextjs.js.map +1 -1
- package/dist/rules/null-safety.js +52 -26
- package/dist/rules/null-safety.js.map +1 -1
- package/dist/rules/nuxt.js +24 -29
- package/dist/rules/nuxt.js.map +1 -1
- package/dist/rules/react.js +355 -69
- package/dist/rules/react.js.map +1 -1
- package/dist/rules/security-v2.js +71 -57
- package/dist/rules/security-v2.js.map +1 -1
- package/dist/rules/security-v3.js.map +1 -1
- package/dist/rules/security-v4.js +54 -27
- package/dist/rules/security-v4.js.map +1 -1
- package/dist/rules/security.js +35 -5
- package/dist/rules/security.js.map +1 -1
- package/dist/rules/terminal.d.ts +8 -0
- package/dist/rules/terminal.js +139 -0
- package/dist/rules/terminal.js.map +1 -0
- package/dist/rules/vue.js +162 -107
- package/dist/rules/vue.js.map +1 -1
- package/dist/semantic-diff.d.ts +52 -0
- package/dist/semantic-diff.js +342 -0
- package/dist/semantic-diff.js.map +1 -0
- package/dist/spec-checker.js +11 -10
- package/dist/spec-checker.js.map +1 -1
- package/dist/suppression/apply-suppression.d.ts +2 -3
- package/dist/suppression/apply-suppression.js +3 -3
- package/dist/suppression/apply-suppression.js.map +1 -1
- package/dist/suppression/index.d.ts +2 -2
- package/dist/suppression/index.js +1 -1
- package/dist/suppression/index.js.map +1 -1
- package/dist/suppression/parse-directives.d.ts +1 -1
- package/dist/suppression/parse-directives.js +9 -4
- package/dist/suppression/parse-directives.js.map +1 -1
- package/dist/taint-ast.d.ts +20 -0
- package/dist/taint-ast.js +427 -0
- package/dist/taint-ast.js.map +1 -0
- package/dist/taint-crossfile.d.ts +28 -0
- package/dist/taint-crossfile.js +174 -0
- package/dist/taint-crossfile.js.map +1 -0
- package/dist/taint-findings.d.ts +17 -0
- package/dist/taint-findings.js +131 -0
- package/dist/taint-findings.js.map +1 -0
- package/dist/taint-regex.d.ts +61 -0
- package/dist/taint-regex.js +379 -0
- package/dist/taint-regex.js.map +1 -0
- package/dist/taint-types.d.ts +128 -0
- package/dist/taint-types.js +174 -0
- package/dist/taint-types.js.map +1 -0
- package/dist/taint.d.ts +13 -107
- package/dist/taint.js +16 -1067
- package/dist/taint.js.map +1 -1
- package/dist/template-detector.d.ts +2 -2
- package/dist/template-detector.js +11 -16
- package/dist/template-detector.js.map +1 -1
- package/dist/types.d.ts +35 -0
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
package/dist/rules/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9E,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7C,2DAA2D;AAC3D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;AAElF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,MAAM,KAAK,GAAiB;QAC1B,GAAG,SAAS;QACZ,GAAG,aAAa;QAChB,GAAG,eAAe;QAClB,GAAG,eAAe;QAClB,GAAG,eAAe;QAClB,GAAG,cAAc;QACjB,GAAG,eAAe;KACnB,CAAC;IAEF,qDAAqD;IACrD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE/D,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAWD,MAAM,QAAQ,GAAe;IAC3B,uBAAuB;IACvB;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,wDAAwD;KACtE;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,kDAAkD;KAChE;IACD,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,yCAAyC,EAAE;IACjH;QACE,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,0DAA0D;KACxE;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,2CAA2C;KACzD;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,4CAA4C;KAC1D;IACD;QACE,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,6CAA6C;KAC3D;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,iDAAiD;KAC/D;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,4CAA4C;KAC1D;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,iDAAiD;KAC/D;IACD,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,sCAAsC,EAAE;IAC5G,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,uCAAuC,EAAE;IACnH;QACE,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,iDAAiD;KAC/D;IACD;QACE,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,6CAA6C;KAC3D;IAED,WAAW;IACX;QACE,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,uDAAuD;KACrE;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,6CAA6C;KAC3D;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,uCAAuC;KACrD;IACD,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,wCAAwC,EAAE;IAC9G;QACE,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,sDAAsD;KACpE;IACD,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,kCAAkC,EAAE;IAChH;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,6CAA6C;KAC3D;IACD;QACE,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,6CAA6C;KAC3D;IAED,cAAc;IACd;QACE,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,4CAA4C;KAC1D;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,+CAA+C;KAC7D;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,iDAAiD;KAC/D;IACD;QACE,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,sCAAsC;KACpD;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,gDAAgD;KAC9D;IACD;QACE,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,wDAAwD;KACtE;IAED,kCAAkC;IAClC;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,uDAAuD;KACrE;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,oCAAoC;KAClD;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,oDAAoD;KAClE;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,qDAAqD;KACnE;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,0CAA0C;KACxD;IAED,mCAAmC;IACnC;QACE,EAAE,EAAE,2BAA2B;QAC/B,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,mDAAmD;KACjE;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,gDAAgD;KAC9D;IACD;QACE,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,mDAAmD;KACjE;IACD;QACE,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,iDAAiD;KAC/D;IACD;QACE,EAAE,EAAE,2BAA2B;QAC/B,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,yDAAyD;KACvE;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,uDAAuD;KACrE;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,0CAA0C;KACxD;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,gDAAgD;KAC9D;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,gDAAgD;KAC9D;IACD;QACE,EAAE,EAAE,2BAA2B;QAC/B,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,wCAAwC;KACtD;IAED,aAAa;IACb;QACE,EAAE,EAAE,sBAAsB;QAC1B,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,uCAAuC;KACrD;IACD;QACE,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,2CAA2C;KACzD;IACD;QACE,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,qCAAqC;KACnD;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,0CAA0C;KACxD;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,2CAA2C;KACzD;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,mCAAmC;KACjD;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,iDAAiD;KAC/D;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,8CAA8C;KAC5D;IAED,cAAc;IACd;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,6CAA6C;KAC3D;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,kEAAkE;KAChF;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,6CAA6C;KAC3D;IAED,qDAAqD;IACrD,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,6CAA6C,EAAE;IACrH;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,6CAA6C;KAC3D;IACD;QACE,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,+CAA+C;KAC7D;IACD,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,yCAAyC,EAAE;IACpH;QACE,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,gDAAgD;KAC9D;IACD,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,4CAA4C,EAAE;IAClH;QACE,EAAE,EAAE,yBAAyB;QAC7B,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,sDAAsD;KACpE;IAED,oBAAoB;IACpB;QACE,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,sDAAsD;KACpE;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,uDAAuD;KACrE;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,oEAAoE;KAClF;IACD;QACE,EAAE,EAAE,4BAA4B;QAChC,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,wDAAwD;KACtE;IAED,0BAA0B;IAC1B;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,2CAA2C;KACzD;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,oDAAoD;KAClE;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,4CAA4C;KAC1D;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,2CAA2C;KACzD;IAED,8BAA8B;IAC9B;QACE,EAAE,EAAE,4BAA4B;QAChC,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,kDAAkD;KAChE;IACD;QACE,EAAE,EAAE,8BAA8B;QAClC,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,gDAAgD;KAC9D;IACD;QACE,EAAE,EAAE,4BAA4B;QAChC,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,oDAAoD;KAClE;IACD;QACE,EAAE,EAAE,gCAAgC;QACpC,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,kDAAkD;KAChE;IACD;QACE,EAAE,EAAE,iCAAiC;QACrC,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,uCAAuC;KACrD;IACD;QACE,EAAE,EAAE,8BAA8B;QAClC,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,uCAAuC;KACrD;IACD;QACE,EAAE,EAAE,6BAA6B;QACjC,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,yCAAyC;KACvD;IAED,qCAAqC;IACrC;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,kDAAkD;KAChE;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,iDAAiD;KAC/D;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,gDAAgD;KAC9D;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,oDAAoD;KAClE;IACD;QACE,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,8CAA8C;KAC5D;IACD;QACE,EAAE,EAAE,4BAA4B;QAChC,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,qCAAqC;KACnD;IAED,2BAA2B;IAC3B,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,qCAAqC,EAAE;IAC7G;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,wDAAwD;KACtE;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,sDAAsD;KACpE;IAED,sBAAsB;IACtB;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,2CAA2C;KACzD;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,0DAA0D;KACxE;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,8CAA8C;KAC5D;IAED,4BAA4B;IAC5B;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,+CAA+C;KAC7D;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,+CAA+C;KAC7D;IACD,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,iCAAiC,EAAE;IAChH;QACE,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,0CAA0C;KACxD;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,4DAA4D;KAC1E;IAED,2DAA2D;IAC3D;QACE,EAAE,EAAE,gCAAgC;QACpC,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,yDAAyD;KACvE;IACD;QACE,EAAE,EAAE,6BAA6B;QACjC,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,gDAAgD;KAC9D;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,oDAAoD;KAClE;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,+CAA+C;KAC7D;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,6DAA6D;KAC3E;IAED,mDAAmD;IACnD;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,gDAAgD;KAC9D;IACD,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,mCAAmC,EAAE;IAChH;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,iDAAiD;KAC/D;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,0CAA0C;KACxD;CACF,CAAC;AAEF,2CAA2C;AAC3C,MAAM,gBAAgB,GAAoC;IACxD,IAAI,EAAE,IAAI,EAAE,gBAAgB;IAC5B,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC;IACrD,GAAG,EAAE,CAAC,KAAK,CAAC;IACZ,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,CAAC,KAAK,CAAC;IACZ,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,MAAM,EAAE,CAAC,QAAQ,CAAC;IAClB,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,OAAO,EAAE,CAAC,SAAS,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ink review rules — active when target = ink (on top of React rules).
|
|
3
|
+
*
|
|
4
|
+
* Focused on Ink terminal rendering / input handling pitfalls.
|
|
5
|
+
* Codex base rules + Claude extras (uncleared-interval, missing-error-boundary).
|
|
6
|
+
*/
|
|
7
|
+
import type { ReviewRule } from '../types.js';
|
|
8
|
+
export declare const inkRules: ReviewRule[];
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ink review rules — active when target = ink (on top of React rules).
|
|
3
|
+
*
|
|
4
|
+
* Focused on Ink terminal rendering / input handling pitfalls.
|
|
5
|
+
* Codex base rules + Claude extras (uncleared-interval, missing-error-boundary).
|
|
6
|
+
*/
|
|
7
|
+
import { finding } from './utils.js';
|
|
8
|
+
function lineForIndex(text, index) {
|
|
9
|
+
return text.slice(0, index).split('\n').length;
|
|
10
|
+
}
|
|
11
|
+
function findAll(text, pattern) {
|
|
12
|
+
const lines = [];
|
|
13
|
+
let match;
|
|
14
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
15
|
+
lines.push(lineForIndex(text, match.index));
|
|
16
|
+
}
|
|
17
|
+
return lines;
|
|
18
|
+
}
|
|
19
|
+
function isInkFile(text) {
|
|
20
|
+
return /from\s+['"]ink['"]|require\s*\(\s*['"]ink['"]\s*\)/.test(text);
|
|
21
|
+
}
|
|
22
|
+
// ── Rule: ink-console-output (Codex) ────────────────────────────────────
|
|
23
|
+
function consoleOutput(ctx) {
|
|
24
|
+
const fullText = ctx.sourceFile.getFullText();
|
|
25
|
+
if (!isInkFile(fullText))
|
|
26
|
+
return [];
|
|
27
|
+
return findAll(fullText, /\bconsole\.(?:log|warn|error|info)\s*\(/g).map((line) => finding('ink-console-output', 'warning', 'bug', 'Ink app writes through console.* — direct console output corrupts the rendered terminal frame', ctx.filePath, line, 1, { suggestion: 'Render status via <Text>, <Static>, or useStdout()/useStderr() instead of console.*' }));
|
|
28
|
+
}
|
|
29
|
+
// ── Rule: ink-direct-stdout (Codex) ─────────────────────────────────────
|
|
30
|
+
function directStdout(ctx) {
|
|
31
|
+
const fullText = ctx.sourceFile.getFullText();
|
|
32
|
+
if (!isInkFile(fullText))
|
|
33
|
+
return [];
|
|
34
|
+
return findAll(fullText, /\bprocess\.(?:stdout|stderr)\.write\s*\(/g).map((line) => finding('ink-direct-stdout', 'error', 'bug', 'Ink app writes directly to stdout/stderr — bypassing Ink output breaks layout reconciliation', ctx.filePath, line, 1, { suggestion: "Use Ink components or useStdout()/useStderr() so output stays inside Ink's renderer" }));
|
|
35
|
+
}
|
|
36
|
+
// ── Rule: ink-process-exit (Codex) ──────────────────────────────────────
|
|
37
|
+
function processExit(ctx) {
|
|
38
|
+
const fullText = ctx.sourceFile.getFullText();
|
|
39
|
+
if (!isInkFile(fullText))
|
|
40
|
+
return [];
|
|
41
|
+
return findAll(fullText, /\bprocess\.exit\s*\(/g).map((line) => finding('ink-process-exit', 'warning', 'pattern', 'Ink app calls process.exit() directly — this skips Ink cleanup and can leave the terminal in a dirty state', ctx.filePath, line, 1, { suggestion: 'Use const { exit } = useApp(); exit(); so Ink can clean up properly' }));
|
|
42
|
+
}
|
|
43
|
+
// ── Rule: ink-stdin-bypass (Codex) ──────────────────────────────────────
|
|
44
|
+
function stdinBypass(ctx) {
|
|
45
|
+
const fullText = ctx.sourceFile.getFullText();
|
|
46
|
+
if (!isInkFile(fullText))
|
|
47
|
+
return [];
|
|
48
|
+
const pattern = /\bprocess\.stdin\.(?:on|addListener|once|resume|setRawMode)\s*\(|\breadline\.createInterface\s*\(/g;
|
|
49
|
+
return findAll(fullText, pattern).map((line) => finding('ink-stdin-bypass', 'warning', 'pattern', "Ink app bypasses useInput() with raw stdin/readline listeners — input handling will fight with Ink's renderer", ctx.filePath, line, 1, { suggestion: 'Handle keyboard input with useInput() or useStdin() instead of process.stdin/readline listeners' }));
|
|
50
|
+
}
|
|
51
|
+
// ── Rule: ink-uncleared-interval (Claude) ───────────────────────────────
|
|
52
|
+
function unclearedInterval(ctx) {
|
|
53
|
+
const fullText = ctx.sourceFile.getFullText();
|
|
54
|
+
if (!isInkFile(fullText))
|
|
55
|
+
return [];
|
|
56
|
+
// Already has cleanup
|
|
57
|
+
if (fullText.includes('clearInterval'))
|
|
58
|
+
return [];
|
|
59
|
+
return findAll(fullText, /\bsetInterval\s*\(/g).map((line) => finding('ink-uncleared-interval', 'warning', 'bug', 'setInterval without clearInterval in Ink component — timer leaks on unmount', ctx.filePath, line, 1, { suggestion: 'Store the interval ID and clear it in useEffect cleanup: return () => clearInterval(id)' }));
|
|
60
|
+
}
|
|
61
|
+
// ── Rule: ink-missing-error-boundary (Claude) ───────────────────────────
|
|
62
|
+
function missingErrorBoundary(ctx) {
|
|
63
|
+
const fullText = ctx.sourceFile.getFullText();
|
|
64
|
+
if (!isInkFile(fullText))
|
|
65
|
+
return [];
|
|
66
|
+
// Check for Ink render() call — this is the app entry point
|
|
67
|
+
const renderMatch = fullText.match(/\brender\s*\(\s*<\w+/);
|
|
68
|
+
if (!renderMatch)
|
|
69
|
+
return [];
|
|
70
|
+
const hasErrorBoundary = fullText.includes('ErrorBoundary') || fullText.includes('errorBoundary');
|
|
71
|
+
const hasExitHandler = /\.waitUntilExit\s*\(\s*\)\s*\.catch/.test(fullText) || /try\s*\{[^}]*render/.test(fullText);
|
|
72
|
+
if (!hasErrorBoundary && !hasExitHandler) {
|
|
73
|
+
const line = lineForIndex(fullText, renderMatch.index);
|
|
74
|
+
return [
|
|
75
|
+
finding('ink-missing-error-boundary', 'warning', 'pattern', 'Ink render() without error handling — uncaught errors will corrupt terminal state', ctx.filePath, line, 1, { suggestion: 'Add .waitUntilExit().catch() or wrap with an ErrorBoundary component' }),
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
export const inkRules = [
|
|
81
|
+
consoleOutput,
|
|
82
|
+
directStdout,
|
|
83
|
+
processExit,
|
|
84
|
+
stdinBypass,
|
|
85
|
+
unclearedInterval,
|
|
86
|
+
missingErrorBoundary,
|
|
87
|
+
];
|
|
88
|
+
//# sourceMappingURL=ink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ink.js","sourceRoot":"","sources":["../../src/rules/ink.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,19 +9,54 @@ import { SyntaxKind } from 'ts-morph';
|
|
|
9
9
|
import { createInMemoryProject } from '../inferrer.js';
|
|
10
10
|
import { createFingerprint } from '../types.js';
|
|
11
11
|
const SCOPE_NODE_TYPES = new Set([
|
|
12
|
-
'screen',
|
|
13
|
-
'
|
|
14
|
-
'
|
|
12
|
+
'screen',
|
|
13
|
+
'hook',
|
|
14
|
+
'provider',
|
|
15
|
+
'fn',
|
|
16
|
+
'callback',
|
|
17
|
+
'memo',
|
|
18
|
+
'effect',
|
|
19
|
+
'route',
|
|
20
|
+
'server',
|
|
21
|
+
'service',
|
|
22
|
+
'method',
|
|
23
|
+
'singleton',
|
|
24
|
+
'constructor',
|
|
25
|
+
'middleware',
|
|
26
|
+
'cli',
|
|
27
|
+
'command',
|
|
28
|
+
'test',
|
|
29
|
+
'describe',
|
|
30
|
+
'it',
|
|
15
31
|
// Template node types + CLI
|
|
16
|
-
'arrow-fn',
|
|
32
|
+
'arrow-fn',
|
|
33
|
+
'swr-hook',
|
|
34
|
+
'zustand-store',
|
|
35
|
+
'zustand-selector',
|
|
36
|
+
'module',
|
|
17
37
|
'cli',
|
|
18
38
|
]);
|
|
19
39
|
const DIRECT_BINDING_NODE_TYPES = new Set([
|
|
20
|
-
'state',
|
|
21
|
-
'
|
|
22
|
-
'
|
|
40
|
+
'state',
|
|
41
|
+
'const',
|
|
42
|
+
'fn',
|
|
43
|
+
'derive',
|
|
44
|
+
'import',
|
|
45
|
+
'ref',
|
|
46
|
+
'context',
|
|
47
|
+
'callback',
|
|
48
|
+
'memo',
|
|
49
|
+
'effect',
|
|
50
|
+
'middleware',
|
|
51
|
+
'hook',
|
|
52
|
+
'method',
|
|
53
|
+
'arg',
|
|
54
|
+
'flag',
|
|
23
55
|
// Template node types that declare a name binding
|
|
24
|
-
'arrow-fn',
|
|
56
|
+
'arrow-fn',
|
|
57
|
+
'swr-hook',
|
|
58
|
+
'zustand-store',
|
|
59
|
+
'zustand-selector',
|
|
25
60
|
]);
|
|
26
61
|
const TYPE_POSITION_KINDS = new Set([
|
|
27
62
|
SyntaxKind.TypeReference,
|
|
@@ -49,33 +84,128 @@ const TYPE_POSITION_KINDS = new Set([
|
|
|
49
84
|
SyntaxKind.HeritageClause,
|
|
50
85
|
]);
|
|
51
86
|
const SAFE_STRING_MEMBERS = new Set([
|
|
52
|
-
'at',
|
|
53
|
-
'
|
|
54
|
-
'
|
|
55
|
-
'
|
|
56
|
-
'
|
|
57
|
-
'
|
|
87
|
+
'at',
|
|
88
|
+
'charAt',
|
|
89
|
+
'charCodeAt',
|
|
90
|
+
'codePointAt',
|
|
91
|
+
'concat',
|
|
92
|
+
'endsWith',
|
|
93
|
+
'includes',
|
|
94
|
+
'indexOf',
|
|
95
|
+
'lastIndexOf',
|
|
96
|
+
'length',
|
|
97
|
+
'localeCompare',
|
|
98
|
+
'match',
|
|
99
|
+
'matchAll',
|
|
100
|
+
'normalize',
|
|
101
|
+
'padEnd',
|
|
102
|
+
'padStart',
|
|
103
|
+
'repeat',
|
|
104
|
+
'replace',
|
|
105
|
+
'replaceAll',
|
|
106
|
+
'search',
|
|
107
|
+
'slice',
|
|
108
|
+
'split',
|
|
109
|
+
'startsWith',
|
|
110
|
+
'substring',
|
|
111
|
+
'toLocaleLowerCase',
|
|
112
|
+
'toLocaleUpperCase',
|
|
113
|
+
'toLowerCase',
|
|
114
|
+
'toString',
|
|
115
|
+
'toUpperCase',
|
|
116
|
+
'trim',
|
|
117
|
+
'trimEnd',
|
|
118
|
+
'trimStart',
|
|
119
|
+
'valueOf',
|
|
58
120
|
]);
|
|
59
121
|
const AMBIENT_NAMES = new Set([
|
|
60
122
|
// JS globals
|
|
61
|
-
'Array',
|
|
62
|
-
'
|
|
63
|
-
'
|
|
64
|
-
'
|
|
65
|
-
'
|
|
66
|
-
'
|
|
67
|
-
'
|
|
123
|
+
'Array',
|
|
124
|
+
'AbortController',
|
|
125
|
+
'Boolean',
|
|
126
|
+
'Buffer',
|
|
127
|
+
'Date',
|
|
128
|
+
'Error',
|
|
129
|
+
'Headers',
|
|
130
|
+
'JSON',
|
|
131
|
+
'Map',
|
|
132
|
+
'Math',
|
|
133
|
+
'Number',
|
|
134
|
+
'Object',
|
|
135
|
+
'Promise',
|
|
136
|
+
'RegExp',
|
|
137
|
+
'Request',
|
|
138
|
+
'Response',
|
|
139
|
+
'Set',
|
|
140
|
+
'String',
|
|
141
|
+
'URL',
|
|
142
|
+
'URLSearchParams',
|
|
143
|
+
'console',
|
|
144
|
+
'crypto',
|
|
145
|
+
'clearInterval',
|
|
146
|
+
'clearTimeout',
|
|
147
|
+
'document',
|
|
148
|
+
'fetch',
|
|
149
|
+
'globalThis',
|
|
150
|
+
'location',
|
|
151
|
+
'navigator',
|
|
152
|
+
'process',
|
|
153
|
+
'setInterval',
|
|
154
|
+
'setTimeout',
|
|
155
|
+
'window',
|
|
156
|
+
'undefined',
|
|
157
|
+
'NaN',
|
|
158
|
+
'Infinity',
|
|
159
|
+
'Symbol',
|
|
160
|
+
'WeakMap',
|
|
161
|
+
'WeakSet',
|
|
162
|
+
'Proxy',
|
|
163
|
+
'Reflect',
|
|
164
|
+
'queueMicrotask',
|
|
165
|
+
'structuredClone',
|
|
166
|
+
'atob',
|
|
167
|
+
'btoa',
|
|
68
168
|
// HTTP handler context (injected by framework)
|
|
69
|
-
'req',
|
|
70
|
-
'
|
|
169
|
+
'req',
|
|
170
|
+
'res',
|
|
171
|
+
'ctx',
|
|
172
|
+
'next',
|
|
173
|
+
'params',
|
|
174
|
+
'query',
|
|
175
|
+
'body',
|
|
176
|
+
'headers',
|
|
177
|
+
'event',
|
|
178
|
+
'env',
|
|
179
|
+
'emit',
|
|
180
|
+
'send',
|
|
181
|
+
'status',
|
|
71
182
|
// State/dispatch (React/KERN runtime)
|
|
72
|
-
'state',
|
|
183
|
+
'state',
|
|
184
|
+
'dispatch',
|
|
185
|
+
'get',
|
|
186
|
+
'set',
|
|
187
|
+
'props',
|
|
188
|
+
'self',
|
|
189
|
+
'this',
|
|
73
190
|
// Common external service references (injected via DI or app context)
|
|
74
|
-
'db',
|
|
191
|
+
'db',
|
|
192
|
+
'redis',
|
|
193
|
+
'cache',
|
|
194
|
+
'store',
|
|
195
|
+
'config',
|
|
196
|
+
'logger',
|
|
197
|
+
'app',
|
|
75
198
|
// CLI context (common in KERN CLI examples)
|
|
76
|
-
'opts',
|
|
199
|
+
'opts',
|
|
200
|
+
'args',
|
|
201
|
+
'options',
|
|
202
|
+
'argv',
|
|
77
203
|
// SWR/hook context (data comes from framework)
|
|
78
|
-
'data',
|
|
204
|
+
'data',
|
|
205
|
+
'error',
|
|
206
|
+
'isLoading',
|
|
207
|
+
'mutate',
|
|
208
|
+
'isValidating',
|
|
79
209
|
]);
|
|
80
210
|
const EXTERNAL_SIGNAL_RE = /\b(fetch|axios|db|redis|stripe|openai|supabase|client|api|provider|registry|http|https)\b|await\s+[A-Za-z_$]/;
|
|
81
211
|
const UNCERTAIN_SIGNAL_RE = /\b(guess|heuristic|fallback|bestEffort|approx|uncertain|unknown|maybe)\b|Math\.random|Date\.now/;
|
|
@@ -125,7 +255,7 @@ function splitTopLevel(text, separator) {
|
|
|
125
255
|
let inQuote = false;
|
|
126
256
|
for (let i = 0; i < text.length; i++) {
|
|
127
257
|
const ch = text[i];
|
|
128
|
-
if (ch === '"' || ch === '
|
|
258
|
+
if (ch === '"' || ch === "'") {
|
|
129
259
|
inQuote = !inQuote;
|
|
130
260
|
current += ch;
|
|
131
261
|
continue;
|
|
@@ -153,7 +283,7 @@ function findTopLevelChar(text, wanted) {
|
|
|
153
283
|
let inQuote = false;
|
|
154
284
|
for (let i = 0; i < text.length; i++) {
|
|
155
285
|
const ch = text[i];
|
|
156
|
-
if (ch === '"' || ch === '
|
|
286
|
+
if (ch === '"' || ch === "'") {
|
|
157
287
|
inQuote = !inQuote;
|
|
158
288
|
continue;
|
|
159
289
|
}
|
|
@@ -173,7 +303,7 @@ function parseParamBindings(raw) {
|
|
|
173
303
|
for (const part of splitTopLevel(raw, ',')) {
|
|
174
304
|
const colonIdx = findTopLevelChar(part, ':');
|
|
175
305
|
const eqIdx = findTopLevelChar(part, '=');
|
|
176
|
-
const rawName = colonIdx >= 0 ? part.slice(0, colonIdx).trim() :
|
|
306
|
+
const rawName = colonIdx >= 0 ? part.slice(0, colonIdx).trim() : eqIdx >= 0 ? part.slice(0, eqIdx).trim() : part.trim();
|
|
177
307
|
if (!/^[A-Za-z_$][\w$]*$/.test(rawName))
|
|
178
308
|
continue;
|
|
179
309
|
let typeName;
|
|
@@ -195,20 +325,20 @@ function getDirectTypeAlias(typeText) {
|
|
|
195
325
|
return undefined;
|
|
196
326
|
if (compact.includes('<') || compact.includes('[') || compact.includes('{') || compact.includes('&'))
|
|
197
327
|
return undefined;
|
|
198
|
-
const parts = compact.split('|').filter(part => part !== 'null' && part !== 'undefined');
|
|
328
|
+
const parts = compact.split('|').filter((part) => part !== 'null' && part !== 'undefined');
|
|
199
329
|
if (parts.length !== 1)
|
|
200
330
|
return undefined;
|
|
201
331
|
return /^[A-Za-z_$][\w$]*$/.test(parts[0]) ? parts[0] : undefined;
|
|
202
332
|
}
|
|
203
333
|
function getUnionLiteralKind(variants) {
|
|
204
|
-
const trimmed = variants.map(variant => variant.trim()).filter(Boolean);
|
|
334
|
+
const trimmed = variants.map((variant) => variant.trim()).filter(Boolean);
|
|
205
335
|
if (trimmed.length === 0)
|
|
206
336
|
return 'mixed';
|
|
207
|
-
if (trimmed.every(variant => variant === 'true' || variant === 'false'))
|
|
337
|
+
if (trimmed.every((variant) => variant === 'true' || variant === 'false'))
|
|
208
338
|
return 'boolean';
|
|
209
|
-
if (trimmed.every(variant => /^-?\d+(?:\.\d+)?$/.test(variant)))
|
|
339
|
+
if (trimmed.every((variant) => /^-?\d+(?:\.\d+)?$/.test(variant)))
|
|
210
340
|
return 'number';
|
|
211
|
-
if (trimmed.every(variant => /^".*"$/.test(variant) || /^'.*'$/.test(variant) || /^[A-Za-z_][A-Za-z0-9_-]*$/.test(variant))) {
|
|
341
|
+
if (trimmed.every((variant) => /^".*"$/.test(variant) || /^'.*'$/.test(variant) || /^[A-Za-z_][A-Za-z0-9_-]*$/.test(variant))) {
|
|
212
342
|
return 'string';
|
|
213
343
|
}
|
|
214
344
|
return 'mixed';
|
|
@@ -221,7 +351,10 @@ function buildUnionAliasMap(nodes) {
|
|
|
221
351
|
const p = props(node);
|
|
222
352
|
if (typeof p.name !== 'string' || typeof p.values !== 'string')
|
|
223
353
|
continue;
|
|
224
|
-
const variants = p.values
|
|
354
|
+
const variants = p.values
|
|
355
|
+
.split('|')
|
|
356
|
+
.map((part) => part.trim())
|
|
357
|
+
.filter(Boolean);
|
|
225
358
|
if (variants.length < 2)
|
|
226
359
|
continue;
|
|
227
360
|
unions.set(p.name, {
|
|
@@ -270,7 +403,10 @@ function addBindingsFromScopeNode(scopeNode, target) {
|
|
|
270
403
|
continue;
|
|
271
404
|
// Import nodes use 'names' (comma-separated) instead of 'name'
|
|
272
405
|
if (child.type === 'import' && typeof cp.names === 'string') {
|
|
273
|
-
for (const importedName of cp.names
|
|
406
|
+
for (const importedName of cp.names
|
|
407
|
+
.split(',')
|
|
408
|
+
.map((s) => s.trim())
|
|
409
|
+
.filter(Boolean)) {
|
|
274
410
|
addBinding(target, importedName, { kind: 'import', node: child });
|
|
275
411
|
}
|
|
276
412
|
continue;
|
|
@@ -300,9 +436,7 @@ function collectVisibleBindings(node, parentMap) {
|
|
|
300
436
|
}
|
|
301
437
|
function createSnippetAnalysis(project, code, key, mode) {
|
|
302
438
|
const filePath = `__kern_${key.replace(/[^A-Za-z0-9_]/g, '_')}_${Math.random().toString(36).slice(2)}.tsx`;
|
|
303
|
-
const wrapped = mode === 'expr'
|
|
304
|
-
? `async function __kern__() { return (${code}); }\n`
|
|
305
|
-
: `async function __kern__() {\n${code}\n}\n`;
|
|
439
|
+
const wrapped = mode === 'expr' ? `async function __kern__() { return (${code}); }\n` : `async function __kern__() {\n${code}\n}\n`;
|
|
306
440
|
const sourceFile = project.createSourceFile(filePath, wrapped, { overwrite: true });
|
|
307
441
|
const localBindings = collectLocalBindings(sourceFile);
|
|
308
442
|
const referenceNames = new Set();
|
|
@@ -398,13 +532,16 @@ function isDeclarationIdentifier(identifier) {
|
|
|
398
532
|
const parent = identifier.getParent();
|
|
399
533
|
if (!parent)
|
|
400
534
|
return false;
|
|
401
|
-
if (parent.getKind() === SyntaxKind.BindingElement &&
|
|
535
|
+
if (parent.getKind() === SyntaxKind.BindingElement &&
|
|
536
|
+
parent.getNameNode() === identifier) {
|
|
402
537
|
return true;
|
|
403
538
|
}
|
|
404
|
-
if (parent.getKind() === SyntaxKind.Parameter &&
|
|
539
|
+
if (parent.getKind() === SyntaxKind.Parameter &&
|
|
540
|
+
parent.getNameNode() === identifier) {
|
|
405
541
|
return true;
|
|
406
542
|
}
|
|
407
|
-
if (parent.getKind() === SyntaxKind.VariableDeclaration &&
|
|
543
|
+
if (parent.getKind() === SyntaxKind.VariableDeclaration &&
|
|
544
|
+
parent.getNameNode() === identifier) {
|
|
408
545
|
return true;
|
|
409
546
|
}
|
|
410
547
|
const parentAny = parent;
|
|
@@ -511,9 +648,9 @@ export const undefinedReference = (nodes, filePath) => {
|
|
|
511
648
|
const visibleBindings = collectVisibleBindings(node, parentMap);
|
|
512
649
|
const analysis = createSnippetAnalysis(project, code, `undef_${loc(node).line}`, 'block');
|
|
513
650
|
const unresolved = [...analysis.referenceNames]
|
|
514
|
-
.filter(name => !analysis.localBindings.has(name))
|
|
515
|
-
.filter(name => !visibleBindings.has(name))
|
|
516
|
-
.filter(name => !AMBIENT_NAMES.has(name))
|
|
651
|
+
.filter((name) => !analysis.localBindings.has(name))
|
|
652
|
+
.filter((name) => !visibleBindings.has(name))
|
|
653
|
+
.filter((name) => !AMBIENT_NAMES.has(name))
|
|
517
654
|
.sort();
|
|
518
655
|
if (unresolved.length === 0)
|
|
519
656
|
continue;
|
|
@@ -584,13 +721,15 @@ export const typeModelMismatch = (nodes, filePath) => {
|
|
|
584
721
|
const union = unionAliases.get(alias);
|
|
585
722
|
const relatedInfo = union != null
|
|
586
723
|
? {
|
|
587
|
-
relatedSpans: [
|
|
724
|
+
relatedSpans: [
|
|
725
|
+
{
|
|
588
726
|
file: filePath,
|
|
589
727
|
startLine: loc(union.node).line,
|
|
590
728
|
startCol: loc(union.node).col,
|
|
591
729
|
endLine: loc(union.node).line,
|
|
592
730
|
endCol: loc(union.node).col,
|
|
593
|
-
}
|
|
731
|
+
},
|
|
732
|
+
],
|
|
594
733
|
suggestion: `Use '${bindingName}' as a literal value, or change '${alias}' to an interface/union with object variants if field access is intended.`,
|
|
595
734
|
}
|
|
596
735
|
: undefined;
|
|
@@ -618,7 +757,7 @@ export const unusedState = (nodes, filePath) => {
|
|
|
618
757
|
const stateName = p.name;
|
|
619
758
|
const setterName = `set${capitalize(stateName)}`;
|
|
620
759
|
let used = false;
|
|
621
|
-
walkSubtree(scopeRoot, current => {
|
|
760
|
+
walkSubtree(scopeRoot, (current) => {
|
|
622
761
|
if (used || current === node)
|
|
623
762
|
return;
|
|
624
763
|
// Check bind= attribute (e.g., input bind=query)
|
|
@@ -645,9 +784,7 @@ export const unusedState = (nodes, filePath) => {
|
|
|
645
784
|
used = true;
|
|
646
785
|
return;
|
|
647
786
|
}
|
|
648
|
-
const exprCode = current.type === 'guard' || current.type === 'derive'
|
|
649
|
-
? getExprCode(current)
|
|
650
|
-
: undefined;
|
|
787
|
+
const exprCode = current.type === 'guard' || current.type === 'derive' ? getExprCode(current) : undefined;
|
|
651
788
|
if (!exprCode)
|
|
652
789
|
return;
|
|
653
790
|
const analysis = createSnippetAnalysis(project, exprCode, `state_expr_${stateName}_${loc(current).line}`, 'expr');
|
|
@@ -664,7 +801,7 @@ export const unusedState = (nodes, filePath) => {
|
|
|
664
801
|
return findings;
|
|
665
802
|
};
|
|
666
803
|
export const handlerHeavy = (nodes, filePath) => {
|
|
667
|
-
const handlers = nodes.filter(node => node.type === 'handler' && getCodeProp(node));
|
|
804
|
+
const handlers = nodes.filter((node) => node.type === 'handler' && getCodeProp(node));
|
|
668
805
|
if (handlers.length === 0)
|
|
669
806
|
return [];
|
|
670
807
|
let handlerTokens = 0;
|
|
@@ -684,12 +821,14 @@ export const handlerHeavy = (nodes, filePath) => {
|
|
|
684
821
|
if (ratio <= 0.6)
|
|
685
822
|
return [];
|
|
686
823
|
const anchor = handlers[0];
|
|
687
|
-
return [
|
|
824
|
+
return [
|
|
825
|
+
finding('handler-heavy', 'warning', 'structure', `Embedded handler code accounts for ${(ratio * 100).toFixed(0)}% of file tokens (${handlerTokens}/${totalTokens}); this file is mostly inline JS with a thin KERN wrapper`, filePath, anchor, {
|
|
688
826
|
suggestion: 'Promote repeated handler logic into native KERN nodes such as derive, guard, collect, respond, or named fn blocks.',
|
|
689
|
-
})
|
|
827
|
+
}),
|
|
828
|
+
];
|
|
690
829
|
};
|
|
691
830
|
export const missingConfidence = (nodes, filePath) => {
|
|
692
|
-
if (nodes.some(node => props(node).confidence !== undefined))
|
|
831
|
+
if (nodes.some((node) => props(node).confidence !== undefined))
|
|
693
832
|
return [];
|
|
694
833
|
if (nodes.length === 0)
|
|
695
834
|
return [];
|
|
@@ -701,20 +840,20 @@ export const missingConfidence = (nodes, filePath) => {
|
|
|
701
840
|
continue;
|
|
702
841
|
if (!EXTERNAL_SIGNAL_RE.test(code) && !UNCERTAIN_SIGNAL_RE.test(code))
|
|
703
842
|
continue;
|
|
704
|
-
candidates.add(describeNode(node.type === 'handler' ?
|
|
843
|
+
candidates.add(describeNode(node.type === 'handler' ? parentMap.get(node) || node : node, parentMap));
|
|
705
844
|
if (candidates.size >= 3)
|
|
706
845
|
break;
|
|
707
846
|
}
|
|
708
847
|
const anchor = nodes[0];
|
|
709
|
-
const suffix = candidates.size > 0
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
return [finding('missing-confidence', 'info', 'pattern', `No confidence annotations found in this .kern file. Add confidence props to external-service calls or uncertain logic.${suffix}`, filePath, anchor, {
|
|
848
|
+
const suffix = candidates.size > 0 ? ` Candidate nodes: ${[...candidates].join(', ')}.` : '';
|
|
849
|
+
return [
|
|
850
|
+
finding('missing-confidence', 'info', 'pattern', `No confidence annotations found in this .kern file. Add confidence props to external-service calls or uncertain logic.${suffix}`, filePath, anchor, {
|
|
713
851
|
suggestion: 'Annotate critical nodes with confidence=0.x, confidence=from:name, or confidence=min:a,b to make trust levels explicit.',
|
|
714
|
-
})
|
|
852
|
+
}),
|
|
853
|
+
];
|
|
715
854
|
};
|
|
716
855
|
export function lintKernSourceIR(nodes, filePath, rules = KERN_SOURCE_RULES) {
|
|
717
|
-
return rules.flatMap(rule => rule(nodes, filePath));
|
|
856
|
+
return rules.flatMap((rule) => rule(nodes, filePath));
|
|
718
857
|
}
|
|
719
858
|
export const KERN_SOURCE_RULES = [
|
|
720
859
|
undefinedReference,
|