@likec4/language-server 1.17.0 → 1.18.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 (94) hide show
  1. package/contrib/likec4.tmLanguage.json +1 -1
  2. package/dist/browser.cjs +1 -1
  3. package/dist/browser.d.cts +2 -2
  4. package/dist/browser.d.mts +2 -2
  5. package/dist/browser.d.ts +2 -2
  6. package/dist/browser.mjs +2 -2
  7. package/dist/index.cjs +1 -1
  8. package/dist/index.d.cts +2 -2
  9. package/dist/index.d.mts +2 -2
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.mjs +2 -2
  12. package/dist/protocol.d.cts +8 -5
  13. package/dist/protocol.d.mts +8 -5
  14. package/dist/protocol.d.ts +8 -5
  15. package/dist/shared/{language-server.DZRuJVSg.cjs → language-server.CO_nmHiL.cjs} +5605 -4215
  16. package/dist/shared/{language-server.DJo88TnT.d.cts → language-server.Da6ey08o.d.cts} +391 -110
  17. package/dist/shared/{language-server.PEjk7U9s.d.ts → language-server.De7S3e5Z.d.ts} +391 -110
  18. package/dist/shared/{language-server.BgDKnNok.d.mts → language-server.Dj4iDjtB.d.mts} +391 -110
  19. package/dist/shared/{language-server.B8qSDsWW.mjs → language-server.oO_9JoAG.mjs} +5594 -4215
  20. package/package.json +17 -31
  21. package/src/Rpc.ts +6 -3
  22. package/src/ast.ts +124 -71
  23. package/src/formatting/LikeC4Formatter.ts +9 -4
  24. package/src/generated/ast.ts +656 -40
  25. package/src/generated/grammar.ts +2 -2
  26. package/src/generated/module.ts +3 -2
  27. package/src/index.ts +1 -0
  28. package/src/like-c4.langium +170 -22
  29. package/src/logger.ts +7 -2
  30. package/src/lsp/CodeLensProvider.ts +0 -1
  31. package/src/lsp/CompletionProvider.ts +17 -2
  32. package/src/lsp/DocumentSymbolProvider.ts +5 -2
  33. package/src/lsp/HoverProvider.ts +34 -2
  34. package/src/lsp/SemanticTokenProvider.ts +58 -32
  35. package/src/model/deployments-index.ts +218 -0
  36. package/src/model/fqn-computation.ts +1 -1
  37. package/src/model/fqn-index.ts +0 -1
  38. package/src/model/index.ts +1 -0
  39. package/src/model/model-builder.ts +172 -37
  40. package/src/model/model-locator.ts +36 -7
  41. package/src/model/model-parser.ts +554 -92
  42. package/src/model-change/changeViewLayout.ts +2 -2
  43. package/src/module.ts +10 -4
  44. package/src/protocol.ts +10 -6
  45. package/src/references/index.ts +1 -0
  46. package/src/references/name-provider.ts +37 -0
  47. package/src/references/scope-computation.ts +130 -21
  48. package/src/references/scope-provider.ts +63 -36
  49. package/src/shared/NodeKindProvider.ts +15 -3
  50. package/src/utils/deploymentRef.ts +31 -0
  51. package/src/{elementRef.ts → utils/elementRef.ts} +1 -1
  52. package/src/utils/stringHash.ts +2 -2
  53. package/src/validation/_shared.ts +7 -5
  54. package/src/validation/deployment-checks.ts +144 -0
  55. package/src/validation/dynamic-view-step.ts +1 -1
  56. package/src/validation/index.ts +7 -0
  57. package/src/validation/relation.ts +1 -1
  58. package/src/validation/view-predicates/deployments.ts +56 -0
  59. package/src/validation/view-predicates/index.ts +1 -0
  60. package/src/view-utils/assignNavigateTo.ts +6 -5
  61. package/src/view-utils/index.ts +0 -1
  62. package/dist/model-graph/index.cjs +0 -10
  63. package/dist/model-graph/index.d.cts +0 -81
  64. package/dist/model-graph/index.d.mts +0 -81
  65. package/dist/model-graph/index.d.ts +0 -81
  66. package/dist/model-graph/index.mjs +0 -1
  67. package/dist/shared/language-server.BGGRJRnr.d.mts +0 -1338
  68. package/dist/shared/language-server.BXFhlTPo.mjs +0 -1953
  69. package/dist/shared/language-server.Bmpq16Gw.d.ts +0 -1338
  70. package/dist/shared/language-server.C1ZfM22X.d.cts +0 -1338
  71. package/dist/shared/language-server.N8HLDQqz.cjs +0 -1967
  72. package/src/model-graph/LikeC4ModelGraph.ts +0 -338
  73. package/src/model-graph/compute-view/__test__/fixture.ts +0 -630
  74. package/src/model-graph/compute-view/compute.ts +0 -788
  75. package/src/model-graph/compute-view/index.ts +0 -33
  76. package/src/model-graph/compute-view/predicates.ts +0 -509
  77. package/src/model-graph/dynamic-view/__test__/fixture.ts +0 -61
  78. package/src/model-graph/dynamic-view/compute.ts +0 -281
  79. package/src/model-graph/dynamic-view/index.ts +0 -29
  80. package/src/model-graph/index.ts +0 -3
  81. package/src/model-graph/utils/applyCustomElementProperties.ts +0 -65
  82. package/src/model-graph/utils/applyCustomRelationProperties.ts +0 -41
  83. package/src/model-graph/utils/applyViewRuleStyles.ts +0 -49
  84. package/src/model-graph/utils/buildComputeNodes.ts +0 -113
  85. package/src/model-graph/utils/buildElementNotations.ts +0 -63
  86. package/src/model-graph/utils/elementExpressionToPredicate.ts +0 -39
  87. package/src/model-graph/utils/relationExpressionToPredicates.ts +0 -43
  88. package/src/model-graph/utils/sortNodes.ts +0 -105
  89. package/src/model-graph/utils/uniqueTags.test.ts +0 -42
  90. package/src/model-graph/utils/uniqueTags.ts +0 -19
  91. package/src/utils/graphlib.ts +0 -9
  92. package/src/view-utils/resolve-extended-views.ts +0 -66
  93. package/src/view-utils/resolve-global-rules.ts +0 -88
  94. package/src/view-utils/view-hash.ts +0 -27
