@noyrax/documentation-system-plugin 1.0.4-beta.1 → 1.0.4-beta.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.
- package/docs/index/symbols.jsonl +78 -31
- package/docs/modules/mcp__src__tools__drift.ts.md +6 -2
- package/docs/modules/mcp__src__tools__impact.ts.md +3 -0
- package/docs/modules/package.json.md +10 -11
- package/docs/modules/scripts__verify-adrs.js.md +2 -2
- package/docs/modules/src__core__consolidation.ts.md +0 -1
- package/docs/modules/src__core__scanner.ts.md +0 -1
- package/docs/modules/src__index__index.ts.md +18 -0
- package/docs/modules/src__parsers__json-yaml.ts.md +16 -1
- package/docs/modules/src__parsers__types.ts.md +18 -0
- package/docs/system/CHANGE_REPORT.md +14 -7
- package/docs/system/DEPENDENCIES.md +0 -27
- package/docs/system/DEPENDENCY_GRAPH.md +267 -299
- package/docs/system/SYSTEM_METADATA.json +37 -0
- package/package.json +3 -4
- package/noyrax-5d-database-plugin-0.1.8.tgz +0 -0
- package/out/cache/ast-cache.js +0 -69
- package/out/cache/ast-cache.js.map +0 -1
- package/out/cache/dependencies-cache.js +0 -73
- package/out/cache/dependencies-cache.js.map +0 -1
- package/out/cache/output-cache.js +0 -69
- package/out/cache/output-cache.js.map +0 -1
- package/out/cache/signature-cache.js +0 -60
- package/out/cache/signature-cache.js.map +0 -1
- package/out/cli/generate-cli.js +0 -330
- package/out/cli/generate-cli.js.map +0 -1
- package/out/cli/scan-cli.js +0 -151
- package/out/cli/scan-cli.js.map +0 -1
- package/out/cli/validate-cli.js +0 -258
- package/out/cli/validate-cli.js.map +0 -1
- package/out/core/async.js +0 -38
- package/out/core/async.js.map +0 -1
- package/out/core/consolidation.js +0 -230
- package/out/core/consolidation.js.map +0 -1
- package/out/core/git.js +0 -48
- package/out/core/git.js.map +0 -1
- package/out/core/language-detection.js +0 -29
- package/out/core/language-detection.js.map +0 -1
- package/out/core/scanner.js +0 -179
- package/out/core/scanner.js.map +0 -1
- package/out/core/signature-formatter.js +0 -162
- package/out/core/signature-formatter.js.map +0 -1
- package/out/core/symbol-classifier.js +0 -96
- package/out/core/symbol-classifier.js.map +0 -1
- package/out/core/symbols.js +0 -24
- package/out/core/symbols.js.map +0 -1
- package/out/drift/index.js +0 -28
- package/out/drift/index.js.map +0 -1
- package/out/extension.js +0 -984
- package/out/extension.js.map +0 -1
- package/out/generator/adr-linker.js +0 -216
- package/out/generator/adr-linker.js.map +0 -1
- package/out/generator/change-report.js +0 -124
- package/out/generator/change-report.js.map +0 -1
- package/out/generator/dependency-graph.js +0 -98
- package/out/generator/dependency-graph.js.map +0 -1
- package/out/generator/index.js +0 -117
- package/out/generator/index.js.map +0 -1
- package/out/generator/module-doc.js +0 -438
- package/out/generator/module-doc.js.map +0 -1
- package/out/index/index.js +0 -147
- package/out/index/index.js.map +0 -1
- package/out/logging/index.js +0 -24
- package/out/logging/index.js.map +0 -1
- package/out/parsers/dependencies.js +0 -126
- package/out/parsers/dependencies.js.map +0 -1
- package/out/parsers/json-yaml.js +0 -90
- package/out/parsers/json-yaml.js.map +0 -1
- package/out/parsers/python.js +0 -160
- package/out/parsers/python.js.map +0 -1
- package/out/parsers/ts-js.js +0 -397
- package/out/parsers/ts-js.js.map +0 -1
- package/out/parsers/types.js +0 -3
- package/out/parsers/types.js.map +0 -1
- package/out/ui/commands-provider.js +0 -91
- package/out/ui/commands-provider.js.map +0 -1
- package/out/ui/status-bar.js +0 -85
- package/out/ui/status-bar.js.map +0 -1
- package/out/validator/index.js +0 -185
- package/out/validator/index.js.map +0 -1
- package/out/validator/signature-matching.js +0 -261
- package/out/validator/signature-matching.js.map +0 -1
- package/out/validator/status.js +0 -38
- package/out/validator/status.js.map +0 -1
package/out/generator/index.js
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.generatePerFileDocs = void 0;
|
|
27
|
-
const fs = __importStar(require("node:fs"));
|
|
28
|
-
const path = __importStar(require("node:path"));
|
|
29
|
-
const module_doc_1 = require("./module-doc");
|
|
30
|
-
const adr_linker_1 = require("./adr-linker");
|
|
31
|
-
/**
|
|
32
|
-
* @public
|
|
33
|
-
* Make safe file name from module path
|
|
34
|
-
*/
|
|
35
|
-
function makeSafeFileName(filePath) {
|
|
36
|
-
return filePath.replace(/[<>:"|?*]/g, '_').replace(/\//g, '__');
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* @public
|
|
40
|
-
* Generate per-file documentation with change tracking
|
|
41
|
-
*/
|
|
42
|
-
function generatePerFileDocs(symbols, modulesDir, existingDocs) {
|
|
43
|
-
const grouped = new Map();
|
|
44
|
-
const typeOrder = { module: 0, class: 1, interface: 2, enum: 3, method: 4, function: 5, variable: 6, type: 7 };
|
|
45
|
-
const sorted = [...symbols].sort((a, b) => {
|
|
46
|
-
if (a.filePath !== b.filePath)
|
|
47
|
-
return a.filePath.localeCompare(b.filePath);
|
|
48
|
-
const to = (k) => (typeOrder[k] ?? 99);
|
|
49
|
-
if (to(a.kind) !== to(b.kind))
|
|
50
|
-
return to(a.kind) - to(b.kind);
|
|
51
|
-
return a.fullyQualifiedName.localeCompare(b.fullyQualifiedName);
|
|
52
|
-
});
|
|
53
|
-
for (const s of sorted) {
|
|
54
|
-
const key = s.filePath;
|
|
55
|
-
if (!grouped.has(key))
|
|
56
|
-
grouped.set(key, []);
|
|
57
|
-
grouped.get(key).push(s);
|
|
58
|
-
}
|
|
59
|
-
// Create AdrLinker once for all files (performance optimization)
|
|
60
|
-
const adrDir = path.join(path.dirname(modulesDir), 'adr');
|
|
61
|
-
let adrLinker;
|
|
62
|
-
try {
|
|
63
|
-
if (fs.existsSync(adrDir)) {
|
|
64
|
-
adrLinker = new adr_linker_1.AdrLinker(adrDir);
|
|
65
|
-
// Debug: Log ADR mappings
|
|
66
|
-
const mappings = adrLinker.getAllAdrMappings();
|
|
67
|
-
if (mappings.size > 0) {
|
|
68
|
-
console.log(`[ADR-Linker] Loaded ${mappings.size} file path mappings from ${adrDir}`);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
console.log(`[ADR-Linker] No file path mappings found in ${adrDir}`);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
console.log(`[ADR-Linker] ADR directory does not exist: ${adrDir}`);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
catch (err) {
|
|
79
|
-
// If ADR linking fails, continue without it
|
|
80
|
-
// This ensures the documentation generation doesn't break
|
|
81
|
-
console.error(`[ADR-Linker] Error creating AdrLinker: ${err}`);
|
|
82
|
-
}
|
|
83
|
-
const files = new Map();
|
|
84
|
-
for (const [filePath, syms] of grouped.entries()) {
|
|
85
|
-
const safeName = makeSafeFileName(filePath);
|
|
86
|
-
const targetPath = path.join(modulesDir, `${safeName}.md`);
|
|
87
|
-
// Load existing documentation if available
|
|
88
|
-
let existingDoc = { blocks: [] };
|
|
89
|
-
if (existingDocs && existingDocs.has(filePath)) {
|
|
90
|
-
try {
|
|
91
|
-
existingDoc = (0, module_doc_1.parseModuleDoc)(existingDocs.get(filePath));
|
|
92
|
-
}
|
|
93
|
-
catch (err) {
|
|
94
|
-
// If parsing fails, start fresh
|
|
95
|
-
existingDoc = { blocks: [] };
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
else if (fs.existsSync(targetPath)) {
|
|
99
|
-
try {
|
|
100
|
-
const content = fs.readFileSync(targetPath, 'utf8');
|
|
101
|
-
existingDoc = (0, module_doc_1.parseModuleDoc)(content);
|
|
102
|
-
}
|
|
103
|
-
catch (err) {
|
|
104
|
-
// If parsing fails, start fresh
|
|
105
|
-
existingDoc = { blocks: [] };
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
// Build documentation with change tracking
|
|
109
|
-
const newDoc = (0, module_doc_1.buildModuleDocWithChanges)(syms, existingDoc);
|
|
110
|
-
// Reuse AdrLinker instance for all files
|
|
111
|
-
const content = (0, module_doc_1.renderModuleDoc)(newDoc, filePath, adrLinker);
|
|
112
|
-
files.set(filePath, content);
|
|
113
|
-
}
|
|
114
|
-
return files;
|
|
115
|
-
}
|
|
116
|
-
exports.generatePerFileDocs = generatePerFileDocs;
|
|
117
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,438 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.renderModuleDoc = exports.buildModuleDocWithChanges = exports.signatureChanged = exports.normalizeSignature = exports.parseModuleDoc = void 0;
|
|
4
|
-
const signature_formatter_1 = require("../core/signature-formatter");
|
|
5
|
-
const symbol_classifier_1 = require("../core/symbol-classifier");
|
|
6
|
-
/**
|
|
7
|
-
* @public
|
|
8
|
-
* Parse existing module documentation markdown
|
|
9
|
-
*/
|
|
10
|
-
function parseModuleDoc(content) {
|
|
11
|
-
const blocks = [];
|
|
12
|
-
const lines = content.split(/\r?\n/);
|
|
13
|
-
let currentBlock = null;
|
|
14
|
-
let inCodeBlock = false;
|
|
15
|
-
let codeLines = [];
|
|
16
|
-
let currentComment = '';
|
|
17
|
-
for (let i = 0; i < lines.length; i++) {
|
|
18
|
-
const line = lines[i];
|
|
19
|
-
// HTML comment (change annotation)
|
|
20
|
-
const commentMatch = line.match(/^<!--\s*change:\s*(.+?)\s*-->$/);
|
|
21
|
-
if (commentMatch) {
|
|
22
|
-
currentComment = line;
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
// Header: ### kind: fullyQualifiedName
|
|
26
|
-
const headerMatch = line.match(/^###\s+(\w+):\s+(.+)$/);
|
|
27
|
-
if (headerMatch) {
|
|
28
|
-
// Save previous block if exists
|
|
29
|
-
if (currentBlock && currentBlock.fullyQualifiedName && currentBlock.symbol) {
|
|
30
|
-
blocks.push({
|
|
31
|
-
fullyQualifiedName: currentBlock.fullyQualifiedName,
|
|
32
|
-
kind: currentBlock.kind,
|
|
33
|
-
signature: currentBlock.signature,
|
|
34
|
-
comment: currentComment || '',
|
|
35
|
-
symbol: currentBlock.symbol
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
const kind = headerMatch[1];
|
|
39
|
-
const fullyQualifiedName = headerMatch[2];
|
|
40
|
-
currentBlock = {
|
|
41
|
-
fullyQualifiedName,
|
|
42
|
-
kind,
|
|
43
|
-
signature: { name: fullyQualifiedName.split('.').pop() || fullyQualifiedName, parameters: [] },
|
|
44
|
-
symbol: {
|
|
45
|
-
language: 'unknown',
|
|
46
|
-
filePath: '',
|
|
47
|
-
fullyQualifiedName,
|
|
48
|
-
signature: { name: fullyQualifiedName.split('.').pop() || fullyQualifiedName, parameters: [] },
|
|
49
|
-
kind
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
currentComment = '';
|
|
53
|
-
inCodeBlock = false;
|
|
54
|
-
codeLines = [];
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
// Code block start
|
|
58
|
-
if (line.trim() === '```ts' || line.trim() === '```') {
|
|
59
|
-
inCodeBlock = true;
|
|
60
|
-
codeLines = [];
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
// Code block end
|
|
64
|
-
if (inCodeBlock && line.trim() === '```') {
|
|
65
|
-
if (currentBlock && currentBlock.symbol && codeLines.length > 0) {
|
|
66
|
-
// Parse signature from code
|
|
67
|
-
const code = codeLines.join('\n');
|
|
68
|
-
currentBlock.signature = parseSignatureFromCode(code, currentBlock.kind);
|
|
69
|
-
currentBlock.symbol.signature = currentBlock.signature;
|
|
70
|
-
}
|
|
71
|
-
inCodeBlock = false;
|
|
72
|
-
codeLines = [];
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
if (inCodeBlock && currentBlock) {
|
|
76
|
-
codeLines.push(line);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// Save last block
|
|
80
|
-
if (currentBlock && currentBlock.fullyQualifiedName && currentBlock.symbol) {
|
|
81
|
-
blocks.push({
|
|
82
|
-
fullyQualifiedName: currentBlock.fullyQualifiedName,
|
|
83
|
-
kind: currentBlock.kind,
|
|
84
|
-
signature: currentBlock.signature,
|
|
85
|
-
comment: currentComment || '',
|
|
86
|
-
symbol: currentBlock.symbol
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
return { blocks };
|
|
90
|
-
}
|
|
91
|
-
exports.parseModuleDoc = parseModuleDoc;
|
|
92
|
-
/**
|
|
93
|
-
* @public
|
|
94
|
-
* Parse signature from code block
|
|
95
|
-
*/
|
|
96
|
-
function parseSignatureFromCode(code, kind) {
|
|
97
|
-
const trimmed = code.trim();
|
|
98
|
-
if (kind === 'interface') {
|
|
99
|
-
const nameMatch = trimmed.match(/^interface\s+(\w+)/);
|
|
100
|
-
if (nameMatch) {
|
|
101
|
-
const name = nameMatch[1];
|
|
102
|
-
const params = [];
|
|
103
|
-
// Simple parameter extraction for interfaces
|
|
104
|
-
const propMatches = trimmed.matchAll(/\s+(\w+)(\?)?(?::\s*([^;]+))?;/g);
|
|
105
|
-
for (const match of propMatches) {
|
|
106
|
-
params.push({
|
|
107
|
-
name: match[1],
|
|
108
|
-
type: match[3] || undefined,
|
|
109
|
-
optional: !!match[2],
|
|
110
|
-
hasDefault: false
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
return { name, parameters: params, visibility: 'public' };
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (kind === 'class') {
|
|
117
|
-
const nameMatch = trimmed.match(/^class\s+(\w+)/);
|
|
118
|
-
if (nameMatch) {
|
|
119
|
-
return { name: nameMatch[1], parameters: [], visibility: 'public' };
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
if (kind === 'function' || kind === 'method') {
|
|
123
|
-
const funcMatch = trimmed.match(/^(\w+)\s*\(([^)]*)\)(?:\s*:\s*([^{]+))?/);
|
|
124
|
-
if (funcMatch) {
|
|
125
|
-
const name = funcMatch[1];
|
|
126
|
-
const paramsStr = funcMatch[2];
|
|
127
|
-
const returnType = funcMatch[3]?.trim();
|
|
128
|
-
const params = [];
|
|
129
|
-
if (paramsStr) {
|
|
130
|
-
const paramParts = paramsStr.split(',').map(p => p.trim()).filter(p => p);
|
|
131
|
-
for (const part of paramParts) {
|
|
132
|
-
const paramMatch = part.match(/^(\w+)(\?)?(?::\s*([^=]+))?(?:\s*=\s*…)?$/);
|
|
133
|
-
if (paramMatch) {
|
|
134
|
-
params.push({
|
|
135
|
-
name: paramMatch[1],
|
|
136
|
-
type: paramMatch[3]?.trim() || undefined,
|
|
137
|
-
optional: !!paramMatch[2],
|
|
138
|
-
hasDefault: part.includes('=')
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return { name, parameters: params, returnType, visibility: 'public' };
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
if (kind === 'variable') {
|
|
147
|
-
const varMatch = trimmed.match(/^(\w+)(?:\s*:\s*([^=]+))?/);
|
|
148
|
-
if (varMatch) {
|
|
149
|
-
return { name: varMatch[1], parameters: [], returnType: varMatch[2]?.trim(), visibility: 'public' };
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
// Fallback
|
|
153
|
-
const nameMatch = trimmed.match(/^(\w+)/);
|
|
154
|
-
return { name: nameMatch?.[1] || 'unknown', parameters: [], visibility: 'public' };
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* @public
|
|
158
|
-
* Normalize signature for comparison
|
|
159
|
-
*/
|
|
160
|
-
function normalizeSignature(sig) {
|
|
161
|
-
const params = sig.parameters
|
|
162
|
-
.map(p => `${p.name}${p.optional ? '?' : ''}:${p.type ?? ''}${p.hasDefault ? '=…' : ''}`)
|
|
163
|
-
.sort()
|
|
164
|
-
.join(',');
|
|
165
|
-
return `${sig.name}(${params}):${sig.returnType ?? ''}`;
|
|
166
|
-
}
|
|
167
|
-
exports.normalizeSignature = normalizeSignature;
|
|
168
|
-
/**
|
|
169
|
-
* Heuristik: Triviale Platzhalter-Signatur aus der alten Welt?
|
|
170
|
-
* Beispiel: "Snapshot():" (keine Parameter, kein Rückgabewert)
|
|
171
|
-
*/
|
|
172
|
-
function isTrivialNormalizedSignature(sig) {
|
|
173
|
-
return /^[A-Za-z0-9_]+\(\):?$/.test(sig) || /^[A-Za-z0-9_]+\(\):$/.test(sig);
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Heuristik: Handelt es sich um eine reine Formatter-Migration
|
|
177
|
-
* von einer Platzhalter-Signatur zu einer „tiefen“ Signatur?
|
|
178
|
-
*/
|
|
179
|
-
function isFormatterMigration(oldSig, newSig) {
|
|
180
|
-
return isTrivialNormalizedSignature(oldSig) && !isTrivialNormalizedSignature(newSig);
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* @public
|
|
184
|
-
* Check if signature changed zwischen zwei Symbolen
|
|
185
|
-
*/
|
|
186
|
-
function signatureChanged(a, b) {
|
|
187
|
-
return normalizeSignature(a.signature) !== normalizeSignature(b.signature);
|
|
188
|
-
}
|
|
189
|
-
exports.signatureChanged = signatureChanged;
|
|
190
|
-
/**
|
|
191
|
-
* @public
|
|
192
|
-
* Build module documentation with change tracking
|
|
193
|
-
*/
|
|
194
|
-
function buildModuleDocWithChanges(symbols, existingDoc) {
|
|
195
|
-
const blocks = [];
|
|
196
|
-
const existingBlocksByName = new Map(existingDoc.blocks.map(b => [b.fullyQualifiedName, b]));
|
|
197
|
-
// For each symbol in code
|
|
198
|
-
for (const sym of symbols) {
|
|
199
|
-
const existingBlock = existingBlocksByName.get(sym.fullyQualifiedName);
|
|
200
|
-
if (!existingBlock) {
|
|
201
|
-
// Symbol is new
|
|
202
|
-
blocks.push({
|
|
203
|
-
comment: `<!-- change: symbol-added name="${sym.fullyQualifiedName}" kind="${sym.kind}" -->`,
|
|
204
|
-
symbol: sym
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
else if (signatureChanged(sym, existingBlock.symbol)) {
|
|
208
|
-
// Signature geändert – prüfen, ob es sich nur um eine
|
|
209
|
-
// Migration von Platzhalter- zu Tiefensignaturen handelt.
|
|
210
|
-
const oldSig = normalizeSignature(existingBlock.symbol.signature);
|
|
211
|
-
const newSig = normalizeSignature(sym.signature);
|
|
212
|
-
if (isFormatterMigration(oldSig, newSig)) {
|
|
213
|
-
// Nur Formatter-Migration – nicht als semantische Änderung melden
|
|
214
|
-
blocks.push({
|
|
215
|
-
comment: existingBlock.comment || '',
|
|
216
|
-
symbol: sym
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
// Echte Signatur-Änderung
|
|
221
|
-
blocks.push({
|
|
222
|
-
comment: `<!-- change: signature-changed old="${oldSig}" new="${newSig}" -->`,
|
|
223
|
-
symbol: sym
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
// Unverändert – bestehenden Kommentar übernehmen
|
|
229
|
-
blocks.push({
|
|
230
|
-
comment: existingBlock.comment || '',
|
|
231
|
-
symbol: sym
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
existingBlocksByName.delete(sym.fullyQualifiedName);
|
|
235
|
-
}
|
|
236
|
-
// For remaining blocks (no longer in code)
|
|
237
|
-
for (const [name, block] of existingBlocksByName.entries()) {
|
|
238
|
-
blocks.push({
|
|
239
|
-
comment: `<!-- change: symbol-removed name="${name}" kind="${block.symbol.kind}" -->`,
|
|
240
|
-
symbol: block.symbol
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
// Deterministic sort
|
|
244
|
-
blocks.sort(compareBlocks);
|
|
245
|
-
return { blocks };
|
|
246
|
-
}
|
|
247
|
-
exports.buildModuleDocWithChanges = buildModuleDocWithChanges;
|
|
248
|
-
/**
|
|
249
|
-
* @public
|
|
250
|
-
* Compare blocks for deterministic sorting
|
|
251
|
-
*/
|
|
252
|
-
function compareBlocks(a, b) {
|
|
253
|
-
const typeOrder = {
|
|
254
|
-
module: 0, class: 1, interface: 2, enum: 3, method: 4, function: 5, variable: 6, type: 7
|
|
255
|
-
};
|
|
256
|
-
const to = (k) => (typeOrder[k] ?? 99);
|
|
257
|
-
const ca = (0, symbol_classifier_1.classifySymbol)(a.symbol);
|
|
258
|
-
const cb = (0, symbol_classifier_1.classifySymbol)(b.symbol);
|
|
259
|
-
const roleOrder = {
|
|
260
|
-
'service-api': 0,
|
|
261
|
-
'domain-model': 1,
|
|
262
|
-
config: 2,
|
|
263
|
-
other: 3,
|
|
264
|
-
infra: 4
|
|
265
|
-
};
|
|
266
|
-
const priorityOrder = {
|
|
267
|
-
high: 0,
|
|
268
|
-
normal: 1,
|
|
269
|
-
low: 2
|
|
270
|
-
};
|
|
271
|
-
if (to(a.symbol.kind) !== to(b.symbol.kind)) {
|
|
272
|
-
return to(a.symbol.kind) - to(b.symbol.kind);
|
|
273
|
-
}
|
|
274
|
-
const roleA = roleOrder[ca.role] ?? 99;
|
|
275
|
-
const roleB = roleOrder[cb.role] ?? 99;
|
|
276
|
-
if (roleA !== roleB) {
|
|
277
|
-
return roleA - roleB;
|
|
278
|
-
}
|
|
279
|
-
const prioA = priorityOrder[ca.priority] ?? 99;
|
|
280
|
-
const prioB = priorityOrder[cb.priority] ?? 99;
|
|
281
|
-
if (prioA !== prioB) {
|
|
282
|
-
return prioA - prioB;
|
|
283
|
-
}
|
|
284
|
-
return a.symbol.fullyQualifiedName.localeCompare(b.symbol.fullyQualifiedName);
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* @public
|
|
288
|
-
* Render module documentation to markdown
|
|
289
|
-
*/
|
|
290
|
-
function renderModuleDoc(doc, filePath, adrLinker) {
|
|
291
|
-
const lines = [];
|
|
292
|
-
lines.push(`# Modul: ${filePath}`);
|
|
293
|
-
lines.push('');
|
|
294
|
-
// Add relevant ADRs section if adrLinker is provided
|
|
295
|
-
if (adrLinker) {
|
|
296
|
-
try {
|
|
297
|
-
const relevantAdrs = adrLinker.getRelevantAdrs(filePath);
|
|
298
|
-
if (relevantAdrs.length > 0) {
|
|
299
|
-
lines.push('## Relevante ADRs');
|
|
300
|
-
lines.push('');
|
|
301
|
-
for (const adrNum of relevantAdrs) {
|
|
302
|
-
const metadata = adrLinker.getAdrMetadata(adrNum);
|
|
303
|
-
if (metadata) {
|
|
304
|
-
const linkPath = `../adr/${metadata.fileName}`;
|
|
305
|
-
lines.push(`- [ADR-${adrNum}: ${metadata.title}](${linkPath})`);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
lines.push('');
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
// Debug: Log when no ADRs found for a file
|
|
312
|
-
console.log(`[ADR-Linker] No relevant ADRs found for ${filePath}`);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
catch (err) {
|
|
316
|
-
// If ADR linking fails, continue without it
|
|
317
|
-
// This ensures the documentation generation doesn't break
|
|
318
|
-
console.error(`[ADR-Linker] Error getting relevant ADRs for ${filePath}: ${err}`);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
else {
|
|
322
|
-
// Debug: Log when adrLinker is not provided
|
|
323
|
-
console.log(`[ADR-Linker] No adrLinker provided for ${filePath}`);
|
|
324
|
-
}
|
|
325
|
-
// Hilfsindex: Wie viele Methoden gehören (per Namensschema) zu welcher Klasse?
|
|
326
|
-
const methodsPerClass = new Map();
|
|
327
|
-
for (const block of doc.blocks) {
|
|
328
|
-
if (block.symbol.kind === 'method') {
|
|
329
|
-
const parts = block.symbol.fullyQualifiedName.split('.');
|
|
330
|
-
if (parts.length > 1) {
|
|
331
|
-
const className = parts[0];
|
|
332
|
-
methodsPerClass.set(className, (methodsPerClass.get(className) ?? 0) + 1);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
for (const block of doc.blocks) {
|
|
337
|
-
const classification = (0, symbol_classifier_1.classifySymbol)(block.symbol);
|
|
338
|
-
if (block.comment) {
|
|
339
|
-
lines.push(block.comment);
|
|
340
|
-
}
|
|
341
|
-
lines.push(`### ${block.symbol.kind}: ${block.symbol.fullyQualifiedName}`);
|
|
342
|
-
// Rolle / Sichtbarkeit zur Einordnung des Symbols
|
|
343
|
-
lines.push(`Rolle: ${classification.role} (Sichtbarkeit: ${classification.visibility}, Priorität: ${classification.priority})`);
|
|
344
|
-
// Kurze, einzeilige Signatur-Zusammenfassung
|
|
345
|
-
const inlineSignature = signature_formatter_1.SignatureFormatter.formatForDoc(block.symbol);
|
|
346
|
-
lines.push(`Signatur: \`${inlineSignature}\``);
|
|
347
|
-
// Vollständige Signatur im Codeblock
|
|
348
|
-
lines.push('```ts');
|
|
349
|
-
lines.push(inlineSignature);
|
|
350
|
-
lines.push('```');
|
|
351
|
-
// Zusätzliche, strukturierte API-Doku
|
|
352
|
-
if (block.symbol.kind === 'function' || block.symbol.kind === 'method') {
|
|
353
|
-
const params = [...block.symbol.signature.parameters].sort((a, b) => (a.name || '').localeCompare(b.name || ''));
|
|
354
|
-
if (params.length > 0) {
|
|
355
|
-
lines.push('');
|
|
356
|
-
lines.push('Parameter:');
|
|
357
|
-
lines.push('');
|
|
358
|
-
lines.push('| Name | Typ | Optional | Default |');
|
|
359
|
-
lines.push('|------|-----|----------|---------|');
|
|
360
|
-
for (const p of params) {
|
|
361
|
-
const type = p.type ?? '';
|
|
362
|
-
const optional = p.optional ? 'ja' : 'nein';
|
|
363
|
-
const hasDefault = p.hasDefault ? 'ja' : 'nein';
|
|
364
|
-
lines.push(`| \`${p.name}\` | \`${type}\` | ${optional} | ${hasDefault} |`);
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
if (block.symbol.signature.returnType) {
|
|
368
|
-
lines.push('');
|
|
369
|
-
lines.push(`Rückgabewert: \`${block.symbol.signature.returnType}\``);
|
|
370
|
-
}
|
|
371
|
-
lines.push('');
|
|
372
|
-
}
|
|
373
|
-
else if (block.symbol.kind === 'interface') {
|
|
374
|
-
const props = [...block.symbol.signature.parameters].sort((a, b) => (a.name || '').localeCompare(b.name || ''));
|
|
375
|
-
if (props.length > 0) {
|
|
376
|
-
lines.push('');
|
|
377
|
-
lines.push('Eigenschaften:');
|
|
378
|
-
lines.push('');
|
|
379
|
-
lines.push('| Name | Typ | Optional |');
|
|
380
|
-
lines.push('|------|-----|----------|');
|
|
381
|
-
for (const p of props) {
|
|
382
|
-
const type = p.type ?? '';
|
|
383
|
-
const optional = p.optional ? 'ja' : 'nein';
|
|
384
|
-
lines.push(`| \`${p.name}\` | \`${type}\` | ${optional} |`);
|
|
385
|
-
}
|
|
386
|
-
lines.push('');
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
else if (block.symbol.kind === 'class') {
|
|
390
|
-
const simpleName = block.symbol.fullyQualifiedName.split('.').pop() || block.symbol.fullyQualifiedName;
|
|
391
|
-
const methodCount = methodsPerClass.get(simpleName) ?? 0;
|
|
392
|
-
const hasOwnSignature = (block.symbol.signature.parameters && block.symbol.signature.parameters.length > 0) ||
|
|
393
|
-
!!block.symbol.signature.returnType;
|
|
394
|
-
if (methodCount > 0 && !hasOwnSignature) {
|
|
395
|
-
lines.push('');
|
|
396
|
-
lines.push(`Diese Klasse bündelt ${methodCount} Methoden. ` +
|
|
397
|
-
'Die detaillierten Signaturen sind in den nachfolgenden `method:`-Abschnitten dokumentiert.');
|
|
398
|
-
lines.push('');
|
|
399
|
-
}
|
|
400
|
-
else {
|
|
401
|
-
lines.push('');
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
else if (block.symbol.kind === 'variable' && block.symbol.fullyQualifiedName.endsWith('SNAPSHOT_CONSTANTS')) {
|
|
405
|
-
// Spezielle, strukturierte Darstellung für SNAPSHOT_CONSTANTS
|
|
406
|
-
const snapshotKeys = [];
|
|
407
|
-
const signature = inlineSignature;
|
|
408
|
-
const objectBodyMatch = signature.match(/\{\s*([^}]*)\s*\}$/);
|
|
409
|
-
if (objectBodyMatch) {
|
|
410
|
-
const body = objectBodyMatch[1];
|
|
411
|
-
const keyRegex = /readonly\s+([A-Z_]+)\s*:/g;
|
|
412
|
-
let m;
|
|
413
|
-
while ((m = keyRegex.exec(body)) !== null) {
|
|
414
|
-
snapshotKeys.push(m[1]);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
if (snapshotKeys.length > 0) {
|
|
418
|
-
snapshotKeys.sort();
|
|
419
|
-
lines.push('');
|
|
420
|
-
lines.push('Struktur:');
|
|
421
|
-
lines.push('');
|
|
422
|
-
for (const key of snapshotKeys) {
|
|
423
|
-
lines.push(`- \`${key}\`: Konfigurationsbereich innerhalb von \`SNAPSHOT_CONSTANTS\`.`);
|
|
424
|
-
}
|
|
425
|
-
lines.push('');
|
|
426
|
-
}
|
|
427
|
-
else {
|
|
428
|
-
lines.push('');
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
else {
|
|
432
|
-
lines.push('');
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
return lines.join('\n');
|
|
436
|
-
}
|
|
437
|
-
exports.renderModuleDoc = renderModuleDoc;
|
|
438
|
-
//# sourceMappingURL=module-doc.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-doc.js","sourceRoot":"","sources":["../../src/generator/module-doc.ts"],"names":[],"mappings":"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"}
|