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