ucn 5.5.1 → 5.5.3

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 (97) hide show
  1. package/.claude/skills/ucn/SKILL.md +35 -9
  2. package/.claude/skills/ucn/references/commands.md +40 -18
  3. package/.claude/skills/ucn/references/resolution-rules.md +126 -20
  4. package/.claude/skills/ucn/references/trust-contract.md +5 -3
  5. package/README.md +32 -21
  6. package/cli/index.js +2 -1
  7. package/core/accessors.js +341 -54
  8. package/core/account.js +74 -20
  9. package/core/analysis.js +257 -125
  10. package/core/ast-analysis.js +12 -3
  11. package/core/bridge.js +15 -65
  12. package/core/brief.js +8 -4
  13. package/core/build-worker.js +2 -1
  14. package/core/cache.js +137 -6
  15. package/core/call-name-cache.js +134 -0
  16. package/core/callable-scope.js +21 -0
  17. package/core/callers.js +4726 -940
  18. package/core/check.js +22 -5
  19. package/core/class-identity.js +399 -12
  20. package/core/client-receivers.js +189 -0
  21. package/core/constructor-calls.js +831 -0
  22. package/core/constructor-hierarchy.js +147 -0
  23. package/core/constructor-protocol.js +196 -0
  24. package/core/contract-membership.js +346 -140
  25. package/core/cpp-conversion-constraints.js +123 -0
  26. package/core/cpp-conversion-syntax.js +216 -0
  27. package/core/cpp-conversions.js +414 -0
  28. package/core/cpp-scope.js +245 -44
  29. package/core/deadcode.js +61 -16
  30. package/core/decorator-binding.js +137 -3
  31. package/core/enum-reference-syntax.js +134 -0
  32. package/core/execute.js +17 -1
  33. package/core/external-macros.js +42 -10
  34. package/core/go-packages.js +171 -0
  35. package/core/graph-build.js +2 -0
  36. package/core/graph.js +75 -59
  37. package/core/ignore-rules.js +2 -1
  38. package/core/imports.js +145 -19
  39. package/core/index-ir.js +41 -4
  40. package/core/inprocess-clients.js +41 -15
  41. package/core/ir.js +27 -6
  42. package/core/macro-expansion.js +38 -2
  43. package/core/out-of-class-members.js +182 -0
  44. package/core/output/analysis-ext.js +4 -2
  45. package/core/output/analysis.js +89 -20
  46. package/core/output/graph.js +12 -3
  47. package/core/output/lines.js +4 -3
  48. package/core/output/public.js +2 -0
  49. package/core/output/reporting.js +12 -1
  50. package/core/output/shared.js +2 -0
  51. package/core/output/tracing.js +28 -22
  52. package/core/output-budget.js +2 -2
  53. package/core/parallel-build.js +52 -1
  54. package/core/project.js +217 -112
  55. package/core/provenance-constructor-base.js +161 -0
  56. package/core/provenance-facts.js +257 -27
  57. package/core/provenance-overload.js +458 -54
  58. package/core/provenance-type.js +487 -0
  59. package/core/provenance.js +234 -15
  60. package/core/public-command.js +17 -2
  61. package/core/query-bodies.js +159 -0
  62. package/core/reflection.js +270 -2
  63. package/core/rename-token-syntax.js +111 -0
  64. package/core/reporting.js +13 -7
  65. package/core/request-helpers.js +63 -7
  66. package/core/rust-macro-expansion.js +151 -19
  67. package/core/rust-modules.js +1 -1
  68. package/core/rust-names.js +607 -0
  69. package/core/search.js +70 -17
  70. package/core/shared.js +98 -1
  71. package/core/source-memo.js +201 -0
  72. package/core/text-usage-syntax.js +38 -0
  73. package/core/tracing.js +7 -1
  74. package/core/type-denotation.js +124 -37
  75. package/core/type-references.js +615 -246
  76. package/core/value-references.js +2777 -0
  77. package/core/verify.js +1097 -281
  78. package/languages/adapter.js +28 -4
  79. package/languages/c-family.js +1118 -164
  80. package/languages/constructor-bases.js +105 -0
  81. package/languages/cpp-platform.js +26 -0
  82. package/languages/cpp-site-syntax.js +83 -0
  83. package/languages/csharp-scope.js +439 -0
  84. package/languages/csharp.js +428 -68
  85. package/languages/go.js +385 -207
  86. package/languages/html.js +4 -2
  87. package/languages/index.js +397 -2
  88. package/languages/java-platform.js +226 -0
  89. package/languages/java-unicode.js +269 -0
  90. package/languages/java.js +461 -117
  91. package/languages/javascript.js +418 -66
  92. package/languages/lexical-scope.js +190 -23
  93. package/languages/python.js +404 -54
  94. package/languages/rust.js +510 -82
  95. package/languages/utils.js +67 -8
  96. package/mcp/server.js +8 -2
  97. package/package.json +3 -3
