@tmhs/godot-correctness-mcp 0.1.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.
Files changed (100) hide show
  1. package/LICENSE +34 -0
  2. package/README.md +118 -0
  3. package/data/godot-4.4.symbols.json.gz +0 -0
  4. package/data/godot-4.5.symbols.json.gz +0 -0
  5. package/data/tree-sitter-gdscript.wasm +0 -0
  6. package/dist/capabilities.d.ts +21 -0
  7. package/dist/capabilities.js +24 -0
  8. package/dist/capabilities.js.map +1 -0
  9. package/dist/cli.d.ts +12 -0
  10. package/dist/cli.js +105 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/gdscript/ast.d.ts +25 -0
  13. package/dist/gdscript/ast.js +82 -0
  14. package/dist/gdscript/ast.js.map +1 -0
  15. package/dist/gdscript/parser.d.ts +7 -0
  16. package/dist/gdscript/parser.js +44 -0
  17. package/dist/gdscript/parser.js.map +1 -0
  18. package/dist/godot/text-format.d.ts +35 -0
  19. package/dist/godot/text-format.js +105 -0
  20. package/dist/godot/text-format.js.map +1 -0
  21. package/dist/index.d.ts +4 -0
  22. package/dist/index.js +38 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/lint/config.d.ts +83 -0
  25. package/dist/lint/config.js +55 -0
  26. package/dist/lint/config.js.map +1 -0
  27. package/dist/lint/engine.d.ts +7 -0
  28. package/dist/lint/engine.js +33 -0
  29. package/dist/lint/engine.js.map +1 -0
  30. package/dist/lint/project.d.ts +12 -0
  31. package/dist/lint/project.js +49 -0
  32. package/dist/lint/project.js.map +1 -0
  33. package/dist/lint/rules/await-misuse.d.ts +3 -0
  34. package/dist/lint/rules/await-misuse.js +34 -0
  35. package/dist/lint/rules/await-misuse.js.map +1 -0
  36. package/dist/lint/rules/connect-without-disconnect.d.ts +7 -0
  37. package/dist/lint/rules/connect-without-disconnect.js +38 -0
  38. package/dist/lint/rules/connect-without-disconnect.js.map +1 -0
  39. package/dist/lint/rules/delta-misuse.d.ts +7 -0
  40. package/dist/lint/rules/delta-misuse.js +78 -0
  41. package/dist/lint/rules/delta-misuse.js.map +1 -0
  42. package/dist/lint/rules/float-grid-equality.d.ts +6 -0
  43. package/dist/lint/rules/float-grid-equality.js +39 -0
  44. package/dist/lint/rules/float-grid-equality.js.map +1 -0
  45. package/dist/lint/rules/get-node-in-process.d.ts +3 -0
  46. package/dist/lint/rules/get-node-in-process.js +31 -0
  47. package/dist/lint/rules/get-node-in-process.js.map +1 -0
  48. package/dist/lint/rules/index.d.ts +4 -0
  49. package/dist/lint/rules/index.js +21 -0
  50. package/dist/lint/rules/index.js.map +1 -0
  51. package/dist/lint/rules/missing-onready.d.ts +3 -0
  52. package/dist/lint/rules/missing-onready.js +52 -0
  53. package/dist/lint/rules/missing-onready.js.map +1 -0
  54. package/dist/lint/rules/stringly-nodepath.d.ts +3 -0
  55. package/dist/lint/rules/stringly-nodepath.js +35 -0
  56. package/dist/lint/rules/stringly-nodepath.js.map +1 -0
  57. package/dist/lint/rules/untyped-declaration.d.ts +7 -0
  58. package/dist/lint/rules/untyped-declaration.js +25 -0
  59. package/dist/lint/rules/untyped-declaration.js.map +1 -0
  60. package/dist/lint/types.d.ts +36 -0
  61. package/dist/lint/types.js +2 -0
  62. package/dist/lint/types.js.map +1 -0
  63. package/dist/resources/skills.d.ts +12 -0
  64. package/dist/resources/skills.js +45 -0
  65. package/dist/resources/skills.js.map +1 -0
  66. package/dist/scenes/paths.d.ts +14 -0
  67. package/dist/scenes/paths.js +38 -0
  68. package/dist/scenes/paths.js.map +1 -0
  69. package/dist/scenes/report.d.ts +17 -0
  70. package/dist/scenes/report.js +25 -0
  71. package/dist/scenes/report.js.map +1 -0
  72. package/dist/scenes/validate.d.ts +16 -0
  73. package/dist/scenes/validate.js +185 -0
  74. package/dist/scenes/validate.js.map +1 -0
  75. package/dist/server-info.d.ts +13 -0
  76. package/dist/server-info.js +21 -0
  77. package/dist/server-info.js.map +1 -0
  78. package/dist/symbols/db.d.ts +11 -0
  79. package/dist/symbols/db.js +42 -0
  80. package/dist/symbols/db.js.map +1 -0
  81. package/dist/symbols/lookup.d.ts +89 -0
  82. package/dist/symbols/lookup.js +271 -0
  83. package/dist/symbols/lookup.js.map +1 -0
  84. package/dist/symbols/schema.d.ts +1419 -0
  85. package/dist/symbols/schema.js +109 -0
  86. package/dist/symbols/schema.js.map +1 -0
  87. package/dist/tools/api.d.ts +3 -0
  88. package/dist/tools/api.js +91 -0
  89. package/dist/tools/api.js.map +1 -0
  90. package/dist/tools/lint.d.ts +3 -0
  91. package/dist/tools/lint.js +45 -0
  92. package/dist/tools/lint.js.map +1 -0
  93. package/dist/tools/scenes.d.ts +3 -0
  94. package/dist/tools/scenes.js +43 -0
  95. package/dist/tools/scenes.js.map +1 -0
  96. package/package.json +57 -0
  97. package/skills/data-driven-resources.md +78 -0
  98. package/skills/resource-preload.md +43 -0
  99. package/skills/signal-hygiene.md +46 -0
  100. package/skills/typed-gdscript.md +47 -0
