@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,240 +0,0 @@
1
- import { splitGlobalFqn } from '@likec4/core';
2
- import { ifilter, invariant, toArray } from '@likec4/core/utils';
3
- import { loggable } from '@likec4/log';
4
- import { AstUtils, DocumentState, GrammarUtils } from 'langium';
5
- import { flatMap, isString, pipe } from 'remeda';
6
- import { URI } from 'vscode-uri';
7
- import { ast, isLikeC4LangiumDocument } from '../ast';
8
- import { logger as serverLogger } from '../logger';
9
- import { projectIdFrom } from '../utils';
10
- import { MergedSpecification } from './builder/MergedSpecification';
11
- const { findNodeForKeyword, findNodeForProperty } = GrammarUtils;
12
- const { getDocument, streamAllContents } = AstUtils;
13
- const logger = serverLogger.getChild('ModelLocator');
14
- export class LikeC4ModelLocator {
15
- services;
16
- fqnIndex;
17
- deploymentsIndex;
18
- langiumDocuments;
19
- parser;
20
- projects;
21
- constructor(services) {
22
- this.services = services;
23
- this.fqnIndex = services.likec4.FqnIndex;
24
- this.deploymentsIndex = services.likec4.DeploymentsIndex;
25
- this.langiumDocuments = services.shared.workspace.LangiumDocuments;
26
- this.parser = services.likec4.ModelParser;
27
- this.projects = services.shared.workspace.ProjectsManager;
28
- }
29
- documents(projectId) {
30
- return this.parser.documents(projectId);
31
- }
32
- // public getParsedElement(astNodeOrFqn: ast.Element): ParsedAstElement | null
33
- // public getParsedElement(astNodeOrFqn: c4.Fqn, projectId?: c4.ProjectId): ParsedAstElement | null
34
- getParsedElement(...args) {
35
- let astNodeOrFqn;
36
- let projectId;
37
- if (args.length === 2) {
38
- astNodeOrFqn = args[0];
39
- projectId = args[1];
40
- }
41
- else {
42
- astNodeOrFqn = args[0];
43
- projectId = isString(astNodeOrFqn) ? this.projects.ensureProjectId() : projectIdFrom(astNodeOrFqn);
44
- }
45
- if (isString(astNodeOrFqn)) {
46
- const fqn = astNodeOrFqn;
47
- const entry = this.fqnIndex.byFqn(projectId, fqn).head();
48
- if (!entry) {
49
- return null;
50
- }
51
- const doc = this.langiumDocuments.getDocument(entry.documentUri);
52
- if (!doc) {
53
- return null;
54
- }
55
- return this.parser.parse(doc).c4Elements.find(e => e.id === fqn) ?? null;
56
- }
57
- const fqn = this.fqnIndex.getFqn(astNodeOrFqn);
58
- const doc = this.parser.parse(getDocument(astNodeOrFqn));
59
- return doc.c4Elements.find(e => e.id === fqn) ?? null;
60
- }
61
- locateElement(fqn, projectId) {
62
- let [_projectId, _fqn] = splitGlobalFqn(fqn);
63
- _projectId ??= this.projects.ensureProjectId(projectId);
64
- const entry = this.fqnIndex.byFqn(_projectId, _fqn).head();
65
- const docsegment = entry?.nameSegment ?? entry?.selectionSegment;
66
- if (!entry || !docsegment) {
67
- return null;
68
- }
69
- return {
70
- uri: entry.documentUri.toString(),
71
- range: docsegment.range,
72
- };
73
- }
74
- locateDeploymentElement(deploymentFqn, projectId) {
75
- // let [_projectId, _fqn] = splitGlobalFqn(fqn)
76
- const _projectId = this.projects.ensureProjectId(projectId);
77
- // TODO: remove this cast to Fqn
78
- const fqn = deploymentFqn;
79
- const entry = this.deploymentsIndex.byFqn(_projectId, fqn).head();
80
- const docsegment = entry?.nameSegment ?? entry?.selectionSegment;
81
- if (!entry || !docsegment) {
82
- return null;
83
- }
84
- return {
85
- uri: entry.documentUri.toString(),
86
- range: docsegment.range,
87
- };
88
- }
89
- locateRelation(relationId, projectId) {
90
- const project = this.projects.ensureProjectId(projectId);
91
- for (const doc of this.documents(project)) {
92
- const relation = doc.c4Relations.find(r => r.id === relationId)
93
- ?? doc.c4DeploymentRelations.find(r => r.id === relationId);
94
- if (!relation) {
95
- continue;
96
- }
97
- const node = this.services.workspace.AstNodeLocator.getAstNode(doc.parseResult.value, relation.astPath);
98
- if (!ast.isRelation(node) && !ast.isDeploymentRelation(node)) {
99
- continue;
100
- }
101
- let targetNode = node.kind ? findNodeForProperty(node.$cstNode, 'kind') : undefined;
102
- targetNode ??= node.dotKind ? findNodeForProperty(node.$cstNode, 'dotKind') : undefined;
103
- targetNode ??= findNodeForKeyword(node.$cstNode, '->');
104
- targetNode ??= findNodeForProperty(node.$cstNode, 'title');
105
- targetNode ??= findNodeForProperty(node.$cstNode, 'target');
106
- targetNode ??= node.$cstNode;
107
- if (!targetNode) {
108
- continue;
109
- }
110
- return {
111
- uri: doc.uri.toString(),
112
- range: {
113
- start: targetNode.range.start,
114
- end: targetNode.range.start,
115
- },
116
- };
117
- }
118
- return null;
119
- }
120
- locateViewAst(viewId, projectId) {
121
- const project = this.projects.ensureProjectId(projectId);
122
- for (const doc of this.documents(project)) {
123
- const view = doc.c4Views.find(r => r.id === viewId);
124
- if (!view) {
125
- continue;
126
- }
127
- const viewAst = this.services.workspace.AstNodeLocator.getAstNode(doc.parseResult.value, view.astPath);
128
- if (ast.isLikeC4View(viewAst)) {
129
- return {
130
- doc,
131
- view,
132
- viewAst,
133
- };
134
- }
135
- }
136
- return null;
137
- }
138
- locateView(viewId, projectId) {
139
- const res = this.locateViewAst(viewId, projectId);
140
- if (!res) {
141
- return null;
142
- }
143
- const node = res.viewAst;
144
- let targetNode = node.name ? findNodeForProperty(node.$cstNode, 'name') : undefined;
145
- targetNode ??= findNodeForKeyword(node.$cstNode, 'view');
146
- targetNode ??= node.$cstNode;
147
- if (!targetNode) {
148
- return null;
149
- }
150
- return {
151
- uri: res.doc.uri.toString(),
152
- range: {
153
- start: targetNode.range.start,
154
- end: targetNode.range.start,
155
- },
156
- };
157
- }
158
- async locateDocumentTags(documentUri, cancelToken) {
159
- const doc = this.langiumDocuments.getDocument(documentUri);
160
- if (!doc || !isLikeC4LangiumDocument(doc)) {
161
- return [];
162
- }
163
- if (doc.state < DocumentState.Validated) {
164
- logger.debug(`Waiting for document ${doc.uri.path} to be Validated`);
165
- await this.services.shared.workspace.DocumentBuilder.waitUntil(DocumentState.Validated, doc.uri, cancelToken);
166
- }
167
- const projectId = projectIdFrom(doc);
168
- logger.debug(`locate document tags for ${doc.uri.path} in project ${projectId}`);
169
- try {
170
- const tagSpecs = new MergedSpecification(this.documents(projectId).toArray()).tags;
171
- logger.debug(`Assigned colors to tags`, { tagSpecs });
172
- const tags = pipe(streamAllContents(doc.parseResult.value), ifilter(astNode => ast.isTag(astNode) || ast.isTagRef(astNode)), toArray(), flatMap(tagRef => {
173
- let name;
174
- let $cstNode;
175
- try {
176
- if (ast.isTag(tagRef)) {
177
- name = tagRef.name;
178
- $cstNode = tagRef.$cstNode;
179
- }
180
- else {
181
- name = tagRef.tag.$refText;
182
- $cstNode = tagRef.tag.$refNode;
183
- }
184
- const specification = tagSpecs[name];
185
- invariant(specification, `Tag ${name} not found in merged specification`);
186
- invariant($cstNode, `Tag ${name} does not have a $cstNode`);
187
- return {
188
- name,
189
- color: specification.color,
190
- range: $cstNode.range,
191
- isSpecification: ast.isTag(tagRef),
192
- };
193
- }
194
- catch (err) {
195
- logger.warn(`Fail on tag ${name}`, { err });
196
- return [];
197
- }
198
- }));
199
- logger.debug(`Found ${tags.length} tags in document ${doc.uri.path}`);
200
- return tags;
201
- }
202
- catch (e) {
203
- logger.warn(loggable(e));
204
- return [];
205
- }
206
- }
207
- locateDynamicViewStep(params) {
208
- const { doc, viewAst } = this.locateViewAst(params.view, params.projectId) ?? {};
209
- if (!doc || !viewAst) {
210
- return null;
211
- }
212
- if (!ast.isDynamicView(viewAst) || !viewAst.body) {
213
- logger.warn(`View ${params.view} is not a dynamic view`);
214
- return null;
215
- }
216
- const astPath = this.services.workspace.AstNodeLocator.getAstNodePath(viewAst.body) + params.astPath;
217
- const node = this.services.workspace.AstNodeLocator.getAstNode(doc.parseResult.value, astPath);
218
- if (!node || !ast.isDynamicViewStep(node)) {
219
- logger.warn(`Failed to locate dynamic view step ${astPath} in view ${params.view}`);
220
- return null;
221
- }
222
- let targetNode = node.kind ? findNodeForProperty(node.$cstNode, 'kind') : undefined;
223
- targetNode ??= node.dotKind ? findNodeForProperty(node.$cstNode, 'dotKind') : undefined;
224
- targetNode ??= findNodeForKeyword(node.$cstNode, '->');
225
- targetNode ??= findNodeForKeyword(node.$cstNode, '<-');
226
- targetNode ??= findNodeForProperty(node.$cstNode, 'title');
227
- targetNode ??= findNodeForProperty(node.$cstNode, 'target');
228
- targetNode ??= node.$cstNode;
229
- if (!targetNode) {
230
- return null;
231
- }
232
- return {
233
- uri: doc.uri.toString(),
234
- range: {
235
- start: targetNode.range.start,
236
- end: targetNode.range.start,
237
- },
238
- };
239
- }
240
- }
@@ -1,4 +0,0 @@
1
- import type * as c4 from '@likec4/core';
2
- import { ast } from '../ast';
3
- export declare function parseWhereClause(astNode: ast.WhereExpression): c4.WhereOperator;
4
- export declare function createBinaryOperator(operator: Lowercase<ast.WhereBinaryExpression['operator']>, left: c4.WhereOperator, right: c4.WhereOperator | null): c4.WhereOperator;
@@ -1,81 +0,0 @@
1
- import { invariant, isAndOperator, isNonEmptyArray, isOrOperator, nonexhaustive } from '@likec4/core';
2
- import { ast } from '../ast';
3
- const parseEquals = ({ operator, not }, value) => {
4
- if (operator.startsWith('!=')) {
5
- return {
6
- neq: value,
7
- };
8
- }
9
- if (operator.startsWith('=')) {
10
- return {
11
- eq: value,
12
- };
13
- }
14
- return not ? { neq: value } : { eq: value };
15
- };
16
- function parseParticipant(astNode) {
17
- if (!ast.isWhereRelationParticipantKind(astNode) && !ast.isWhereRelationParticipantTag(astNode)) {
18
- return null;
19
- }
20
- return astNode.participant;
21
- }
22
- export function parseWhereClause(astNode) {
23
- switch (true) {
24
- case ast.isWhereTagEqual(astNode): {
25
- const tag = astNode.value.tag.ref?.name;
26
- const participant = parseParticipant(astNode);
27
- invariant(tag, 'Expected tag name');
28
- const tagOperator = { tag: parseEquals(astNode, tag) };
29
- return participant ? { participant, operator: tagOperator } : tagOperator;
30
- }
31
- case ast.isWhereKindEqual(astNode): {
32
- const kind = astNode.value?.ref?.name;
33
- const participant = parseParticipant(astNode);
34
- invariant(kind, 'Expected kind name');
35
- const kindOperator = { kind: parseEquals(astNode, kind) };
36
- return participant ? { participant, operator: kindOperator } : kindOperator;
37
- }
38
- case ast.isWhereElementNegation(astNode) || ast.isWhereRelationNegation(astNode): {
39
- return {
40
- not: parseWhereClause(astNode.value),
41
- };
42
- }
43
- case ast.isWhereBinaryExpression(astNode): {
44
- const left = parseWhereClause(astNode.left);
45
- const right = parseWhereClause(astNode.right);
46
- const operator = astNode.operator.toLowerCase();
47
- return createBinaryOperator(operator, left, right);
48
- }
49
- default:
50
- nonexhaustive(astNode);
51
- }
52
- }
53
- export function createBinaryOperator(operator, left, right) {
54
- if (right === null) {
55
- return left;
56
- }
57
- switch (operator) {
58
- case 'and': {
59
- const operands = [
60
- isAndOperator(left) ? left.and : left,
61
- isAndOperator(right) ? right.and : right,
62
- ].flat();
63
- invariant(isNonEmptyArray(operands), 'Expected non-empty array');
64
- return {
65
- and: operands,
66
- };
67
- }
68
- case 'or': {
69
- const operands = [
70
- isOrOperator(left) ? left.or : left,
71
- isOrOperator(right) ? right.or : right,
72
- ].flat();
73
- invariant(isNonEmptyArray(operands), 'Expected non-empty array');
74
- return {
75
- or: operands,
76
- };
77
- }
78
- default:
79
- nonexhaustive(operator);
80
- }
81
- }