@@ -1,10 +1,12 @@
1
1
  import type * as c4 from '@likec4/core'
2
2
  import type { LangiumDocuments } from 'langium'
3
3
  import { AstUtils, GrammarUtils } from 'langium'
4
+ import { isString } from 'remeda'
4
5
  import type { Location } from 'vscode-languageserver-types'
5
6
  import type { ParsedAstElement } from '../ast'
6
7
  import { ast, isParsedLikeC4LangiumDocument } from '../ast'
7
8
  import type { LikeC4Services } from '../module'
9
+ import type { DeploymentsIndex } from './deployments-index'
8
10
  import { type FqnIndex } from './fqn-index'
9
11
 
10
12
  const { findNodeForKeyword, findNodeForProperty } = GrammarUtils
@@ -12,10 +14,12 @@ const { getDocument } = AstUtils
12
14
 
13
15
  export class LikeC4ModelLocator {
14
16
  private fqnIndex: FqnIndex
17
+ private deploymentsIndex: DeploymentsIndex
15
18
  private langiumDocuments: LangiumDocuments
16
19
 
17
20
  constructor(private services: LikeC4Services) {
18
21
  this.fqnIndex = services.likec4.FqnIndex
22
+ this.deploymentsIndex = services.likec4.DeploymentsIndex
19
23
  this.langiumDocuments = services.shared.workspace.LangiumDocuments
20
24
  }
21
25
 
@@ -23,10 +27,23 @@ export class LikeC4ModelLocator {
23
27
  return this.langiumDocuments.all.filter(isParsedLikeC4LangiumDocument)
24
28
  }
25
29
 
26
- public getParsedElement(astNode: ast.Element): ParsedAstElement | null {
27
- const fqn = this.fqnIndex.getFqn(astNode)
30
+ public getParsedElement(astNodeOrFqn: ast.Element | c4.Fqn): ParsedAstElement | null {
31
+ if (isString(astNodeOrFqn)) {
32
+ const fqn = astNodeOrFqn
33
+ const entry = this.fqnIndex.byFqn(astNodeOrFqn).head()
34
+ if (!entry) {
35
+ return null
36
+ }
37
+ const doc = this.langiumDocuments.getDocument(entry.documentUri)
38
+ if (!doc || !isParsedLikeC4LangiumDocument(doc)) {
39
+ return null
40
+ }
41
+ return doc.c4Elements.find(e => e.id === fqn) ?? null
42
+ }
43
+
44
+ const fqn = this.fqnIndex.getFqn(astNodeOrFqn)
28
45
  if (!fqn) return null
29
- const doc = getDocument(astNode)
46
+ const doc = getDocument(astNodeOrFqn)
30
47
  if (!isParsedLikeC4LangiumDocument(doc)) {
31
48
  return null
32
49
  }
@@ -44,10 +61,22 @@ export class LikeC4ModelLocator {
44
61
  range: docsegment.range
45
62
  }
46
63
  }
64
+ public locateDeploymentElement(fqn: c4.Fqn, _prop?: string): Location | null {
65
+ const entry = this.deploymentsIndex.byFqn(fqn).head()
66
+ const docsegment = entry?.nameSegment ?? entry?.selectionSegment
67
+ if (!entry || !docsegment) {
68
+ return null
69
+ }
70
+ return {
71
+ uri: entry.documentUri.toString(),
72
+ range: docsegment.range
73
+ }
74
+ }
47
75
 
48
- public locateRelation(relationId: c4.RelationID): Location | null {
76
+ public locateRelation(relationId: c4.RelationId): Location | null {
49
77
  for (const doc of this.documents()) {
50
78
  const relation = doc.c4Relations.find(r => r.id === relationId)
79
+ ?? doc.c4DeploymentRelations.find(r => r.id === relationId)
51
80
  if (!relation) {
52
81
  continue
53
82
  }
@@ -55,7 +84,7 @@ export class LikeC4ModelLocator {
55
84
  doc.parseResult.value,
56
85
  relation.astPath
57
86
  )
58
- if (!ast.isRelation(node)) {
87
+ if (!ast.isRelation(node) && !ast.isDeploymentRelation(node)) {
59
88
  continue
60
89
  }
61
90
 
@@ -76,7 +105,7 @@ export class LikeC4ModelLocator {
76
105
  return null
77
106
  }
78
107
 
79
- public locateViewAst(viewId: c4.ViewID) {
108
+ public locateViewAst(viewId: c4.ViewId) {
80
109
  for (const doc of this.documents()) {
81
110
  const view = doc.c4Views.find(r => r.id === viewId)
82
111
  if (!view) {
@@ -97,7 +126,7 @@ export class LikeC4ModelLocator {
97
126
  return null
98
127
  }
99
128
 
100
- public locateView(viewId: c4.ViewID): Location | null {
129
+ public locateView(viewId: c4.ViewId): Location | null {
101
130
  const res = this.locateViewAst(viewId)
102
131
  if (!res) {
103
132
  return null