@likec4/language-server 1.43.0 → 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 (299) 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 +5 -1
  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 +3542 -3896
  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.js +2155 -0
  24. package/dist/generated/{grammar.mjs → grammar.js} +6 -2
  25. package/dist/generated/module.d.ts +6 -1
  26. package/dist/generated/module.js +27 -0
  27. package/dist/generated-lib/{icons.mjs → icons.js} +11 -7
  28. package/dist/index.d.ts +7 -0
  29. package/dist/index.js +53 -0
  30. package/dist/{likec4lib.mjs → likec4lib.js} +3 -3
  31. package/dist/logger.js +81 -0
  32. package/dist/lsp/CodeActionProvider.d.ts +14 -0
  33. package/dist/lsp/CodeActionProvider.js +33 -0
  34. package/dist/lsp/CodeLensProvider.js +44 -0
  35. package/dist/lsp/CompletionProvider.d.ts +3 -1
  36. package/dist/lsp/CompletionProvider.js +200 -0
  37. package/dist/lsp/DocumentHighlightProvider.js +10 -0
  38. package/dist/lsp/DocumentLinkProvider.js +58 -0
  39. package/dist/lsp/DocumentSymbolProvider.js +306 -0
  40. package/dist/lsp/HoverProvider.js +106 -0
  41. package/dist/lsp/RenameProvider.js +6 -0
  42. package/dist/lsp/SemanticTokenProvider.js +257 -0
  43. package/dist/lsp/index.d.ts +1 -0
  44. package/dist/lsp/index.js +9 -0
  45. package/dist/mcp/MCPServerFactory.js +73 -0
  46. package/dist/mcp/NoopLikeC4MCPServer.js +17 -0
  47. package/dist/mcp/interfaces.js +5 -0
  48. package/dist/mcp/server/StdioLikeC4MCPServer.js +47 -0
  49. package/dist/mcp/server/StreamableLikeC4MCPServer.js +145 -0
  50. package/dist/mcp/server/WithMCPServer.js +56 -0
  51. package/dist/mcp/tools/_common.d.ts +8 -7
  52. package/dist/mcp/tools/_common.js +49 -0
  53. package/dist/mcp/tools/find-relationships.d.ts +7 -8
  54. package/dist/mcp/tools/find-relationships.js +150 -0
  55. package/dist/mcp/tools/list-projects.d.ts +3 -3
  56. package/dist/mcp/tools/list-projects.js +62 -0
  57. package/dist/mcp/tools/open-view.d.ts +6 -7
  58. package/dist/mcp/tools/open-view.js +52 -0
  59. package/dist/mcp/tools/read-deployment.d.ts +6 -7
  60. package/dist/mcp/tools/read-deployment.js +132 -0
  61. package/dist/mcp/tools/read-element.d.ts +6 -7
  62. package/dist/mcp/tools/read-element.js +194 -0
  63. package/dist/mcp/tools/read-project-summary.d.ts +5 -6
  64. package/dist/mcp/tools/read-project-summary.js +176 -0
  65. package/dist/mcp/tools/read-view.d.ts +6 -7
  66. package/dist/mcp/tools/read-view.js +203 -0
  67. package/dist/mcp/tools/search-element.d.ts +3 -3
  68. package/dist/mcp/tools/search-element.js +177 -0
  69. package/dist/mcp/utils.d.ts +2 -2
  70. package/dist/mcp/utils.js +48 -0
  71. package/dist/model/builder/MergedExtends.js +74 -0
  72. package/dist/model/builder/MergedSpecification.js +175 -0
  73. package/dist/model/builder/buildModel.js +176 -0
  74. package/dist/model/deployments-index.js +102 -0
  75. package/dist/model/fqn-index.js +250 -0
  76. package/dist/model/index.js +6 -0
  77. package/dist/model/model-builder.d.ts +13 -11
  78. package/dist/model/model-builder.js +234 -0
  79. package/dist/model/model-locator.d.ts +6 -5
  80. package/dist/model/model-locator.js +240 -0
  81. package/dist/model/model-parser-where.js +81 -0
  82. package/dist/model/model-parser.d.ts +309 -304
  83. package/dist/model/model-parser.js +119 -0
  84. package/dist/model/parser/Base.d.ts +2 -2
  85. package/dist/model/parser/Base.js +367 -0
  86. package/dist/model/parser/DeploymentModelParser.d.ts +2 -2
  87. package/dist/model/parser/DeploymentModelParser.js +176 -0
  88. package/dist/model/parser/DeploymentViewParser.d.ts +3 -3
  89. package/dist/model/parser/DeploymentViewParser.js +86 -0
  90. package/dist/model/parser/FqnRefParser.d.ts +2 -2
  91. package/dist/model/parser/FqnRefParser.js +382 -0
  92. package/dist/model/parser/GlobalsParser.d.ts +6 -6
  93. package/dist/model/parser/GlobalsParser.js +84 -0
  94. package/dist/model/parser/ImportsParser.d.ts +11 -12
  95. package/dist/model/parser/ImportsParser.js +24 -0
  96. package/dist/model/parser/ModelParser.d.ts +2 -2
  97. package/dist/model/parser/ModelParser.js +165 -0
  98. package/dist/model/parser/PredicatesParser.d.ts +2 -2
  99. package/dist/model/parser/PredicatesParser.js +45 -0
  100. package/dist/model/parser/SpecificationParser.d.ts +2 -2
  101. package/dist/model/parser/SpecificationParser.js +109 -0
  102. package/dist/model/parser/ValueConverter.js +12 -0
  103. package/dist/model/parser/ViewsParser.d.ts +3 -3
  104. package/dist/model/parser/ViewsParser.js +477 -0
  105. package/dist/model-change/ModelChanges.d.ts +6 -3
  106. package/dist/model-change/ModelChanges.js +102 -0
  107. package/dist/model-change/changeElementStyle.js +134 -0
  108. package/dist/model-change/changeViewLayout.d.ts +2 -2
  109. package/dist/model-change/changeViewLayout.js +28 -0
  110. package/dist/model-change/removeManualLayoutV1.d.ts +7 -0
  111. package/dist/model-change/removeManualLayoutV1.js +27 -0
  112. package/dist/module.d.ts +10 -5
  113. package/dist/module.js +143 -0
  114. package/dist/protocol.d.ts +1 -17
  115. package/dist/protocol.js +114 -0
  116. package/dist/references/index.js +3 -0
  117. package/dist/references/name-provider.js +37 -0
  118. package/dist/references/scope-computation.js +288 -0
  119. package/dist/references/scope-provider.d.ts +3 -3
  120. package/dist/references/scope-provider.js +242 -0
  121. package/dist/shared/NodeKindProvider.js +57 -0
  122. package/dist/shared/{WorkspaceSymbolProvider.mjs → WorkspaceSymbolProvider.js} +1 -1
  123. package/dist/shared/index.js +2 -0
  124. package/dist/test/index.js +1 -0
  125. package/dist/test/testServices.d.ts +16 -16
  126. package/dist/test/testServices.js +210 -0
  127. package/dist/utils/disposable.js +26 -0
  128. package/dist/utils/elementRef.d.ts +1 -1
  129. package/dist/utils/elementRef.js +27 -0
  130. package/dist/utils/fqnRef.js +63 -0
  131. package/dist/utils/index.js +35 -0
  132. package/dist/utils/printDocs.js +1 -0
  133. package/dist/utils/projectId.js +16 -0
  134. package/dist/utils/stringHash.js +5 -0
  135. package/dist/validation/DocumentValidator.js +17 -0
  136. package/dist/validation/_shared.js +26 -0
  137. package/dist/validation/deployment-checks.js +140 -0
  138. package/dist/validation/dynamic-view.js +67 -0
  139. package/dist/validation/element-ref.js +12 -0
  140. package/dist/validation/element.js +49 -0
  141. package/dist/validation/imports.js +46 -0
  142. package/dist/validation/index.d.ts +1 -1
  143. package/dist/validation/index.js +157 -0
  144. package/dist/validation/property-checks.js +108 -0
  145. package/dist/validation/relation.js +55 -0
  146. package/dist/validation/specification.js +190 -0
  147. package/dist/validation/view-predicates/fqn-expr-with.js +43 -0
  148. package/dist/validation/view-predicates/fqn-ref-expr.js +51 -0
  149. package/dist/validation/view-predicates/incoming.js +16 -0
  150. package/dist/validation/view-predicates/index.js +6 -0
  151. package/dist/validation/view-predicates/outgoing.js +20 -0
  152. package/dist/validation/view-predicates/relation-expr.js +46 -0
  153. package/dist/validation/view-predicates/relation-with.js +16 -0
  154. package/dist/validation/view.d.ts +1 -1
  155. package/dist/validation/view.js +42 -0
  156. package/dist/view-utils/assignNavigateTo.js +27 -0
  157. package/dist/view-utils/index.d.ts +1 -0
  158. package/dist/view-utils/index.js +2 -0
  159. package/dist/view-utils/manual-layout.d.ts +6 -0
  160. package/dist/view-utils/manual-layout.js +151 -0
  161. package/dist/views/ConfigurableLayouter.js +51 -0
  162. package/dist/views/LikeC4ManualLayouts.d.ts +28 -0
  163. package/dist/views/LikeC4ManualLayouts.js +132 -0
  164. package/dist/views/{likec4-views.d.ts → LikeC4Views.d.ts} +9 -8
  165. package/dist/views/LikeC4Views.js +200 -0
  166. package/dist/views/index.d.ts +4 -1
  167. package/dist/views/index.js +11 -0
  168. package/dist/workspace/AstNodeDescriptionProvider.js +15 -0
  169. package/dist/workspace/IndexManager.js +21 -0
  170. package/dist/workspace/LangiumDocuments.d.ts +1 -1
  171. package/dist/workspace/LangiumDocuments.js +58 -0
  172. package/dist/workspace/ProjectsManager.d.ts +8 -3
  173. package/dist/workspace/ProjectsManager.js +373 -0
  174. package/dist/workspace/WorkspaceManager.d.ts +3 -2
  175. package/dist/workspace/WorkspaceManager.js +93 -0
  176. package/dist/workspace/index.js +5 -0
  177. package/likec4lib/package.json +1 -1
  178. package/package.json +25 -24
  179. package/protocol/package.json +1 -1
  180. package/dist/LikeC4LanguageServices.mjs +0 -197
  181. package/dist/Rpc.mjs +0 -296
  182. package/dist/ast.mjs +0 -221
  183. package/dist/browser-worker.mjs +0 -2
  184. package/dist/browser.mjs +0 -32
  185. package/dist/documentation/documentation-provider.mjs +0 -48
  186. package/dist/documentation/index.mjs +0 -1
  187. package/dist/empty.mjs +0 -1
  188. package/dist/filesystem/ChokidarWatcher.mjs +0 -68
  189. package/dist/filesystem/FileSystemWatcher.mjs +0 -11
  190. package/dist/filesystem/LikeC4FileSystem.mjs +0 -64
  191. package/dist/filesystem/index.mjs +0 -19
  192. package/dist/formatting/LikeC4Formatter.mjs +0 -511
  193. package/dist/formatting/utils.mjs +0 -15
  194. package/dist/generated/ast.mjs +0 -2150
  195. package/dist/generated/module.mjs +0 -23
  196. package/dist/index.mjs +0 -50
  197. package/dist/logger.mjs +0 -82
  198. package/dist/lsp/CodeLensProvider.mjs +0 -42
  199. package/dist/lsp/CompletionProvider.mjs +0 -208
  200. package/dist/lsp/DocumentHighlightProvider.mjs +0 -10
  201. package/dist/lsp/DocumentLinkProvider.mjs +0 -53
  202. package/dist/lsp/DocumentSymbolProvider.mjs +0 -287
  203. package/dist/lsp/HoverProvider.mjs +0 -104
  204. package/dist/lsp/RenameProvider.mjs +0 -6
  205. package/dist/lsp/SemanticTokenProvider.mjs +0 -276
  206. package/dist/lsp/index.mjs +0 -7
  207. package/dist/mcp/MCPServerFactory.mjs +0 -70
  208. package/dist/mcp/NoopLikeC4MCPServer.mjs +0 -17
  209. package/dist/mcp/interfaces.mjs +0 -4
  210. package/dist/mcp/server/StdioLikeC4MCPServer.mjs +0 -46
  211. package/dist/mcp/server/StreamableLikeC4MCPServer.mjs +0 -153
  212. package/dist/mcp/server/WithMCPServer.mjs +0 -58
  213. package/dist/mcp/tools/_common.mjs +0 -42
  214. package/dist/mcp/tools/find-relationships.mjs +0 -151
  215. package/dist/mcp/tools/list-projects.mjs +0 -62
  216. package/dist/mcp/tools/open-view.mjs +0 -52
  217. package/dist/mcp/tools/read-deployment.mjs +0 -130
  218. package/dist/mcp/tools/read-element.mjs +0 -198
  219. package/dist/mcp/tools/read-project-summary.mjs +0 -178
  220. package/dist/mcp/tools/read-view.mjs +0 -205
  221. package/dist/mcp/tools/search-element.mjs +0 -171
  222. package/dist/mcp/utils.mjs +0 -47
  223. package/dist/model/builder/MergedExtends.mjs +0 -76
  224. package/dist/model/builder/MergedSpecification.mjs +0 -205
  225. package/dist/model/builder/assignTagColors.d.ts +0 -7
  226. package/dist/model/builder/assignTagColors.mjs +0 -51
  227. package/dist/model/builder/buildModel.mjs +0 -226
  228. package/dist/model/deployments-index.mjs +0 -100
  229. package/dist/model/fqn-index.mjs +0 -243
  230. package/dist/model/index.mjs +0 -6
  231. package/dist/model/model-builder.mjs +0 -285
  232. package/dist/model/model-locator.mjs +0 -239
  233. package/dist/model/model-parser-where.mjs +0 -81
  234. package/dist/model/model-parser.mjs +0 -127
  235. package/dist/model/parser/Base.mjs +0 -376
  236. package/dist/model/parser/DeploymentModelParser.mjs +0 -212
  237. package/dist/model/parser/DeploymentViewParser.mjs +0 -95
  238. package/dist/model/parser/FqnRefParser.mjs +0 -398
  239. package/dist/model/parser/GlobalsParser.mjs +0 -82
  240. package/dist/model/parser/ImportsParser.mjs +0 -28
  241. package/dist/model/parser/ModelParser.mjs +0 -190
  242. package/dist/model/parser/PredicatesParser.mjs +0 -45
  243. package/dist/model/parser/SpecificationParser.mjs +0 -120
  244. package/dist/model/parser/ValueConverter.mjs +0 -12
  245. package/dist/model/parser/ViewsParser.mjs +0 -490
  246. package/dist/model-change/ModelChanges.mjs +0 -89
  247. package/dist/model-change/changeElementStyle.mjs +0 -143
  248. package/dist/model-change/changeViewLayout.mjs +0 -32
  249. package/dist/model-change/saveManualLayout.d.ts +0 -11
  250. package/dist/model-change/saveManualLayout.mjs +0 -27
  251. package/dist/module.mjs +0 -180
  252. package/dist/protocol.mjs +0 -65
  253. package/dist/references/index.mjs +0 -3
  254. package/dist/references/name-provider.mjs +0 -39
  255. package/dist/references/scope-computation.mjs +0 -312
  256. package/dist/references/scope-provider.mjs +0 -239
  257. package/dist/shared/NodeKindProvider.mjs +0 -110
  258. package/dist/shared/index.mjs +0 -2
  259. package/dist/test/index.mjs +0 -1
  260. package/dist/test/testServices.mjs +0 -200
  261. package/dist/utils/disposable.mjs +0 -25
  262. package/dist/utils/elementRef.mjs +0 -20
  263. package/dist/utils/fqnRef.mjs +0 -57
  264. package/dist/utils/index.mjs +0 -33
  265. package/dist/utils/printDocs.mjs +0 -1
  266. package/dist/utils/projectId.mjs +0 -16
  267. package/dist/utils/stringHash.mjs +0 -5
  268. package/dist/validation/DocumentValidator.mjs +0 -16
  269. package/dist/validation/_shared.mjs +0 -25
  270. package/dist/validation/deployment-checks.mjs +0 -146
  271. package/dist/validation/dynamic-view.mjs +0 -67
  272. package/dist/validation/element-ref.mjs +0 -12
  273. package/dist/validation/element.mjs +0 -50
  274. package/dist/validation/imports.mjs +0 -25
  275. package/dist/validation/index.mjs +0 -180
  276. package/dist/validation/property-checks.mjs +0 -107
  277. package/dist/validation/relation.mjs +0 -53
  278. package/dist/validation/specification.mjs +0 -173
  279. package/dist/validation/view-predicates/fqn-expr-with.mjs +0 -43
  280. package/dist/validation/view-predicates/fqn-ref-expr.mjs +0 -53
  281. package/dist/validation/view-predicates/incoming.mjs +0 -16
  282. package/dist/validation/view-predicates/index.mjs +0 -6
  283. package/dist/validation/view-predicates/outgoing.mjs +0 -20
  284. package/dist/validation/view-predicates/relation-expr.mjs +0 -39
  285. package/dist/validation/view-predicates/relation-with.mjs +0 -16
  286. package/dist/validation/view.mjs +0 -25
  287. package/dist/view-utils/assignNavigateTo.mjs +0 -25
  288. package/dist/view-utils/index.mjs +0 -1
  289. package/dist/view-utils/manual-layout.mjs +0 -99
  290. package/dist/views/configurable-layouter.mjs +0 -51
  291. package/dist/views/index.mjs +0 -1
  292. package/dist/views/likec4-views.mjs +0 -166
  293. package/dist/workspace/AstNodeDescriptionProvider.mjs +0 -17
  294. package/dist/workspace/IndexManager.mjs +0 -17
  295. package/dist/workspace/LangiumDocuments.mjs +0 -53
  296. package/dist/workspace/ProjectsManager.mjs +0 -360
  297. package/dist/workspace/WorkspaceManager.mjs +0 -83
  298. package/dist/workspace/index.mjs +0 -5
  299. /package/dist/views/{configurable-layouter.d.ts → ConfigurableLayouter.d.ts} +0 -0
