@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
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { _type, invariant, isAncestor, } from '@likec4/core';
|
|
2
|
+
import { GrammarUtils } from 'langium';
|
|
3
|
+
import { entries, filter, findLast, isTruthy, last } from 'remeda';
|
|
4
|
+
import { TextEdit } from 'vscode-languageserver-types';
|
|
5
|
+
import { ast } from '../ast';
|
|
6
|
+
const { findNodeForKeyword } = GrammarUtils;
|
|
7
|
+
const asViewStyleRule = (target, style, indent = 0) => {
|
|
8
|
+
const indentStr = indent > 0 ? ' '.repeat(indent) : '';
|
|
9
|
+
return [
|
|
10
|
+
indentStr + `style ${target} {`,
|
|
11
|
+
...entries(style).map(([key, value]) => indentStr + ` ${key} ${key === 'opacity' ? value.toString() + '%' : value}`),
|
|
12
|
+
indentStr + `}`,
|
|
13
|
+
];
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* - is ViewRuleStyle
|
|
17
|
+
* - has exactly one target
|
|
18
|
+
* - the target is an ElementRef to the given fqn
|
|
19
|
+
*/
|
|
20
|
+
const isMatchingViewRule = (fqn, index) => (rule) => {
|
|
21
|
+
if (!ast.isViewRuleStyle(rule) && !ast.isDeploymentViewRuleStyle(rule)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const target = rule.targets.value;
|
|
25
|
+
if (!target || isTruthy(rule.targets.prev) || target.$type !== 'FqnRefExpr' || isTruthy(target.selector)) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
const ref = target.ref?.value?.ref;
|
|
29
|
+
const _fqn = ref ? index.resolve(ref) : null;
|
|
30
|
+
return _fqn === fqn;
|
|
31
|
+
};
|
|
32
|
+
export function changeElementStyle(services, { view, viewAst, targets, style, }) {
|
|
33
|
+
// Should never happen
|
|
34
|
+
invariant(viewAst.body, `View ${view.id} has no body`);
|
|
35
|
+
const viewCstNode = viewAst.$cstNode;
|
|
36
|
+
invariant(viewCstNode, 'viewCstNode');
|
|
37
|
+
const insertPos = last(viewAst.body.rules)?.$cstNode?.range.end
|
|
38
|
+
?? viewAst.body.$cstNode?.range.end;
|
|
39
|
+
invariant(insertPos, 'insertPos is not defined');
|
|
40
|
+
const indent = viewCstNode.range.start.character + 2;
|
|
41
|
+
const fqnIndex = services.likec4.FqnIndex;
|
|
42
|
+
const styleRules = filter(viewAst.body.rules, (r) => ast.isViewRuleStyle(r) || ast.isDeploymentViewRuleStyle(r));
|
|
43
|
+
const viewOf = view[_type] === 'element' ? view.viewOf ?? null : null;
|
|
44
|
+
// Find existing rules
|
|
45
|
+
const existing = [];
|
|
46
|
+
const insert = [];
|
|
47
|
+
// const existingRules = [] as Array<{ fqn: Fqn, rule: ast.ViewRuleStyle }>
|
|
48
|
+
targets.forEach(target => {
|
|
49
|
+
const rule = findLast(styleRules, isMatchingViewRule(target, fqnIndex));
|
|
50
|
+
// remove viewOf from the target to shorten the fqn
|
|
51
|
+
const fqn = (viewOf && isAncestor(viewOf, target) ? target.substring(viewOf.length + 1) : target);
|
|
52
|
+
if (rule) {
|
|
53
|
+
existing.push({ fqn, rule });
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
insert.push({ fqn });
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
const modifiedRange = {
|
|
60
|
+
start: insertPos,
|
|
61
|
+
end: insertPos,
|
|
62
|
+
};
|
|
63
|
+
const includeRange = (range) => {
|
|
64
|
+
if (range.start.line <= modifiedRange.start.line) {
|
|
65
|
+
if (range.start.line == modifiedRange.start.line) {
|
|
66
|
+
modifiedRange.start.character = Math.min(range.start.character, modifiedRange.start.character);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
modifiedRange.start = range.start;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (range.end.line >= modifiedRange.end.line) {
|
|
73
|
+
if (range.end.line == modifiedRange.end.line) {
|
|
74
|
+
modifiedRange.end.character = Math.max(range.end.character, modifiedRange.end.character);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
modifiedRange.end = range.end;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const edits = [];
|
|
82
|
+
if (insert.length > 0) {
|
|
83
|
+
const linesToInsert = insert.flatMap(({ fqn }) => asViewStyleRule(fqn, style, indent));
|
|
84
|
+
edits.push(TextEdit.insert(insertPos, '\n' + linesToInsert.join('\n')));
|
|
85
|
+
modifiedRange.start = {
|
|
86
|
+
line: insertPos.line + 1,
|
|
87
|
+
character: indent,
|
|
88
|
+
};
|
|
89
|
+
modifiedRange.end = {
|
|
90
|
+
line: insertPos.line + linesToInsert.length,
|
|
91
|
+
character: (last(linesToInsert)?.length ?? 0),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (existing.length > 0) {
|
|
95
|
+
for (const { rule } of existing) {
|
|
96
|
+
const ruleCstNode = rule.$cstNode;
|
|
97
|
+
invariant(ruleCstNode, 'RuleCstNode not found');
|
|
98
|
+
for (const [key, _value] of entries(style)) {
|
|
99
|
+
const value = key === 'opacity' ? _value.toString() + '%' : _value;
|
|
100
|
+
const ruleProp = rule.props.find(p => p.key === key);
|
|
101
|
+
// replace existing property
|
|
102
|
+
if (ruleProp && ruleProp.$cstNode) {
|
|
103
|
+
const { range: { start, end } } = ruleProp.$cstNode;
|
|
104
|
+
includeRange({
|
|
105
|
+
start,
|
|
106
|
+
end,
|
|
107
|
+
});
|
|
108
|
+
edits.push(TextEdit.replace({ start, end }, key + ' ' + value));
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
// insert new style property right after the opening brace
|
|
112
|
+
const insertPos = findNodeForKeyword(ruleCstNode, '{')?.range.end;
|
|
113
|
+
invariant(insertPos, 'Opening brace not found');
|
|
114
|
+
const indentStr = ' '.repeat(ruleCstNode.range.start.character) + '\t';
|
|
115
|
+
const insertKeyValue = indentStr + key + ' ' + value;
|
|
116
|
+
edits.push(TextEdit.insert(insertPos, '\n' + insertKeyValue));
|
|
117
|
+
includeRange({
|
|
118
|
+
start: {
|
|
119
|
+
line: insertPos.line + 1,
|
|
120
|
+
character: indentStr.length,
|
|
121
|
+
},
|
|
122
|
+
end: {
|
|
123
|
+
line: insertPos.line + 1,
|
|
124
|
+
character: insertKeyValue.length,
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
modifiedRange,
|
|
132
|
+
edits,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ViewChange } from '@likec4/core';
|
|
2
2
|
import { TextEdit } from 'vscode-languageserver-types';
|
|
3
|
-
import {
|
|
3
|
+
import { type ParsedAstView, type ParsedLikeC4LangiumDocument, ast } from '../ast';
|
|
4
4
|
import type { LikeC4Services } from '../module';
|
|
5
5
|
type ChangeViewLayoutArg = {
|
|
6
6
|
view: ParsedAstView;
|
|
@@ -8,5 +8,5 @@ type ChangeViewLayoutArg = {
|
|
|
8
8
|
viewAst: ast.LikeC4View;
|
|
9
9
|
layout: ViewChange.ChangeAutoLayout['layout'];
|
|
10
10
|
};
|
|
11
|
-
export declare function changeViewLayout(_services: LikeC4Services, { view, viewAst, layout }: ChangeViewLayoutArg): TextEdit;
|
|
11
|
+
export declare function changeViewLayout(_services: LikeC4Services, { view, viewAst, layout, }: ChangeViewLayoutArg): TextEdit;
|
|
12
12
|
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
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';
|
|
6
|
+
const { findNodeForKeyword } = GrammarUtils;
|
|
7
|
+
export function changeViewLayout(_services, { view, viewAst, layout, }) {
|
|
8
|
+
// Should never happen
|
|
9
|
+
invariant(viewAst.body, `View ${view.id} has no body`);
|
|
10
|
+
const viewCstNode = viewAst.$cstNode;
|
|
11
|
+
invariant(viewCstNode, 'viewCstNode');
|
|
12
|
+
const newdirection = toAstViewLayoutDirection(layout.direction);
|
|
13
|
+
const existingRule = findLast(viewAst.body.rules, ast.isViewRuleAutoLayout);
|
|
14
|
+
let newRule = `autoLayout ${newdirection}`;
|
|
15
|
+
if (isNumber(layout.rankSep)) {
|
|
16
|
+
newRule += ` ${layout.rankSep}`;
|
|
17
|
+
if (isNumber(layout.nodeSep)) {
|
|
18
|
+
newRule += ` ${layout.nodeSep}`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (existingRule && existingRule.$cstNode) {
|
|
22
|
+
return TextEdit.replace(existingRule.$cstNode.range, newRule);
|
|
23
|
+
}
|
|
24
|
+
const insertPos = findNodeForKeyword(viewAst.body.$cstNode, '}')?.range.start;
|
|
25
|
+
invariant(insertPos, 'Closing brace not found');
|
|
26
|
+
const insert = `\t${newRule}\n\t`;
|
|
27
|
+
return TextEdit.insert(insertPos, insert);
|
|
28
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ViewLocateResult } from '../model/model-locator';
|
|
2
|
+
import type { LikeC4Services } from '../module';
|
|
3
|
+
type RemoveManualLayoutV1Args = {
|
|
4
|
+
lookup: ViewLocateResult;
|
|
5
|
+
};
|
|
6
|
+
export declare function removeManualLayoutV1(services: LikeC4Services, { lookup, }: RemoveManualLayoutV1Args): Promise<boolean>;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { invariant } from '@likec4/core';
|
|
2
|
+
import { CstUtils } from 'langium';
|
|
3
|
+
import { TextEdit } from 'vscode-languageserver-types';
|
|
4
|
+
import { hasManualLayout } from '../view-utils/manual-layout';
|
|
5
|
+
export async function removeManualLayoutV1(services, { lookup, }) {
|
|
6
|
+
// No manual layout v1 present
|
|
7
|
+
if (!lookup.view.manualLayout) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
const cstnode = lookup.viewAst.$cstNode;
|
|
11
|
+
invariant(cstnode, 'invalid view.$cstNode');
|
|
12
|
+
const lspConnection = services.shared.lsp.Connection;
|
|
13
|
+
invariant(lspConnection, 'LSP Connection not available');
|
|
14
|
+
const commentCst = CstUtils.findCommentNode(cstnode, ['BLOCK_COMMENT']);
|
|
15
|
+
if (commentCst && hasManualLayout(commentCst.text)) {
|
|
16
|
+
const edit = await lspConnection.workspace.applyEdit({
|
|
17
|
+
label: `LikeC4 - remove manual layout v1 for ${lookup.view.id}`,
|
|
18
|
+
edit: {
|
|
19
|
+
changes: {
|
|
20
|
+
[lookup.doc.textDocument.uri]: [TextEdit.del(commentCst.range)],
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
return edit.applied;
|
|
25
|
+
}
|
|
26
|
+
return false;
|
|
27
|
+
}
|
package/dist/module.d.ts
CHANGED
|
@@ -3,8 +3,9 @@ import { type Module, WorkspaceCache } from 'langium';
|
|
|
3
3
|
import { type DefaultSharedModuleContext, type LangiumServices, type LangiumSharedServices, type PartialLangiumServices } from 'langium/lsp';
|
|
4
4
|
import { LikeC4DocumentationProvider } from './documentation';
|
|
5
5
|
import { type FileSystemModuleContext, type FileSystemProvider, type FileSystemWatcher } from './filesystem';
|
|
6
|
+
import { LikeC4Formatter } from './formatting/LikeC4Formatter';
|
|
6
7
|
import { type LikeC4LanguageServices } from './LikeC4LanguageServices';
|
|
7
|
-
import { LikeC4CodeLensProvider, LikeC4CompletionProvider, LikeC4DocumentHighlightProvider, LikeC4DocumentLinkProvider, LikeC4DocumentSymbolProvider, LikeC4HoverProvider, LikeC4SemanticTokenProvider } from './lsp';
|
|
8
|
+
import { LikeC4CodeActionProvider, LikeC4CodeLensProvider, LikeC4CompletionProvider, LikeC4DocumentHighlightProvider, LikeC4DocumentLinkProvider, LikeC4DocumentSymbolProvider, LikeC4HoverProvider, LikeC4SemanticTokenProvider } from './lsp';
|
|
8
9
|
import { type LikeC4MCPServer, type LikeC4MCPServerModuleContext } from './mcp/interfaces';
|
|
9
10
|
import { LikeC4MCPServerFactory } from './mcp/MCPServerFactory';
|
|
10
11
|
import { type LikeC4ModelBuilder, DeploymentsIndex, FqnIndex, LikeC4ModelLocator, LikeC4ModelParser, LikeC4ValueConverter } from './model';
|
|
@@ -13,15 +14,17 @@ import { LikeC4NameProvider, LikeC4ScopeComputation, LikeC4ScopeProvider } from
|
|
|
13
14
|
import { Rpc } from './Rpc';
|
|
14
15
|
import { NodeKindProvider, WorkspaceSymbolProvider } from './shared';
|
|
15
16
|
import { LikeC4DocumentValidator } from './validation';
|
|
16
|
-
import { type LikeC4Views } from './views';
|
|
17
|
+
import { type LikeC4ManualLayouts, type LikeC4Views } from './views';
|
|
18
|
+
import type { LikeC4ManualLayoutsModuleContext } from './views/LikeC4ManualLayouts';
|
|
17
19
|
import { IndexManager, LangiumDocuments, LikeC4WorkspaceManager, ProjectsManager } from './workspace';
|
|
18
|
-
export type LanguageServicesContext = Omit<DefaultSharedModuleContext, 'fileSystemProvider'> & FileSystemModuleContext & LikeC4MCPServerModuleContext;
|
|
20
|
+
export type LanguageServicesContext = Omit<DefaultSharedModuleContext, 'fileSystemProvider'> & FileSystemModuleContext & LikeC4MCPServerModuleContext & LikeC4ManualLayoutsModuleContext;
|
|
19
21
|
interface LikeC4AddedSharedServices {
|
|
20
22
|
lsp: {
|
|
21
23
|
NodeKindProvider: NodeKindProvider;
|
|
22
24
|
WorkspaceSymbolProvider: WorkspaceSymbolProvider;
|
|
23
25
|
};
|
|
24
26
|
workspace: {
|
|
27
|
+
Cache: WorkspaceCache<string, any>;
|
|
25
28
|
ProjectsManager: ProjectsManager;
|
|
26
29
|
IndexManager: IndexManager;
|
|
27
30
|
LangiumDocuments: LangiumDocuments;
|
|
@@ -38,7 +41,6 @@ export interface LikeC4AddedServices {
|
|
|
38
41
|
documentation: {
|
|
39
42
|
DocumentationProvider: LikeC4DocumentationProvider;
|
|
40
43
|
};
|
|
41
|
-
ValidatedWorkspaceCache: WorkspaceCache<string, any>;
|
|
42
44
|
validation: {
|
|
43
45
|
DocumentValidator: LikeC4DocumentValidator;
|
|
44
46
|
};
|
|
@@ -50,6 +52,7 @@ export interface LikeC4AddedServices {
|
|
|
50
52
|
likec4: {
|
|
51
53
|
LanguageServices: LikeC4LanguageServices;
|
|
52
54
|
Views: LikeC4Views;
|
|
55
|
+
ManualLayouts: LikeC4ManualLayouts;
|
|
53
56
|
Layouter: QueueGraphvizLayoter;
|
|
54
57
|
DeploymentsIndex: DeploymentsIndex;
|
|
55
58
|
FqnIndex: FqnIndex;
|
|
@@ -66,6 +69,8 @@ export interface LikeC4AddedServices {
|
|
|
66
69
|
HoverProvider: LikeC4HoverProvider;
|
|
67
70
|
CodeLensProvider: LikeC4CodeLensProvider;
|
|
68
71
|
DocumentLinkProvider: LikeC4DocumentLinkProvider;
|
|
72
|
+
Formatter: LikeC4Formatter;
|
|
73
|
+
CodeActionProvider: LikeC4CodeActionProvider;
|
|
69
74
|
};
|
|
70
75
|
references: {
|
|
71
76
|
NameProvider: LikeC4NameProvider;
|
|
@@ -78,7 +83,7 @@ export interface LikeC4AddedServices {
|
|
|
78
83
|
};
|
|
79
84
|
}
|
|
80
85
|
export type LikeC4Services = LangiumServices & LikeC4AddedServices;
|
|
81
|
-
export declare const createLikeC4Module: (context: LikeC4MCPServerModuleContext) => Module<LikeC4Services, PartialLangiumServices & LikeC4AddedServices>;
|
|
86
|
+
export declare const createLikeC4Module: (context: LikeC4MCPServerModuleContext & LikeC4ManualLayoutsModuleContext) => Module<LikeC4Services, PartialLangiumServices & LikeC4AddedServices>;
|
|
82
87
|
export declare function createLanguageServices<I1, I2, I3, I extends I1 & I2 & I3 & LikeC4Services>(context: Partial<LanguageServicesContext>, module?: Module<I, I1>, module2?: Module<I, I2>, module3?: Module<I, I3>): {
|
|
83
88
|
shared: LikeC4SharedServices;
|
|
84
89
|
likec4: I;
|
package/dist/module.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { onNextTick } from '@likec4/core/utils';
|
|
2
|
+
import { GraphvizWasmAdapter, QueueGraphvizLayoter } from '@likec4/layouts';
|
|
3
|
+
import { DocumentState, inject, WorkspaceCache, } from 'langium';
|
|
4
|
+
import { createDefaultModule, createDefaultSharedModule, } from 'langium/lsp';
|
|
5
|
+
import { LikeC4DocumentationProvider } from './documentation';
|
|
6
|
+
import { NoopFileSystem, } from './filesystem';
|
|
7
|
+
import { LikeC4Formatter } from './formatting/LikeC4Formatter';
|
|
8
|
+
import { LikeC4GeneratedModule, LikeC4GeneratedSharedModule, } from './generated/module';
|
|
9
|
+
import { DefaultLikeC4LanguageServices } from './LikeC4LanguageServices';
|
|
10
|
+
import { LikeC4CodeActionProvider, LikeC4CodeLensProvider, LikeC4CompletionProvider, LikeC4DocumentHighlightProvider, LikeC4DocumentLinkProvider, LikeC4DocumentSymbolProvider, LikeC4HoverProvider, LikeC4SemanticTokenProvider, } from './lsp';
|
|
11
|
+
import { NoMCPServer, } from './mcp/interfaces';
|
|
12
|
+
import { LikeC4MCPServerFactory } from './mcp/MCPServerFactory';
|
|
13
|
+
import { DefaultLikeC4ModelBuilder, DeploymentsIndex, FqnIndex, LikeC4ModelLocator, LikeC4ModelParser, LikeC4ValueConverter, } from './model';
|
|
14
|
+
import { LikeC4ModelChanges } from './model-change/ModelChanges';
|
|
15
|
+
import { LikeC4NameProvider, LikeC4ScopeComputation, LikeC4ScopeProvider, } from './references';
|
|
16
|
+
import { Rpc } from './Rpc';
|
|
17
|
+
import { NodeKindProvider, WorkspaceSymbolProvider, } from './shared';
|
|
18
|
+
import { LikeC4DocumentValidator, registerValidationChecks } from './validation';
|
|
19
|
+
import { DefaultLikeC4Views, NoopLikeC4ManualLayouts } from './views';
|
|
20
|
+
import { AstNodeDescriptionProvider, IndexManager, LangiumDocuments, LikeC4WorkspaceManager, ProjectsManager, } from './workspace';
|
|
21
|
+
const createLikeC4SharedModule = (context) => ({
|
|
22
|
+
lsp: {
|
|
23
|
+
NodeKindProvider: services => new NodeKindProvider(services),
|
|
24
|
+
WorkspaceSymbolProvider: services => new WorkspaceSymbolProvider(services),
|
|
25
|
+
},
|
|
26
|
+
workspace: {
|
|
27
|
+
Cache: services => new WorkspaceCache(services, DocumentState.Validated),
|
|
28
|
+
IndexManager: services => new IndexManager(services),
|
|
29
|
+
LangiumDocuments: services => new LangiumDocuments(services),
|
|
30
|
+
ProjectsManager: services => new ProjectsManager(services),
|
|
31
|
+
WorkspaceManager: services => new LikeC4WorkspaceManager(services),
|
|
32
|
+
FileSystemProvider: services => context.fileSystemProvider(services),
|
|
33
|
+
FileSystemWatcher: services => context.fileSystemWatcher(services),
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
function bind(Type) {
|
|
37
|
+
return (services) => new Type(services);
|
|
38
|
+
}
|
|
39
|
+
export const createLikeC4Module = (context) => ({
|
|
40
|
+
documentation: {
|
|
41
|
+
DocumentationProvider: bind(LikeC4DocumentationProvider),
|
|
42
|
+
},
|
|
43
|
+
validation: {
|
|
44
|
+
DocumentValidator: bind(LikeC4DocumentValidator),
|
|
45
|
+
},
|
|
46
|
+
Rpc: bind(Rpc),
|
|
47
|
+
mcp: {
|
|
48
|
+
Server: (services) => context.mcpServer(services),
|
|
49
|
+
ServerFactory: bind(LikeC4MCPServerFactory),
|
|
50
|
+
},
|
|
51
|
+
likec4: {
|
|
52
|
+
LanguageServices: bind(DefaultLikeC4LanguageServices),
|
|
53
|
+
Layouter: (_services) => {
|
|
54
|
+
return new QueueGraphvizLayoter({
|
|
55
|
+
graphviz: new GraphvizWasmAdapter(),
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
Views: bind(DefaultLikeC4Views),
|
|
59
|
+
ManualLayouts: (services) => context.manualLayouts(services),
|
|
60
|
+
DeploymentsIndex: bind(DeploymentsIndex),
|
|
61
|
+
ModelChanges: bind(LikeC4ModelChanges),
|
|
62
|
+
FqnIndex: bind(FqnIndex),
|
|
63
|
+
ModelParser: bind(LikeC4ModelParser),
|
|
64
|
+
ModelBuilder: bind(DefaultLikeC4ModelBuilder),
|
|
65
|
+
ModelLocator: bind(LikeC4ModelLocator),
|
|
66
|
+
},
|
|
67
|
+
lsp: {
|
|
68
|
+
// RenameProvider: bind(LikeC4RenameProvider),
|
|
69
|
+
CompletionProvider: bind(LikeC4CompletionProvider),
|
|
70
|
+
DocumentHighlightProvider: bind(LikeC4DocumentHighlightProvider),
|
|
71
|
+
DocumentSymbolProvider: bind(LikeC4DocumentSymbolProvider),
|
|
72
|
+
SemanticTokenProvider: bind(LikeC4SemanticTokenProvider),
|
|
73
|
+
HoverProvider: bind(LikeC4HoverProvider),
|
|
74
|
+
CodeLensProvider: bind(LikeC4CodeLensProvider),
|
|
75
|
+
DocumentLinkProvider: bind(LikeC4DocumentLinkProvider),
|
|
76
|
+
Formatter: bind(LikeC4Formatter),
|
|
77
|
+
CodeActionProvider: bind(LikeC4CodeActionProvider),
|
|
78
|
+
},
|
|
79
|
+
workspace: {
|
|
80
|
+
AstNodeDescriptionProvider: bind(AstNodeDescriptionProvider),
|
|
81
|
+
},
|
|
82
|
+
references: {
|
|
83
|
+
NameProvider: bind(LikeC4NameProvider),
|
|
84
|
+
ScopeComputation: bind(LikeC4ScopeComputation),
|
|
85
|
+
ScopeProvider: bind(LikeC4ScopeProvider),
|
|
86
|
+
},
|
|
87
|
+
parser: {
|
|
88
|
+
ValueConverter: bind(LikeC4ValueConverter),
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
export function createLanguageServices(context, module, module2, module3) {
|
|
92
|
+
const shared = createSharedServices(context);
|
|
93
|
+
const modules = [
|
|
94
|
+
createDefaultModule({ shared }),
|
|
95
|
+
LikeC4GeneratedModule,
|
|
96
|
+
createLikeC4Module({
|
|
97
|
+
...NoMCPServer,
|
|
98
|
+
...NoopLikeC4ManualLayouts,
|
|
99
|
+
...context,
|
|
100
|
+
}),
|
|
101
|
+
module,
|
|
102
|
+
module2,
|
|
103
|
+
module3,
|
|
104
|
+
].reduce(_merge, {});
|
|
105
|
+
const likec4 = inject(modules);
|
|
106
|
+
shared.ServiceRegistry.register(likec4);
|
|
107
|
+
registerValidationChecks(likec4);
|
|
108
|
+
if (!context.connection) {
|
|
109
|
+
// We don't run inside a language server
|
|
110
|
+
// Therefore, initialize the configuration provider instantly
|
|
111
|
+
void shared.workspace.ConfigurationProvider.initialized({});
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
onNextTick(() => likec4.Rpc.init());
|
|
115
|
+
}
|
|
116
|
+
return { shared, likec4 };
|
|
117
|
+
}
|
|
118
|
+
export function createSharedServices(context = {}) {
|
|
119
|
+
const moduleContext = {
|
|
120
|
+
...NoMCPServer,
|
|
121
|
+
...NoopFileSystem,
|
|
122
|
+
...NoopLikeC4ManualLayouts,
|
|
123
|
+
...context,
|
|
124
|
+
};
|
|
125
|
+
return inject(createDefaultSharedModule(moduleContext), LikeC4GeneratedSharedModule, createLikeC4SharedModule(moduleContext));
|
|
126
|
+
}
|
|
127
|
+
// Copied from langium/src/dependency-injection.ts as it is not exported
|
|
128
|
+
function _merge(target, source) {
|
|
129
|
+
if (source) {
|
|
130
|
+
for (const [key, value2] of Object.entries(source)) {
|
|
131
|
+
if (value2 !== undefined) {
|
|
132
|
+
const value1 = target[key];
|
|
133
|
+
if (value1 !== null && value2 !== null && typeof value1 === 'object' && typeof value2 === 'object') {
|
|
134
|
+
target[key] = _merge(value1, value2);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
target[key] = value2;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return target;
|
|
143
|
+
}
|
package/dist/protocol.d.ts
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
import type { LikeC4ProjectJsonConfig } from '@likec4/config';
|
|
2
|
-
import type { ComputedLikeC4ModelData,
|
|
2
|
+
import type { ComputedLikeC4ModelData, DeploymentFqn, DiagramView, Fqn, LayoutedLikeC4ModelData, NonEmptyArray, ProjectId, RelationId, ViewChange, ViewId } from '@likec4/core';
|
|
3
3
|
import { NotificationType, RequestType, RequestType0 } from 'vscode-jsonrpc';
|
|
4
4
|
import type { DiagnosticSeverity, DocumentUri, Location, Position, Range, URI } from 'vscode-languageserver-types';
|
|
5
5
|
export declare namespace DidChangeModelNotification {
|
|
6
6
|
const type: NotificationType<string>;
|
|
7
7
|
type Type = typeof type;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* When the snapshot of a manual layout changes
|
|
11
|
+
* Send by the editor to the language server
|
|
12
|
+
*/
|
|
13
|
+
export declare namespace DidChangeSnapshotNotification {
|
|
14
|
+
type Params = {
|
|
15
|
+
snapshotUri: DocumentUri;
|
|
16
|
+
};
|
|
17
|
+
const Method: "likec4/onDidChangeSnapshot";
|
|
18
|
+
const type: NotificationType<Params>;
|
|
19
|
+
type Type = typeof type;
|
|
20
|
+
}
|
|
9
21
|
/**
|
|
10
22
|
* When server requests to open a likec4 preview panel
|
|
11
23
|
* (available only in the editor).
|
|
@@ -49,22 +61,6 @@ export declare namespace FetchViewsFromAllProjects {
|
|
|
49
61
|
const req: RequestType0<Res, void>;
|
|
50
62
|
type Req = typeof req;
|
|
51
63
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Request to compute a view.
|
|
54
|
-
* If LSP has multiple projects, the projectId is required.
|
|
55
|
-
* otherwise throws an error.
|
|
56
|
-
*/
|
|
57
|
-
export declare namespace ComputeView {
|
|
58
|
-
type Params = {
|
|
59
|
-
viewId: ViewId;
|
|
60
|
-
projectId?: string;
|
|
61
|
-
};
|
|
62
|
-
type Result = {
|
|
63
|
-
view: ComputedView | null;
|
|
64
|
-
};
|
|
65
|
-
const req: RequestType<Params, Result, void>;
|
|
66
|
-
type Req = typeof req;
|
|
67
|
-
}
|
|
68
64
|
/**
|
|
69
65
|
* Request to fetch the layouted model data
|
|
70
66
|
* If LSP has multiple projects, the projectId is required.
|
|
@@ -88,6 +84,7 @@ export declare namespace LayoutView {
|
|
|
88
84
|
type Params = {
|
|
89
85
|
viewId: ViewId;
|
|
90
86
|
projectId?: string | undefined;
|
|
87
|
+
layoutType?: 'auto' | 'manual' | undefined;
|
|
91
88
|
};
|
|
92
89
|
type Res = {
|
|
93
90
|
result: {
|
|
@@ -118,8 +115,8 @@ export declare namespace ValidateLayout {
|
|
|
118
115
|
};
|
|
119
116
|
}[] | null;
|
|
120
117
|
};
|
|
121
|
-
const
|
|
122
|
-
type Req = typeof
|
|
118
|
+
const req: RequestType<Params, Res, void>;
|
|
119
|
+
type Req = typeof req;
|
|
123
120
|
}
|
|
124
121
|
/**
|
|
125
122
|
* Request to reload projects.
|
|
@@ -139,7 +136,10 @@ export declare namespace FetchProjects {
|
|
|
139
136
|
projects: {
|
|
140
137
|
[projectId: ProjectId]: {
|
|
141
138
|
folder: URI;
|
|
142
|
-
config:
|
|
139
|
+
config: {
|
|
140
|
+
name: string;
|
|
141
|
+
title?: string | undefined;
|
|
142
|
+
};
|
|
143
143
|
docs: NonEmptyArray<DocumentUri>;
|
|
144
144
|
};
|
|
145
145
|
};
|
|
@@ -168,8 +168,8 @@ export declare namespace BuildDocuments {
|
|
|
168
168
|
type Params = {
|
|
169
169
|
docs: DocumentUri[];
|
|
170
170
|
};
|
|
171
|
-
const
|
|
172
|
-
type Req = typeof
|
|
171
|
+
const req: RequestType<Params, void, void>;
|
|
172
|
+
type Req = typeof req;
|
|
173
173
|
}
|
|
174
174
|
/**
|
|
175
175
|
* Request to locate an element, relation, deployment or view.
|
|
@@ -216,8 +216,8 @@ export declare namespace Locate {
|
|
|
216
216
|
projectId?: string | undefined;
|
|
217
217
|
};
|
|
218
218
|
type Res = Location | null;
|
|
219
|
-
const
|
|
220
|
-
type Req = typeof
|
|
219
|
+
const req: RequestType<Params, Res, void>;
|
|
220
|
+
type Req = typeof req;
|
|
221
221
|
}
|
|
222
222
|
/**
|
|
223
223
|
* Request to change the view
|
|
@@ -229,9 +229,16 @@ export declare namespace ChangeView {
|
|
|
229
229
|
change: ViewChange;
|
|
230
230
|
projectId?: string | undefined;
|
|
231
231
|
};
|
|
232
|
-
type Res =
|
|
233
|
-
|
|
234
|
-
|
|
232
|
+
type Res = {
|
|
233
|
+
success: true;
|
|
234
|
+
location: Location | null;
|
|
235
|
+
} | {
|
|
236
|
+
success: false;
|
|
237
|
+
location?: Location | null;
|
|
238
|
+
error: string;
|
|
239
|
+
};
|
|
240
|
+
const req: RequestType<Params, Res, void>;
|
|
241
|
+
type Req = typeof req;
|
|
235
242
|
}
|
|
236
243
|
/**
|
|
237
244
|
* Request to fetch telemetry metrics
|
package/dist/protocol.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { NotificationType, RequestType, RequestType0 } from 'vscode-jsonrpc';
|
|
2
|
+
export var DidChangeModelNotification;
|
|
3
|
+
(function (DidChangeModelNotification) {
|
|
4
|
+
DidChangeModelNotification.type = new NotificationType('likec4/onDidChangeModel');
|
|
5
|
+
})(DidChangeModelNotification || (DidChangeModelNotification = {}));
|
|
6
|
+
/**
|
|
7
|
+
* When the snapshot of a manual layout changes
|
|
8
|
+
* Send by the editor to the language server
|
|
9
|
+
*/
|
|
10
|
+
export var DidChangeSnapshotNotification;
|
|
11
|
+
(function (DidChangeSnapshotNotification) {
|
|
12
|
+
DidChangeSnapshotNotification.Method = 'likec4/onDidChangeSnapshot';
|
|
13
|
+
DidChangeSnapshotNotification.type = new NotificationType(DidChangeSnapshotNotification.Method);
|
|
14
|
+
})(DidChangeSnapshotNotification || (DidChangeSnapshotNotification = {}));
|
|
15
|
+
/**
|
|
16
|
+
* When server requests to open a likec4 preview panel
|
|
17
|
+
* (available only in the editor).
|
|
18
|
+
* (not the best place, but seems to be working)
|
|
19
|
+
*/
|
|
20
|
+
export var DidRequestOpenViewNotification;
|
|
21
|
+
(function (DidRequestOpenViewNotification) {
|
|
22
|
+
DidRequestOpenViewNotification.type = new NotificationType('likec4/onRequestOpenView');
|
|
23
|
+
})(DidRequestOpenViewNotification || (DidRequestOpenViewNotification = {}));
|
|
24
|
+
/**
|
|
25
|
+
* Request to fetch the computed model data
|
|
26
|
+
* If LSP has multiple projects, the projectId is required.
|
|
27
|
+
* otherwise throws an error.
|
|
28
|
+
*/
|
|
29
|
+
export var FetchComputedModel;
|
|
30
|
+
(function (FetchComputedModel) {
|
|
31
|
+
FetchComputedModel.req = new RequestType('likec4/fetchComputedModel');
|
|
32
|
+
})(FetchComputedModel || (FetchComputedModel = {}));
|
|
33
|
+
/**
|
|
34
|
+
* Request to fetch all views of all projects
|
|
35
|
+
*/
|
|
36
|
+
export var FetchViewsFromAllProjects;
|
|
37
|
+
(function (FetchViewsFromAllProjects) {
|
|
38
|
+
FetchViewsFromAllProjects.req = new RequestType0('likec4/fetchViewsFromAllProjects');
|
|
39
|
+
})(FetchViewsFromAllProjects || (FetchViewsFromAllProjects = {}));
|
|
40
|
+
/**
|
|
41
|
+
* Request to fetch the layouted model data
|
|
42
|
+
* If LSP has multiple projects, the projectId is required.
|
|
43
|
+
* otherwise throws an error.
|
|
44
|
+
*/
|
|
45
|
+
export var FetchLayoutedModel;
|
|
46
|
+
(function (FetchLayoutedModel) {
|
|
47
|
+
FetchLayoutedModel.req = new RequestType('likec4/fetchLayoutedModel');
|
|
48
|
+
})(FetchLayoutedModel || (FetchLayoutedModel = {}));
|
|
49
|
+
/**
|
|
50
|
+
* Request to layout a view.
|
|
51
|
+
* If LSP has multiple projects, the projectId is required.
|
|
52
|
+
*/
|
|
53
|
+
export var LayoutView;
|
|
54
|
+
(function (LayoutView) {
|
|
55
|
+
LayoutView.req = new RequestType('likec4/layout-view');
|
|
56
|
+
})(LayoutView || (LayoutView = {}));
|
|
57
|
+
/**
|
|
58
|
+
* Request to validate all views
|
|
59
|
+
* If projects ID is provided, it will validate only the views of that project.
|
|
60
|
+
*/
|
|
61
|
+
export var ValidateLayout;
|
|
62
|
+
(function (ValidateLayout) {
|
|
63
|
+
ValidateLayout.req = new RequestType('likec4/validate-layout');
|
|
64
|
+
})(ValidateLayout || (ValidateLayout = {}));
|
|
65
|
+
/**
|
|
66
|
+
* Request to reload projects.
|
|
67
|
+
*/
|
|
68
|
+
export var ReloadProjects;
|
|
69
|
+
(function (ReloadProjects) {
|
|
70
|
+
ReloadProjects.req = new RequestType0('likec4/reload-projects');
|
|
71
|
+
})(ReloadProjects || (ReloadProjects = {}));
|
|
72
|
+
/**
|
|
73
|
+
* Fetch all non-empty projects.
|
|
74
|
+
*/
|
|
75
|
+
export var FetchProjects;
|
|
76
|
+
(function (FetchProjects) {
|
|
77
|
+
FetchProjects.req = new RequestType0('likec4/fetch-projects');
|
|
78
|
+
})(FetchProjects || (FetchProjects = {}));
|
|
79
|
+
/**
|
|
80
|
+
* Request from the client to register a project.
|
|
81
|
+
*/
|
|
82
|
+
export var RegisterProject;
|
|
83
|
+
(function (RegisterProject) {
|
|
84
|
+
RegisterProject.req = new RequestType('likec4/register-project');
|
|
85
|
+
})(RegisterProject || (RegisterProject = {}));
|
|
86
|
+
/**
|
|
87
|
+
* Request to build documents.
|
|
88
|
+
*/
|
|
89
|
+
export var BuildDocuments;
|
|
90
|
+
(function (BuildDocuments) {
|
|
91
|
+
BuildDocuments.req = new RequestType('likec4/build');
|
|
92
|
+
})(BuildDocuments || (BuildDocuments = {}));
|
|
93
|
+
/**
|
|
94
|
+
* Request to locate an element, relation, deployment or view.
|
|
95
|
+
* If LSP has multiple projects, the projectId is required.
|
|
96
|
+
*/
|
|
97
|
+
export var Locate;
|
|
98
|
+
(function (Locate) {
|
|
99
|
+
Locate.req = new RequestType('likec4/locate');
|
|
100
|
+
})(Locate || (Locate = {}));
|
|
101
|
+
// #endregion
|
|
102
|
+
/**
|
|
103
|
+
* Request to change the view
|
|
104
|
+
* If LSP has multiple projects, the projectId is required.
|
|
105
|
+
*/
|
|
106
|
+
export var ChangeView;
|
|
107
|
+
(function (ChangeView) {
|
|
108
|
+
ChangeView.req = new RequestType('likec4/change-view');
|
|
109
|
+
})(ChangeView || (ChangeView = {}));
|
|
110
|
+
/**
|
|
111
|
+
* Request to fetch telemetry metrics
|
|
112
|
+
*/
|
|
113
|
+
export var FetchTelemetryMetrics;
|
|
114
|
+
(function (FetchTelemetryMetrics) {
|
|
115
|
+
FetchTelemetryMetrics.req = new RequestType0('likec4/metrics');
|
|
116
|
+
})(FetchTelemetryMetrics || (FetchTelemetryMetrics = {}));
|
|
117
|
+
/**
|
|
118
|
+
* Request to fetch all tags of a document
|
|
119
|
+
*/
|
|
120
|
+
export var GetDocumentTags;
|
|
121
|
+
(function (GetDocumentTags) {
|
|
122
|
+
GetDocumentTags.req = new RequestType('likec4/document-tags');
|
|
123
|
+
})(GetDocumentTags || (GetDocumentTags = {}));
|