@likec4/language-server 1.43.0 → 1.45.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/browser/package.json +1 -1
- package/browser-worker/package.json +1 -1
- package/dist/LikeC4LanguageServices.d.ts +13 -34
- package/dist/LikeC4LanguageServices.js +152 -0
- package/dist/Rpc.js +257 -0
- package/dist/ast.d.ts +5 -1
- package/dist/ast.js +257 -0
- package/dist/browser-worker.js +4 -0
- package/dist/browser.js +35 -0
- package/dist/bundled.js +44 -0
- package/dist/bundled.mjs +3568 -3900
- package/dist/documentation/documentation-provider.js +51 -0
- package/dist/documentation/index.js +1 -0
- package/dist/empty.js +2 -0
- package/dist/filesystem/ChokidarWatcher.d.ts +2 -0
- package/dist/filesystem/ChokidarWatcher.js +108 -0
- package/dist/filesystem/FileSystemWatcher.js +14 -0
- package/dist/filesystem/LikeC4FileSystem.d.ts +1 -2
- package/dist/filesystem/LikeC4FileSystem.js +126 -0
- package/dist/filesystem/index.d.ts +26 -0
- package/dist/filesystem/index.js +29 -0
- package/dist/formatting/LikeC4Formatter.js +637 -0
- package/dist/formatting/utils.js +18 -0
- package/dist/generated/ast.js +2155 -0
- package/dist/generated/{grammar.mjs → grammar.js} +6 -2
- package/dist/generated/module.d.ts +6 -1
- package/dist/generated/module.js +27 -0
- package/dist/generated-lib/{icons.mjs → icons.js} +11 -7
- package/dist/index.d.ts +10 -1
- package/dist/index.js +55 -0
- package/dist/{likec4lib.mjs → likec4lib.js} +3 -3
- package/dist/logger.js +81 -0
- package/dist/lsp/CodeActionProvider.d.ts +14 -0
- package/dist/lsp/CodeActionProvider.js +33 -0
- package/dist/lsp/CodeLensProvider.js +44 -0
- package/dist/lsp/CompletionProvider.d.ts +3 -1
- package/dist/lsp/CompletionProvider.js +200 -0
- package/dist/lsp/DocumentHighlightProvider.js +10 -0
- package/dist/lsp/DocumentLinkProvider.js +58 -0
- package/dist/lsp/DocumentSymbolProvider.js +306 -0
- package/dist/lsp/HoverProvider.js +106 -0
- package/dist/lsp/RenameProvider.js +6 -0
- package/dist/lsp/SemanticTokenProvider.js +257 -0
- package/dist/lsp/index.d.ts +1 -0
- package/dist/lsp/index.js +9 -0
- package/dist/mcp/MCPServerFactory.js +73 -0
- package/dist/mcp/NoopLikeC4MCPServer.js +17 -0
- package/dist/mcp/interfaces.js +5 -0
- package/dist/mcp/server/StdioLikeC4MCPServer.js +51 -0
- package/dist/mcp/server/StreamableLikeC4MCPServer.js +145 -0
- package/dist/mcp/server/WithMCPServer.js +56 -0
- package/dist/mcp/tools/_common.d.ts +8 -7
- package/dist/mcp/tools/_common.js +49 -0
- package/dist/mcp/tools/find-relationships.d.ts +7 -8
- package/dist/mcp/tools/find-relationships.js +150 -0
- package/dist/mcp/tools/list-projects.d.ts +3 -3
- package/dist/mcp/tools/list-projects.js +62 -0
- package/dist/mcp/tools/open-view.d.ts +6 -7
- package/dist/mcp/tools/open-view.js +52 -0
- package/dist/mcp/tools/read-deployment.d.ts +6 -7
- package/dist/mcp/tools/read-deployment.js +132 -0
- package/dist/mcp/tools/read-element.d.ts +6 -7
- package/dist/mcp/tools/read-element.js +194 -0
- package/dist/mcp/tools/read-project-summary.d.ts +5 -6
- package/dist/mcp/tools/read-project-summary.js +176 -0
- package/dist/mcp/tools/read-view.d.ts +6 -7
- package/dist/mcp/tools/read-view.js +203 -0
- package/dist/mcp/tools/search-element.d.ts +3 -3
- package/dist/mcp/tools/search-element.js +177 -0
- package/dist/mcp/utils.d.ts +2 -2
- package/dist/mcp/utils.js +48 -0
- package/dist/model/builder/MergedExtends.js +74 -0
- package/dist/model/builder/MergedSpecification.js +175 -0
- package/dist/model/builder/buildModel.js +176 -0
- package/dist/model/deployments-index.js +102 -0
- package/dist/model/fqn-index.d.ts +1 -2
- package/dist/model/fqn-index.js +247 -0
- package/dist/model/index.js +6 -0
- package/dist/model/model-builder.d.ts +13 -11
- package/dist/model/model-builder.js +232 -0
- package/dist/model/model-locator.d.ts +6 -5
- package/dist/model/model-locator.js +240 -0
- package/dist/model/model-parser-where.js +81 -0
- package/dist/model/model-parser.d.ts +309 -304
- package/dist/model/model-parser.js +126 -0
- package/dist/model/parser/Base.d.ts +2 -2
- package/dist/model/parser/Base.js +367 -0
- package/dist/model/parser/DeploymentModelParser.d.ts +2 -2
- package/dist/model/parser/DeploymentModelParser.js +176 -0
- package/dist/model/parser/DeploymentViewParser.d.ts +3 -3
- package/dist/model/parser/DeploymentViewParser.js +86 -0
- package/dist/model/parser/FqnRefParser.d.ts +2 -2
- package/dist/model/parser/FqnRefParser.js +382 -0
- package/dist/model/parser/GlobalsParser.d.ts +6 -6
- package/dist/model/parser/GlobalsParser.js +84 -0
- package/dist/model/parser/ImportsParser.d.ts +11 -12
- package/dist/model/parser/ImportsParser.js +24 -0
- package/dist/model/parser/ModelParser.d.ts +2 -2
- package/dist/model/parser/ModelParser.js +165 -0
- package/dist/model/parser/PredicatesParser.d.ts +2 -2
- package/dist/model/parser/PredicatesParser.js +45 -0
- package/dist/model/parser/SpecificationParser.d.ts +2 -2
- package/dist/model/parser/SpecificationParser.js +113 -0
- package/dist/model/parser/ValueConverter.js +12 -0
- package/dist/model/parser/ViewsParser.d.ts +3 -3
- package/dist/model/parser/ViewsParser.js +479 -0
- package/dist/model-change/ModelChanges.d.ts +8 -5
- package/dist/model-change/ModelChanges.js +129 -0
- package/dist/model-change/changeElementStyle.js +134 -0
- package/dist/model-change/changeViewLayout.d.ts +2 -2
- package/dist/model-change/changeViewLayout.js +28 -0
- package/dist/model-change/removeManualLayoutV1.d.ts +7 -0
- package/dist/model-change/removeManualLayoutV1.js +27 -0
- package/dist/module.d.ts +10 -5
- package/dist/module.js +143 -0
- package/dist/protocol.d.ts +34 -27
- package/dist/protocol.js +123 -0
- package/dist/references/index.js +3 -0
- package/dist/references/name-provider.js +37 -0
- package/dist/references/scope-computation.js +288 -0
- package/dist/references/scope-provider.d.ts +3 -3
- package/dist/references/scope-provider.js +242 -0
- package/dist/shared/NodeKindProvider.js +57 -0
- package/dist/shared/{WorkspaceSymbolProvider.mjs → WorkspaceSymbolProvider.js} +1 -1
- package/dist/shared/index.js +2 -0
- package/dist/test/index.js +1 -0
- package/dist/test/testServices.d.ts +16 -16
- package/dist/test/testServices.js +210 -0
- package/dist/utils/disposable.js +26 -0
- package/dist/utils/elementRef.d.ts +1 -1
- package/dist/utils/elementRef.js +27 -0
- package/dist/utils/fqnRef.js +63 -0
- package/dist/utils/index.js +35 -0
- package/dist/utils/printDocs.js +1 -0
- package/dist/utils/projectId.js +16 -0
- package/dist/utils/stringHash.js +5 -0
- package/dist/validation/DocumentValidator.js +17 -0
- package/dist/validation/_shared.js +26 -0
- package/dist/validation/deployment-checks.js +140 -0
- package/dist/validation/dynamic-view.js +67 -0
- package/dist/validation/element-ref.js +12 -0
- package/dist/validation/element.js +49 -0
- package/dist/validation/imports.js +46 -0
- package/dist/validation/index.d.ts +1 -1
- package/dist/validation/index.js +157 -0
- package/dist/validation/property-checks.js +108 -0
- package/dist/validation/relation.js +55 -0
- package/dist/validation/specification.js +190 -0
- package/dist/validation/view-predicates/fqn-expr-with.js +43 -0
- package/dist/validation/view-predicates/fqn-ref-expr.js +51 -0
- package/dist/validation/view-predicates/incoming.js +16 -0
- package/dist/validation/view-predicates/index.js +6 -0
- package/dist/validation/view-predicates/outgoing.js +20 -0
- package/dist/validation/view-predicates/relation-expr.js +46 -0
- package/dist/validation/view-predicates/relation-with.js +16 -0
- package/dist/validation/view.d.ts +1 -1
- package/dist/validation/view.js +42 -0
- package/dist/view-utils/assignNavigateTo.js +27 -0
- package/dist/view-utils/index.d.ts +1 -0
- package/dist/view-utils/index.js +2 -0
- package/dist/view-utils/manual-layout.d.ts +6 -0
- package/dist/view-utils/manual-layout.js +149 -0
- package/dist/views/ConfigurableLayouter.js +51 -0
- package/dist/views/LikeC4ManualLayouts.d.ts +42 -0
- package/dist/views/LikeC4ManualLayouts.js +209 -0
- package/dist/views/{likec4-views.d.ts → LikeC4Views.d.ts} +32 -10
- package/dist/views/LikeC4Views.js +216 -0
- package/dist/views/index.d.ts +4 -1
- package/dist/views/index.js +11 -0
- package/dist/workspace/AstNodeDescriptionProvider.js +18 -0
- package/dist/workspace/IndexManager.js +21 -0
- package/dist/workspace/LangiumDocuments.d.ts +4 -3
- package/dist/workspace/LangiumDocuments.js +72 -0
- package/dist/workspace/ProjectsManager.d.ts +25 -16
- package/dist/workspace/ProjectsManager.js +469 -0
- package/dist/workspace/WorkspaceManager.d.ts +3 -2
- package/dist/workspace/WorkspaceManager.js +98 -0
- package/dist/workspace/index.js +5 -0
- package/likec4lib/package.json +1 -1
- package/package.json +30 -28
- package/protocol/package.json +1 -1
- package/dist/LikeC4LanguageServices.mjs +0 -197
- package/dist/Rpc.mjs +0 -296
- package/dist/ast.mjs +0 -221
- package/dist/browser-worker.mjs +0 -2
- package/dist/browser.mjs +0 -32
- package/dist/documentation/documentation-provider.mjs +0 -48
- package/dist/documentation/index.mjs +0 -1
- package/dist/empty.mjs +0 -1
- package/dist/filesystem/ChokidarWatcher.mjs +0 -68
- package/dist/filesystem/FileSystemWatcher.mjs +0 -11
- package/dist/filesystem/LikeC4FileSystem.mjs +0 -64
- package/dist/filesystem/index.mjs +0 -19
- package/dist/formatting/LikeC4Formatter.mjs +0 -511
- package/dist/formatting/utils.mjs +0 -15
- package/dist/generated/ast.mjs +0 -2150
- package/dist/generated/module.mjs +0 -23
- package/dist/index.mjs +0 -50
- package/dist/logger.mjs +0 -82
- package/dist/lsp/CodeLensProvider.mjs +0 -42
- package/dist/lsp/CompletionProvider.mjs +0 -208
- package/dist/lsp/DocumentHighlightProvider.mjs +0 -10
- package/dist/lsp/DocumentLinkProvider.mjs +0 -53
- package/dist/lsp/DocumentSymbolProvider.mjs +0 -287
- package/dist/lsp/HoverProvider.mjs +0 -104
- package/dist/lsp/RenameProvider.mjs +0 -6
- package/dist/lsp/SemanticTokenProvider.mjs +0 -276
- package/dist/lsp/index.mjs +0 -7
- package/dist/mcp/MCPServerFactory.mjs +0 -70
- package/dist/mcp/NoopLikeC4MCPServer.mjs +0 -17
- package/dist/mcp/interfaces.mjs +0 -4
- package/dist/mcp/server/StdioLikeC4MCPServer.mjs +0 -46
- package/dist/mcp/server/StreamableLikeC4MCPServer.mjs +0 -153
- package/dist/mcp/server/WithMCPServer.mjs +0 -58
- package/dist/mcp/tools/_common.mjs +0 -42
- package/dist/mcp/tools/find-relationships.mjs +0 -151
- package/dist/mcp/tools/list-projects.mjs +0 -62
- package/dist/mcp/tools/open-view.mjs +0 -52
- package/dist/mcp/tools/read-deployment.mjs +0 -130
- package/dist/mcp/tools/read-element.mjs +0 -198
- package/dist/mcp/tools/read-project-summary.mjs +0 -178
- package/dist/mcp/tools/read-view.mjs +0 -205
- package/dist/mcp/tools/search-element.mjs +0 -171
- package/dist/mcp/utils.mjs +0 -47
- package/dist/model/builder/MergedExtends.mjs +0 -76
- package/dist/model/builder/MergedSpecification.mjs +0 -205
- package/dist/model/builder/assignTagColors.d.ts +0 -7
- package/dist/model/builder/assignTagColors.mjs +0 -51
- package/dist/model/builder/buildModel.mjs +0 -226
- package/dist/model/deployments-index.mjs +0 -100
- package/dist/model/fqn-index.mjs +0 -243
- package/dist/model/index.mjs +0 -6
- package/dist/model/model-builder.mjs +0 -285
- package/dist/model/model-locator.mjs +0 -239
- package/dist/model/model-parser-where.mjs +0 -81
- package/dist/model/model-parser.mjs +0 -127
- package/dist/model/parser/Base.mjs +0 -376
- package/dist/model/parser/DeploymentModelParser.mjs +0 -212
- package/dist/model/parser/DeploymentViewParser.mjs +0 -95
- package/dist/model/parser/FqnRefParser.mjs +0 -398
- package/dist/model/parser/GlobalsParser.mjs +0 -82
- package/dist/model/parser/ImportsParser.mjs +0 -28
- package/dist/model/parser/ModelParser.mjs +0 -190
- package/dist/model/parser/PredicatesParser.mjs +0 -45
- package/dist/model/parser/SpecificationParser.mjs +0 -120
- package/dist/model/parser/ValueConverter.mjs +0 -12
- package/dist/model/parser/ViewsParser.mjs +0 -490
- package/dist/model-change/ModelChanges.mjs +0 -89
- package/dist/model-change/changeElementStyle.mjs +0 -143
- package/dist/model-change/changeViewLayout.mjs +0 -32
- package/dist/model-change/saveManualLayout.d.ts +0 -11
- package/dist/model-change/saveManualLayout.mjs +0 -27
- package/dist/module.mjs +0 -180
- package/dist/protocol.mjs +0 -65
- package/dist/references/index.mjs +0 -3
- package/dist/references/name-provider.mjs +0 -39
- package/dist/references/scope-computation.mjs +0 -312
- package/dist/references/scope-provider.mjs +0 -239
- package/dist/shared/NodeKindProvider.mjs +0 -110
- package/dist/shared/index.mjs +0 -2
- package/dist/test/index.mjs +0 -1
- package/dist/test/testServices.mjs +0 -200
- package/dist/utils/disposable.mjs +0 -25
- package/dist/utils/elementRef.mjs +0 -20
- package/dist/utils/fqnRef.mjs +0 -57
- package/dist/utils/index.mjs +0 -33
- package/dist/utils/printDocs.mjs +0 -1
- package/dist/utils/projectId.mjs +0 -16
- package/dist/utils/stringHash.mjs +0 -5
- package/dist/validation/DocumentValidator.mjs +0 -16
- package/dist/validation/_shared.mjs +0 -25
- package/dist/validation/deployment-checks.mjs +0 -146
- package/dist/validation/dynamic-view.mjs +0 -67
- package/dist/validation/element-ref.mjs +0 -12
- package/dist/validation/element.mjs +0 -50
- package/dist/validation/imports.mjs +0 -25
- package/dist/validation/index.mjs +0 -180
- package/dist/validation/property-checks.mjs +0 -107
- package/dist/validation/relation.mjs +0 -53
- package/dist/validation/specification.mjs +0 -173
- package/dist/validation/view-predicates/fqn-expr-with.mjs +0 -43
- package/dist/validation/view-predicates/fqn-ref-expr.mjs +0 -53
- package/dist/validation/view-predicates/incoming.mjs +0 -16
- package/dist/validation/view-predicates/index.mjs +0 -6
- package/dist/validation/view-predicates/outgoing.mjs +0 -20
- package/dist/validation/view-predicates/relation-expr.mjs +0 -39
- package/dist/validation/view-predicates/relation-with.mjs +0 -16
- package/dist/validation/view.mjs +0 -25
- package/dist/view-utils/assignNavigateTo.mjs +0 -25
- package/dist/view-utils/index.mjs +0 -1
- package/dist/view-utils/manual-layout.mjs +0 -99
- package/dist/views/configurable-layouter.mjs +0 -51
- package/dist/views/index.mjs +0 -1
- package/dist/views/likec4-views.mjs +0 -166
- package/dist/workspace/AstNodeDescriptionProvider.mjs +0 -17
- package/dist/workspace/IndexManager.mjs +0 -17
- package/dist/workspace/LangiumDocuments.mjs +0 -53
- package/dist/workspace/ProjectsManager.mjs +0 -360
- package/dist/workspace/WorkspaceManager.mjs +0 -83
- package/dist/workspace/index.mjs +0 -5
- /package/dist/views/{configurable-layouter.d.ts → ConfigurableLayouter.d.ts} +0 -0
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
_type,
|
|
3
|
-
invariant,
|
|
4
|
-
isAncestor
|
|
5
|
-
} from "@likec4/core";
|
|
6
|
-
import { GrammarUtils } from "langium";
|
|
7
|
-
import { entries, filter, findLast, isTruthy, last } from "remeda";
|
|
8
|
-
import { TextEdit } from "vscode-languageserver-types";
|
|
9
|
-
import { ast } from "../ast.mjs";
|
|
10
|
-
const { findNodeForKeyword, findNodeForProperty } = GrammarUtils;
|
|
11
|
-
const asViewStyleRule = (target, style, indent = 0) => {
|
|
12
|
-
const indentStr = indent > 0 ? " ".repeat(indent) : "";
|
|
13
|
-
return [
|
|
14
|
-
indentStr + `style ${target} {`,
|
|
15
|
-
...entries(style).map(
|
|
16
|
-
([key, value]) => indentStr + ` ${key} ${key === "opacity" ? value.toString() + "%" : value}`
|
|
17
|
-
),
|
|
18
|
-
indentStr + `}`
|
|
19
|
-
];
|
|
20
|
-
};
|
|
21
|
-
const isMatchingViewRule = (fqn, index) => (rule) => {
|
|
22
|
-
if (!ast.isViewRuleStyle(rule) && !ast.isDeploymentViewRuleStyle(rule)) {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
const target = rule.targets.value;
|
|
26
|
-
if (!target || isTruthy(rule.targets.prev) || target.$type !== "FqnRefExpr" || isTruthy(target.selector)) {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
const ref = target.ref?.value?.ref;
|
|
30
|
-
const _fqn = ref ? index.resolve(ref) : null;
|
|
31
|
-
return _fqn === fqn;
|
|
32
|
-
};
|
|
33
|
-
export function changeElementStyle(services, {
|
|
34
|
-
view,
|
|
35
|
-
viewAst,
|
|
36
|
-
targets,
|
|
37
|
-
style
|
|
38
|
-
}) {
|
|
39
|
-
invariant(viewAst.body, `View ${view.id} has no body`);
|
|
40
|
-
const viewCstNode = viewAst.$cstNode;
|
|
41
|
-
invariant(viewCstNode, "viewCstNode");
|
|
42
|
-
const insertPos = last(viewAst.body.rules)?.$cstNode?.range.end ?? viewAst.body.$cstNode?.range.end;
|
|
43
|
-
invariant(insertPos, "insertPos is not defined");
|
|
44
|
-
const indent = viewCstNode.range.start.character + 2;
|
|
45
|
-
const fqnIndex = services.likec4.FqnIndex;
|
|
46
|
-
const styleRules = filter(
|
|
47
|
-
viewAst.body.rules,
|
|
48
|
-
(r) => ast.isViewRuleStyle(r) || ast.isDeploymentViewRuleStyle(r)
|
|
49
|
-
);
|
|
50
|
-
const viewOf = view[_type] === "element" ? view.viewOf ?? null : null;
|
|
51
|
-
const existing = [];
|
|
52
|
-
const insert = [];
|
|
53
|
-
targets.forEach((target) => {
|
|
54
|
-
const rule = findLast(styleRules, isMatchingViewRule(target, fqnIndex));
|
|
55
|
-
const fqn = viewOf && isAncestor(viewOf, target) ? target.substring(viewOf.length + 1) : target;
|
|
56
|
-
if (rule) {
|
|
57
|
-
existing.push({ fqn, rule });
|
|
58
|
-
} else {
|
|
59
|
-
insert.push({ fqn });
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
const modifiedRange = {
|
|
63
|
-
start: insertPos,
|
|
64
|
-
end: insertPos
|
|
65
|
-
};
|
|
66
|
-
const includeRange = (range) => {
|
|
67
|
-
if (range.start.line <= modifiedRange.start.line) {
|
|
68
|
-
if (range.start.line == modifiedRange.start.line) {
|
|
69
|
-
modifiedRange.start.character = Math.min(range.start.character, modifiedRange.start.character);
|
|
70
|
-
} else {
|
|
71
|
-
modifiedRange.start = range.start;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
if (range.end.line >= modifiedRange.end.line) {
|
|
75
|
-
if (range.end.line == modifiedRange.end.line) {
|
|
76
|
-
modifiedRange.end.character = Math.max(range.end.character, modifiedRange.end.character);
|
|
77
|
-
} else {
|
|
78
|
-
modifiedRange.end = range.end;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
const edits = [];
|
|
83
|
-
if (insert.length > 0) {
|
|
84
|
-
const linesToInsert = insert.flatMap(({ fqn }) => asViewStyleRule(fqn, style, indent));
|
|
85
|
-
edits.push(
|
|
86
|
-
TextEdit.insert(
|
|
87
|
-
insertPos,
|
|
88
|
-
"\n" + linesToInsert.join("\n")
|
|
89
|
-
)
|
|
90
|
-
);
|
|
91
|
-
modifiedRange.start = {
|
|
92
|
-
line: insertPos.line + 1,
|
|
93
|
-
character: indent
|
|
94
|
-
};
|
|
95
|
-
modifiedRange.end = {
|
|
96
|
-
line: insertPos.line + linesToInsert.length,
|
|
97
|
-
character: last(linesToInsert)?.length ?? 0
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
if (existing.length > 0) {
|
|
101
|
-
for (const { rule } of existing) {
|
|
102
|
-
const ruleCstNode = rule.$cstNode;
|
|
103
|
-
invariant(ruleCstNode, "RuleCstNode not found");
|
|
104
|
-
for (const [key, _value] of entries(style)) {
|
|
105
|
-
const value = key === "opacity" ? _value.toString() + "%" : _value;
|
|
106
|
-
const ruleProp = rule.props.find((p) => p.key === key);
|
|
107
|
-
if (ruleProp && ruleProp.$cstNode) {
|
|
108
|
-
const { range: { start, end } } = ruleProp.$cstNode;
|
|
109
|
-
includeRange({
|
|
110
|
-
start,
|
|
111
|
-
end
|
|
112
|
-
});
|
|
113
|
-
edits.push(TextEdit.replace({ start, end }, key + " " + value));
|
|
114
|
-
continue;
|
|
115
|
-
}
|
|
116
|
-
const insertPos2 = findNodeForKeyword(ruleCstNode, "{")?.range.end;
|
|
117
|
-
invariant(insertPos2, "Opening brace not found");
|
|
118
|
-
const indentStr = " ".repeat(2 + ruleCstNode.range.start.character);
|
|
119
|
-
const insertKeyValue = indentStr + key + " " + value;
|
|
120
|
-
edits.push(
|
|
121
|
-
TextEdit.insert(
|
|
122
|
-
insertPos2,
|
|
123
|
-
"\n" + insertKeyValue
|
|
124
|
-
)
|
|
125
|
-
);
|
|
126
|
-
includeRange({
|
|
127
|
-
start: {
|
|
128
|
-
line: insertPos2.line + 1,
|
|
129
|
-
character: indentStr.length
|
|
130
|
-
},
|
|
131
|
-
end: {
|
|
132
|
-
line: insertPos2.line + 1,
|
|
133
|
-
character: insertKeyValue.length
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return {
|
|
140
|
-
modifiedRange,
|
|
141
|
-
edits
|
|
142
|
-
};
|
|
143
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { invariant } from "@likec4/core";
|
|
2
|
-
import { GrammarUtils } from "langium";
|
|
3
|
-
import { findLast, isNumber } from "remeda";
|
|
4
|
-
import { TextEdit } from "vscode-languageserver-types";
|
|
5
|
-
import { ast, toAstViewLayoutDirection } from "../ast.mjs";
|
|
6
|
-
const { findNodeForProperty, findNodeForKeyword } = GrammarUtils;
|
|
7
|
-
export function changeViewLayout(_services, {
|
|
8
|
-
view,
|
|
9
|
-
viewAst,
|
|
10
|
-
layout
|
|
11
|
-
}) {
|
|
12
|
-
invariant(viewAst.body, `View ${view.id} has no body`);
|
|
13
|
-
const viewCstNode = viewAst.$cstNode;
|
|
14
|
-
invariant(viewCstNode, "viewCstNode");
|
|
15
|
-
const newdirection = toAstViewLayoutDirection(layout.direction);
|
|
16
|
-
const existingRule = findLast(viewAst.body.rules, ast.isViewRuleAutoLayout);
|
|
17
|
-
let newRule = `autoLayout ${newdirection}`;
|
|
18
|
-
if (isNumber(layout.rankSep)) {
|
|
19
|
-
newRule += ` ${layout.rankSep}`;
|
|
20
|
-
if (isNumber(layout.nodeSep)) {
|
|
21
|
-
newRule += ` ${layout.nodeSep}`;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
if (existingRule && existingRule.$cstNode) {
|
|
25
|
-
return TextEdit.replace(existingRule.$cstNode.range, newRule);
|
|
26
|
-
}
|
|
27
|
-
const insertPos = findNodeForKeyword(viewAst.body.$cstNode, "}")?.range.start;
|
|
28
|
-
invariant(insertPos, "Closing brace not found");
|
|
29
|
-
const insert = ` ${newRule}
|
|
30
|
-
`;
|
|
31
|
-
return TextEdit.insert(insertPos, insert);
|
|
32
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { type ViewChange } from '@likec4/core';
|
|
2
|
-
import { TextEdit } from 'vscode-languageserver-types';
|
|
3
|
-
import { ast, type ParsedAstView, type ParsedLikeC4LangiumDocument } from '../ast';
|
|
4
|
-
import type { LikeC4Services } from '../module';
|
|
5
|
-
export type ManualLayoutArg = {
|
|
6
|
-
view: ParsedAstView;
|
|
7
|
-
doc: ParsedLikeC4LangiumDocument;
|
|
8
|
-
viewAst: ast.LikeC4View;
|
|
9
|
-
layout: ViewChange.SaveManualLayout['layout'];
|
|
10
|
-
};
|
|
11
|
-
export declare function saveManualLayout(_services: LikeC4Services, { viewAst, layout }: ManualLayoutArg): TextEdit;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { invariant } from "@likec4/core";
|
|
2
|
-
import indentString from "indent-string";
|
|
3
|
-
import { CstUtils, GrammarUtils } from "langium";
|
|
4
|
-
import { TextEdit } from "vscode-languageserver-types";
|
|
5
|
-
import { serializeToComment } from "../view-utils/manual-layout.mjs";
|
|
6
|
-
const { findNodeForProperty } = GrammarUtils;
|
|
7
|
-
export function saveManualLayout(_services, {
|
|
8
|
-
viewAst,
|
|
9
|
-
layout
|
|
10
|
-
}) {
|
|
11
|
-
invariant(viewAst.$cstNode, "invalid view.$cstNode");
|
|
12
|
-
const commentCst = CstUtils.findCommentNode(viewAst.$cstNode, ["BLOCK_COMMENT"]);
|
|
13
|
-
let txt = serializeToComment(layout);
|
|
14
|
-
if (viewAst.$cstNode.range.start.character > 0) {
|
|
15
|
-
txt = indentString(txt, viewAst.$cstNode.range.start.character);
|
|
16
|
-
}
|
|
17
|
-
if (commentCst) {
|
|
18
|
-
return TextEdit.replace(commentCst.range, txt.trimStart());
|
|
19
|
-
}
|
|
20
|
-
return TextEdit.insert(
|
|
21
|
-
{
|
|
22
|
-
line: viewAst.$cstNode.range.start.line,
|
|
23
|
-
character: 0
|
|
24
|
-
},
|
|
25
|
-
txt + "\n"
|
|
26
|
-
);
|
|
27
|
-
}
|
package/dist/module.mjs
DELETED
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { onNextTick } from "@likec4/core/utils";
|
|
2
|
-
import { GraphvizWasmAdapter, QueueGraphvizLayoter } from "@likec4/layouts";
|
|
3
|
-
import {
|
|
4
|
-
DocumentState,
|
|
5
|
-
inject,
|
|
6
|
-
WorkspaceCache
|
|
7
|
-
} from "langium";
|
|
8
|
-
import {
|
|
9
|
-
createDefaultModule,
|
|
10
|
-
createDefaultSharedModule
|
|
11
|
-
} from "langium/lsp";
|
|
12
|
-
import { LikeC4DocumentationProvider } from "./documentation/index.mjs";
|
|
13
|
-
import {
|
|
14
|
-
NoopFileSystem
|
|
15
|
-
} from "./filesystem/index.mjs";
|
|
16
|
-
import { LikeC4Formatter } from "./formatting/LikeC4Formatter.mjs";
|
|
17
|
-
import {
|
|
18
|
-
LikeC4GeneratedModule,
|
|
19
|
-
LikeC4GeneratedSharedModule
|
|
20
|
-
} from "./generated/module.mjs";
|
|
21
|
-
import { DefaultLikeC4LanguageServices } from "./LikeC4LanguageServices.mjs";
|
|
22
|
-
import {
|
|
23
|
-
LikeC4CodeLensProvider,
|
|
24
|
-
LikeC4CompletionProvider,
|
|
25
|
-
LikeC4DocumentHighlightProvider,
|
|
26
|
-
LikeC4DocumentLinkProvider,
|
|
27
|
-
LikeC4DocumentSymbolProvider,
|
|
28
|
-
LikeC4HoverProvider,
|
|
29
|
-
LikeC4SemanticTokenProvider
|
|
30
|
-
} from "./lsp/index.mjs";
|
|
31
|
-
import {
|
|
32
|
-
NoMCPServer
|
|
33
|
-
} from "./mcp/interfaces.mjs";
|
|
34
|
-
import { LikeC4MCPServerFactory } from "./mcp/MCPServerFactory.mjs";
|
|
35
|
-
import {
|
|
36
|
-
DefaultLikeC4ModelBuilder,
|
|
37
|
-
DeploymentsIndex,
|
|
38
|
-
FqnIndex,
|
|
39
|
-
LikeC4ModelLocator,
|
|
40
|
-
LikeC4ModelParser,
|
|
41
|
-
LikeC4ValueConverter
|
|
42
|
-
} from "./model/index.mjs";
|
|
43
|
-
import { LikeC4ModelChanges } from "./model-change/ModelChanges.mjs";
|
|
44
|
-
import {
|
|
45
|
-
LikeC4NameProvider,
|
|
46
|
-
LikeC4ScopeComputation,
|
|
47
|
-
LikeC4ScopeProvider
|
|
48
|
-
} from "./references/index.mjs";
|
|
49
|
-
import { Rpc } from "./Rpc.mjs";
|
|
50
|
-
import {
|
|
51
|
-
NodeKindProvider,
|
|
52
|
-
WorkspaceSymbolProvider
|
|
53
|
-
} from "./shared/index.mjs";
|
|
54
|
-
import { LikeC4DocumentValidator, registerValidationChecks } from "./validation/index.mjs";
|
|
55
|
-
import { DefaultLikeC4Views } from "./views/index.mjs";
|
|
56
|
-
import {
|
|
57
|
-
AstNodeDescriptionProvider,
|
|
58
|
-
IndexManager,
|
|
59
|
-
LangiumDocuments,
|
|
60
|
-
LikeC4WorkspaceManager,
|
|
61
|
-
ProjectsManager
|
|
62
|
-
} from "./workspace/index.mjs";
|
|
63
|
-
const createLikeC4SharedModule = (context) => ({
|
|
64
|
-
lsp: {
|
|
65
|
-
NodeKindProvider: (services) => new NodeKindProvider(services),
|
|
66
|
-
WorkspaceSymbolProvider: (services) => new WorkspaceSymbolProvider(services)
|
|
67
|
-
},
|
|
68
|
-
workspace: {
|
|
69
|
-
IndexManager: (services) => new IndexManager(services),
|
|
70
|
-
LangiumDocuments: (services) => new LangiumDocuments(services),
|
|
71
|
-
ProjectsManager: (services) => new ProjectsManager(services),
|
|
72
|
-
WorkspaceManager: (services) => new LikeC4WorkspaceManager(services),
|
|
73
|
-
FileSystemProvider: (services) => context.fileSystemProvider(services),
|
|
74
|
-
FileSystemWatcher: (services) => context.fileSystemWatcher(services)
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
function bind(Type) {
|
|
78
|
-
return (services) => new Type(services);
|
|
79
|
-
}
|
|
80
|
-
export const createLikeC4Module = (context) => ({
|
|
81
|
-
documentation: {
|
|
82
|
-
DocumentationProvider: bind(LikeC4DocumentationProvider)
|
|
83
|
-
},
|
|
84
|
-
validation: {
|
|
85
|
-
DocumentValidator: bind(LikeC4DocumentValidator)
|
|
86
|
-
},
|
|
87
|
-
ValidatedWorkspaceCache: (services) => new WorkspaceCache(services.shared, DocumentState.Validated),
|
|
88
|
-
Rpc: bind(Rpc),
|
|
89
|
-
mcp: {
|
|
90
|
-
Server: (services) => context.mcpServer(services),
|
|
91
|
-
ServerFactory: bind(LikeC4MCPServerFactory)
|
|
92
|
-
},
|
|
93
|
-
likec4: {
|
|
94
|
-
LanguageServices: bind(DefaultLikeC4LanguageServices),
|
|
95
|
-
Layouter: (_services) => {
|
|
96
|
-
return new QueueGraphvizLayoter({
|
|
97
|
-
graphviz: new GraphvizWasmAdapter()
|
|
98
|
-
});
|
|
99
|
-
},
|
|
100
|
-
Views: bind(DefaultLikeC4Views),
|
|
101
|
-
DeploymentsIndex: bind(DeploymentsIndex),
|
|
102
|
-
ModelChanges: bind(LikeC4ModelChanges),
|
|
103
|
-
FqnIndex: bind(FqnIndex),
|
|
104
|
-
ModelParser: bind(LikeC4ModelParser),
|
|
105
|
-
ModelBuilder: bind(DefaultLikeC4ModelBuilder),
|
|
106
|
-
ModelLocator: bind(LikeC4ModelLocator)
|
|
107
|
-
},
|
|
108
|
-
lsp: {
|
|
109
|
-
// RenameProvider: bind(LikeC4RenameProvider),
|
|
110
|
-
CompletionProvider: bind(LikeC4CompletionProvider),
|
|
111
|
-
DocumentHighlightProvider: bind(LikeC4DocumentHighlightProvider),
|
|
112
|
-
DocumentSymbolProvider: bind(LikeC4DocumentSymbolProvider),
|
|
113
|
-
SemanticTokenProvider: bind(LikeC4SemanticTokenProvider),
|
|
114
|
-
HoverProvider: bind(LikeC4HoverProvider),
|
|
115
|
-
CodeLensProvider: bind(LikeC4CodeLensProvider),
|
|
116
|
-
DocumentLinkProvider: bind(LikeC4DocumentLinkProvider),
|
|
117
|
-
Formatter: bind(LikeC4Formatter)
|
|
118
|
-
},
|
|
119
|
-
workspace: {
|
|
120
|
-
AstNodeDescriptionProvider: bind(AstNodeDescriptionProvider)
|
|
121
|
-
},
|
|
122
|
-
references: {
|
|
123
|
-
NameProvider: bind(LikeC4NameProvider),
|
|
124
|
-
ScopeComputation: bind(LikeC4ScopeComputation),
|
|
125
|
-
ScopeProvider: bind(LikeC4ScopeProvider)
|
|
126
|
-
},
|
|
127
|
-
parser: {
|
|
128
|
-
ValueConverter: bind(LikeC4ValueConverter)
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
export function createLanguageServices(context, module, module2, module3) {
|
|
132
|
-
const shared = createSharedServices(context);
|
|
133
|
-
const modules = [
|
|
134
|
-
createDefaultModule({ shared }),
|
|
135
|
-
LikeC4GeneratedModule,
|
|
136
|
-
createLikeC4Module({
|
|
137
|
-
...NoMCPServer,
|
|
138
|
-
...context
|
|
139
|
-
}),
|
|
140
|
-
module,
|
|
141
|
-
module2,
|
|
142
|
-
module3
|
|
143
|
-
].reduce(_merge, {});
|
|
144
|
-
const likec4 = inject(modules);
|
|
145
|
-
shared.ServiceRegistry.register(likec4);
|
|
146
|
-
registerValidationChecks(likec4);
|
|
147
|
-
if (!context.connection) {
|
|
148
|
-
void shared.workspace.ConfigurationProvider.initialized({});
|
|
149
|
-
} else {
|
|
150
|
-
onNextTick(() => likec4.Rpc.init());
|
|
151
|
-
}
|
|
152
|
-
return { shared, likec4 };
|
|
153
|
-
}
|
|
154
|
-
export function createSharedServices(context = {}) {
|
|
155
|
-
const moduleContext = {
|
|
156
|
-
...NoMCPServer,
|
|
157
|
-
...NoopFileSystem,
|
|
158
|
-
...context
|
|
159
|
-
};
|
|
160
|
-
return inject(
|
|
161
|
-
createDefaultSharedModule(moduleContext),
|
|
162
|
-
LikeC4GeneratedSharedModule,
|
|
163
|
-
createLikeC4SharedModule(moduleContext)
|
|
164
|
-
);
|
|
165
|
-
}
|
|
166
|
-
function _merge(target, source) {
|
|
167
|
-
if (source) {
|
|
168
|
-
for (const [key, value2] of Object.entries(source)) {
|
|
169
|
-
if (value2 !== void 0) {
|
|
170
|
-
const value1 = target[key];
|
|
171
|
-
if (value1 !== null && value2 !== null && typeof value1 === "object" && typeof value2 === "object") {
|
|
172
|
-
target[key] = _merge(value1, value2);
|
|
173
|
-
} else {
|
|
174
|
-
target[key] = value2;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
return target;
|
|
180
|
-
}
|
package/dist/protocol.mjs
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { NotificationType, RequestType, RequestType0 } from "vscode-jsonrpc";
|
|
2
|
-
export var DidChangeModelNotification;
|
|
3
|
-
((DidChangeModelNotification2) => {
|
|
4
|
-
DidChangeModelNotification2.type = new NotificationType("likec4/onDidChangeModel");
|
|
5
|
-
})(DidChangeModelNotification || (DidChangeModelNotification = {}));
|
|
6
|
-
export var DidRequestOpenViewNotification;
|
|
7
|
-
((DidRequestOpenViewNotification2) => {
|
|
8
|
-
DidRequestOpenViewNotification2.type = new NotificationType("likec4/onRequestOpenView");
|
|
9
|
-
})(DidRequestOpenViewNotification || (DidRequestOpenViewNotification = {}));
|
|
10
|
-
export var FetchComputedModel;
|
|
11
|
-
((FetchComputedModel2) => {
|
|
12
|
-
FetchComputedModel2.req = new RequestType("likec4/fetchComputedModel");
|
|
13
|
-
})(FetchComputedModel || (FetchComputedModel = {}));
|
|
14
|
-
export var FetchViewsFromAllProjects;
|
|
15
|
-
((FetchViewsFromAllProjects2) => {
|
|
16
|
-
FetchViewsFromAllProjects2.req = new RequestType0("likec4/fetchViewsFromAllProjects");
|
|
17
|
-
})(FetchViewsFromAllProjects || (FetchViewsFromAllProjects = {}));
|
|
18
|
-
export var ComputeView;
|
|
19
|
-
((ComputeView2) => {
|
|
20
|
-
ComputeView2.req = new RequestType("likec4/computeView");
|
|
21
|
-
})(ComputeView || (ComputeView = {}));
|
|
22
|
-
export var FetchLayoutedModel;
|
|
23
|
-
((FetchLayoutedModel2) => {
|
|
24
|
-
FetchLayoutedModel2.req = new RequestType("likec4/fetchLayoutedModel");
|
|
25
|
-
})(FetchLayoutedModel || (FetchLayoutedModel = {}));
|
|
26
|
-
export var LayoutView;
|
|
27
|
-
((LayoutView2) => {
|
|
28
|
-
LayoutView2.req = new RequestType("likec4/layout-view");
|
|
29
|
-
})(LayoutView || (LayoutView = {}));
|
|
30
|
-
export var ValidateLayout;
|
|
31
|
-
((ValidateLayout2) => {
|
|
32
|
-
ValidateLayout2.Req = new RequestType("likec4/validate-layout");
|
|
33
|
-
})(ValidateLayout || (ValidateLayout = {}));
|
|
34
|
-
export var ReloadProjects;
|
|
35
|
-
((ReloadProjects2) => {
|
|
36
|
-
ReloadProjects2.req = new RequestType0("likec4/reload-projects");
|
|
37
|
-
})(ReloadProjects || (ReloadProjects = {}));
|
|
38
|
-
export var FetchProjects;
|
|
39
|
-
((FetchProjects2) => {
|
|
40
|
-
FetchProjects2.req = new RequestType0("likec4/fetch-projects");
|
|
41
|
-
})(FetchProjects || (FetchProjects = {}));
|
|
42
|
-
export var RegisterProject;
|
|
43
|
-
((RegisterProject2) => {
|
|
44
|
-
RegisterProject2.req = new RequestType("likec4/register-project");
|
|
45
|
-
})(RegisterProject || (RegisterProject = {}));
|
|
46
|
-
export var BuildDocuments;
|
|
47
|
-
((BuildDocuments2) => {
|
|
48
|
-
BuildDocuments2.Req = new RequestType("likec4/build");
|
|
49
|
-
})(BuildDocuments || (BuildDocuments = {}));
|
|
50
|
-
export var Locate;
|
|
51
|
-
((Locate2) => {
|
|
52
|
-
Locate2.Req = new RequestType("likec4/locate");
|
|
53
|
-
})(Locate || (Locate = {}));
|
|
54
|
-
export var ChangeView;
|
|
55
|
-
((ChangeView2) => {
|
|
56
|
-
ChangeView2.Req = new RequestType("likec4/change-view");
|
|
57
|
-
})(ChangeView || (ChangeView = {}));
|
|
58
|
-
export var FetchTelemetryMetrics;
|
|
59
|
-
((FetchTelemetryMetrics2) => {
|
|
60
|
-
FetchTelemetryMetrics2.req = new RequestType0("likec4/metrics");
|
|
61
|
-
})(FetchTelemetryMetrics || (FetchTelemetryMetrics = {}));
|
|
62
|
-
export var GetDocumentTags;
|
|
63
|
-
((GetDocumentTags2) => {
|
|
64
|
-
GetDocumentTags2.req = new RequestType("likec4/document-tags");
|
|
65
|
-
})(GetDocumentTags || (GetDocumentTags = {}));
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { nonNullable } from "@likec4/core";
|
|
2
|
-
import { DefaultNameProvider, isNamed } from "langium";
|
|
3
|
-
import { ast } from "../ast.mjs";
|
|
4
|
-
export class LikeC4NameProvider extends DefaultNameProvider {
|
|
5
|
-
constructor(services) {
|
|
6
|
-
super();
|
|
7
|
-
this.services = services;
|
|
8
|
-
}
|
|
9
|
-
getNameStrict(node) {
|
|
10
|
-
return nonNullable(
|
|
11
|
-
this.getName(node),
|
|
12
|
-
`Failed getName for ${this.services.workspace.AstNodeLocator.getAstNodePath(node)}`
|
|
13
|
-
);
|
|
14
|
-
}
|
|
15
|
-
getName(node) {
|
|
16
|
-
if (isNamed(node)) {
|
|
17
|
-
return node.name;
|
|
18
|
-
}
|
|
19
|
-
if (ast.isImported(node)) {
|
|
20
|
-
return node.imported.$refText;
|
|
21
|
-
}
|
|
22
|
-
if (ast.isDeployedInstance(node)) {
|
|
23
|
-
return node.target.modelElement.value.$refText;
|
|
24
|
-
}
|
|
25
|
-
return void 0;
|
|
26
|
-
}
|
|
27
|
-
getNameNode(node) {
|
|
28
|
-
if (isNamed(node)) {
|
|
29
|
-
return super.getNameNode(node);
|
|
30
|
-
}
|
|
31
|
-
if (ast.isImported(node)) {
|
|
32
|
-
return node.imported.$refNode;
|
|
33
|
-
}
|
|
34
|
-
if (ast.isDeployedInstance(node)) {
|
|
35
|
-
return node.target.modelElement.value.$refNode;
|
|
36
|
-
}
|
|
37
|
-
return void 0;
|
|
38
|
-
}
|
|
39
|
-
}
|