diffintel 0.2.1 → 0.3.0

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.
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderMarkdownSummary = renderMarkdownSummary;
4
+ /**
5
+ * Render a compact markdown summary of the report for use as a PR comment.
6
+ */
7
+ function renderMarkdownSummary(report) {
8
+ const { explanation, summary, files } = report;
9
+ const parts = [];
10
+ // Title
11
+ parts.push(`### ${explanation.title}`);
12
+ parts.push("");
13
+ // Stats line
14
+ parts.push(`**${summary.filesChanged} files** | **+${summary.additions}** added | **-${summary.deletions}** removed`);
15
+ parts.push("");
16
+ // Impact
17
+ if (explanation.impact.length > 0) {
18
+ for (const item of explanation.impact) {
19
+ parts.push(`> ${item}`);
20
+ }
21
+ parts.push("");
22
+ }
23
+ // Description or AST-only notice
24
+ if (explanation.description) {
25
+ parts.push(explanation.description);
26
+ parts.push("");
27
+ }
28
+ else {
29
+ parts.push("_Structural analysis only — set `ANTHROPIC_API_KEY` for AI-powered explanations._");
30
+ parts.push("");
31
+ // In AST-only mode, show structural changes as the primary content
32
+ const structuralLines = renderStructuralTable(files);
33
+ if (structuralLines) {
34
+ parts.push(structuralLines);
35
+ parts.push("");
36
+ }
37
+ }
38
+ // Fixes
39
+ if (explanation.fixes.length > 0) {
40
+ parts.push("**What was fixed**");
41
+ for (const fix of explanation.fixes) {
42
+ parts.push(`- ${fix.description}`);
43
+ }
44
+ parts.push("");
45
+ }
46
+ // Risks
47
+ if (explanation.risks.length > 0) {
48
+ parts.push("**Things to watch**");
49
+ for (const risk of explanation.risks) {
50
+ parts.push(`- **${risk.level}** ${risk.description}`);
51
+ }
52
+ parts.push("");
53
+ }
54
+ // Per-file summaries (only when LLM explanations are present)
55
+ if (explanation.fileExplanations.length > 0) {
56
+ const fileLines = [];
57
+ const maxFiles = 20;
58
+ const shown = explanation.fileExplanations.slice(0, maxFiles);
59
+ for (const fe of shown) {
60
+ if (fe.summary) {
61
+ fileLines.push(`- \`${fe.path}\` — ${fe.summary}`);
62
+ }
63
+ }
64
+ if (fileLines.length > 0) {
65
+ parts.push("**Changed files**");
66
+ parts.push(...fileLines);
67
+ if (explanation.fileExplanations.length > maxFiles) {
68
+ parts.push(`- _...and ${explanation.fileExplanations.length - maxFiles} more_`);
69
+ }
70
+ parts.push("");
71
+ }
72
+ }
73
+ // Footer
74
+ parts.push("---");
75
+ parts.push("_Generated by diffintel_");
76
+ return parts.join("\n");
77
+ }
78
+ function renderStructuralTable(files) {
79
+ const rows = [];
80
+ const maxFiles = 20;
81
+ for (const file of files.slice(0, maxFiles)) {
82
+ if (file.structuralChanges.length === 0)
83
+ continue;
84
+ const changes = file.structuralChanges
85
+ .map((c) => `\`${c.action}\` ${c.name} (${c.type})`)
86
+ .join(", ");
87
+ rows.push(`| \`${file.path}\` | ${changes} |`);
88
+ }
89
+ if (rows.length === 0)
90
+ return null;
91
+ const header = "| File | Changes |\n|------|---------|";
92
+ const table = [header, ...rows].join("\n");
93
+ if (files.length > maxFiles) {
94
+ return table + `\n\n_...and ${files.length - maxFiles} more files_`;
95
+ }
96
+ return table;
97
+ }
98
+ //# sourceMappingURL=markdown-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-summary.js","sourceRoot":"","sources":["../../src/explain/markdown-summary.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,7 @@ export interface FileExplanation {
50
50
  export interface LLMExplanation {
51
51
  title: string;
52
52
  description: string;
53
+ impact: string[];
53
54
  fixes: Fix[];
54
55
  risks: Risk[];
55
56
  fileExplanations: FileExplanation[];
@@ -1,2 +1,2 @@
1
- export { parseFile, parseSource, Query, language, getLanguageForExt } from "./parser";
1
+ export { parseFile, parseSource, Query, language, getLanguageForExt, hasLanguageForExt, getAvailableLanguages } from "./parser";
2
2
  export type { Tree, SyntaxNode, QueryMatch, QueryCapture } from "./parser";
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getLanguageForExt = exports.language = exports.Query = exports.parseSource = exports.parseFile = void 0;
3
+ exports.getAvailableLanguages = exports.hasLanguageForExt = exports.getLanguageForExt = exports.language = exports.Query = exports.parseSource = exports.parseFile = void 0;
4
4
  var parser_1 = require("./parser");
5
5
  Object.defineProperty(exports, "parseFile", { enumerable: true, get: function () { return parser_1.parseFile; } });
6
6
  Object.defineProperty(exports, "parseSource", { enumerable: true, get: function () { return parser_1.parseSource; } });
7
7
  Object.defineProperty(exports, "Query", { enumerable: true, get: function () { return parser_1.Query; } });
8
8
  Object.defineProperty(exports, "language", { enumerable: true, get: function () { return parser_1.language; } });
9
9
  Object.defineProperty(exports, "getLanguageForExt", { enumerable: true, get: function () { return parser_1.getLanguageForExt; } });
10
+ Object.defineProperty(exports, "hasLanguageForExt", { enumerable: true, get: function () { return parser_1.hasLanguageForExt; } });
11
+ Object.defineProperty(exports, "getAvailableLanguages", { enumerable: true, get: function () { return parser_1.getAvailableLanguages; } });
10
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsing/index.ts"],"names":[],"mappings":";;;AAAA,mCAAsF;AAA7E,mGAAA,SAAS,OAAA;AAAE,qGAAA,WAAW,OAAA;AAAE,+FAAA,KAAK,OAAA;AAAE,kGAAA,QAAQ,OAAA;AAAE,2GAAA,iBAAiB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsing/index.ts"],"names":[],"mappings":";;;AAAA,mCAAgI;AAAvH,mGAAA,SAAS,OAAA;AAAE,qGAAA,WAAW,OAAA;AAAE,+FAAA,KAAK,OAAA;AAAE,kGAAA,QAAQ,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAAE,+GAAA,qBAAqB,OAAA"}
@@ -7,7 +7,11 @@ export type QueryCapture = Parser.QueryCapture;
7
7
  export declare const Query: typeof Parser.Query;
8
8
  /** Backward-compat export: the JavaScript language */
9
9
  export declare const language: Parser.Language;
10
+ /** Check if a language grammar is available for the given extension */
11
+ export declare function hasLanguageForExt(ext: string): boolean;
10
12
  export declare function getLanguageForExt(ext: string): Parser.Language;
13
+ /** Get list of extensions with available grammars */
14
+ export declare function getAvailableLanguages(): string[];
11
15
  export declare function parseSource(source: string, ext?: string): {
12
16
  tree: Tree;
13
17
  source: string;
@@ -4,7 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.language = exports.Query = void 0;
7
+ exports.hasLanguageForExt = hasLanguageForExt;
7
8
  exports.getLanguageForExt = getLanguageForExt;
9
+ exports.getAvailableLanguages = getAvailableLanguages;
8
10
  exports.parseSource = parseSource;
9
11
  exports.parseFile = parseFile;
10
12
  const fs_1 = __importDefault(require("fs"));
@@ -12,6 +14,7 @@ const path_1 = __importDefault(require("path"));
12
14
  const tree_sitter_1 = __importDefault(require("tree-sitter"));
13
15
  const tree_sitter_javascript_1 = __importDefault(require("tree-sitter-javascript"));
14
16
  const tree_sitter_typescript_1 = __importDefault(require("tree-sitter-typescript"));
17
+ const language_configs_1 = require("../explain/language-configs");
15
18
  exports.Query = tree_sitter_1.default.Query;
16
19
  const jsLanguage = tree_sitter_javascript_1.default;
17
20
  const tsLanguage = tree_sitter_typescript_1.default.typescript;
@@ -28,13 +31,77 @@ function getParser(lang) {
28
31
  }
29
32
  return p;
30
33
  }
31
- const extToLanguage = {
34
+ // ---------------------------------------------------------------------------
35
+ // Dynamic language registry
36
+ // ---------------------------------------------------------------------------
37
+ // Static mappings for bundled grammars (always available)
38
+ const staticLanguages = {
32
39
  ".js": jsLanguage,
40
+ ".jsx": jsLanguage,
33
41
  ".ts": tsLanguage,
34
42
  ".tsx": tsxLanguage,
35
43
  };
44
+ // Cache for dynamically loaded grammars
45
+ const dynamicLanguageCache = new Map();
46
+ function tryLoadGrammar(packageName, subProperty) {
47
+ const cacheKey = subProperty ? `${packageName}.${subProperty}` : packageName;
48
+ if (dynamicLanguageCache.has(cacheKey)) {
49
+ const cached = dynamicLanguageCache.get(cacheKey);
50
+ return cached === false ? null : cached;
51
+ }
52
+ try {
53
+ const mod = require(packageName);
54
+ const target = subProperty ? mod[subProperty] : (mod.default || mod);
55
+ const lang = target;
56
+ dynamicLanguageCache.set(cacheKey, lang);
57
+ return lang;
58
+ }
59
+ catch {
60
+ dynamicLanguageCache.set(cacheKey, false);
61
+ return null;
62
+ }
63
+ }
64
+ function getLanguageForExtDynamic(ext) {
65
+ // Check static mappings first
66
+ if (ext in staticLanguages) {
67
+ return staticLanguages[ext];
68
+ }
69
+ // Find config for this extension
70
+ const config = language_configs_1.languageConfigs.find((c) => c.extensions.includes(ext));
71
+ if (!config)
72
+ return null;
73
+ // Special handling for typescript package (has .typescript and .tsx sub-grammars)
74
+ if (config.treeSitterPackage === "tree-sitter-typescript") {
75
+ if (ext === ".tsx")
76
+ return tsxLanguage;
77
+ return tsLanguage;
78
+ }
79
+ return tryLoadGrammar(config.treeSitterPackage, config.treeSitterSubProperty);
80
+ }
81
+ /** Check if a language grammar is available for the given extension */
82
+ function hasLanguageForExt(ext) {
83
+ return getLanguageForExtDynamic(ext) !== null;
84
+ }
36
85
  function getLanguageForExt(ext) {
37
- return extToLanguage[ext] || jsLanguage;
86
+ return getLanguageForExtDynamic(ext) || jsLanguage;
87
+ }
88
+ /** Get list of extensions with available grammars */
89
+ function getAvailableLanguages() {
90
+ const available = Object.keys(staticLanguages);
91
+ for (const config of language_configs_1.languageConfigs) {
92
+ // Skip configs already covered by static mappings
93
+ if (config.extensions.every((e) => e in staticLanguages))
94
+ continue;
95
+ const lang = tryLoadGrammar(config.treeSitterPackage, config.treeSitterSubProperty);
96
+ if (lang) {
97
+ for (const ext of config.extensions) {
98
+ if (!available.includes(ext)) {
99
+ available.push(ext);
100
+ }
101
+ }
102
+ }
103
+ }
104
+ return available;
38
105
  }
39
106
  function parseSource(source, ext = ".js") {
40
107
  const lang = getLanguageForExt(ext);
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parsing/parser.ts"],"names":[],"mappings":";;;;;;AAsCA,8CAEC;AAED,kCAOC;AAED,8BAIC;AAvDD,4CAAoB;AACpB,gDAAwB;AACxB,8DAAiC;AACjC,oFAAgD;AAChD,oFAAyD;AAO5C,QAAA,KAAK,GAAG,qBAAM,CAAC,KAAK,CAAC;AAElC,MAAM,UAAU,GAAG,gCAAwC,CAAC;AAC5D,MAAM,UAAU,GAAG,gCAAmB,CAAC,UAAwC,CAAC;AAChF,MAAM,WAAW,GAAG,gCAAmB,CAAC,GAAiC,CAAC;AAE1E,sDAAsD;AACzC,QAAA,QAAQ,GAAG,UAAU,CAAC;AAEnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEnD,SAAS,SAAS,CAAC,IAAqB;IACtC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,GAAG,IAAI,qBAAM,EAAE,CAAC;QACjB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,aAAa,GAAoC;IACrD,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC;AAC1C,CAAC;AAED,SAAgB,WAAW,CACzB,MAAc,EACd,MAAc,KAAK;IAEnB,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B,CAAC;AAED,SAAgB,SAAS,CAAC,QAAgB;IACxC,MAAM,MAAM,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parsing/parser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "diffintel",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "AI-powered structural diff explainer for pull requests",
5
5
  "bin": {
6
6
  "diffintel": "dist/cli.js"
@@ -21,6 +21,17 @@
21
21
  "tree-sitter-javascript": "^0.25.0",
22
22
  "tree-sitter-typescript": "^0.23.2"
23
23
  },
24
+ "optionalDependencies": {
25
+ "tree-sitter-python": "^0.23.0",
26
+ "tree-sitter-go": "^0.23.0",
27
+ "tree-sitter-rust": "^0.23.0",
28
+ "tree-sitter-java": "^0.23.0",
29
+ "tree-sitter-c": "^0.23.0",
30
+ "tree-sitter-cpp": "^0.23.0",
31
+ "tree-sitter-ruby": "^0.23.0",
32
+ "tree-sitter-php": "^0.23.0",
33
+ "tree-sitter-c-sharp": "^0.23.0"
34
+ },
24
35
  "devDependencies": {
25
36
  "@types/node": "^22.19.11",
26
37
  "tsx": "^4.21.0",