cgraphx 1.1.0 → 1.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.
- package/README.md +0 -1
- package/dist/.claude-template/hooks/precommit-check/precommit-check.cjs +90 -0
- package/dist/.claude-template/skills/cgraphx/SKILL.md +3 -3
- package/dist/.claude-template/skills/cgraphx/agent-prompt.md +1 -1
- package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +94 -0
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +424 -0
- package/dist/.claude-template/skills/clarify-requirements/SKILL.md +19 -8
- package/dist/.claude-template/skills/code-impact-docgen/SKILL.md +186 -176
- package/dist/.claude-template/skills/code-impact-docgen/template-design-html.md +357 -0
- package/dist/.claude-template/skills/code-impact-docgen/template-design-md.md +164 -0
- package/dist/.claude-template/skills/code-impact-init/SKILL.md +47 -47
- package/dist/.claude-template/skills/developer-timeline/SKILL.md +9 -0
- package/dist/.claude-template/skills/precommit-review/SKILL.md +50 -0
- package/dist/.claude-template/skills/run-api-test/SKILL.md +187 -0
- package/dist/.claude-template/skills/run-api-test/assets/template-test-report.md +103 -0
- package/dist/.claude-template/skills/run-api-test/assets/template-test-verify.jsonl +5 -0
- package/dist/.claude-template/skills/run-api-test/references/bru-run.md +60 -0
- package/dist/.claude-template/skills/run-api-test/references/db-verification.md +81 -0
- package/dist/.claude-template/skills/run-api-test/references/report-format.md +104 -0
- package/dist/.claude-template/skills/run-api-test/references/service-readiness.md +61 -0
- package/dist/.claude-template/skills/run-api-test/references/test-scope.md +64 -0
- package/dist/.claude-template/skills/write-api/SKILL.md +150 -0
- package/dist/.claude-template/skills/write-api/assets/template-api-spec.md +112 -0
- package/dist/.claude-template/skills/write-api/assets/template-request.bru +75 -0
- package/dist/.claude-template/skills/write-api/references/ai-prompts.md +133 -0
- package/dist/.claude-template/skills/write-api/references/api-spec-format.md +108 -0
- package/dist/.claude-template/skills/write-api/references/bru-format.md +144 -0
- package/dist/.claude-template/skills/write-api/references/collection-layout.md +81 -0
- package/dist/.claude-template/skills/write-api/references/environment-setup.md +105 -0
- package/dist/.claude-template/skills/write-api/references/interface-scope.md +74 -0
- package/dist/.claude-template/skills/write-api-doc/SKILL.md +317 -0
- package/dist/.claude-template/skills/write-api-doc/template-api-html.md +422 -0
- package/dist/.claude-template/skills/write-plan/SKILL.md +38 -16
- package/dist/.claude-template/skills/write-prd/SKILL.md +32 -8
- package/dist/.claude-template/skills/write-spec/SKILL.md +34 -9
- package/dist/api-test/ai-fields.d.ts +37 -0
- package/dist/api-test/ai-fields.d.ts.map +1 -0
- package/dist/api-test/ai-fields.js +114 -0
- package/dist/api-test/ai-fields.js.map +1 -0
- package/dist/api-test/assemble.d.ts +76 -0
- package/dist/api-test/assemble.d.ts.map +1 -0
- package/dist/api-test/assemble.js +185 -0
- package/dist/api-test/assemble.js.map +1 -0
- package/dist/api-test/bru-cli-invoker.d.ts +72 -0
- package/dist/api-test/bru-cli-invoker.d.ts.map +1 -0
- package/dist/api-test/bru-cli-invoker.js +169 -0
- package/dist/api-test/bru-cli-invoker.js.map +1 -0
- package/dist/api-test/bru-report-parser.d.ts +24 -0
- package/dist/api-test/bru-report-parser.d.ts.map +1 -0
- package/dist/api-test/bru-report-parser.js +110 -0
- package/dist/api-test/bru-report-parser.js.map +1 -0
- package/dist/api-test/bru-runner.d.ts +101 -0
- package/dist/api-test/bru-runner.d.ts.map +1 -0
- package/dist/api-test/bru-runner.js +316 -0
- package/dist/api-test/bru-runner.js.map +1 -0
- package/dist/api-test/bru-writer.d.ts +52 -0
- package/dist/api-test/bru-writer.d.ts.map +1 -0
- package/dist/api-test/bru-writer.js +159 -0
- package/dist/api-test/bru-writer.js.map +1 -0
- package/dist/api-test/call-chain-extractor.d.ts +80 -0
- package/dist/api-test/call-chain-extractor.d.ts.map +1 -0
- package/dist/api-test/call-chain-extractor.js +179 -0
- package/dist/api-test/call-chain-extractor.js.map +1 -0
- package/dist/api-test/cli.d.ts +133 -0
- package/dist/api-test/cli.d.ts.map +1 -0
- package/dist/api-test/cli.js +1009 -0
- package/dist/api-test/cli.js.map +1 -0
- package/dist/api-test/config.d.ts +75 -0
- package/dist/api-test/config.d.ts.map +1 -0
- package/dist/api-test/config.js +406 -0
- package/dist/api-test/config.js.map +1 -0
- package/dist/api-test/db-query-cli.d.ts +51 -0
- package/dist/api-test/db-query-cli.d.ts.map +1 -0
- package/dist/api-test/db-query-cli.js +119 -0
- package/dist/api-test/db-query-cli.js.map +1 -0
- package/dist/api-test/enhance-prepare.d.ts +111 -0
- package/dist/api-test/enhance-prepare.d.ts.map +1 -0
- package/dist/api-test/enhance-prepare.js +425 -0
- package/dist/api-test/enhance-prepare.js.map +1 -0
- package/dist/api-test/enhance-write.d.ts +28 -0
- package/dist/api-test/enhance-write.d.ts.map +1 -0
- package/dist/api-test/enhance-write.js +145 -0
- package/dist/api-test/enhance-write.js.map +1 -0
- package/dist/api-test/errors.d.ts +48 -0
- package/dist/api-test/errors.d.ts.map +1 -0
- package/dist/api-test/errors.js +76 -0
- package/dist/api-test/errors.js.map +1 -0
- package/dist/api-test/field-extractor.d.ts +98 -0
- package/dist/api-test/field-extractor.d.ts.map +1 -0
- package/dist/api-test/field-extractor.js +327 -0
- package/dist/api-test/field-extractor.js.map +1 -0
- package/dist/api-test/impl-finder.d.ts +37 -0
- package/dist/api-test/impl-finder.d.ts.map +1 -0
- package/dist/api-test/impl-finder.js +54 -0
- package/dist/api-test/impl-finder.js.map +1 -0
- package/dist/api-test/index.d.ts +41 -0
- package/dist/api-test/index.d.ts.map +1 -0
- package/dist/api-test/index.js +124 -0
- package/dist/api-test/index.js.map +1 -0
- package/dist/api-test/java-parser.d.ts +89 -0
- package/dist/api-test/java-parser.d.ts.map +1 -0
- package/dist/api-test/java-parser.js +508 -0
- package/dist/api-test/java-parser.js.map +1 -0
- package/dist/api-test/md-writer.d.ts +49 -0
- package/dist/api-test/md-writer.d.ts.map +1 -0
- package/dist/api-test/md-writer.js +202 -0
- package/dist/api-test/md-writer.js.map +1 -0
- package/dist/api-test/parser-httpservice.d.ts +91 -0
- package/dist/api-test/parser-httpservice.d.ts.map +1 -0
- package/dist/api-test/parser-httpservice.js +271 -0
- package/dist/api-test/parser-httpservice.js.map +1 -0
- package/dist/api-test/report.d.ts +188 -0
- package/dist/api-test/report.d.ts.map +1 -0
- package/dist/api-test/report.js +522 -0
- package/dist/api-test/report.js.map +1 -0
- package/dist/api-test/snapshot.d.ts +26 -0
- package/dist/api-test/snapshot.d.ts.map +1 -0
- package/dist/api-test/snapshot.js +150 -0
- package/dist/api-test/snapshot.js.map +1 -0
- package/dist/api-test/test-history.d.ts +48 -0
- package/dist/api-test/test-history.d.ts.map +1 -0
- package/dist/api-test/test-history.js +122 -0
- package/dist/api-test/test-history.js.map +1 -0
- package/dist/api-test/types.d.ts +174 -0
- package/dist/api-test/types.d.ts.map +1 -0
- package/dist/api-test/types.js +13 -0
- package/dist/api-test/types.js.map +1 -0
- package/dist/api-test/verify-prepare.d.ts +30 -0
- package/dist/api-test/verify-prepare.d.ts.map +1 -0
- package/dist/api-test/verify-prepare.js +150 -0
- package/dist/api-test/verify-prepare.js.map +1 -0
- package/dist/api-test/verify-write.d.ts +31 -0
- package/dist/api-test/verify-write.d.ts.map +1 -0
- package/dist/api-test/verify-write.js +159 -0
- package/dist/api-test/verify-write.js.map +1 -0
- package/dist/bin/codegraph.js +0 -100
- package/dist/bin/codegraph.js.map +1 -1
- package/dist/dbquery/dump-schema.d.ts +46 -0
- package/dist/dbquery/dump-schema.d.ts.map +1 -0
- package/dist/dbquery/dump-schema.js +379 -0
- package/dist/dbquery/dump-schema.js.map +1 -0
- package/dist/installer/targets/claude.d.ts +15 -0
- package/dist/installer/targets/claude.d.ts.map +1 -1
- package/dist/installer/targets/claude.js +53 -0
- package/dist/installer/targets/claude.js.map +1 -1
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +13 -0
- package/dist/resolution/index.js.map +1 -1
- package/dist/resolution/scope-index.d.ts +86 -0
- package/dist/resolution/scope-index.d.ts.map +1 -0
- package/dist/resolution/scope-index.js +143 -0
- package/dist/resolution/scope-index.js.map +1 -0
- package/dist/resolution/stdlib-blocklist.d.ts +53 -0
- package/dist/resolution/stdlib-blocklist.d.ts.map +1 -0
- package/dist/resolution/stdlib-blocklist.js +143 -0
- package/dist/resolution/stdlib-blocklist.js.map +1 -0
- package/dist/search/ast-helpers.d.ts +42 -0
- package/dist/search/ast-helpers.d.ts.map +1 -0
- package/dist/search/ast-helpers.js +106 -0
- package/dist/search/ast-helpers.js.map +1 -0
- package/dist/search/call-sites.d.ts +398 -0
- package/dist/search/call-sites.d.ts.map +1 -0
- package/dist/search/call-sites.js +1433 -0
- package/dist/search/call-sites.js.map +1 -0
- package/dist/search/context.d.ts +134 -0
- package/dist/search/context.d.ts.map +1 -0
- package/dist/search/context.js +575 -0
- package/dist/search/context.js.map +1 -0
- package/dist/search/impact.d.ts +139 -0
- package/dist/search/impact.d.ts.map +1 -0
- package/dist/search/impact.js +646 -0
- package/dist/search/impact.js.map +1 -0
- package/dist/search/related.d.ts +178 -0
- package/dist/search/related.d.ts.map +1 -0
- package/dist/search/related.js +667 -0
- package/dist/search/related.js.map +1 -0
- package/dist/search/slice.d.ts +148 -0
- package/dist/search/slice.d.ts.map +1 -0
- package/dist/search/slice.js +460 -0
- package/dist/search/slice.js.map +1 -0
- package/dist/search/snr-constants.d.ts +41 -0
- package/dist/search/snr-constants.d.ts.map +1 -0
- package/dist/search/snr-constants.js +44 -0
- package/dist/search/snr-constants.js.map +1 -0
- package/dist/search/types.d.ts +28 -0
- package/dist/search/types.d.ts.map +1 -0
- package/dist/search/types.js +12 -0
- package/dist/search/types.js.map +1 -0
- package/dist/timeline/cli.d.ts.map +1 -1
- package/dist/timeline/cli.js +22 -3
- package/dist/timeline/cli.js.map +1 -1
- package/dist/timeline/store.d.ts +5 -0
- package/dist/timeline/store.d.ts.map +1 -1
- package/dist/timeline/store.js +23 -3
- package/dist/timeline/store.js.map +1 -1
- package/package.json +1 -1
- package/scripts/agent-eval/subagent-token-cost.py +188 -0
- package/dist/.claude-template/skills/code-impact-docgen/template-business-html.md +0 -242
- package/dist/.claude-template/skills/code-impact-docgen/template-business-md.md +0 -107
- package/dist/.claude-template/skills/code-impact-docgen/template-technical-html.md +0 -205
- package/dist/.claude-template/skills/code-impact-docgen/template-technical-md.md +0 -155
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"related.js","sourceRoot":"","sources":["../../src/search/related.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice — cross-cutting enumeration by criterion (annotation or interface/
|
|
3
|
+
* superclass). Returns all classes that match, grouped by sub-service.
|
|
4
|
+
*
|
|
5
|
+
* Two criteria (per clarify-requirements):
|
|
6
|
+
* - `slice '@Service'` — all classes annotated `@Service`
|
|
7
|
+
* - `slice '@RestController'` — all classes annotated `@RestController`
|
|
8
|
+
* - `slice 'IFoo'` — all classes that `implements IFoo`
|
|
9
|
+
* or `extends Foo`
|
|
10
|
+
*
|
|
11
|
+
* Grouping: matches are bucketed by sub-service, inferred from the file's
|
|
12
|
+
* path. For hx (multi-module monorepo), `so-service/so-busi/.../X.java`
|
|
13
|
+
* → sub-service = `so-service`. Single-module projects get one bucket.
|
|
14
|
+
*
|
|
15
|
+
* Output shape: header + per-sub-service section (each a flat list with
|
|
16
|
+
* file:line) + omitted summary.
|
|
17
|
+
*
|
|
18
|
+
* Isolation: lives under `src/search/`, imports nothing from the indexed
|
|
19
|
+
* pipeline. Reuses call-sites helpers (listJavaFamilyFiles, DEFAULT_EXCLUDE_DIRS).
|
|
20
|
+
*/
|
|
21
|
+
import type { Language } from '../types';
|
|
22
|
+
export type SliceCriterionKind = 'annotation' | 'extends-implements' | 'unknown';
|
|
23
|
+
export interface SliceOptions {
|
|
24
|
+
/** Max results per sub-service bucket. Default 30. */
|
|
25
|
+
topPerBucket?: number;
|
|
26
|
+
/** Max sub-services to surface. Default 10. */
|
|
27
|
+
maxBuckets?: number;
|
|
28
|
+
/** Languages to scan. Default ['java', 'kotlin']. */
|
|
29
|
+
languages?: Language[];
|
|
30
|
+
/** Directory globs to exclude. */
|
|
31
|
+
excludeDirs?: string[];
|
|
32
|
+
/**
|
|
33
|
+
* Filter by declaration kind. E.g., `'class'` excludes interfaces/enums/records
|
|
34
|
+
* (useful for `slice '@Service'` where Spring services are concrete classes).
|
|
35
|
+
* Default undefined = all kinds.
|
|
36
|
+
*/
|
|
37
|
+
kindFilter?: SliceMatch['kind'] | null;
|
|
38
|
+
/**
|
|
39
|
+
* Skip test files (*Test.java / *Tests.java / *Spec.java / *Specs.groovy /
|
|
40
|
+
* files under test/ directories). Useful for slice @RestController where
|
|
41
|
+
* test doubles shouldn't count as endpoints. Default false.
|
|
42
|
+
*/
|
|
43
|
+
noTests?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Scan method-level annotations (on `method_declaration` nodes) in addition
|
|
46
|
+
* to class-level ones. E.g., `slice '@Test' --method-level` returns all
|
|
47
|
+
* @Test-annotated methods. Default false — when omitted, behavior is
|
|
48
|
+
* byte-equal to the pre-method-level iteration.
|
|
49
|
+
*/
|
|
50
|
+
methodLevel?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface SliceMatch {
|
|
53
|
+
/** Class / interface / enum / record name. */
|
|
54
|
+
name: string;
|
|
55
|
+
/** Match kind (always one of class/interface/enum/record). */
|
|
56
|
+
kind: 'class' | 'interface' | 'enum' | 'record';
|
|
57
|
+
/** File path relative to projectRoot. */
|
|
58
|
+
filePath: string;
|
|
59
|
+
/** 1-based declaration line. */
|
|
60
|
+
line: number;
|
|
61
|
+
/** Sub-service bucket (derived from file path). */
|
|
62
|
+
subService: string;
|
|
63
|
+
/** Snippet of the class declaration (1-2 lines). */
|
|
64
|
+
snippet: string;
|
|
65
|
+
}
|
|
66
|
+
export interface SliceBucket {
|
|
67
|
+
/** Sub-service name (e.g., "so-service", "order-service", "src"). */
|
|
68
|
+
subService: string;
|
|
69
|
+
/** Total matches in this bucket (before topPerBucket cap). */
|
|
70
|
+
total: number;
|
|
71
|
+
/** Matches returned after cap. */
|
|
72
|
+
returned: number;
|
|
73
|
+
matches: SliceMatch[];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A method-level annotation match (from `--method-level`).
|
|
77
|
+
*
|
|
78
|
+
* Separate from `SliceMatch` (which is class/interface/enum/record shaped)
|
|
79
|
+
* because a method match carries both an enclosing class name and a method
|
|
80
|
+
* name — flattening them into a single `name` would lose the grouping the
|
|
81
|
+
* formatter needs (methods grouped under their class).
|
|
82
|
+
*/
|
|
83
|
+
export interface SliceMethodMatch {
|
|
84
|
+
/** Enclosing class/interface/enum/record name. `<unknown>` if unscoped. */
|
|
85
|
+
className: string;
|
|
86
|
+
/** Method name (tree-sitter `name` field). */
|
|
87
|
+
methodName: string;
|
|
88
|
+
/** File path relative to projectRoot. */
|
|
89
|
+
filePath: string;
|
|
90
|
+
/** 1-based declaration line. */
|
|
91
|
+
line: number;
|
|
92
|
+
/** Sub-service bucket (derived from file path). */
|
|
93
|
+
subService: string;
|
|
94
|
+
}
|
|
95
|
+
export interface SliceResult {
|
|
96
|
+
/** Original input. */
|
|
97
|
+
query: string;
|
|
98
|
+
/** Detected criterion kind. */
|
|
99
|
+
criterionKind: SliceCriterionKind;
|
|
100
|
+
/** Normalized criterion (e.g., `Service` extracted from `@Service`). */
|
|
101
|
+
criterionName: string;
|
|
102
|
+
/** Total matches found. */
|
|
103
|
+
totalFound: number;
|
|
104
|
+
/** Buckets actually returned (after maxBuckets cap). */
|
|
105
|
+
returned: number;
|
|
106
|
+
/** Per-sub-service buckets, sorted by total desc. */
|
|
107
|
+
buckets: SliceBucket[];
|
|
108
|
+
/**
|
|
109
|
+
* Method-level matches (from `--method-level`). Empty unless methodLevel
|
|
110
|
+
* was requested. Flat list — the formatter groups by sub-service then class.
|
|
111
|
+
*/
|
|
112
|
+
methodMatches?: SliceMethodMatch[];
|
|
113
|
+
/**
|
|
114
|
+
* True when the caller requested `--method-level` (regardless of whether any
|
|
115
|
+
* method matches were found). Drives the empty-state copy so that a
|
|
116
|
+
* `slice '@Test' --method-level` with zero hits steers the user back toward
|
|
117
|
+
* a class-level retry, while a plain `slice '@Service'` with zero hits keeps
|
|
118
|
+
* the original (byte-equal) message.
|
|
119
|
+
*/
|
|
120
|
+
methodLevelRequested?: boolean;
|
|
121
|
+
omitted: {
|
|
122
|
+
pastTopPerBucket: number;
|
|
123
|
+
pastMaxBuckets: number;
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export declare function searchSlice(projectRoot: string, query: string, options?: SliceOptions): Promise<SliceResult>;
|
|
127
|
+
/**
|
|
128
|
+
* Infer the sub-service / module name from the file's relative path.
|
|
129
|
+
*
|
|
130
|
+
* Strategies (first match wins):
|
|
131
|
+
* 1. `<root>/<sub>/<grandchild>/...` where `sub` looks like a service name
|
|
132
|
+
* (contains `-` or matches known service patterns) → `<sub>`
|
|
133
|
+
* 2. `<root>/<top-dir>/...` → `<top-dir>`
|
|
134
|
+
* 3. file directly under root → `(root)`
|
|
135
|
+
*
|
|
136
|
+
* For hx (`so-service/so-busi/.../X.java`): returns `so-service`.
|
|
137
|
+
* For a single-module project (`src/main/.../X.java`): returns `src`.
|
|
138
|
+
* For a flat project (`X.java` at root): returns `(root)`.
|
|
139
|
+
*/
|
|
140
|
+
export declare function inferSubService(relPath: string): string;
|
|
141
|
+
/**
|
|
142
|
+
* True if the file path looks like a test file. Catches the common Java/Kotlin
|
|
143
|
+
* conventions: `*Test.java`, `*Tests.java`, `*Spec.java`, `*Specs.groovy`,
|
|
144
|
+
* files under `src/test/`, `test/`, `__tests__/`.
|
|
145
|
+
*/
|
|
146
|
+
export declare function isTestFile(absoluteOrRelPath: string): boolean;
|
|
147
|
+
export declare function formatSliceResult(result: SliceResult): string;
|
|
148
|
+
//# sourceMappingURL=slice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slice.d.ts","sourceRoot":"","sources":["../../src/search/slice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAiBzC,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,oBAAoB,GAAG,SAAS,CAAC;AAEjF,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,aAAa,EAAE,kBAAkB,CAAC;IAClC,wEAAwE;IACxE,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB;;;OAGG;IACH,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACnC;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAMD,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAiMtB;AAwFD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAI7D;AAMD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAuG7D"}
|
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Slice — cross-cutting enumeration by criterion (annotation or interface/
|
|
4
|
+
* superclass). Returns all classes that match, grouped by sub-service.
|
|
5
|
+
*
|
|
6
|
+
* Two criteria (per clarify-requirements):
|
|
7
|
+
* - `slice '@Service'` — all classes annotated `@Service`
|
|
8
|
+
* - `slice '@RestController'` — all classes annotated `@RestController`
|
|
9
|
+
* - `slice 'IFoo'` — all classes that `implements IFoo`
|
|
10
|
+
* or `extends Foo`
|
|
11
|
+
*
|
|
12
|
+
* Grouping: matches are bucketed by sub-service, inferred from the file's
|
|
13
|
+
* path. For hx (multi-module monorepo), `so-service/so-busi/.../X.java`
|
|
14
|
+
* → sub-service = `so-service`. Single-module projects get one bucket.
|
|
15
|
+
*
|
|
16
|
+
* Output shape: header + per-sub-service section (each a flat list with
|
|
17
|
+
* file:line) + omitted summary.
|
|
18
|
+
*
|
|
19
|
+
* Isolation: lives under `src/search/`, imports nothing from the indexed
|
|
20
|
+
* pipeline. Reuses call-sites helpers (listJavaFamilyFiles, DEFAULT_EXCLUDE_DIRS).
|
|
21
|
+
*/
|
|
22
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
25
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
26
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
27
|
+
}
|
|
28
|
+
Object.defineProperty(o, k2, desc);
|
|
29
|
+
}) : (function(o, m, k, k2) {
|
|
30
|
+
if (k2 === undefined) k2 = k;
|
|
31
|
+
o[k2] = m[k];
|
|
32
|
+
}));
|
|
33
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
34
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
35
|
+
}) : function(o, v) {
|
|
36
|
+
o["default"] = v;
|
|
37
|
+
});
|
|
38
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
39
|
+
var ownKeys = function(o) {
|
|
40
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
41
|
+
var ar = [];
|
|
42
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
43
|
+
return ar;
|
|
44
|
+
};
|
|
45
|
+
return ownKeys(o);
|
|
46
|
+
};
|
|
47
|
+
return function (mod) {
|
|
48
|
+
if (mod && mod.__esModule) return mod;
|
|
49
|
+
var result = {};
|
|
50
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
51
|
+
__setModuleDefault(result, mod);
|
|
52
|
+
return result;
|
|
53
|
+
};
|
|
54
|
+
})();
|
|
55
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
56
|
+
exports.searchSlice = searchSlice;
|
|
57
|
+
exports.inferSubService = inferSubService;
|
|
58
|
+
exports.isTestFile = isTestFile;
|
|
59
|
+
exports.formatSliceResult = formatSliceResult;
|
|
60
|
+
const fs_1 = require("fs");
|
|
61
|
+
const path = __importStar(require("path"));
|
|
62
|
+
const grammars_1 = require("../extraction/grammars");
|
|
63
|
+
const call_sites_1 = require("./call-sites");
|
|
64
|
+
const ast_helpers_1 = require("./ast-helpers");
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// Main entry
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
async function searchSlice(projectRoot, query, options = {}) {
|
|
69
|
+
const { topPerBucket = 30, maxBuckets = 10, languages = ['java', 'kotlin'], excludeDirs = [], kindFilter = null, noTests = false, methodLevel = false, } = options;
|
|
70
|
+
await (0, grammars_1.loadGrammarsForLanguages)(languages);
|
|
71
|
+
const excludeSet = new Set([...call_sites_1.DEFAULT_EXCLUDE_DIRS, ...excludeDirs]);
|
|
72
|
+
// 1. Detect criterion
|
|
73
|
+
const { kind, criterionName } = detectCriterion(query);
|
|
74
|
+
if (kind === 'unknown') {
|
|
75
|
+
throw new Error(`Could not detect slice criterion. Use '@Annotation' (e.g., '@Service') or 'InterfaceName' (e.g., 'IFoo'). Got: "${query}"`);
|
|
76
|
+
}
|
|
77
|
+
// 2. Walk project files
|
|
78
|
+
const allFiles = await (0, call_sites_1.listJavaFamilyFiles)(projectRoot, excludeSet);
|
|
79
|
+
const matches = [];
|
|
80
|
+
const methodMatches = [];
|
|
81
|
+
for (const file of allFiles) {
|
|
82
|
+
// Test-file filter: skip *Test.java / *Tests.java / *Spec.java / test/ dir
|
|
83
|
+
if (noTests && isTestFile(file))
|
|
84
|
+
continue;
|
|
85
|
+
let content;
|
|
86
|
+
try {
|
|
87
|
+
content = await fs_1.promises.readFile(file, 'utf-8');
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
// Fast text filter — skip files that don't contain the criterion text.
|
|
93
|
+
// For annotation, search for both `@Name` and `Name` (annotation might
|
|
94
|
+
// be fully qualified like `org.springframework.stereotype.Service`).
|
|
95
|
+
const searchText = criterionName.toLowerCase();
|
|
96
|
+
if (!content.toLowerCase().includes(searchText))
|
|
97
|
+
continue;
|
|
98
|
+
const language = (0, grammars_1.detectLanguage)(file, content);
|
|
99
|
+
if (!languages.includes(language))
|
|
100
|
+
continue;
|
|
101
|
+
const parser = (0, grammars_1.getParser)(language);
|
|
102
|
+
if (!parser)
|
|
103
|
+
continue;
|
|
104
|
+
const tree = parser.parse(content);
|
|
105
|
+
if (!tree)
|
|
106
|
+
continue;
|
|
107
|
+
const relPath = path.relative(projectRoot, file).replace(/\\/g, '/');
|
|
108
|
+
const subService = inferSubService(relPath);
|
|
109
|
+
// Method-level matching only applies to annotation criteria —
|
|
110
|
+
// extends/implements is a class-level relationship, not a method-level one.
|
|
111
|
+
const scanMethodLevel = methodLevel && kind === 'annotation';
|
|
112
|
+
(0, ast_helpers_1.walkTree)(tree.rootNode, (node) => {
|
|
113
|
+
// --- Class-level path (always evaluated; unchanged when methodLevel is off) ---
|
|
114
|
+
if (node.type === 'class_declaration' ||
|
|
115
|
+
node.type === 'interface_declaration' ||
|
|
116
|
+
node.type === 'enum_declaration' ||
|
|
117
|
+
node.type === 'record_declaration') {
|
|
118
|
+
const nameNode = node.childForFieldName('name');
|
|
119
|
+
if (!nameNode)
|
|
120
|
+
return;
|
|
121
|
+
const name = nameNode.text;
|
|
122
|
+
const matched = kind === 'annotation'
|
|
123
|
+
? classHasAnnotation(node, criterionName)
|
|
124
|
+
: classExtendsOrImplements(node, criterionName);
|
|
125
|
+
if (!matched)
|
|
126
|
+
return;
|
|
127
|
+
const kindMap = {
|
|
128
|
+
class_declaration: 'class',
|
|
129
|
+
interface_declaration: 'interface',
|
|
130
|
+
enum_declaration: 'enum',
|
|
131
|
+
record_declaration: 'record',
|
|
132
|
+
};
|
|
133
|
+
const matchKind = kindMap[node.type] ?? 'class';
|
|
134
|
+
// Apply kind filter (e.g., 'class' only — skip interfaces when looking
|
|
135
|
+
// for concrete @Service beans).
|
|
136
|
+
if (kindFilter && matchKind !== kindFilter)
|
|
137
|
+
return;
|
|
138
|
+
matches.push({
|
|
139
|
+
name,
|
|
140
|
+
kind: matchKind,
|
|
141
|
+
filePath: relPath,
|
|
142
|
+
line: node.startPosition.row + 1,
|
|
143
|
+
subService,
|
|
144
|
+
snippet: (0, ast_helpers_1.extractDeclSnippet)(content, node),
|
|
145
|
+
});
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
// --- Method-level path (only when --method-level requested) ---
|
|
149
|
+
if (scanMethodLevel && node.type === 'method_declaration') {
|
|
150
|
+
const annotations = (0, ast_helpers_1.extractAnnotations)(node);
|
|
151
|
+
// extractAnnotations returns short-names prefixed with `@`
|
|
152
|
+
// (e.g. `@Test`). Match either the bare short-name or the
|
|
153
|
+
// parameterized form `@Test(...)`.
|
|
154
|
+
const target = `@${criterionName}`;
|
|
155
|
+
const hit = annotations.some((a) => a === target || a.startsWith(`${target}(`));
|
|
156
|
+
if (!hit)
|
|
157
|
+
return;
|
|
158
|
+
const methodName = node.childForFieldName('name')?.text ?? '<anonymous>';
|
|
159
|
+
const classNode = (0, call_sites_1.findEnclosingClassType)(node);
|
|
160
|
+
const className = classNode?.childForFieldName('name')?.text ?? '<unknown>';
|
|
161
|
+
methodMatches.push({
|
|
162
|
+
className,
|
|
163
|
+
methodName,
|
|
164
|
+
filePath: relPath,
|
|
165
|
+
line: node.startPosition.row + 1,
|
|
166
|
+
subService,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// 3. Group by sub-service
|
|
172
|
+
const bySubService = new Map();
|
|
173
|
+
for (const m of matches) {
|
|
174
|
+
const arr = bySubService.get(m.subService) ?? [];
|
|
175
|
+
arr.push(m);
|
|
176
|
+
bySubService.set(m.subService, arr);
|
|
177
|
+
}
|
|
178
|
+
// Sort each bucket internally by (path depth asc, then file path, then line)
|
|
179
|
+
for (const arr of bySubService.values()) {
|
|
180
|
+
arr.sort((a, b) => {
|
|
181
|
+
const da = a.filePath.split('/').length;
|
|
182
|
+
const db = b.filePath.split('/').length;
|
|
183
|
+
if (da !== db)
|
|
184
|
+
return da - db;
|
|
185
|
+
if (a.filePath !== b.filePath)
|
|
186
|
+
return a.filePath.localeCompare(b.filePath);
|
|
187
|
+
return a.line - b.line;
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
// Sort method-level matches: by sub-service, then class name, then line.
|
|
191
|
+
// (Method matches are grouped into per-sub-service sections by the
|
|
192
|
+
// formatter; this sort makes the within-section order deterministic and
|
|
193
|
+
// keeps a class's methods together.)
|
|
194
|
+
methodMatches.sort((a, b) => {
|
|
195
|
+
if (a.subService !== b.subService)
|
|
196
|
+
return a.subService.localeCompare(b.subService);
|
|
197
|
+
if (a.className !== b.className)
|
|
198
|
+
return a.className.localeCompare(b.className);
|
|
199
|
+
if (a.filePath !== b.filePath)
|
|
200
|
+
return a.filePath.localeCompare(b.filePath);
|
|
201
|
+
return a.line - b.line;
|
|
202
|
+
});
|
|
203
|
+
// Sort buckets by total desc, then by name asc
|
|
204
|
+
const sortedBuckets = [...bySubService.entries()].sort((a, b) => {
|
|
205
|
+
if (b[1].length !== a[1].length)
|
|
206
|
+
return b[1].length - a[1].length;
|
|
207
|
+
return a[0].localeCompare(b[0]);
|
|
208
|
+
});
|
|
209
|
+
let pastMaxBuckets = 0;
|
|
210
|
+
const keptBucketsRaw = sortedBuckets.slice(0, maxBuckets);
|
|
211
|
+
if (sortedBuckets.length > maxBuckets) {
|
|
212
|
+
pastMaxBuckets = sortedBuckets.length - maxBuckets;
|
|
213
|
+
}
|
|
214
|
+
let pastTopPerBucket = 0;
|
|
215
|
+
const buckets = keptBucketsRaw.map(([subService, allMatches]) => {
|
|
216
|
+
const kept = allMatches.slice(0, topPerBucket);
|
|
217
|
+
pastTopPerBucket += allMatches.length - kept.length;
|
|
218
|
+
return {
|
|
219
|
+
subService,
|
|
220
|
+
total: allMatches.length,
|
|
221
|
+
returned: kept.length,
|
|
222
|
+
matches: kept,
|
|
223
|
+
};
|
|
224
|
+
});
|
|
225
|
+
return {
|
|
226
|
+
query,
|
|
227
|
+
criterionKind: kind,
|
|
228
|
+
criterionName,
|
|
229
|
+
totalFound: matches.length,
|
|
230
|
+
returned: buckets.reduce((acc, b) => acc + b.returned, 0),
|
|
231
|
+
buckets,
|
|
232
|
+
methodMatches,
|
|
233
|
+
methodLevelRequested: methodLevel,
|
|
234
|
+
omitted: {
|
|
235
|
+
pastTopPerBucket,
|
|
236
|
+
pastMaxBuckets,
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
// ---------------------------------------------------------------------------
|
|
241
|
+
// Criterion detection
|
|
242
|
+
// ---------------------------------------------------------------------------
|
|
243
|
+
function detectCriterion(query) {
|
|
244
|
+
const trimmed = query.trim();
|
|
245
|
+
if (!trimmed)
|
|
246
|
+
return { kind: 'unknown', criterionName: '' };
|
|
247
|
+
// Annotation: starts with `@`
|
|
248
|
+
if (trimmed.startsWith('@')) {
|
|
249
|
+
const name = trimmed.slice(1).trim();
|
|
250
|
+
if (!name)
|
|
251
|
+
return { kind: 'unknown', criterionName: '' };
|
|
252
|
+
// Strip any package prefix (e.g., @org.springframework.stereotype.Service → Service)
|
|
253
|
+
const shortName = name.split('.').pop() ?? name;
|
|
254
|
+
return { kind: 'annotation', criterionName: shortName };
|
|
255
|
+
}
|
|
256
|
+
// Otherwise treat as interface/superclass name. Strip package prefix if any.
|
|
257
|
+
const shortName = trimmed.split('.').pop() ?? trimmed;
|
|
258
|
+
// Must look like a Java identifier (CamelCase typically)
|
|
259
|
+
if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(shortName)) {
|
|
260
|
+
return { kind: 'unknown', criterionName: '' };
|
|
261
|
+
}
|
|
262
|
+
return { kind: 'extends-implements', criterionName: shortName };
|
|
263
|
+
}
|
|
264
|
+
// ---------------------------------------------------------------------------
|
|
265
|
+
// AST matchers
|
|
266
|
+
// ---------------------------------------------------------------------------
|
|
267
|
+
/**
|
|
268
|
+
* True if the class declaration has the given annotation (short name).
|
|
269
|
+
* E.g., `@Service` matches `@Service`, `@org.springframework.stereotype.Service`,
|
|
270
|
+
* `@Service("beanName")`.
|
|
271
|
+
*/
|
|
272
|
+
function classHasAnnotation(classNode, annotationShortName) {
|
|
273
|
+
const modifiers = (0, ast_helpers_1.findModifiersChild)(classNode);
|
|
274
|
+
if (!modifiers)
|
|
275
|
+
return false;
|
|
276
|
+
for (const child of modifiers.children) {
|
|
277
|
+
if (!child)
|
|
278
|
+
continue;
|
|
279
|
+
if (child.type !== 'annotation' && child.type !== 'marker_annotation')
|
|
280
|
+
continue;
|
|
281
|
+
const nameNode = child.childForFieldName('name');
|
|
282
|
+
if (!nameNode)
|
|
283
|
+
continue;
|
|
284
|
+
const name = nameNode.text;
|
|
285
|
+
const short = name.split('.').pop() ?? name;
|
|
286
|
+
if (short === annotationShortName)
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* True if the class extends OR implements the given interface/superclass name.
|
|
293
|
+
* Walks both the `superclass` (extends) and `interfaces` (implements) fields.
|
|
294
|
+
*/
|
|
295
|
+
function classExtendsOrImplements(classNode, targetName) {
|
|
296
|
+
// extends — tree-sitter-java field name `superclass`
|
|
297
|
+
const superClassNode = classNode.childForFieldName('superclass')
|
|
298
|
+
?? classNode.childForFieldName('super_class');
|
|
299
|
+
if (superClassNode) {
|
|
300
|
+
let found = false;
|
|
301
|
+
(0, ast_helpers_1.walkTree)(superClassNode, (n) => {
|
|
302
|
+
if (found)
|
|
303
|
+
return;
|
|
304
|
+
if (n.type === 'type_identifier' && n.text === targetName)
|
|
305
|
+
found = true;
|
|
306
|
+
});
|
|
307
|
+
if (found)
|
|
308
|
+
return true;
|
|
309
|
+
}
|
|
310
|
+
// implements — tree-sitter-java field name `interfaces`
|
|
311
|
+
const interfacesNode = classNode.childForFieldName('interfaces')
|
|
312
|
+
?? classNode.childForFieldName('super_interfaces');
|
|
313
|
+
if (interfacesNode) {
|
|
314
|
+
let found = false;
|
|
315
|
+
(0, ast_helpers_1.walkTree)(interfacesNode, (n) => {
|
|
316
|
+
if (found)
|
|
317
|
+
return;
|
|
318
|
+
if (n.type === 'type_identifier' && n.text === targetName)
|
|
319
|
+
found = true;
|
|
320
|
+
});
|
|
321
|
+
if (found)
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
// ---------------------------------------------------------------------------
|
|
327
|
+
// Helpers
|
|
328
|
+
// ---------------------------------------------------------------------------
|
|
329
|
+
/**
|
|
330
|
+
* Infer the sub-service / module name from the file's relative path.
|
|
331
|
+
*
|
|
332
|
+
* Strategies (first match wins):
|
|
333
|
+
* 1. `<root>/<sub>/<grandchild>/...` where `sub` looks like a service name
|
|
334
|
+
* (contains `-` or matches known service patterns) → `<sub>`
|
|
335
|
+
* 2. `<root>/<top-dir>/...` → `<top-dir>`
|
|
336
|
+
* 3. file directly under root → `(root)`
|
|
337
|
+
*
|
|
338
|
+
* For hx (`so-service/so-busi/.../X.java`): returns `so-service`.
|
|
339
|
+
* For a single-module project (`src/main/.../X.java`): returns `src`.
|
|
340
|
+
* For a flat project (`X.java` at root): returns `(root)`.
|
|
341
|
+
*/
|
|
342
|
+
function inferSubService(relPath) {
|
|
343
|
+
const parts = relPath.split('/');
|
|
344
|
+
if (parts.length === 1)
|
|
345
|
+
return '(root)';
|
|
346
|
+
// First segment is the top-level dir → use as sub-service
|
|
347
|
+
// (works for hx multi-module layout AND single-module `src/...` layout)
|
|
348
|
+
return parts[0] ?? '(root)';
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* True if the file path looks like a test file. Catches the common Java/Kotlin
|
|
352
|
+
* conventions: `*Test.java`, `*Tests.java`, `*Spec.java`, `*Specs.groovy`,
|
|
353
|
+
* files under `src/test/`, `test/`, `__tests__/`.
|
|
354
|
+
*/
|
|
355
|
+
function isTestFile(absoluteOrRelPath) {
|
|
356
|
+
const normalized = absoluteOrRelPath.replace(/\\/g, '/');
|
|
357
|
+
if (/\b(src[/\\]test|test[/\\]|__tests__)\b/.test(normalized))
|
|
358
|
+
return true;
|
|
359
|
+
return /\.(Test|Tests|Spec|Specs)\.(java|kt|kts|groovy)$/i.test(normalized);
|
|
360
|
+
}
|
|
361
|
+
// ---------------------------------------------------------------------------
|
|
362
|
+
// Formatter (CLI markdown)
|
|
363
|
+
// ---------------------------------------------------------------------------
|
|
364
|
+
function formatSliceResult(result) {
|
|
365
|
+
const lines = [];
|
|
366
|
+
const criterionLabel = result.criterionKind === 'annotation'
|
|
367
|
+
? `@${result.criterionName}`
|
|
368
|
+
: `implements/extends ${result.criterionName}`;
|
|
369
|
+
const methodMatches = result.methodMatches ?? [];
|
|
370
|
+
const hasMethodMatches = methodMatches.length > 0;
|
|
371
|
+
const hasClassMatches = result.buckets.length > 0;
|
|
372
|
+
// When method-level matches exist, class-level buckets are labeled so the
|
|
373
|
+
// two sections don't get mixed up; when no method matches, the label is
|
|
374
|
+
// omitted to stay byte-equal to the pre-method-level formatter.
|
|
375
|
+
const labelClassBuckets = hasMethodMatches;
|
|
376
|
+
// Header counts: classes always; methods only when present.
|
|
377
|
+
const classCount = result.totalFound;
|
|
378
|
+
const methodCount = methodMatches.length;
|
|
379
|
+
const headerCount = hasMethodMatches
|
|
380
|
+
? `${classCount} class${classCount === 1 ? '' : 'es'} · ${methodCount} method${methodCount === 1 ? '' : 's'}`
|
|
381
|
+
: `${classCount} match${classCount === 1 ? '' : 'es'}`;
|
|
382
|
+
// Sub-service count for the header: union of class-level buckets and
|
|
383
|
+
// sub-services that carry method matches (so a methods-only run doesn't
|
|
384
|
+
// report "across 0 sub-services").
|
|
385
|
+
const methodSubServices = new Set(methodMatches.map((m) => m.subService));
|
|
386
|
+
const subServiceCount = new Set([
|
|
387
|
+
...result.buckets.map((b) => b.subService),
|
|
388
|
+
...methodSubServices,
|
|
389
|
+
]).size;
|
|
390
|
+
lines.push(`**Slice: ${criterionLabel}** — ${headerCount} across ${subServiceCount} sub-service${subServiceCount === 1 ? '' : 's'}, returning ${result.returned}${hasMethodMatches ? ` + ${methodCount}` : ''}`);
|
|
391
|
+
// Empty state — no matches of either kind.
|
|
392
|
+
if (!hasClassMatches && !hasMethodMatches) {
|
|
393
|
+
lines.push('');
|
|
394
|
+
if (result.methodLevelRequested === true) {
|
|
395
|
+
// Flag was on but nothing matched at either level — steer back to a
|
|
396
|
+
// class-level retry (the annotation may be a class-level one after all).
|
|
397
|
+
lines.push(`_No matches for \`${criterionLabel}\` at either class or method level. Try without \`--method-level\`, or check the annotation name (case-sensitive: \`${result.criterionName}\`)._`);
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
// Byte-equal to the pre-method-level formatter.
|
|
401
|
+
lines.push(`_No matches found. Check the criterion spelling (case-sensitive: \`${result.criterionName}\`), or try a broader query._`);
|
|
402
|
+
}
|
|
403
|
+
return lines.join('\n');
|
|
404
|
+
}
|
|
405
|
+
// --- Class-level section ---
|
|
406
|
+
if (hasClassMatches) {
|
|
407
|
+
if (labelClassBuckets) {
|
|
408
|
+
lines.push('');
|
|
409
|
+
lines.push('### Class-level');
|
|
410
|
+
}
|
|
411
|
+
for (const bucket of result.buckets) {
|
|
412
|
+
const truncationTag = bucket.returned < bucket.total
|
|
413
|
+
? ` (top ${bucket.returned} of ${bucket.total})`
|
|
414
|
+
: ` (${bucket.total})`;
|
|
415
|
+
lines.push('');
|
|
416
|
+
const bucketHeading = labelClassBuckets ? `#### ${bucket.subService}${truncationTag}` : `### ${bucket.subService}${truncationTag}`;
|
|
417
|
+
lines.push(bucketHeading);
|
|
418
|
+
for (const m of bucket.matches) {
|
|
419
|
+
const kindTag = m.kind === 'class' ? '' : ` [${m.kind}]`;
|
|
420
|
+
lines.push(`- \`${m.name}\`${kindTag} \`${m.filePath}:${m.line}\``);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
// --- Method-level section ---
|
|
425
|
+
if (hasMethodMatches) {
|
|
426
|
+
lines.push('');
|
|
427
|
+
lines.push('### Method-level');
|
|
428
|
+
// Group by sub-service, then by class. Preserve the order methodMatches
|
|
429
|
+
// was sorted in (sub-service, class, file, line) — emit a sub-section per
|
|
430
|
+
// sub-service, and within it group consecutive entries by class.
|
|
431
|
+
let curSub = null;
|
|
432
|
+
let curClass = null;
|
|
433
|
+
for (const m of methodMatches) {
|
|
434
|
+
if (m.subService !== curSub) {
|
|
435
|
+
curSub = m.subService;
|
|
436
|
+
curClass = null;
|
|
437
|
+
lines.push('');
|
|
438
|
+
lines.push(`#### ${curSub}`);
|
|
439
|
+
}
|
|
440
|
+
if (m.className !== curClass) {
|
|
441
|
+
curClass = m.className;
|
|
442
|
+
lines.push('');
|
|
443
|
+
lines.push(`- **${curClass}**`);
|
|
444
|
+
}
|
|
445
|
+
lines.push(` - \`${m.methodName}\` \`${m.filePath}:${m.line}\``);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
const o = result.omitted;
|
|
449
|
+
const omittedParts = [];
|
|
450
|
+
if (o.pastTopPerBucket > 0)
|
|
451
|
+
omittedParts.push(`${o.pastTopPerBucket} past top-per-bucket`);
|
|
452
|
+
if (o.pastMaxBuckets > 0)
|
|
453
|
+
omittedParts.push(`${o.pastMaxBuckets} sub-services past maxBuckets`);
|
|
454
|
+
if (omittedParts.length > 0) {
|
|
455
|
+
lines.push('');
|
|
456
|
+
lines.push(`_Omitted: ${omittedParts.join(' · ')}_`);
|
|
457
|
+
}
|
|
458
|
+
return lines.join('\n');
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=slice.js.map
|