@likec4/language-server 1.47.0 → 1.49.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.
Files changed (297) hide show
  1. package/browser/package.json +2 -2
  2. package/browser-worker/package.json +2 -2
  3. package/bundled/package.json +4 -0
  4. package/dist/THIRD-PARTY-LICENSES.md +178 -0
  5. package/dist/_chunks/ConfigurableLayouter.mjs +1 -0
  6. package/dist/_chunks/LikeC4FileSystem.mjs +3 -0
  7. package/dist/_chunks/LikeC4Views.mjs +34 -0
  8. package/dist/_chunks/ProjectsManager.mjs +1 -0
  9. package/dist/_chunks/WithMCPServer.mjs +481 -0
  10. package/dist/_chunks/icons.mjs +2 -0
  11. package/dist/_chunks/index.d.mts +3107 -0
  12. package/dist/_chunks/libs/@msgpack/msgpack.mjs +1 -0
  13. package/dist/_chunks/libs/eventemitter3.mjs +1 -0
  14. package/dist/_chunks/libs/fast-equals.mjs +1 -0
  15. package/dist/_chunks/libs/p-queue.mjs +1 -0
  16. package/dist/_chunks/libs/parse-ms.mjs +1 -0
  17. package/dist/_chunks/libs/picomatch.mjs +1 -0
  18. package/dist/_chunks/libs/pretty-ms.mjs +1 -0
  19. package/dist/_chunks/libs/remeda.mjs +1 -0
  20. package/dist/_chunks/libs/strip-indent.mjs +1 -0
  21. package/dist/_chunks/libs/ufo.mjs +1 -0
  22. package/dist/_chunks/logger.mjs +1 -0
  23. package/dist/_chunks/rolldown-runtime.mjs +1 -0
  24. package/dist/_chunks/utils.mjs +1 -0
  25. package/dist/browser/index.d.mts +10 -0
  26. package/dist/browser/index.mjs +1 -0
  27. package/dist/browser/worker.d.mts +1 -0
  28. package/dist/browser/worker.mjs +1 -0
  29. package/dist/bundled.d.mts +27 -0
  30. package/dist/bundled.mjs +1 -4853
  31. package/dist/filesystem/index.d.mts +2 -0
  32. package/dist/filesystem/index.mjs +1 -0
  33. package/dist/index.d.mts +39 -0
  34. package/dist/index.mjs +1 -0
  35. package/dist/likec4lib.d.mts +16 -0
  36. package/dist/likec4lib.mjs +1 -0
  37. package/dist/mcp/index.d.mts +2 -0
  38. package/dist/mcp/index.mjs +1 -0
  39. package/dist/module.d.mts +126 -0
  40. package/dist/module.mjs +1 -0
  41. package/dist/protocol.d.mts +315 -0
  42. package/dist/protocol.mjs +1 -0
  43. package/filesystem/package.json +4 -0
  44. package/likec4lib/package.json +2 -2
  45. package/mcp/package.json +4 -0
  46. package/module/package.json +4 -0
  47. package/package.json +128 -62
  48. package/protocol/package.json +2 -2
  49. package/LICENSE +0 -21
  50. package/dist/LikeC4LanguageServices.d.ts +0 -115
  51. package/dist/LikeC4LanguageServices.js +0 -164
  52. package/dist/Rpc.d.ts +0 -9
  53. package/dist/Rpc.js +0 -276
  54. package/dist/ast.d.ts +0 -226
  55. package/dist/ast.js +0 -264
  56. package/dist/browser-worker.d.ts +0 -1
  57. package/dist/browser-worker.js +0 -4
  58. package/dist/browser.d.ts +0 -10
  59. package/dist/browser.js +0 -34
  60. package/dist/bundled.d.ts +0 -8
  61. package/dist/bundled.js +0 -44
  62. package/dist/documentation/documentation-provider.d.ts +0 -8
  63. package/dist/documentation/documentation-provider.js +0 -51
  64. package/dist/documentation/index.d.ts +0 -1
  65. package/dist/documentation/index.js +0 -1
  66. package/dist/empty.d.ts +0 -2
  67. package/dist/empty.js +0 -2
  68. package/dist/filesystem/ChokidarWatcher.d.ts +0 -19
  69. package/dist/filesystem/ChokidarWatcher.js +0 -133
  70. package/dist/filesystem/FileSystemWatcher.d.ts +0 -19
  71. package/dist/filesystem/FileSystemWatcher.js +0 -14
  72. package/dist/filesystem/LikeC4FileSystem.d.ts +0 -3
  73. package/dist/filesystem/LikeC4FileSystem.js +0 -140
  74. package/dist/filesystem/index.d.ts +0 -55
  75. package/dist/filesystem/index.js +0 -29
  76. package/dist/formatting/LikeC4Formatter.d.ts +0 -59
  77. package/dist/formatting/LikeC4Formatter.js +0 -637
  78. package/dist/formatting/utils.d.ts +0 -6
  79. package/dist/formatting/utils.js +0 -18
  80. package/dist/generated/ast.d.ts +0 -1411
  81. package/dist/generated/ast.js +0 -2207
  82. package/dist/generated/grammar.d.ts +0 -6
  83. package/dist/generated/grammar.js +0 -7
  84. package/dist/generated/module.d.ts +0 -14
  85. package/dist/generated/module.js +0 -27
  86. package/dist/generated-lib/icons.d.ts +0 -1
  87. package/dist/generated-lib/icons.js +0 -18
  88. package/dist/index.d.ts +0 -37
  89. package/dist/index.js +0 -54
  90. package/dist/likec4lib.d.ts +0 -6
  91. package/dist/likec4lib.js +0 -7
  92. package/dist/logger.d.ts +0 -17
  93. package/dist/logger.js +0 -81
  94. package/dist/lsp/CodeActionProvider.d.ts +0 -14
  95. package/dist/lsp/CodeActionProvider.js +0 -33
  96. package/dist/lsp/CodeLensProvider.d.ts +0 -9
  97. package/dist/lsp/CodeLensProvider.js +0 -44
  98. package/dist/lsp/CompletionProvider.d.ts +0 -13
  99. package/dist/lsp/CompletionProvider.js +0 -238
  100. package/dist/lsp/DocumentHighlightProvider.d.ts +0 -9
  101. package/dist/lsp/DocumentHighlightProvider.js +0 -10
  102. package/dist/lsp/DocumentLinkProvider.d.ts +0 -11
  103. package/dist/lsp/DocumentLinkProvider.js +0 -58
  104. package/dist/lsp/DocumentSymbolProvider.d.ts +0 -33
  105. package/dist/lsp/DocumentSymbolProvider.js +0 -317
  106. package/dist/lsp/HoverProvider.d.ts +0 -10
  107. package/dist/lsp/HoverProvider.js +0 -106
  108. package/dist/lsp/RenameProvider.d.ts +0 -5
  109. package/dist/lsp/RenameProvider.js +0 -6
  110. package/dist/lsp/SemanticTokenProvider.d.ts +0 -19
  111. package/dist/lsp/SemanticTokenProvider.js +0 -305
  112. package/dist/lsp/index.d.ts +0 -8
  113. package/dist/lsp/index.js +0 -9
  114. package/dist/mcp/MCPServerFactory.d.ts +0 -8
  115. package/dist/mcp/MCPServerFactory.js +0 -73
  116. package/dist/mcp/NoopLikeC4MCPServer.d.ts +0 -9
  117. package/dist/mcp/NoopLikeC4MCPServer.js +0 -17
  118. package/dist/mcp/interfaces.d.ts +0 -13
  119. package/dist/mcp/interfaces.js +0 -4
  120. package/dist/mcp/server/StdioLikeC4MCPServer.d.ts +0 -16
  121. package/dist/mcp/server/StdioLikeC4MCPServer.js +0 -51
  122. package/dist/mcp/server/StreamableLikeC4MCPServer.d.ts +0 -16
  123. package/dist/mcp/server/StreamableLikeC4MCPServer.js +0 -121
  124. package/dist/mcp/server/WithMCPServer.d.ts +0 -4
  125. package/dist/mcp/server/WithMCPServer.js +0 -54
  126. package/dist/mcp/tools/_common.d.ts +0 -88
  127. package/dist/mcp/tools/_common.js +0 -49
  128. package/dist/mcp/tools/find-relationships.d.ts +0 -202
  129. package/dist/mcp/tools/find-relationships.js +0 -150
  130. package/dist/mcp/tools/list-projects.d.ts +0 -194
  131. package/dist/mcp/tools/list-projects.js +0 -62
  132. package/dist/mcp/tools/open-view.d.ts +0 -200
  133. package/dist/mcp/tools/open-view.js +0 -52
  134. package/dist/mcp/tools/read-deployment.d.ts +0 -200
  135. package/dist/mcp/tools/read-deployment.js +0 -150
  136. package/dist/mcp/tools/read-element.d.ts +0 -200
  137. package/dist/mcp/tools/read-element.js +0 -218
  138. package/dist/mcp/tools/read-project-summary.d.ts +0 -198
  139. package/dist/mcp/tools/read-project-summary.js +0 -176
  140. package/dist/mcp/tools/read-view.d.ts +0 -200
  141. package/dist/mcp/tools/read-view.js +0 -203
  142. package/dist/mcp/tools/search-element.d.ts +0 -198
  143. package/dist/mcp/tools/search-element.js +0 -177
  144. package/dist/mcp/utils.d.ts +0 -18
  145. package/dist/mcp/utils.js +0 -48
  146. package/dist/model/builder/MergedExtends.d.ts +0 -13
  147. package/dist/model/builder/MergedExtends.js +0 -74
  148. package/dist/model/builder/MergedSpecification.d.ts +0 -32
  149. package/dist/model/builder/MergedSpecification.js +0 -175
  150. package/dist/model/builder/buildModel.d.ts +0 -16
  151. package/dist/model/builder/buildModel.js +0 -245
  152. package/dist/model/deployments-index.d.ts +0 -10
  153. package/dist/model/deployments-index.js +0 -102
  154. package/dist/model/fqn-index.d.ts +0 -61
  155. package/dist/model/fqn-index.js +0 -253
  156. package/dist/model/index.d.ts +0 -6
  157. package/dist/model/index.js +0 -6
  158. package/dist/model/model-builder.d.ts +0 -54
  159. package/dist/model/model-builder.js +0 -233
  160. package/dist/model/model-locator.d.ts +0 -39
  161. package/dist/model/model-locator.js +0 -240
  162. package/dist/model/model-parser-where.d.ts +0 -4
  163. package/dist/model/model-parser-where.js +0 -81
  164. package/dist/model/model-parser.d.ts +0 -645
  165. package/dist/model/model-parser.js +0 -133
  166. package/dist/model/parser/Base.d.ts +0 -69
  167. package/dist/model/parser/Base.js +0 -382
  168. package/dist/model/parser/DeploymentModelParser.d.ts +0 -71
  169. package/dist/model/parser/DeploymentModelParser.js +0 -176
  170. package/dist/model/parser/DeploymentViewParser.d.ts +0 -75
  171. package/dist/model/parser/DeploymentViewParser.js +0 -86
  172. package/dist/model/parser/FqnRefParser.d.ts +0 -66
  173. package/dist/model/parser/FqnRefParser.js +0 -382
  174. package/dist/model/parser/GlobalsParser.d.ts +0 -109
  175. package/dist/model/parser/GlobalsParser.js +0 -84
  176. package/dist/model/parser/ImportsParser.d.ts +0 -46
  177. package/dist/model/parser/ImportsParser.js +0 -24
  178. package/dist/model/parser/ModelParser.d.ts +0 -71
  179. package/dist/model/parser/ModelParser.js +0 -209
  180. package/dist/model/parser/PredicatesParser.d.ts +0 -75
  181. package/dist/model/parser/PredicatesParser.js +0 -45
  182. package/dist/model/parser/SpecificationParser.d.ts +0 -53
  183. package/dist/model/parser/SpecificationParser.js +0 -113
  184. package/dist/model/parser/ValueConverter.d.ts +0 -4
  185. package/dist/model/parser/ValueConverter.js +0 -12
  186. package/dist/model/parser/ViewsParser.d.ts +0 -112
  187. package/dist/model/parser/ViewsParser.js +0 -492
  188. package/dist/model-change/ModelChanges.d.ts +0 -18
  189. package/dist/model-change/ModelChanges.js +0 -129
  190. package/dist/model-change/changeElementStyle.d.ts +0 -16
  191. package/dist/model-change/changeElementStyle.js +0 -134
  192. package/dist/model-change/changeViewLayout.d.ts +0 -12
  193. package/dist/model-change/changeViewLayout.js +0 -28
  194. package/dist/model-change/removeManualLayoutV1.d.ts +0 -7
  195. package/dist/model-change/removeManualLayoutV1.js +0 -27
  196. package/dist/module.d.ts +0 -92
  197. package/dist/module.js +0 -143
  198. package/dist/protocol.d.ts +0 -289
  199. package/dist/protocol.js +0 -123
  200. package/dist/references/index.d.ts +0 -3
  201. package/dist/references/index.js +0 -3
  202. package/dist/references/name-provider.d.ts +0 -9
  203. package/dist/references/name-provider.js +0 -37
  204. package/dist/references/scope-computation.d.ts +0 -20
  205. package/dist/references/scope-computation.js +0 -288
  206. package/dist/references/scope-provider.d.ts +0 -40
  207. package/dist/references/scope-provider.js +0 -239
  208. package/dist/shared/NodeKindProvider.d.ts +0 -15
  209. package/dist/shared/NodeKindProvider.js +0 -57
  210. package/dist/shared/WorkspaceSymbolProvider.d.ts +0 -3
  211. package/dist/shared/WorkspaceSymbolProvider.js +0 -3
  212. package/dist/shared/index.d.ts +0 -2
  213. package/dist/shared/index.js +0 -2
  214. package/dist/test/index.d.ts +0 -1
  215. package/dist/test/index.js +0 -1
  216. package/dist/test/testServices.d.ts +0 -64
  217. package/dist/test/testServices.js +0 -210
  218. package/dist/utils/disposable.d.ts +0 -8
  219. package/dist/utils/disposable.js +0 -26
  220. package/dist/utils/elementRef.d.ts +0 -11
  221. package/dist/utils/elementRef.js +0 -33
  222. package/dist/utils/fqnRef.d.ts +0 -11
  223. package/dist/utils/fqnRef.js +0 -63
  224. package/dist/utils/index.d.ts +0 -11
  225. package/dist/utils/index.js +0 -35
  226. package/dist/utils/printDocs.d.ts +0 -2
  227. package/dist/utils/printDocs.js +0 -1
  228. package/dist/utils/projectId.d.ts +0 -4
  229. package/dist/utils/projectId.js +0 -16
  230. package/dist/utils/stringHash.d.ts +0 -1
  231. package/dist/utils/stringHash.js +0 -5
  232. package/dist/validation/DocumentValidator.d.ts +0 -11
  233. package/dist/validation/DocumentValidator.js +0 -17
  234. package/dist/validation/_shared.d.ts +0 -3
  235. package/dist/validation/_shared.js +0 -26
  236. package/dist/validation/deployment-checks.d.ts +0 -7
  237. package/dist/validation/deployment-checks.js +0 -140
  238. package/dist/validation/dynamic-view.d.ts +0 -6
  239. package/dist/validation/dynamic-view.js +0 -67
  240. package/dist/validation/element-ref.d.ts +0 -4
  241. package/dist/validation/element-ref.js +0 -12
  242. package/dist/validation/element.d.ts +0 -4
  243. package/dist/validation/element.js +0 -49
  244. package/dist/validation/imports.d.ts +0 -4
  245. package/dist/validation/imports.js +0 -46
  246. package/dist/validation/index.d.ts +0 -15
  247. package/dist/validation/index.js +0 -167
  248. package/dist/validation/property-checks.d.ts +0 -7
  249. package/dist/validation/property-checks.js +0 -108
  250. package/dist/validation/relation.d.ts +0 -6
  251. package/dist/validation/relation.js +0 -141
  252. package/dist/validation/specification.d.ts +0 -12
  253. package/dist/validation/specification.js +0 -190
  254. package/dist/validation/view-checks.d.ts +0 -4
  255. package/dist/validation/view-checks.js +0 -46
  256. package/dist/validation/view-predicates/fqn-expr-with.d.ts +0 -4
  257. package/dist/validation/view-predicates/fqn-expr-with.js +0 -43
  258. package/dist/validation/view-predicates/fqn-ref-expr.d.ts +0 -4
  259. package/dist/validation/view-predicates/fqn-ref-expr.js +0 -51
  260. package/dist/validation/view-predicates/incoming.d.ts +0 -4
  261. package/dist/validation/view-predicates/incoming.js +0 -16
  262. package/dist/validation/view-predicates/index.d.ts +0 -6
  263. package/dist/validation/view-predicates/index.js +0 -6
  264. package/dist/validation/view-predicates/outgoing.d.ts +0 -4
  265. package/dist/validation/view-predicates/outgoing.js +0 -20
  266. package/dist/validation/view-predicates/relation-expr.d.ts +0 -4
  267. package/dist/validation/view-predicates/relation-expr.js +0 -46
  268. package/dist/validation/view-predicates/relation-with.d.ts +0 -4
  269. package/dist/validation/view-predicates/relation-with.js +0 -16
  270. package/dist/validation/view.d.ts +0 -4
  271. package/dist/validation/view.js +0 -42
  272. package/dist/view-utils/assignNavigateTo.d.ts +0 -2
  273. package/dist/view-utils/assignNavigateTo.js +0 -27
  274. package/dist/view-utils/index.d.ts +0 -2
  275. package/dist/view-utils/index.js +0 -2
  276. package/dist/view-utils/manual-layout.d.ts +0 -13
  277. package/dist/view-utils/manual-layout.js +0 -149
  278. package/dist/views/ConfigurableLayouter.d.ts +0 -7
  279. package/dist/views/ConfigurableLayouter.js +0 -51
  280. package/dist/views/LikeC4ManualLayouts.d.ts +0 -42
  281. package/dist/views/LikeC4ManualLayouts.js +0 -209
  282. package/dist/views/LikeC4Views.d.ts +0 -89
  283. package/dist/views/LikeC4Views.js +0 -216
  284. package/dist/views/index.d.ts +0 -4
  285. package/dist/views/index.js +0 -11
  286. package/dist/workspace/AstNodeDescriptionProvider.d.ts +0 -7
  287. package/dist/workspace/AstNodeDescriptionProvider.js +0 -18
  288. package/dist/workspace/IndexManager.d.ts +0 -10
  289. package/dist/workspace/IndexManager.js +0 -26
  290. package/dist/workspace/LangiumDocuments.d.ts +0 -29
  291. package/dist/workspace/LangiumDocuments.js +0 -104
  292. package/dist/workspace/ProjectsManager.d.ts +0 -134
  293. package/dist/workspace/ProjectsManager.js +0 -610
  294. package/dist/workspace/WorkspaceManager.d.ts +0 -31
  295. package/dist/workspace/WorkspaceManager.js +0 -132
  296. package/dist/workspace/index.d.ts +0 -5
  297. package/dist/workspace/index.js +0 -5