@@ -0,0 +1,21 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { PINNED_GODOT_VERSIONS, pillarAvailability, } from "./capabilities.js";
5
+ export const SERVER_NAME = "godot-correctness-mcp";
6
+ /** Read the package version from the shipped package.json. */
7
+ export function readVersion() {
8
+ const pkgPath = join(dirname(fileURLToPath(import.meta.url)), "..", "package.json");
9
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
10
+ return pkg.version ?? "0.0.0";
11
+ }
12
+ /** Health payload: version, pinned Godot versions, and pillar availability. */
13
+ export function getServerInfo() {
14
+ return {
15
+ name: SERVER_NAME,
16
+ version: readVersion(),
17
+ godotVersions: [...PINNED_GODOT_VERSIONS],
18
+ pillars: pillarAvailability(),
19
+ };
20
+ }
21
+ //# sourceMappingURL=server-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-info.js","sourceRoot":"","sources":["../src/server-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAEnD,8DAA8D;AAC9D,MAAM,UAAU,WAAW;IACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACpF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAyB,CAAC;IAC/E,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;AAChC,CAAC;AAUD,+EAA+E;AAC/E,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,WAAW,EAAE;QACtB,aAAa,EAAE,CAAC,GAAG,qBAAqB,CAAC;QACzC,OAAO,EAAE,kBAAkB,EAAE;KAC9B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type SymbolDb } from "./schema.js";
2
+ /** Path to the committed gzipped symbol DB for a version label ("4.4"/"4.5"). */
3
+ export declare function dbPath(label: string): string;
4
+ /** Whether a symbol DB artifact is present for the given version label. */
5
+ export declare function isVersionAvailable(label: string): boolean;
6
+ /** Pinned versions that actually have a committed artifact. */
7
+ export declare function availableVersions(): string[];
8
+ /** Decompress, parse, and validate a DB from an explicit file path. */
9
+ export declare function loadSymbolDbFromFile(path: string): SymbolDb;
10
+ /** Load (and cache) the committed symbol DB for a version label. */
11
+ export declare function loadSymbolDb(label: string): SymbolDb;
@@ -0,0 +1,42 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { gunzipSync } from "node:zlib";
5
+ import { PINNED_GODOT_VERSIONS } from "../capabilities.js";
6
+ import { parseSymbolDb } from "./schema.js";
7
+ // dist/symbols/db.js and src/symbols/db.ts both sit two levels below the
8
+ // package root, so data/ resolves the same compiled or via tsx/vitest.
9
+ const dataDir = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "data");
10
+ const cache = new Map();
11
+ /** Path to the committed gzipped symbol DB for a version label ("4.4"/"4.5"). */
12
+ export function dbPath(label) {
13
+ return join(dataDir, `godot-${label}.symbols.json.gz`);
14
+ }
15
+ /** Whether a symbol DB artifact is present for the given version label. */
16
+ export function isVersionAvailable(label) {
17
+ return existsSync(dbPath(label));
18
+ }
19
+ /** Pinned versions that actually have a committed artifact. */
20
+ export function availableVersions() {
21
+ return PINNED_GODOT_VERSIONS.filter(isVersionAvailable);
22
+ }
23
+ /** Decompress, parse, and validate a DB from an explicit file path. */
24
+ export function loadSymbolDbFromFile(path) {
25
+ const raw = JSON.parse(gunzipSync(readFileSync(path)).toString("utf-8"));
26
+ return parseSymbolDb(raw);
27
+ }
28
+ /** Load (and cache) the committed symbol DB for a version label. */
29
+ export function loadSymbolDb(label) {
30
+ const cached = cache.get(label);
31
+ if (cached)
32
+ return cached;
33
+ const path = dbPath(label);
34
+ if (!existsSync(path)) {
35
+ throw new Error(`No symbol database for Godot ${label}. Expected ${path}. ` +
36
+ `Available: ${availableVersions().join(", ") || "none"}.`);
37
+ }
38
+ const db = loadSymbolDbFromFile(path);
39
+ cache.set(label, db);
40
+ return db;
41
+ }
42
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/symbols/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAC;AAE3D,yEAAyE;AACzE,uEAAuE;AACvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAElF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;AAE1C,iFAAiF;AACjF,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,IAAI,CAAC,OAAO,EAAE,SAAS,KAAK,kBAAkB,CAAC,CAAC;AACzD,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,iBAAiB;IAC/B,OAAO,qBAAqB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAC1D,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAY,CAAC;IACpF,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,gCAAgC,KAAK,cAAc,IAAI,IAAI;YACzD,cAAc,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAC5D,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACtC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,89 @@
1
+ import type { Method, Property, Signal, SymbolDb, UtilityFunction } from "./schema.js";
2
+ export declare function formatMethod(m: Method, owner?: string): string;
3
+ export declare function formatSignal(s: Signal, owner?: string): string;
4
+ export declare function formatProperty(p: Property, owner?: string): string;
5
+ export declare function formatUtility(u: UtilityFunction): string;
6
+ export type SymbolKind = "class" | "method" | "property" | "signal" | "enum" | "constant" | "builtin_class" | "builtin_method" | "utility_function" | "singleton" | "global_enum";
7
+ export interface SymbolMatch {
8
+ kind: SymbolKind;
9
+ name: string;
10
+ /** Owning class/builtin, or null for top-level symbols. */
11
+ owner: string | null;
12
+ signature: string;
13
+ }
14
+ export interface LookupResult {
15
+ query: string;
16
+ matches: SymbolMatch[];
17
+ suggestions?: {
18
+ name: string;
19
+ kind: SymbolKind;
20
+ owner: string | null;
21
+ distance: number;
22
+ }[];
23
+ }
24
+ /**
25
+ * Look up a symbol by name. Supports "Owner.member" qualified queries. Falls
26
+ * back to closest-match suggestions when nothing matches exactly.
27
+ */
28
+ export declare function lookupSymbol(db: SymbolDb, query: string, opts?: {
29
+ kind?: SymbolKind;
30
+ }): LookupResult;
31
+ export interface ClassSummary {
32
+ name: string;
33
+ inherits: string | null;
34
+ apiType: string;
35
+ isRefcounted: boolean;
36
+ isInstantiable: boolean;
37
+ inheritanceChain: string[];
38
+ methods: string[];
39
+ properties: string[];
40
+ signals: string[];
41
+ enums: string[];
42
+ constants: string[];
43
+ }
44
+ export declare function classSummary(db: SymbolDb, className: string): ClassSummary | undefined;
45
+ export interface MemberDiff {
46
+ added: string[];
47
+ removed: string[];
48
+ changed: {
49
+ name: string;
50
+ old: string;
51
+ new: string;
52
+ }[];
53
+ }
54
+ export interface ClassDiff {
55
+ class: string;
56
+ presence: {
57
+ fromLabel: string;
58
+ toLabel: string;
59
+ inFrom: boolean;
60
+ inTo: boolean;
61
+ };
62
+ methods: MemberDiff;
63
+ properties: MemberDiff;
64
+ signals: MemberDiff;
65
+ enums: MemberDiff;
66
+ constants: MemberDiff;
67
+ identical: boolean;
68
+ }
69
+ export declare function diffClass(from: SymbolDb, to: SymbolDb, className: string): ClassDiff;
70
+ export interface SymbolDiffEntry {
71
+ owner: string | null;
72
+ kind: SymbolKind;
73
+ name: string;
74
+ fromSignature: string | null;
75
+ toSignature: string | null;
76
+ status: "added" | "removed" | "changed" | "unchanged";
77
+ }
78
+ export interface SymbolDiff {
79
+ query: string;
80
+ fromLabel: string;
81
+ toLabel: string;
82
+ entries: SymbolDiffEntry[];
83
+ }
84
+ /**
85
+ * Diff a bare or qualified symbol name across versions. For a class name, use
86
+ * diffClass instead; this handles members (methods/properties/signals) found in
87
+ * either version, matched by owner+name.
88
+ */
89
+ export declare function diffSymbol(from: SymbolDb, to: SymbolDb, query: string): SymbolDiff;
@@ -0,0 +1,271 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Signature formatting
3
+ // ---------------------------------------------------------------------------
4
+ function fmtArgs(args) {
5
+ return args
6
+ .map((a) => `${a.type} ${a.name}${a.default !== undefined ? ` = ${a.default}` : ""}`)
7
+ .join(", ");
8
+ }
9
+ export function formatMethod(m, owner) {
10
+ const flags = [m.isStatic && "static", m.isConst && "const", m.isVirtual && "virtual"]
11
+ .filter(Boolean)
12
+ .join(" ");
13
+ const prefix = flags ? `${flags} ` : "";
14
+ const vararg = m.isVararg ? (m.args.length ? ", ..." : "...") : "";
15
+ const q = owner ? `${owner}.` : "";
16
+ return `${prefix}${q}${m.name}(${fmtArgs(m.args)}${vararg}) -> ${m.ret ?? "void"}`;
17
+ }
18
+ export function formatSignal(s, owner) {
19
+ return `signal ${owner ? `${owner}.` : ""}${s.name}(${fmtArgs(s.args)})`;
20
+ }
21
+ export function formatProperty(p, owner) {
22
+ const acc = [p.getter && `get=${p.getter}`, p.setter && `set=${p.setter}`]
23
+ .filter(Boolean)
24
+ .join(" ");
25
+ return `${p.type} ${owner ? `${owner}.` : ""}${p.name}${acc ? ` [${acc}]` : ""}`;
26
+ }
27
+ export function formatUtility(u) {
28
+ const vararg = u.isVararg ? (u.args.length ? ", ..." : "...") : "";
29
+ return `${u.name}(${fmtArgs(u.args)}${vararg}) -> ${u.ret ?? "void"} # ${u.category}`;
30
+ }
31
+ function formatEnum(e, owner) {
32
+ const kind = e.isBitfield ? "bitfield" : "enum";
33
+ const vals = e.values.map((v) => `${v.name} = ${v.value}`).join(", ");
34
+ return `${kind} ${owner ? `${owner}.` : ""}${e.name} { ${vals} }`;
35
+ }
36
+ const indexCache = new WeakMap();
37
+ function buildIndex(db) {
38
+ const cached = indexCache.get(db);
39
+ if (cached)
40
+ return cached;
41
+ const entries = [];
42
+ for (const [name, c] of Object.entries(db.classes)) {
43
+ entries.push({
44
+ kind: "class",
45
+ name,
46
+ owner: null,
47
+ signature: `class ${name}${c.inherits ? ` extends ${c.inherits}` : ""}`,
48
+ detail: { inherits: c.inherits, apiType: c.apiType },
49
+ });
50
+ for (const m of c.methods)
51
+ entries.push({ kind: "method", name: m.name, owner: name, signature: formatMethod(m, name), detail: m });
52
+ for (const p of c.properties)
53
+ entries.push({ kind: "property", name: p.name, owner: name, signature: formatProperty(p, name), detail: p });
54
+ for (const s of c.signals)
55
+ entries.push({ kind: "signal", name: s.name, owner: name, signature: formatSignal(s, name), detail: s });
56
+ for (const e of c.enums)
57
+ entries.push({ kind: "enum", name: e.name, owner: name, signature: formatEnum(e, name), detail: e });
58
+ for (const k of c.constants)
59
+ entries.push({ kind: "constant", name: k.name, owner: name, signature: `const ${name}.${k.name} = ${k.value}`, detail: k });
60
+ }
61
+ for (const [name, b] of Object.entries(db.builtinClasses)) {
62
+ entries.push({ kind: "builtin_class", name, owner: null, signature: `builtin ${name}`, detail: { members: b.members } });
63
+ for (const m of b.methods)
64
+ entries.push({ kind: "builtin_method", name: m.name, owner: name, signature: formatMethod(m, name), detail: m });
65
+ }
66
+ for (const u of db.utilityFunctions)
67
+ entries.push({ kind: "utility_function", name: u.name, owner: null, signature: formatUtility(u), detail: u });
68
+ for (const s of db.singletons)
69
+ entries.push({ kind: "singleton", name: s.name, owner: null, signature: `singleton ${s.name}: ${s.type}`, detail: s });
70
+ for (const e of db.globalEnums)
71
+ entries.push({ kind: "global_enum", name: e.name, owner: null, signature: formatEnum(e), detail: e });
72
+ indexCache.set(db, entries);
73
+ return entries;
74
+ }
75
+ function levenshtein(a, b) {
76
+ const m = a.length;
77
+ const n = b.length;
78
+ if (m === 0)
79
+ return n;
80
+ if (n === 0)
81
+ return m;
82
+ let prev = Array.from({ length: n + 1 }, (_, i) => i);
83
+ let curr = new Array(n + 1);
84
+ for (let i = 1; i <= m; i++) {
85
+ curr[0] = i;
86
+ for (let j = 1; j <= n; j++) {
87
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
88
+ curr[j] = Math.min(prev[j] + 1, curr[j - 1] + 1, prev[j - 1] + cost);
89
+ }
90
+ [prev, curr] = [curr, prev];
91
+ }
92
+ return prev[n];
93
+ }
94
+ function toMatch(e) {
95
+ return { kind: e.kind, name: e.name, owner: e.owner, signature: e.signature, detail: e.detail };
96
+ }
97
+ /**
98
+ * Look up a symbol by name. Supports "Owner.member" qualified queries. Falls
99
+ * back to closest-match suggestions when nothing matches exactly.
100
+ */
101
+ export function lookupSymbol(db, query, opts = {}) {
102
+ const index = buildIndex(db);
103
+ const dot = query.indexOf(".");
104
+ let candidates;
105
+ if (dot > 0) {
106
+ const owner = query.slice(0, dot);
107
+ const member = query.slice(dot + 1);
108
+ candidates = index.filter((e) => e.owner !== null && e.owner === owner && e.name === member);
109
+ if (candidates.length === 0) {
110
+ const ownerLc = owner.toLowerCase();
111
+ const memberLc = member.toLowerCase();
112
+ candidates = index.filter((e) => e.owner?.toLowerCase() === ownerLc && e.name.toLowerCase() === memberLc);
113
+ }
114
+ }
115
+ else {
116
+ candidates = index.filter((e) => e.name === query);
117
+ if (candidates.length === 0) {
118
+ const lc = query.toLowerCase();
119
+ candidates = index.filter((e) => e.name.toLowerCase() === lc);
120
+ }
121
+ }
122
+ if (opts.kind)
123
+ candidates = candidates.filter((e) => e.kind === opts.kind);
124
+ if (candidates.length > 0) {
125
+ return { query, matches: candidates.map(toMatch) };
126
+ }
127
+ // Fuzzy fallback on the last path segment.
128
+ const needle = (dot > 0 ? query.slice(dot + 1) : query).toLowerCase();
129
+ const scored = index
130
+ .map((e) => ({ e, d: levenshtein(needle, e.name.toLowerCase()) }))
131
+ .filter(({ d, e }) => d <= Math.max(2, Math.floor(e.name.length / 3)))
132
+ .sort((x, y) => x.d - y.d);
133
+ const seen = new Set();
134
+ const suggestions = [];
135
+ for (const { e, d } of scored) {
136
+ const key = `${e.owner ?? ""}.${e.name}.${e.kind}`;
137
+ if (seen.has(key))
138
+ continue;
139
+ seen.add(key);
140
+ suggestions.push({ name: e.name, kind: e.kind, owner: e.owner, distance: d });
141
+ if (suggestions.length >= 8)
142
+ break;
143
+ }
144
+ return { query, matches: [], suggestions };
145
+ }
146
+ // ---------------------------------------------------------------------------
147
+ // Class summary
148
+ // ---------------------------------------------------------------------------
149
+ function findClass(db, name) {
150
+ if (db.classes[name])
151
+ return { name, def: db.classes[name] };
152
+ const lc = name.toLowerCase();
153
+ const key = Object.keys(db.classes).find((k) => k.toLowerCase() === lc);
154
+ return key ? { name: key, def: db.classes[key] } : undefined;
155
+ }
156
+ export function classSummary(db, className) {
157
+ const found = findClass(db, className);
158
+ if (!found)
159
+ return undefined;
160
+ const { name, def } = found;
161
+ const chain = [];
162
+ let parent = def.inherits;
163
+ const guard = new Set();
164
+ while (parent && !guard.has(parent)) {
165
+ guard.add(parent);
166
+ chain.push(parent);
167
+ parent = db.classes[parent]?.inherits ?? null;
168
+ }
169
+ return {
170
+ name,
171
+ inherits: def.inherits,
172
+ apiType: def.apiType,
173
+ isRefcounted: def.isRefcounted ?? false,
174
+ isInstantiable: def.isInstantiable ?? false,
175
+ inheritanceChain: chain,
176
+ methods: def.methods.map((m) => formatMethod(m)),
177
+ properties: def.properties.map((p) => formatProperty(p)),
178
+ signals: def.signals.map((s) => formatSignal(s)),
179
+ enums: def.enums.map((e) => formatEnum(e)),
180
+ constants: def.constants.map((k) => `${k.name} = ${k.value}`),
181
+ };
182
+ }
183
+ function diffMembers(aList, bList, keyOf, sigOf) {
184
+ const a = new Map(aList.map((t) => [keyOf(t), t]));
185
+ const b = new Map(bList.map((t) => [keyOf(t), t]));
186
+ const added = [];
187
+ const removed = [];
188
+ const changed = [];
189
+ for (const [k, tb] of b)
190
+ if (!a.has(k))
191
+ added.push(sigOf(tb));
192
+ for (const [k, ta] of a) {
193
+ const tb = b.get(k);
194
+ if (!tb) {
195
+ removed.push(sigOf(ta));
196
+ continue;
197
+ }
198
+ const oldSig = sigOf(ta);
199
+ const newSig = sigOf(tb);
200
+ if (oldSig !== newSig)
201
+ changed.push({ name: k, old: oldSig, new: newSig });
202
+ }
203
+ return { added, removed, changed };
204
+ }
205
+ function isEmptyDiff(d) {
206
+ return d.added.length === 0 && d.removed.length === 0 && d.changed.length === 0;
207
+ }
208
+ export function diffClass(from, to, className) {
209
+ const a = findClass(from, className);
210
+ const b = findClass(to, className);
211
+ const name = a?.name ?? b?.name ?? className;
212
+ const ad = a?.def;
213
+ const bd = b?.def;
214
+ const methods = diffMembers(ad?.methods ?? [], bd?.methods ?? [], (m) => m.name, (m) => formatMethod(m));
215
+ const properties = diffMembers(ad?.properties ?? [], bd?.properties ?? [], (p) => p.name, (p) => formatProperty(p));
216
+ const signals = diffMembers(ad?.signals ?? [], bd?.signals ?? [], (s) => s.name, (s) => formatSignal(s));
217
+ const enums = diffMembers(ad?.enums ?? [], bd?.enums ?? [], (e) => e.name, (e) => formatEnum(e));
218
+ const constants = diffMembers(ad?.constants ?? [], bd?.constants ?? [], (k) => k.name, (k) => `${k.name} = ${k.value}`);
219
+ return {
220
+ class: name,
221
+ presence: {
222
+ fromLabel: from.meta.versionLabel,
223
+ toLabel: to.meta.versionLabel,
224
+ inFrom: Boolean(ad),
225
+ inTo: Boolean(bd),
226
+ },
227
+ methods,
228
+ properties,
229
+ signals,
230
+ enums,
231
+ constants,
232
+ identical: Boolean(ad) &&
233
+ Boolean(bd) &&
234
+ [methods, properties, signals, enums, constants].every(isEmptyDiff),
235
+ };
236
+ }
237
+ function status(from, to) {
238
+ if (from === null)
239
+ return "added";
240
+ if (to === null)
241
+ return "removed";
242
+ return from === to ? "unchanged" : "changed";
243
+ }
244
+ /**
245
+ * Diff a bare or qualified symbol name across versions. For a class name, use
246
+ * diffClass instead; this handles members (methods/properties/signals) found in
247
+ * either version, matched by owner+name.
248
+ */
249
+ export function diffSymbol(from, to, query) {
250
+ const fromMatches = lookupSymbol(from, query).matches;
251
+ const toMatches = lookupSymbol(to, query).matches;
252
+ const byKey = new Map();
253
+ const key = (m) => `${m.owner ?? ""}::${m.kind}::${m.name}`;
254
+ for (const m of fromMatches)
255
+ byKey.set(key(m), { owner: m.owner, kind: m.kind, name: m.name, from: m.signature });
256
+ for (const m of toMatches) {
257
+ const e = byKey.get(key(m)) ?? { owner: m.owner, kind: m.kind, name: m.name };
258
+ e.to = m.signature;
259
+ byKey.set(key(m), e);
260
+ }
261
+ const entries = [...byKey.values()].map((e) => ({
262
+ owner: e.owner,
263
+ kind: e.kind,
264
+ name: e.name,
265
+ fromSignature: e.from ?? null,
266
+ toSignature: e.to ?? null,
267
+ status: status(e.from ?? null, e.to ?? null),
268
+ }));
269
+ return { query, fromLabel: from.meta.versionLabel, toLabel: to.meta.versionLabel, entries };
270
+ }
271
+ //# sourceMappingURL=lookup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/symbols/lookup.ts"],"names":[],"mappings":"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"}