package/dist/ast.js ADDED
@@ -0,0 +1,253 @@
1
+ import { MultiMap, nonexhaustive } from '@likec4/core/utils';
2
+ import { AstUtils, DocumentState } from 'langium';
3
+ import { clamp, isNullish, isTruthy } from 'remeda';
4
+ import * as ast from './generated/ast';
5
+ import { LikeC4LanguageMetaData } from './generated/module';
6
+ export { ast };
7
+ const idattr = Symbol.for('idattr');
8
+ export const ViewOps = {
9
+ writeId(node, id) {
10
+ node[idattr] = id;
11
+ return node;
12
+ },
13
+ readId(node) {
14
+ return node[idattr];
15
+ },
16
+ };
17
+ export const ElementOps = {
18
+ writeId(node, id) {
19
+ if (isNullish(id)) {
20
+ node[idattr] = undefined;
21
+ }
22
+ else {
23
+ node[idattr] = id;
24
+ }
25
+ return node;
26
+ },
27
+ readId(node) {
28
+ return node[idattr];
29
+ },
30
+ };
31
+ export function isLikeC4LangiumDocument(doc) {
32
+ return doc.textDocument.languageId === LikeC4LanguageMetaData.languageId;
33
+ }
34
+ export function isParsedLikeC4LangiumDocument(doc) {
35
+ return (isLikeC4LangiumDocument(doc)
36
+ && doc.state == DocumentState.Validated
37
+ && !!doc.c4Specification
38
+ && !!doc.c4Elements
39
+ && !!doc.c4ExtendElements
40
+ && !!doc.c4ExtendDeployments
41
+ && !!doc.c4Relations
42
+ && !!doc.c4Views
43
+ && !!doc.c4Deployments
44
+ && !!doc.c4DeploymentRelations
45
+ && !!doc.c4Imports);
46
+ }
47
+ export function parseMarkdownAsString(node) {
48
+ return node?.markdown || node?.text;
49
+ }
50
+ export function parseAstPercent(value) {
51
+ const opacity = parseFloat(value);
52
+ return isNaN(opacity) ? 100 : clamp(opacity, { min: 0, max: 100 });
53
+ }
54
+ export function parseAstOpacityProperty({ value }) {
55
+ return parseAstPercent(value);
56
+ }
57
+ export function parseAstSizeValue({ value }) {
58
+ switch (value) {
59
+ case 'xs':
60
+ case 'sm':
61
+ case 'md':
62
+ case 'lg':
63
+ case 'xl':
64
+ return value;
65
+ case 'xsmall':
66
+ return 'xs';
67
+ case 'small':
68
+ return 'sm';
69
+ case 'medium':
70
+ return 'md';
71
+ case 'large':
72
+ return 'lg';
73
+ case 'xlarge':
74
+ return 'xl';
75
+ default:
76
+ nonexhaustive(value);
77
+ }
78
+ }
79
+ export function toRelationshipStyle(props, isValid) {
80
+ const result = {};
81
+ if (!props || props.length === 0) {
82
+ return result;
83
+ }
84
+ for (const prop of props) {
85
+ if (!isValid(prop)) {
86
+ continue;
87
+ }
88
+ switch (true) {
89
+ case ast.isColorProperty(prop): {
90
+ const color = toColor(prop);
91
+ if (isTruthy(color)) {
92
+ result.color = color;
93
+ }
94
+ break;
95
+ }
96
+ case ast.isLineProperty(prop): {
97
+ result.line = prop.value;
98
+ break;
99
+ }
100
+ case ast.isArrowProperty(prop): {
101
+ switch (prop.key) {
102
+ case 'head': {
103
+ result.head = prop.value;
104
+ break;
105
+ }
106
+ case 'tail': {
107
+ result.tail = prop.value;
108
+ break;
109
+ }
110
+ default: {
111
+ nonexhaustive(prop);
112
+ }
113
+ }
114
+ break;
115
+ }
116
+ default: {
117
+ nonexhaustive(prop);
118
+ }
119
+ }
120
+ }
121
+ return result;
122
+ }
123
+ export function toColor(astNode) {
124
+ return astNode?.themeColor ?? astNode?.customColor?.$refText;
125
+ }
126
+ export function toAutoLayout(rule) {
127
+ const rankSep = rule.rankSep;
128
+ const nodeSep = rule.nodeSep;
129
+ let direction;
130
+ switch (rule.direction) {
131
+ case 'TopBottom': {
132
+ direction = 'TB';
133
+ break;
134
+ }
135
+ case 'BottomTop': {
136
+ direction = 'BT';
137
+ break;
138
+ }
139
+ case 'LeftRight': {
140
+ direction = 'LR';
141
+ break;
142
+ }
143
+ case 'RightLeft': {
144
+ direction = 'RL';
145
+ break;
146
+ }
147
+ default:
148
+ nonexhaustive(rule.direction);
149
+ }
150
+ return {
151
+ direction,
152
+ ...(nodeSep && { nodeSep }),
153
+ ...(rankSep && { rankSep }),
154
+ };
155
+ }
156
+ export function toAstViewLayoutDirection(c4) {
157
+ switch (c4) {
158
+ case 'TB': {
159
+ return 'TopBottom';
160
+ }
161
+ case 'BT': {
162
+ return 'BottomTop';
163
+ }
164
+ case 'LR': {
165
+ return 'LeftRight';
166
+ }
167
+ case 'RL': {
168
+ return 'RightLeft';
169
+ }
170
+ default:
171
+ nonexhaustive(c4);
172
+ }
173
+ }
174
+ // export function elementExpressionFromPredicate(predicate: ast.ElementPredicate): ast.ElementExpression {
175
+ // if (ast.isElementExpression(predicate)) {
176
+ // return predicate
177
+ // }
178
+ // if (ast.isElementPredicateWhere(predicate)) {
179
+ // return predicate.subject
180
+ // }
181
+ // if (ast.isElementPredicateWith(predicate)) {
182
+ // return elementExpressionFromPredicate(predicate.subject)
183
+ // }
184
+ // nonexhaustive(predicate)
185
+ // }
186
+ export function getViewRulePredicateContainer(el) {
187
+ return AstUtils.getContainerOfType(el, (n) => {
188
+ return ast.isViewRulePredicate(n) || ast.isDeploymentViewRulePredicate(n) || ast.isDynamicViewIncludePredicate(n);
189
+ });
190
+ }
191
+ const _isModel = (astNode) => {
192
+ return ast.isModel(astNode) ||
193
+ ast.isElementBody(astNode) ||
194
+ ast.isExtendElementBody(astNode) ||
195
+ ast.isElementViewBody(astNode) ||
196
+ ast.isDynamicViewBody(astNode) ||
197
+ ast.isElementRef(astNode);
198
+ };
199
+ const _isDeployment = (astNode) => {
200
+ return ast.isModelDeployments(astNode) ||
201
+ ast.isDeploymentViewBody(astNode) ||
202
+ ast.isDeploymentNodeBody(astNode) ||
203
+ ast.isExtendDeploymentBody(astNode) ||
204
+ ast.isDeployedInstanceBody(astNode);
205
+ };
206
+ export function isFqnRefInsideGlobals(astNode) {
207
+ while (true) {
208
+ if (_isDeployment(astNode) || _isModel(astNode)) {
209
+ return false;
210
+ }
211
+ if (ast.isGlobals(astNode) || ast.isModelViews(astNode)) {
212
+ return true;
213
+ }
214
+ if (astNode.$container) {
215
+ astNode = astNode.$container;
216
+ }
217
+ else {
218
+ return false;
219
+ }
220
+ }
221
+ }
222
+ export function isFqnRefInsideModel(astNode) {
223
+ while (true) {
224
+ if (_isDeployment(astNode)) {
225
+ return false;
226
+ }
227
+ if (_isModel(astNode)) {
228
+ return true;
229
+ }
230
+ if (astNode.$container) {
231
+ astNode = astNode.$container;
232
+ }
233
+ else {
234
+ return false;
235
+ }
236
+ }
237
+ }
238
+ export function isFqnRefInsideDeployment(astNode) {
239
+ while (true) {
240
+ if (_isModel(astNode)) {
241
+ return false;
242
+ }
243
+ if (_isDeployment(astNode)) {
244
+ return true;
245
+ }
246
+ if (astNode.$container) {
247
+ astNode = astNode.$container;
248
+ }
249
+ else {
250
+ return false;
251
+ }
252
+ }
253
+ }
@@ -0,0 +1,4 @@
1
+ // This is an example copied as is from here:
2
+ // https://github.com/microsoft/vscode-extension-samples/blob/main/lsp-web-extension-sample/server/src/browserServerMain.ts
3
+ import { startLanguageServer } from './browser';
4
+ startLanguageServer(self);
@@ -0,0 +1,35 @@
1
+ import { configureLogger, getAnsiColorFormatter, getConsoleSink } from '@likec4/log';
2
+ import { startLanguageServer as startLanguim } from 'langium/lsp';
3
+ import { BrowserMessageReader, BrowserMessageWriter, createConnection } from 'vscode-languageserver/browser';
4
+ import { createLanguageServices } from './module';
5
+ export { logger as lspLogger } from './logger';
6
+ export { createLanguageServices } from './module';
7
+ export function startLanguageServer(port) {
8
+ /* browser specific setup code */
9
+ const messageReader = new BrowserMessageReader(port);
10
+ const messageWriter = new BrowserMessageWriter(port);
11
+ const connection = createConnection(messageReader, messageWriter);
12
+ configureLogger({
13
+ sinks: {
14
+ console: getConsoleSink({
15
+ formatter: getAnsiColorFormatter({
16
+ format: ({ level, category, message }) => {
17
+ return `${level} ${category} ${message}`;
18
+ },
19
+ }),
20
+ }),
21
+ },
22
+ loggers: [
23
+ {
24
+ category: 'likec4',
25
+ sinks: ['console'],
26
+ lowestLevel: 'debug',
27
+ },
28
+ ],
29
+ });
30
+ // Inject the shared services and language-specific services
31
+ const services = createLanguageServices({ connection });
32
+ // Start the language server with the shared services
33
+ startLanguim(services.shared);
34
+ return services;
35
+ }
@@ -0,0 +1,42 @@
1
+ import { configureLogger, getConsoleStderrSink } from '@likec4/log';
2
+ import { startLanguageServer as startLanguim } from 'langium/lsp';
3
+ import { createConnection, ProposedFeatures } from 'vscode-languageserver/node';
4
+ import { LikeC4FileSystem } from './filesystem/LikeC4FileSystem';
5
+ import { getLspConnectionSink, logger } from './logger';
6
+ import { WithMCPServer } from './mcp/server/WithMCPServer';
7
+ import { createLanguageServices } from './module';
8
+ import { ConfigurableLayouter } from './views/ConfigurableLayouter';
9
+ /**
10
+ * This is used as `bin` entry point to start the language server.
11
+ */
12
+ export function startLanguageServer() {
13
+ const connection = createConnection(ProposedFeatures.all);
14
+ configureLogger({
15
+ sinks: {
16
+ // Name it as console to override internal logger
17
+ lsp: getLspConnectionSink(connection),
18
+ console: getConsoleStderrSink(),
19
+ },
20
+ loggers: [
21
+ {
22
+ category: ['likec4'],
23
+ sinks: ['console', 'lsp'],
24
+ },
25
+ ],
26
+ });
27
+ process.on('uncaughtException', (err) => {
28
+ logger.error('uncaughtException', { err });
29
+ });
30
+ process.on('unhandledRejection', (err) => {
31
+ logger.error('unhandledRejection', { err });
32
+ });
33
+ // Inject the shared services and language-specific services
34
+ const services = createLanguageServices({
35
+ connection,
36
+ ...LikeC4FileSystem(false),
37
+ ...WithMCPServer('sse'),
38
+ }, ConfigurableLayouter);
39
+ // Start the language server with the shared services
40
+ startLanguim(services.shared);
41
+ return services;
42
+ }