@@ -1,317 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- //
3
- // Copyright (c) 2023-2025 Denis Davydkov
4
- // Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
5
- //
6
- // Portions of this file have been modified by NVIDIA CORPORATION & AFFILIATES.
7
- import { nonexhaustive } from '@likec4/core';
8
- import { AstUtils, DocumentState, GrammarUtils } from 'langium';
9
- import { filter, isEmpty, isTruthy, map, pipe } from 'remeda';
10
- import { SymbolKind } from 'vscode-languageserver-types';
11
- import { ast, isLikeC4LangiumDocument } from '../ast';
12
- import { logger as rootLogger, logWarnError } from '../logger';
13
- import { readStrictFqn } from '../utils/elementRef';
14
- const logger = rootLogger.getChild('DocumentSymbolProvider');
15
- export class LikeC4DocumentSymbolProvider {
16
- services;
17
- nodeKindProvider;
18
- nameProvider;
19
- parser;
20
- locator;
21
- constructor(services) {
22
- this.services = services;
23
- this.nodeKindProvider = services.shared.lsp.NodeKindProvider;
24
- this.parser = services.likec4.ModelParser;
25
- this.locator = services.likec4.ModelLocator;
26
- this.nameProvider = services.references.NameProvider;
27
- }
28
- async getSymbols(doc, _params, cancelToken) {
29
- if (!isLikeC4LangiumDocument(doc) || this.services.shared.workspace.ProjectsManager.isExcluded(doc)) {
30
- return [];
31
- }
32
- if (doc.state < DocumentState.Linked) {
33
- logger.debug(`Waiting for document ${doc.uri.path} to be Linked`);
34
- await this.services.shared.workspace.DocumentBuilder.waitUntil(DocumentState.Linked, doc.uri, cancelToken);
35
- logger.debug(`document is Linked`);
36
- }
37
- const { parseResult: { value: { specifications, models, deployments, views, likec4lib }, }, } = doc;
38
- return [
39
- ...likec4lib.map(l => () => this.getLikec4LibSymbol(l)),
40
- ...specifications.map(s => () => this.getSpecSymbol(s)),
41
- ...models.map(s => () => this.getModelSymbol(s)),
42
- ...deployments.map(s => () => this.getDeploymentModelSymbol(s)),
43
- ...views.map(s => () => this.getModelViewsSymbol(s)),
44
- ].flatMap(fn => {
45
- try {
46
- return fn() ?? [];
47
- }
48
- catch (e) {
49
- logWarnError(e);
50
- return [];
51
- }
52
- });
53
- }
54
- getLikec4LibSymbol(astLib) {
55
- const cstModel = astLib?.$cstNode;
56
- if (!cstModel)
57
- return [];
58
- const children = astLib.icons.map(i => this.getLibIconSymbol(i)).filter(isTruthy);
59
- if (children.length === 0)
60
- return [];
61
- return [
62
- {
63
- kind: SymbolKind.Namespace,
64
- name: 'icons',
65
- range: cstModel.range,
66
- selectionRange: GrammarUtils.findNodeForKeyword(cstModel, 'icons')?.range ?? cstModel.range,
67
- children,
68
- },
69
- ];
70
- }
71
- getSpecSymbol(astSpec) {
72
- const cstModel = astSpec?.$cstNode;
73
- if (!cstModel)
74
- return [];
75
- const specKeywordNode = GrammarUtils.findNodeForProperty(cstModel, 'name');
76
- if (!specKeywordNode)
77
- return [];
78
- const specSymbols = pipe([...astSpec.elements, ...astSpec.tags, ...astSpec.relationships], map(nd => {
79
- try {
80
- if (ast.isSpecificationElementKind(nd) || ast.isSpecificationRelationshipKind(nd)
81
- || ast.isSpecificationDeploymentNodeKind(nd)) {
82
- return this.getKindSymbol(nd);
83
- }
84
- if (ast.isSpecificationTag(nd)) {
85
- return this.getTagSymbol(nd);
86
- }
87
- }
88
- catch (e) {
89
- logWarnError(e);
90
- return null;
91
- }
92
- nonexhaustive(nd);
93
- }), filter(isTruthy));
94
- if (specSymbols.length === 0)
95
- return [];
96
- return [
97
- {
98
- kind: SymbolKind.Namespace,
99
- name: astSpec.name,
100
- range: cstModel.range,
101
- selectionRange: specKeywordNode.range,
102
- children: specSymbols,
103
- },
104
- ];
105
- }
106
- getModelSymbol(astModel) {
107
- const cstModel = astModel.$cstNode;
108
- if (!cstModel)
109
- return [];
110
- const nameNode = GrammarUtils.findNodeForProperty(cstModel, 'name');
111
- if (!nameNode)
112
- return [];
113
- return [
114
- {
115
- kind: this.symbolKind(astModel),
116
- name: astModel.name,
117
- range: cstModel.range,
118
- selectionRange: nameNode.range,
119
- children: astModel.elements.flatMap(e => {
120
- // Skip ExtendRelation nodes as they don't need symbols
121
- if (ast.isExtendRelation(e))
122
- return [];
123
- return this.getElementsSymbol(e);
124
- }),
125
- },
126
- ];
127
- }
128
- getDeploymentModelSymbol(astModel) {
129
- const cstModel = astModel.$cstNode;
130
- if (!cstModel)
131
- return [];
132
- const nameNode = GrammarUtils.findNodeForProperty(cstModel, 'name');
133
- if (!nameNode)
134
- return [];
135
- return [
136
- {
137
- kind: this.symbolKind(astModel),
138
- name: astModel.name,
139
- range: cstModel.range,
140
- selectionRange: nameNode.range,
141
- children: astModel.elements.flatMap(e => this.getDeploymentElementSymbol(e)),
142
- },
143
- ];
144
- }
145
- getElementsSymbol(el) {
146
- try {
147
- if (ast.isExtendElement(el)) {
148
- return this.getExtendElementSymbol(el);
149
- }
150
- if (ast.isElement(el)) {
151
- return this.getElementSymbol(el);
152
- }
153
- }
154
- catch (e) {
155
- logWarnError(e);
156
- }
157
- return [];
158
- }
159
- getExtendElementSymbol(astElement) {
160
- const cst = astElement.$cstNode;
161
- const nameNode = astElement.element.$cstNode;
162
- const body = astElement.body;
163
- if (!cst || !nameNode)
164
- return [];
165
- return [
166
- {
167
- kind: this.symbolKind(astElement),
168
- name: readStrictFqn(astElement.element),
169
- range: cst.range,
170
- selectionRange: nameNode.range,
171
- children: body.elements.flatMap(e => this.getElementsSymbol(e)),
172
- },
173
- ];
174
- }
175
- getElementSymbol(astElement) {
176
- const cst = astElement.$cstNode;
177
- const nameNode = GrammarUtils.findNodeForProperty(cst, 'name');
178
- if (!nameNode || !cst)
179
- return [];
180
- const name = astElement.name;
181
- const kind = astElement.kind.$refText;
182
- // TODO: return the title as well
183
- const detail = kind; // + (astElement.title ? ': ' + astElement.title : '').replaceAll('\n', ' ').trim()
184
- return [
185
- {
186
- kind: this.symbolKind(astElement),
187
- name: name,
188
- range: cst.range,
189
- selectionRange: nameNode.range,
190
- detail,
191
- children: astElement.body?.elements.flatMap(e => this.getElementsSymbol(e)) ?? [],
192
- },
193
- ];
194
- }
195
- getModelViewsSymbol(astViews) {
196
- const cst = astViews.$cstNode;
197
- const nameNode = GrammarUtils.findNodeForProperty(cst, 'name');
198
- if (!nameNode || !cst)
199
- return [];
200
- return [
201
- {
202
- kind: this.symbolKind(astViews),
203
- name: astViews.name,
204
- range: cst.range,
205
- selectionRange: nameNode.range,
206
- children: astViews.views.flatMap(e => this.getViewSymbol(e)),
207
- },
208
- ];
209
- }
210
- getKindSymbol(astKind) {
211
- if (!astKind.$cstNode || !astKind.kind.$cstNode || isEmpty(astKind.kind.name))
212
- return null;
213
- return {
214
- kind: this.symbolKind(astKind),
215
- name: astKind.kind.name,
216
- range: astKind.$cstNode.range,
217
- selectionRange: astKind.kind.$cstNode.range,
218
- };
219
- }
220
- getTagSymbol(astTag) {
221
- if (!astTag.$cstNode || !astTag.tag.$cstNode || isEmpty(astTag.tag.name))
222
- return null;
223
- return {
224
- kind: this.symbolKind(astTag),
225
- name: '#' + astTag.tag.name,
226
- range: astTag.$cstNode.range,
227
- selectionRange: astTag.tag.$cstNode.range,
228
- };
229
- }
230
- getLibIconSymbol(astTag) {
231
- if (!astTag.$cstNode || isEmpty(astTag.name))
232
- return null;
233
- return {
234
- kind: this.symbolKind(astTag),
235
- name: astTag.name,
236
- range: astTag.$cstNode.range,
237
- selectionRange: astTag.$cstNode.range,
238
- };
239
- }
240
- getViewSymbol(astView) {
241
- const cst = astView?.$cstNode;
242
- if (!cst)
243
- return [];
244
- const nameNode = astView.name ? GrammarUtils.findNodeForProperty(cst, 'name') : null;
245
- if (!nameNode)
246
- return [];
247
- return [
248
- {
249
- kind: this.symbolKind(astView),
250
- name: nameNode.text,
251
- range: cst.range,
252
- selectionRange: nameNode.range,
253
- children: [],
254
- },
255
- ];
256
- }
257
- getDeploymentElementSymbol(el) {
258
- try {
259
- if (ast.isDeploymentNode(el)) {
260
- return this.getDeploymentNodeSymbol(el);
261
- }
262
- if (ast.isDeployedInstance(el)) {
263
- return this.getDeployedInstanceSymbol(el);
264
- }
265
- if (ast.isExtendDeployment(el)) {
266
- return [];
267
- }
268
- }
269
- catch (e) {
270
- logWarnError(e);
271
- }
272
- return [];
273
- }
274
- getDeploymentNodeSymbol(astElement) {
275
- const cst = astElement.$cstNode;
276
- const nameNode = this.nameProvider.getNameNode(astElement);
277
- if (!nameNode || !cst)
278
- return [];
279
- const name = this.nameProvider.getNameStrict(astElement);
280
- const kind = astElement.kind.$refText;
281
- // TODO: return the title as well
282
- const detail = kind; // + (astElement.title ? ': ' + astElement.title : '').replaceAll('\n', ' ').trim()
283
- return [
284
- {
285
- kind: this.symbolKind(astElement),
286
- name: name,
287
- range: cst.range,
288
- selectionRange: nameNode.range,
289
- detail,
290
- children: astElement.body?.elements.flatMap(e => this.getDeploymentElementSymbol(e)) ?? [],
291
- },
292
- ];
293
- }
294
- getDeployedInstanceSymbol(astElement) {
295
- const cst = astElement.$cstNode;
296
- const nameNode = this.nameProvider.getNameNode(astElement);
297
- if (!nameNode || !cst)
298
- return [];
299
- const doc = AstUtils.getDocument(astElement);
300
- const instance = this.parser.forDocument(doc).parseDeployedInstance(astElement);
301
- const name = this.nameProvider.getNameStrict(astElement);
302
- const detail = 'instance of ' + instance.element.model;
303
- return [
304
- {
305
- kind: this.symbolKind(astElement),
306
- name: name,
307
- range: cst.range,
308
- selectionRange: nameNode.range,
309
- detail,
310
- children: [],
311
- },
312
- ];
313
- }
314
- symbolKind(node) {
315
- return this.nodeKindProvider.getSymbolKind(node);
316
- }
317
- }
@@ -1,10 +0,0 @@
1
- import { type AstNode, type MaybePromise } from 'langium';
2
- import { AstNodeHoverProvider } from 'langium/lsp';
3
- import type { Hover } from 'vscode-languageserver-types';
4
- import type { LikeC4Services } from '../module';
5
- export declare class LikeC4HoverProvider extends AstNodeHoverProvider {
6
- private parser;
7
- private locator;
8
- constructor(services: LikeC4Services);
9
- protected getAstNodeHoverContent(node: AstNode): MaybePromise<Hover | undefined>;
10
- }
@@ -1,106 +0,0 @@
1
- import { FqnRef, preferSummary } from '@likec4/core';
2
- import { AstUtils } from 'langium';
3
- import { AstNodeHoverProvider } from 'langium/lsp';
4
- import { ast } from '../ast';
5
- export class LikeC4HoverProvider extends AstNodeHoverProvider {
6
- parser;
7
- locator;
8
- constructor(services) {
9
- super(services);
10
- this.parser = services.likec4.ModelParser;
11
- this.locator = services.likec4.ModelLocator;
12
- }
13
- getAstNodeHoverContent(node) {
14
- if (ast.isTag(node)) {
15
- return {
16
- contents: {
17
- kind: 'markdown',
18
- value: 'tag `' + node.name + '`',
19
- },
20
- };
21
- }
22
- if (ast.isDeploymentNode(node)) {
23
- const doc = AstUtils.getDocument(node);
24
- const el = this.parser.forDocument(doc).parseDeploymentNode(node);
25
- const lines = [el.id + ' '];
26
- if (el.title !== node.name) {
27
- lines.push(`### ${el.title}`);
28
- }
29
- lines.push('deployment node `' + el.kind + '` ');
30
- const summary = preferSummary(el);
31
- if (summary) {
32
- lines.push('', summary.md ?? summary.txt);
33
- }
34
- return {
35
- contents: {
36
- kind: 'markdown',
37
- value: lines.join('\n'),
38
- },
39
- };
40
- }
41
- if (ast.isDeployedInstance(node)) {
42
- const doc = AstUtils.getDocument(node);
43
- const instance = this.parser.forDocument(doc).parseDeployedInstance(node);
44
- const [projectId, fqn] = FqnRef.isImportRef(instance.element)
45
- ? [instance.element.project, instance.element.model]
46
- : [doc.likec4ProjectId, instance.element.model];
47
- const el = projectId ? this.locator.getParsedElement(fqn, projectId) : this.locator.getParsedElement(fqn);
48
- const lines = [instance.id + ' ', `instance of \`${FqnRef.flatten(instance.element)}\``];
49
- if (el) {
50
- lines.push(`### ${el.title}`, 'element kind `' + el.kind + '` ');
51
- }
52
- return {
53
- contents: {
54
- kind: 'markdown',
55
- value: lines.join('\n'),
56
- },
57
- };
58
- }
59
- if (ast.isElementKind(node)) {
60
- return {
61
- contents: {
62
- kind: 'markdown',
63
- value: 'element kind `' + node.name + '`',
64
- },
65
- };
66
- }
67
- if (ast.isDeploymentNodeKind(node)) {
68
- return {
69
- contents: {
70
- kind: 'markdown',
71
- value: 'deployment node `' + node.name + '`',
72
- },
73
- };
74
- }
75
- if (ast.isRelationshipKind(node)) {
76
- return {
77
- contents: {
78
- kind: 'markdown',
79
- value: 'relationship kind `' + node.name + '`',
80
- },
81
- };
82
- }
83
- if (ast.isElement(node)) {
84
- const el = this.locator.getParsedElement(node);
85
- if (!el) {
86
- return;
87
- }
88
- const lines = [
89
- el.id,
90
- `### ${el.title}`,
91
- 'element kind `' + el.kind + '` ',
92
- ];
93
- const summary = preferSummary(el);
94
- if (summary) {
95
- lines.push('', summary.md ?? summary.txt);
96
- }
97
- return {
98
- contents: {
99
- kind: 'markdown',
100
- value: lines.join('\n'),
101
- },
102
- };
103
- }
104
- return;
105
- }
106
- }
@@ -1,5 +0,0 @@
1
- import { DefaultRenameProvider } from 'langium/lsp';
2
- import type { LikeC4Services } from '../module';
3
- export declare class LikeC4RenameProvider extends DefaultRenameProvider {
4
- constructor(services: LikeC4Services);
5
- }
@@ -1,6 +0,0 @@
1
- import { DefaultRenameProvider } from 'langium/lsp';
2
- export class LikeC4RenameProvider extends DefaultRenameProvider {
3
- constructor(services) {
4
- super(services);
5
- }
6
- }
@@ -1,19 +0,0 @@
1
- import { type AstNode, type LangiumDocument } from 'langium';
2
- import { type SemanticTokenAcceptor, AbstractSemanticTokenProvider } from 'langium/lsp';
3
- import { type SemanticTokensDeltaParams, type SemanticTokensParams, type SemanticTokensRangeParams, CancellationToken } from 'vscode-languageserver-protocol';
4
- import { type SemanticTokens, type SemanticTokensDelta } from 'vscode-languageserver-types';
5
- import type { LikeC4Services } from '../module';
6
- export declare class LikeC4SemanticTokenProvider extends AbstractSemanticTokenProvider {
7
- protected services: LikeC4Services;
8
- private rules;
9
- constructor(services: LikeC4Services);
10
- protected initRules(): void;
11
- semanticHighlight(document: LangiumDocument, params: SemanticTokensParams, cancelToken?: CancellationToken): Promise<SemanticTokens>;
12
- semanticHighlightRange(document: LangiumDocument, params: SemanticTokensRangeParams, cancelToken?: CancellationToken): Promise<SemanticTokens>;
13
- semanticHighlightDelta(document: LangiumDocument, params: SemanticTokensDeltaParams, cancelToken?: CancellationToken): Promise<SemanticTokens | SemanticTokensDelta>;
14
- protected ensureState(document: LangiumDocument, cancelToken: CancellationToken): Promise<void>;
15
- protected highlightElement(node: AstNode, acceptor: SemanticTokenAcceptor): void | undefined | 'prune';
16
- private highlightNameAndKind;
17
- private highlightView;
18
- private mark;
19
- }