@@ -13,6 +13,7 @@ const REQUIRED_ADAPTER_OPERATIONS = Object.freeze([
13
13
  ]);
14
14
 
15
15
  const OPTIONAL_HELPERS = Object.freeze([
16
+ 'annotatedReceiverType',
16
17
  'findFunctions',
17
18
  'findClasses',
18
19
  'findStateObjects',
@@ -27,13 +28,18 @@ const OPTIONAL_HELPERS = Object.freeze([
27
28
  'findTestCallRanges',
28
29
  'getBuiltinCallReturnType',
29
30
  'getBuiltinFieldType',
31
+ 'getPrimitiveTypeInfo',
32
+ 'getDerefTypeInfo',
30
33
  'findPytestFunctions',
31
34
  'findPythonModuleEvidence',
32
35
  'findScopeAlternativeBindings',
33
36
  'isPlatformConcreteCall',
34
37
  'isPlatformConcreteType',
38
+ 'selectorReceiverIsLocal',
35
39
  'queryTree',
36
40
  'queryTreeIsPlain',
41
+ 'queryUsingDirectives',
42
+ 'implicitBaseCallsOf',
37
43
  ]);
38
44
 
39
45
  function adapterCapabilities(languageModule) {
@@ -87,10 +93,17 @@ function createLanguageAdapter(config) {
87
93
  return languageModule.findExportsInCode(code, parser);
88
94
  },
89
95
  findUsages(code, name, parser, tree, options) {
90
- // Only the lexical-scope request (fix #392) reaches the parser;
91
- // other query options keep the adapter's historical behavior.
92
- return options?.lexicalScopes
93
- ? languageModule.findUsagesInCode(code, name, parser, tree, { lexicalScopes: true })
96
+ // Account callers have already classified indexed call records.
97
+ // Only parsers of call-shaped macros recover calls here. Kind-only
98
+ // scans are a separate opt-in; other parsers keep their usual path.
99
+ const skipCallRecovery = options?.skipCallRecovery && config.traits?.macroInvocationSyntax === 'call';
100
+ const usageKindsOnly = options?.usageKindsOnly && !options.lexicalScopes && config.traits?.usageKindsOnly;
101
+ return options?.lexicalScopes || skipCallRecovery || usageKindsOnly
102
+ ? languageModule.findUsagesInCode(code, name, parser, tree, {
103
+ ...(options.lexicalScopes && { lexicalScopes: true }),
104
+ ...(skipCallRecovery && { skipCallRecovery: true }),
105
+ ...(usageKindsOnly && { usageKindsOnly: true }),
106
+ })
94
107
  : languageModule.findUsagesInCode(code, name, parser, tree);
95
108
  },
96
109
  getEntryPointKind(symbol) {
@@ -105,6 +118,7 @@ function createLanguageAdapter(config) {
105
118
  // may release analysis-only trees as soon as those records have
106
119
  // been extracted. Direct parser/query calls omit this option and
107
120
  // retain their bounded cross-operation cache.
121
+ require('./index').captureLiteralParse(parser, code);
108
122
  const parsed = languageModule.parse(code, parser, {
109
123
  releaseAnalysisTree: true,
110
124
  // Macro definitions the file's include closure supplies
@@ -141,6 +155,16 @@ function createLanguageAdapter(config) {
141
155
  const sites = reflectionSitesInTree(analysisTree, config.name, code);
142
156
  if (sites.length > 0) parsed.reflectionSites = sites;
143
157
  }
158
+ // Computed dispatch sites (`handlers[name]()`) of the literal
159
+ // parse the doctor's blind-spot inventory reads (fix #436): a
160
+ // query reads them from the index instead of parsing every file.
161
+ const literalTree = require('./index').takeLiteralParse();
162
+ if (!Array.isArray(parsed.computedDispatchSites)) {
163
+ const { safeParse } = require('./index');
164
+ const { computedDispatchSites } = require('../core/ast-analysis');
165
+ const tree = literalTree || (parser ? safeParse(parser, code) : null);
166
+ parsed.computedDispatchSites = tree ? computedDispatchSites(code, config.name, tree) : [];
167
+ }
144
168
  return createFileIR({
145
169
  language: config.name,
146
170
  file,