@likec4/language-server 1.47.0 → 1.48.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 (316) hide show
  1. package/LICENSE +1 -1
  2. package/browser/package.json +2 -2
  3. package/browser-worker/package.json +2 -2
  4. package/bundled/package.json +4 -0
  5. package/dist/LikeC4LanguageServices.d.mts +4 -0
  6. package/dist/LikeC4LanguageServices.mjs +3 -0
  7. package/dist/_chunks/ConfigurableLayouter.mjs +1956 -0
  8. package/dist/_chunks/LikeC4LanguageServices.d.mts +1978 -0
  9. package/dist/_chunks/LikeC4LanguageServices.mjs +725 -0
  10. package/dist/_chunks/ast.d.mts +1444 -0
  11. package/dist/_chunks/ast.mjs +2375 -0
  12. package/dist/_chunks/ast2.mjs +176 -0
  13. package/dist/_chunks/common-exports.mjs +0 -0
  14. package/dist/_chunks/filesystem.mjs +58 -0
  15. package/dist/_chunks/grammar.mjs +8 -0
  16. package/dist/_chunks/icons.mjs +5211 -0
  17. package/dist/_chunks/libs/@hono/node-server.mjs +436 -0
  18. package/dist/_chunks/libs/@msgpack/msgpack.mjs +805 -0
  19. package/dist/_chunks/libs/eventemitter3.mjs +243 -0
  20. package/dist/_chunks/libs/fast-equals.mjs +446 -0
  21. package/dist/_chunks/libs/hono.mjs +1829 -0
  22. package/dist/_chunks/libs/p-queue.mjs +449 -0
  23. package/dist/_chunks/libs/parse-ms.mjs +36 -0
  24. package/dist/_chunks/libs/picomatch.mjs +1673 -0
  25. package/dist/_chunks/libs/pretty-ms.mjs +80 -0
  26. package/dist/_chunks/libs/remeda.mjs +482 -0
  27. package/dist/_chunks/libs/strip-indent.mjs +15 -0
  28. package/dist/_chunks/libs/ufo.mjs +166 -0
  29. package/dist/_chunks/likec4lib.mjs +9 -0
  30. package/dist/_chunks/mcp.mjs +33 -0
  31. package/dist/_chunks/module.mjs +28 -0
  32. package/dist/_chunks/module2.mjs +6576 -0
  33. package/dist/_chunks/protocol.d.mts +311 -0
  34. package/dist/_chunks/protocol.mjs +78 -0
  35. package/dist/_chunks/rolldown-runtime.mjs +42 -0
  36. package/dist/ast.d.mts +4 -0
  37. package/dist/ast.mjs +4 -0
  38. package/dist/browser-worker.d.mts +1 -0
  39. package/dist/browser-worker.mjs +6 -0
  40. package/dist/browser.d.mts +11 -0
  41. package/dist/browser.mjs +27 -0
  42. package/dist/bundled.d.mts +28 -0
  43. package/dist/bundled.mjs +51 -4853
  44. package/dist/common-exports.d.mts +4 -0
  45. package/dist/common-exports.mjs +5 -0
  46. package/dist/filesystem/index.d.mts +4 -0
  47. package/dist/filesystem/index.mjs +3 -0
  48. package/dist/generated/ast.d.mts +2 -0
  49. package/dist/generated/ast.mjs +3 -0
  50. package/dist/generated/grammar.d.mts +6 -0
  51. package/dist/generated/grammar.mjs +3 -0
  52. package/dist/generated/module.d.mts +14 -0
  53. package/dist/generated/module.mjs +3 -0
  54. package/dist/generated-lib/icons.d.mts +4 -0
  55. package/dist/generated-lib/icons.mjs +3 -0
  56. package/dist/index.d.mts +4 -0
  57. package/dist/index.mjs +48 -0
  58. package/dist/likec4lib.d.mts +9 -0
  59. package/dist/likec4lib.mjs +4 -0
  60. package/dist/mcp/index.d.mts +4 -0
  61. package/dist/mcp/index.mjs +3 -0
  62. package/dist/module.d.mts +4 -0
  63. package/dist/module.mjs +3 -0
  64. package/dist/protocol.d.mts +2 -0
  65. package/dist/protocol.mjs +3 -0
  66. package/likec4lib/package.json +2 -2
  67. package/package.json +106 -63
  68. package/protocol/package.json +2 -2
  69. package/dist/LikeC4LanguageServices.d.ts +0 -115
  70. package/dist/LikeC4LanguageServices.js +0 -164
  71. package/dist/Rpc.d.ts +0 -9
  72. package/dist/Rpc.js +0 -276
  73. package/dist/ast.d.ts +0 -226
  74. package/dist/ast.js +0 -264
  75. package/dist/browser-worker.d.ts +0 -1
  76. package/dist/browser-worker.js +0 -4
  77. package/dist/browser.d.ts +0 -10
  78. package/dist/browser.js +0 -34
  79. package/dist/bundled.d.ts +0 -8
  80. package/dist/bundled.js +0 -44
  81. package/dist/documentation/documentation-provider.d.ts +0 -8
  82. package/dist/documentation/documentation-provider.js +0 -51
  83. package/dist/documentation/index.d.ts +0 -1
  84. package/dist/documentation/index.js +0 -1
  85. package/dist/empty.d.ts +0 -2
  86. package/dist/empty.js +0 -2
  87. package/dist/filesystem/ChokidarWatcher.d.ts +0 -19
  88. package/dist/filesystem/ChokidarWatcher.js +0 -133
  89. package/dist/filesystem/FileSystemWatcher.d.ts +0 -19
  90. package/dist/filesystem/FileSystemWatcher.js +0 -14
  91. package/dist/filesystem/LikeC4FileSystem.d.ts +0 -3
  92. package/dist/filesystem/LikeC4FileSystem.js +0 -140
  93. package/dist/filesystem/index.d.ts +0 -55
  94. package/dist/filesystem/index.js +0 -29
  95. package/dist/formatting/LikeC4Formatter.d.ts +0 -59
  96. package/dist/formatting/LikeC4Formatter.js +0 -637
  97. package/dist/formatting/utils.d.ts +0 -6
  98. package/dist/formatting/utils.js +0 -18
  99. package/dist/generated/ast.d.ts +0 -1411
  100. package/dist/generated/ast.js +0 -2207
  101. package/dist/generated/grammar.d.ts +0 -6
  102. package/dist/generated/grammar.js +0 -7
  103. package/dist/generated/module.d.ts +0 -14
  104. package/dist/generated/module.js +0 -27
  105. package/dist/generated-lib/icons.d.ts +0 -1
  106. package/dist/generated-lib/icons.js +0 -18
  107. package/dist/index.d.ts +0 -37
  108. package/dist/index.js +0 -54
  109. package/dist/likec4lib.d.ts +0 -6
  110. package/dist/likec4lib.js +0 -7
  111. package/dist/logger.d.ts +0 -17
  112. package/dist/logger.js +0 -81
  113. package/dist/lsp/CodeActionProvider.d.ts +0 -14
  114. package/dist/lsp/CodeActionProvider.js +0 -33
  115. package/dist/lsp/CodeLensProvider.d.ts +0 -9
  116. package/dist/lsp/CodeLensProvider.js +0 -44
  117. package/dist/lsp/CompletionProvider.d.ts +0 -13
  118. package/dist/lsp/CompletionProvider.js +0 -238
  119. package/dist/lsp/DocumentHighlightProvider.d.ts +0 -9
  120. package/dist/lsp/DocumentHighlightProvider.js +0 -10
  121. package/dist/lsp/DocumentLinkProvider.d.ts +0 -11
  122. package/dist/lsp/DocumentLinkProvider.js +0 -58
  123. package/dist/lsp/DocumentSymbolProvider.d.ts +0 -33
  124. package/dist/lsp/DocumentSymbolProvider.js +0 -317
  125. package/dist/lsp/HoverProvider.d.ts +0 -10
  126. package/dist/lsp/HoverProvider.js +0 -106
  127. package/dist/lsp/RenameProvider.d.ts +0 -5
  128. package/dist/lsp/RenameProvider.js +0 -6
  129. package/dist/lsp/SemanticTokenProvider.d.ts +0 -19
  130. package/dist/lsp/SemanticTokenProvider.js +0 -305
  131. package/dist/lsp/index.d.ts +0 -8
  132. package/dist/lsp/index.js +0 -9
  133. package/dist/mcp/MCPServerFactory.d.ts +0 -8
  134. package/dist/mcp/MCPServerFactory.js +0 -73
  135. package/dist/mcp/NoopLikeC4MCPServer.d.ts +0 -9
  136. package/dist/mcp/NoopLikeC4MCPServer.js +0 -17
  137. package/dist/mcp/interfaces.d.ts +0 -13
  138. package/dist/mcp/interfaces.js +0 -4
  139. package/dist/mcp/server/StdioLikeC4MCPServer.d.ts +0 -16
  140. package/dist/mcp/server/StdioLikeC4MCPServer.js +0 -51
  141. package/dist/mcp/server/StreamableLikeC4MCPServer.d.ts +0 -16
  142. package/dist/mcp/server/StreamableLikeC4MCPServer.js +0 -121
  143. package/dist/mcp/server/WithMCPServer.d.ts +0 -4
  144. package/dist/mcp/server/WithMCPServer.js +0 -54
  145. package/dist/mcp/tools/_common.d.ts +0 -88
  146. package/dist/mcp/tools/_common.js +0 -49
  147. package/dist/mcp/tools/find-relationships.d.ts +0 -202
  148. package/dist/mcp/tools/find-relationships.js +0 -150
  149. package/dist/mcp/tools/list-projects.d.ts +0 -194
  150. package/dist/mcp/tools/list-projects.js +0 -62
  151. package/dist/mcp/tools/open-view.d.ts +0 -200
  152. package/dist/mcp/tools/open-view.js +0 -52
  153. package/dist/mcp/tools/read-deployment.d.ts +0 -200
  154. package/dist/mcp/tools/read-deployment.js +0 -150
  155. package/dist/mcp/tools/read-element.d.ts +0 -200
  156. package/dist/mcp/tools/read-element.js +0 -218
  157. package/dist/mcp/tools/read-project-summary.d.ts +0 -198
  158. package/dist/mcp/tools/read-project-summary.js +0 -176
  159. package/dist/mcp/tools/read-view.d.ts +0 -200
  160. package/dist/mcp/tools/read-view.js +0 -203
  161. package/dist/mcp/tools/search-element.d.ts +0 -198
  162. package/dist/mcp/tools/search-element.js +0 -177
  163. package/dist/mcp/utils.d.ts +0 -18
  164. package/dist/mcp/utils.js +0 -48
  165. package/dist/model/builder/MergedExtends.d.ts +0 -13
  166. package/dist/model/builder/MergedExtends.js +0 -74
  167. package/dist/model/builder/MergedSpecification.d.ts +0 -32
  168. package/dist/model/builder/MergedSpecification.js +0 -175
  169. package/dist/model/builder/buildModel.d.ts +0 -16
  170. package/dist/model/builder/buildModel.js +0 -245
  171. package/dist/model/deployments-index.d.ts +0 -10
  172. package/dist/model/deployments-index.js +0 -102
  173. package/dist/model/fqn-index.d.ts +0 -61
  174. package/dist/model/fqn-index.js +0 -253
  175. package/dist/model/index.d.ts +0 -6
  176. package/dist/model/index.js +0 -6
  177. package/dist/model/model-builder.d.ts +0 -54
  178. package/dist/model/model-builder.js +0 -233
  179. package/dist/model/model-locator.d.ts +0 -39
  180. package/dist/model/model-locator.js +0 -240
  181. package/dist/model/model-parser-where.d.ts +0 -4
  182. package/dist/model/model-parser-where.js +0 -81
  183. package/dist/model/model-parser.d.ts +0 -645
  184. package/dist/model/model-parser.js +0 -133
  185. package/dist/model/parser/Base.d.ts +0 -69
  186. package/dist/model/parser/Base.js +0 -382
  187. package/dist/model/parser/DeploymentModelParser.d.ts +0 -71
  188. package/dist/model/parser/DeploymentModelParser.js +0 -176
  189. package/dist/model/parser/DeploymentViewParser.d.ts +0 -75
  190. package/dist/model/parser/DeploymentViewParser.js +0 -86
  191. package/dist/model/parser/FqnRefParser.d.ts +0 -66
  192. package/dist/model/parser/FqnRefParser.js +0 -382
  193. package/dist/model/parser/GlobalsParser.d.ts +0 -109
  194. package/dist/model/parser/GlobalsParser.js +0 -84
  195. package/dist/model/parser/ImportsParser.d.ts +0 -46
  196. package/dist/model/parser/ImportsParser.js +0 -24
  197. package/dist/model/parser/ModelParser.d.ts +0 -71
  198. package/dist/model/parser/ModelParser.js +0 -209
  199. package/dist/model/parser/PredicatesParser.d.ts +0 -75
  200. package/dist/model/parser/PredicatesParser.js +0 -45
  201. package/dist/model/parser/SpecificationParser.d.ts +0 -53
  202. package/dist/model/parser/SpecificationParser.js +0 -113
  203. package/dist/model/parser/ValueConverter.d.ts +0 -4
  204. package/dist/model/parser/ValueConverter.js +0 -12
  205. package/dist/model/parser/ViewsParser.d.ts +0 -112
  206. package/dist/model/parser/ViewsParser.js +0 -492
  207. package/dist/model-change/ModelChanges.d.ts +0 -18
  208. package/dist/model-change/ModelChanges.js +0 -129
  209. package/dist/model-change/changeElementStyle.d.ts +0 -16
  210. package/dist/model-change/changeElementStyle.js +0 -134
  211. package/dist/model-change/changeViewLayout.d.ts +0 -12
  212. package/dist/model-change/changeViewLayout.js +0 -28
  213. package/dist/model-change/removeManualLayoutV1.d.ts +0 -7
  214. package/dist/model-change/removeManualLayoutV1.js +0 -27
  215. package/dist/module.d.ts +0 -92
  216. package/dist/module.js +0 -143
  217. package/dist/protocol.d.ts +0 -289
  218. package/dist/protocol.js +0 -123
  219. package/dist/references/index.d.ts +0 -3
  220. package/dist/references/index.js +0 -3
  221. package/dist/references/name-provider.d.ts +0 -9
  222. package/dist/references/name-provider.js +0 -37
  223. package/dist/references/scope-computation.d.ts +0 -20
  224. package/dist/references/scope-computation.js +0 -288
  225. package/dist/references/scope-provider.d.ts +0 -40
  226. package/dist/references/scope-provider.js +0 -239
  227. package/dist/shared/NodeKindProvider.d.ts +0 -15
  228. package/dist/shared/NodeKindProvider.js +0 -57
  229. package/dist/shared/WorkspaceSymbolProvider.d.ts +0 -3
  230. package/dist/shared/WorkspaceSymbolProvider.js +0 -3
  231. package/dist/shared/index.d.ts +0 -2
  232. package/dist/shared/index.js +0 -2
  233. package/dist/test/index.d.ts +0 -1
  234. package/dist/test/index.js +0 -1
  235. package/dist/test/testServices.d.ts +0 -64
  236. package/dist/test/testServices.js +0 -210
  237. package/dist/utils/disposable.d.ts +0 -8
  238. package/dist/utils/disposable.js +0 -26
  239. package/dist/utils/elementRef.d.ts +0 -11
  240. package/dist/utils/elementRef.js +0 -33
  241. package/dist/utils/fqnRef.d.ts +0 -11
  242. package/dist/utils/fqnRef.js +0 -63
  243. package/dist/utils/index.d.ts +0 -11
  244. package/dist/utils/index.js +0 -35
  245. package/dist/utils/printDocs.d.ts +0 -2
  246. package/dist/utils/printDocs.js +0 -1
  247. package/dist/utils/projectId.d.ts +0 -4
  248. package/dist/utils/projectId.js +0 -16
  249. package/dist/utils/stringHash.d.ts +0 -1
  250. package/dist/utils/stringHash.js +0 -5
  251. package/dist/validation/DocumentValidator.d.ts +0 -11
  252. package/dist/validation/DocumentValidator.js +0 -17
  253. package/dist/validation/_shared.d.ts +0 -3
  254. package/dist/validation/_shared.js +0 -26
  255. package/dist/validation/deployment-checks.d.ts +0 -7
  256. package/dist/validation/deployment-checks.js +0 -140
  257. package/dist/validation/dynamic-view.d.ts +0 -6
  258. package/dist/validation/dynamic-view.js +0 -67
  259. package/dist/validation/element-ref.d.ts +0 -4
  260. package/dist/validation/element-ref.js +0 -12
  261. package/dist/validation/element.d.ts +0 -4
  262. package/dist/validation/element.js +0 -49
  263. package/dist/validation/imports.d.ts +0 -4
  264. package/dist/validation/imports.js +0 -46
  265. package/dist/validation/index.d.ts +0 -15
  266. package/dist/validation/index.js +0 -167
  267. package/dist/validation/property-checks.d.ts +0 -7
  268. package/dist/validation/property-checks.js +0 -108
  269. package/dist/validation/relation.d.ts +0 -6
  270. package/dist/validation/relation.js +0 -141
  271. package/dist/validation/specification.d.ts +0 -12
  272. package/dist/validation/specification.js +0 -190
  273. package/dist/validation/view-checks.d.ts +0 -4
  274. package/dist/validation/view-checks.js +0 -46
  275. package/dist/validation/view-predicates/fqn-expr-with.d.ts +0 -4
  276. package/dist/validation/view-predicates/fqn-expr-with.js +0 -43
  277. package/dist/validation/view-predicates/fqn-ref-expr.d.ts +0 -4
  278. package/dist/validation/view-predicates/fqn-ref-expr.js +0 -51
  279. package/dist/validation/view-predicates/incoming.d.ts +0 -4
  280. package/dist/validation/view-predicates/incoming.js +0 -16
  281. package/dist/validation/view-predicates/index.d.ts +0 -6
  282. package/dist/validation/view-predicates/index.js +0 -6
  283. package/dist/validation/view-predicates/outgoing.d.ts +0 -4
  284. package/dist/validation/view-predicates/outgoing.js +0 -20
  285. package/dist/validation/view-predicates/relation-expr.d.ts +0 -4
  286. package/dist/validation/view-predicates/relation-expr.js +0 -46
  287. package/dist/validation/view-predicates/relation-with.d.ts +0 -4
  288. package/dist/validation/view-predicates/relation-with.js +0 -16
  289. package/dist/validation/view.d.ts +0 -4
  290. package/dist/validation/view.js +0 -42
  291. package/dist/view-utils/assignNavigateTo.d.ts +0 -2
  292. package/dist/view-utils/assignNavigateTo.js +0 -27
  293. package/dist/view-utils/index.d.ts +0 -2
  294. package/dist/view-utils/index.js +0 -2
  295. package/dist/view-utils/manual-layout.d.ts +0 -13
  296. package/dist/view-utils/manual-layout.js +0 -149
  297. package/dist/views/ConfigurableLayouter.d.ts +0 -7
  298. package/dist/views/ConfigurableLayouter.js +0 -51
  299. package/dist/views/LikeC4ManualLayouts.d.ts +0 -42
  300. package/dist/views/LikeC4ManualLayouts.js +0 -209
  301. package/dist/views/LikeC4Views.d.ts +0 -89
  302. package/dist/views/LikeC4Views.js +0 -216
  303. package/dist/views/index.d.ts +0 -4
  304. package/dist/views/index.js +0 -11
  305. package/dist/workspace/AstNodeDescriptionProvider.d.ts +0 -7
  306. package/dist/workspace/AstNodeDescriptionProvider.js +0 -18
  307. package/dist/workspace/IndexManager.d.ts +0 -10
  308. package/dist/workspace/IndexManager.js +0 -26
  309. package/dist/workspace/LangiumDocuments.d.ts +0 -29
  310. package/dist/workspace/LangiumDocuments.js +0 -104
  311. package/dist/workspace/ProjectsManager.d.ts +0 -134
  312. package/dist/workspace/ProjectsManager.js +0 -610
  313. package/dist/workspace/WorkspaceManager.d.ts +0 -31
  314. package/dist/workspace/WorkspaceManager.js +0 -132
  315. package/dist/workspace/index.d.ts +0 -5
  316. 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
- }