@domainlang/language 0.1.20

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 (212) hide show
  1. package/README.md +163 -0
  2. package/out/ast-augmentation.d.ts +6 -0
  3. package/out/ast-augmentation.js +2 -0
  4. package/out/ast-augmentation.js.map +1 -0
  5. package/out/domain-lang-module.d.ts +57 -0
  6. package/out/domain-lang-module.js +67 -0
  7. package/out/domain-lang-module.js.map +1 -0
  8. package/out/generated/ast.d.ts +759 -0
  9. package/out/generated/ast.js +556 -0
  10. package/out/generated/ast.js.map +1 -0
  11. package/out/generated/grammar.d.ts +6 -0
  12. package/out/generated/grammar.js +2407 -0
  13. package/out/generated/grammar.js.map +1 -0
  14. package/out/generated/module.d.ts +13 -0
  15. package/out/generated/module.js +21 -0
  16. package/out/generated/module.js.map +1 -0
  17. package/out/index.d.ts +16 -0
  18. package/out/index.js +22 -0
  19. package/out/index.js.map +1 -0
  20. package/out/lsp/domain-lang-code-actions.d.ts +55 -0
  21. package/out/lsp/domain-lang-code-actions.js +143 -0
  22. package/out/lsp/domain-lang-code-actions.js.map +1 -0
  23. package/out/lsp/domain-lang-completion.d.ts +37 -0
  24. package/out/lsp/domain-lang-completion.js +452 -0
  25. package/out/lsp/domain-lang-completion.js.map +1 -0
  26. package/out/lsp/domain-lang-formatter.d.ts +15 -0
  27. package/out/lsp/domain-lang-formatter.js +43 -0
  28. package/out/lsp/domain-lang-formatter.js.map +1 -0
  29. package/out/lsp/domain-lang-naming.d.ts +34 -0
  30. package/out/lsp/domain-lang-naming.js +49 -0
  31. package/out/lsp/domain-lang-naming.js.map +1 -0
  32. package/out/lsp/domain-lang-scope.d.ts +59 -0
  33. package/out/lsp/domain-lang-scope.js +102 -0
  34. package/out/lsp/domain-lang-scope.js.map +1 -0
  35. package/out/lsp/domain-lang-workspace-manager.d.ts +21 -0
  36. package/out/lsp/domain-lang-workspace-manager.js +93 -0
  37. package/out/lsp/domain-lang-workspace-manager.js.map +1 -0
  38. package/out/lsp/hover/ddd-pattern-explanations.d.ts +50 -0
  39. package/out/lsp/hover/ddd-pattern-explanations.js +196 -0
  40. package/out/lsp/hover/ddd-pattern-explanations.js.map +1 -0
  41. package/out/lsp/hover/domain-lang-hover.d.ts +19 -0
  42. package/out/lsp/hover/domain-lang-hover.js +302 -0
  43. package/out/lsp/hover/domain-lang-hover.js.map +1 -0
  44. package/out/lsp/hover/domain-lang-keywords.d.ts +13 -0
  45. package/out/lsp/hover/domain-lang-keywords.js +47 -0
  46. package/out/lsp/hover/domain-lang-keywords.js.map +1 -0
  47. package/out/lsp/manifest-diagnostics.d.ts +82 -0
  48. package/out/lsp/manifest-diagnostics.js +230 -0
  49. package/out/lsp/manifest-diagnostics.js.map +1 -0
  50. package/out/main-browser.d.ts +1 -0
  51. package/out/main-browser.js +11 -0
  52. package/out/main-browser.js.map +1 -0
  53. package/out/main.d.ts +1 -0
  54. package/out/main.js +74 -0
  55. package/out/main.js.map +1 -0
  56. package/out/sdk/ast-augmentation.d.ts +136 -0
  57. package/out/sdk/ast-augmentation.js +62 -0
  58. package/out/sdk/ast-augmentation.js.map +1 -0
  59. package/out/sdk/index.d.ts +94 -0
  60. package/out/sdk/index.js +97 -0
  61. package/out/sdk/index.js.map +1 -0
  62. package/out/sdk/indexes.d.ts +16 -0
  63. package/out/sdk/indexes.js +97 -0
  64. package/out/sdk/indexes.js.map +1 -0
  65. package/out/sdk/loader-node.d.ts +51 -0
  66. package/out/sdk/loader-node.js +119 -0
  67. package/out/sdk/loader-node.js.map +1 -0
  68. package/out/sdk/loader.d.ts +49 -0
  69. package/out/sdk/loader.js +85 -0
  70. package/out/sdk/loader.js.map +1 -0
  71. package/out/sdk/patterns.d.ts +93 -0
  72. package/out/sdk/patterns.js +123 -0
  73. package/out/sdk/patterns.js.map +1 -0
  74. package/out/sdk/query.d.ts +90 -0
  75. package/out/sdk/query.js +679 -0
  76. package/out/sdk/query.js.map +1 -0
  77. package/out/sdk/resolution.d.ts +52 -0
  78. package/out/sdk/resolution.js +68 -0
  79. package/out/sdk/resolution.js.map +1 -0
  80. package/out/sdk/types.d.ts +280 -0
  81. package/out/sdk/types.js +8 -0
  82. package/out/sdk/types.js.map +1 -0
  83. package/out/services/dependency-analyzer.d.ts +58 -0
  84. package/out/services/dependency-analyzer.js +254 -0
  85. package/out/services/dependency-analyzer.js.map +1 -0
  86. package/out/services/dependency-resolver.d.ts +146 -0
  87. package/out/services/dependency-resolver.js +452 -0
  88. package/out/services/dependency-resolver.js.map +1 -0
  89. package/out/services/git-url-resolver.browser.d.ts +10 -0
  90. package/out/services/git-url-resolver.browser.js +19 -0
  91. package/out/services/git-url-resolver.browser.js.map +1 -0
  92. package/out/services/git-url-resolver.d.ts +158 -0
  93. package/out/services/git-url-resolver.js +416 -0
  94. package/out/services/git-url-resolver.js.map +1 -0
  95. package/out/services/governance-validator.d.ts +44 -0
  96. package/out/services/governance-validator.js +153 -0
  97. package/out/services/governance-validator.js.map +1 -0
  98. package/out/services/import-resolver.d.ts +77 -0
  99. package/out/services/import-resolver.js +240 -0
  100. package/out/services/import-resolver.js.map +1 -0
  101. package/out/services/performance-optimizer.d.ts +60 -0
  102. package/out/services/performance-optimizer.js +140 -0
  103. package/out/services/performance-optimizer.js.map +1 -0
  104. package/out/services/relationship-inference.d.ts +11 -0
  105. package/out/services/relationship-inference.js +98 -0
  106. package/out/services/relationship-inference.js.map +1 -0
  107. package/out/services/semver.d.ts +98 -0
  108. package/out/services/semver.js +195 -0
  109. package/out/services/semver.js.map +1 -0
  110. package/out/services/types.d.ts +340 -0
  111. package/out/services/types.js +46 -0
  112. package/out/services/types.js.map +1 -0
  113. package/out/services/workspace-manager.d.ts +123 -0
  114. package/out/services/workspace-manager.js +489 -0
  115. package/out/services/workspace-manager.js.map +1 -0
  116. package/out/syntaxes/domain-lang.monarch.d.ts +76 -0
  117. package/out/syntaxes/domain-lang.monarch.js +29 -0
  118. package/out/syntaxes/domain-lang.monarch.js.map +1 -0
  119. package/out/utils/import-utils.d.ts +49 -0
  120. package/out/utils/import-utils.js +128 -0
  121. package/out/utils/import-utils.js.map +1 -0
  122. package/out/validation/bounded-context.d.ts +11 -0
  123. package/out/validation/bounded-context.js +79 -0
  124. package/out/validation/bounded-context.js.map +1 -0
  125. package/out/validation/classification.d.ts +3 -0
  126. package/out/validation/classification.js +3 -0
  127. package/out/validation/classification.js.map +1 -0
  128. package/out/validation/constants.d.ts +180 -0
  129. package/out/validation/constants.js +235 -0
  130. package/out/validation/constants.js.map +1 -0
  131. package/out/validation/domain-lang-validator.d.ts +2 -0
  132. package/out/validation/domain-lang-validator.js +27 -0
  133. package/out/validation/domain-lang-validator.js.map +1 -0
  134. package/out/validation/domain.d.ts +11 -0
  135. package/out/validation/domain.js +63 -0
  136. package/out/validation/domain.js.map +1 -0
  137. package/out/validation/import.d.ts +68 -0
  138. package/out/validation/import.js +237 -0
  139. package/out/validation/import.js.map +1 -0
  140. package/out/validation/manifest.d.ts +144 -0
  141. package/out/validation/manifest.js +327 -0
  142. package/out/validation/manifest.js.map +1 -0
  143. package/out/validation/maps.d.ts +21 -0
  144. package/out/validation/maps.js +60 -0
  145. package/out/validation/maps.js.map +1 -0
  146. package/out/validation/metadata.d.ts +7 -0
  147. package/out/validation/metadata.js +16 -0
  148. package/out/validation/metadata.js.map +1 -0
  149. package/out/validation/model.d.ts +12 -0
  150. package/out/validation/model.js +29 -0
  151. package/out/validation/model.js.map +1 -0
  152. package/out/validation/relationships.d.ts +12 -0
  153. package/out/validation/relationships.js +94 -0
  154. package/out/validation/relationships.js.map +1 -0
  155. package/out/validation/shared.d.ts +6 -0
  156. package/out/validation/shared.js +12 -0
  157. package/out/validation/shared.js.map +1 -0
  158. package/package.json +110 -0
  159. package/src/ast-augmentation.ts +5 -0
  160. package/src/domain-lang-module.ts +112 -0
  161. package/src/domain-lang.langium +351 -0
  162. package/src/generated/ast.ts +986 -0
  163. package/src/generated/grammar.ts +2409 -0
  164. package/src/generated/module.ts +25 -0
  165. package/src/index.ts +24 -0
  166. package/src/lsp/domain-lang-code-actions.ts +189 -0
  167. package/src/lsp/domain-lang-completion.ts +514 -0
  168. package/src/lsp/domain-lang-formatter.ts +51 -0
  169. package/src/lsp/domain-lang-naming.ts +56 -0
  170. package/src/lsp/domain-lang-scope.ts +137 -0
  171. package/src/lsp/domain-lang-workspace-manager.ts +104 -0
  172. package/src/lsp/hover/ddd-pattern-explanations.ts +237 -0
  173. package/src/lsp/hover/domain-lang-hover.ts +338 -0
  174. package/src/lsp/hover/domain-lang-keywords.ts +50 -0
  175. package/src/lsp/manifest-diagnostics.ts +290 -0
  176. package/src/main-browser.ts +15 -0
  177. package/src/main.ts +85 -0
  178. package/src/sdk/README.md +297 -0
  179. package/src/sdk/ast-augmentation.ts +157 -0
  180. package/src/sdk/index.ts +126 -0
  181. package/src/sdk/indexes.ts +155 -0
  182. package/src/sdk/loader-node.ts +146 -0
  183. package/src/sdk/loader.ts +99 -0
  184. package/src/sdk/patterns.ts +147 -0
  185. package/src/sdk/query.ts +802 -0
  186. package/src/sdk/resolution.ts +78 -0
  187. package/src/sdk/types.ts +323 -0
  188. package/src/services/dependency-analyzer.ts +321 -0
  189. package/src/services/dependency-resolver.ts +551 -0
  190. package/src/services/git-url-resolver.browser.ts +26 -0
  191. package/src/services/git-url-resolver.ts +517 -0
  192. package/src/services/governance-validator.ts +177 -0
  193. package/src/services/import-resolver.ts +292 -0
  194. package/src/services/performance-optimizer.ts +170 -0
  195. package/src/services/relationship-inference.ts +121 -0
  196. package/src/services/semver.ts +213 -0
  197. package/src/services/types.ts +415 -0
  198. package/src/services/workspace-manager.ts +607 -0
  199. package/src/syntaxes/domain-lang.monarch.ts +29 -0
  200. package/src/utils/import-utils.ts +152 -0
  201. package/src/validation/bounded-context.ts +99 -0
  202. package/src/validation/classification.ts +5 -0
  203. package/src/validation/constants.ts +304 -0
  204. package/src/validation/domain-lang-validator.ts +33 -0
  205. package/src/validation/domain.ts +77 -0
  206. package/src/validation/import.ts +295 -0
  207. package/src/validation/manifest.ts +439 -0
  208. package/src/validation/maps.ts +76 -0
  209. package/src/validation/metadata.ts +18 -0
  210. package/src/validation/model.ts +37 -0
  211. package/src/validation/relationships.ts +154 -0
  212. package/src/validation/shared.ts +14 -0
@@ -0,0 +1,302 @@
1
+ import { CstUtils, isAstNodeWithComment, isJSDoc, isReference, parseJSDoc } from 'langium';
2
+ import { AstNodeHoverProvider } from 'langium/lsp';
3
+ import * as ast from '../../generated/ast.js';
4
+ import { keywordExplanations } from './domain-lang-keywords.js';
5
+ import { effectiveClassification, effectiveTeam } from '../../sdk/resolution.js';
6
+ /**
7
+ * Provides hover information for DomainLang elements.
8
+ */
9
+ export class DomainLangHoverProvider extends AstNodeHoverProvider {
10
+ constructor(services) {
11
+ super(services);
12
+ this.documentationProvider = services.documentation.DocumentationProvider;
13
+ this.commentProvider = services.documentation.CommentProvider;
14
+ const domainServices = services;
15
+ this.qualifiedNameProvider = domainServices.references.QualifiedNameProvider;
16
+ }
17
+ async getHoverContent(document, params) {
18
+ try {
19
+ const rootNode = document.parseResult?.value?.$cstNode;
20
+ if (!rootNode) {
21
+ return undefined;
22
+ }
23
+ const offset = document.textDocument.offsetAt(params.position);
24
+ const cstNode = CstUtils.findDeclarationNodeAtOffset(rootNode, offset, this.grammarConfig.nameRegexp);
25
+ if (!cstNode || cstNode.offset + cstNode.length <= offset) {
26
+ return undefined;
27
+ }
28
+ const targetNodes = this.references.findDeclarations(cstNode);
29
+ const targetNode = targetNodes?.[0];
30
+ if (targetNode) {
31
+ const content = await this.getAstNodeHoverContent(targetNode);
32
+ if (content) {
33
+ return { contents: { kind: 'markdown', value: content } };
34
+ }
35
+ }
36
+ if (cstNode.astNode && ast.isThisRef(cstNode.astNode)) {
37
+ const content = await this.getAstNodeHoverContent(cstNode.astNode);
38
+ if (content) {
39
+ return { contents: { kind: 'markdown', value: content } };
40
+ }
41
+ }
42
+ if (cstNode.grammarSource?.$type === 'Keyword') {
43
+ const keywordHover = this.getKeywordHoverContent(cstNode.grammarSource);
44
+ if (keywordHover) {
45
+ return keywordHover;
46
+ }
47
+ const explanation = keywordExplanations[cstNode.text.toLowerCase()];
48
+ if (explanation) {
49
+ return { contents: { kind: 'markdown', value: `💡 ${explanation}` } };
50
+ }
51
+ }
52
+ }
53
+ catch (error) {
54
+ console.error('Error in getHoverContent:', error);
55
+ }
56
+ return undefined;
57
+ }
58
+ getAstNodeHoverContent(node) {
59
+ try {
60
+ const content = this.documentationProvider.getDocumentation(node);
61
+ const commentBlock = content ? `*${content}*\n\n` : '';
62
+ if (ast.isDomain(node)) {
63
+ const description = node.description ?? '';
64
+ const vision = node.vision ?? '';
65
+ const typeRef = node.type?.ref;
66
+ const type = this.getRefName(typeRef);
67
+ const signatureParts = ['Domain', node.name];
68
+ if (node.parent?.ref?.name)
69
+ signatureParts.push('in', node.parent.ref.name);
70
+ const signature = `\`\`\`domain-lang\n${signatureParts.join(' ')}\n\`\`\``;
71
+ const fields = [signature];
72
+ if (description)
73
+ fields.push(description);
74
+ if (vision || type || node.parent)
75
+ fields.push('---');
76
+ if (vision)
77
+ fields.push(`**Vision:** ${vision}`);
78
+ if (type)
79
+ fields.push(`**Type:** ${this.refLink(typeRef, type)}`);
80
+ if (node.parent)
81
+ fields.push(`**Parent:** ${this.refLink(node.parent)}`);
82
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
83
+ `📁 **\`(domain)\` ${node.name}**\n\n` +
84
+ fields.join('\n\n');
85
+ }
86
+ if (ast.isThisRef(node)) {
87
+ let parent = node.$container;
88
+ while (parent) {
89
+ if (ast.isDomain(parent) ||
90
+ ast.isBoundedContext(parent) ||
91
+ ast.isNamespaceDeclaration(parent) ||
92
+ ast.isContextMap(parent) ||
93
+ ast.isDomainMap(parent) ||
94
+ ast.isModel(parent)) {
95
+ return this.getAstNodeHoverContent(parent);
96
+ }
97
+ parent = parent.$container;
98
+ }
99
+ return '*this* refers to the current context';
100
+ }
101
+ if (ast.isBoundedContext(node)) {
102
+ const description = node.description ?? '';
103
+ const classification = effectiveClassification(node);
104
+ const team = effectiveTeam(node);
105
+ const businessModel = node.businessModel?.ref;
106
+ const evolution = node.evolution?.ref;
107
+ const relationships = node.relationships ?? [];
108
+ const terminology = node.terminology ?? [];
109
+ const decisions = node.decisions ?? [];
110
+ const classificationName = classification?.name;
111
+ const teamName = team?.name;
112
+ const signatureParts = ['boundedcontext', node.name];
113
+ if (node.domain?.ref?.name)
114
+ signatureParts.push('for', node.domain.ref.name);
115
+ if (classificationName)
116
+ signatureParts.push('as', classificationName);
117
+ if (teamName)
118
+ signatureParts.push('by', teamName);
119
+ const signature = `\`\`\`domain-lang\n${signatureParts.join(' ')}\n\`\`\``;
120
+ const fields = [signature];
121
+ if (description)
122
+ fields.push(description);
123
+ if (classification || team || businessModel || evolution)
124
+ fields.push('---');
125
+ if (classification)
126
+ fields.push(`🔖 **Classification:** ${this.refLink(classification)}`);
127
+ if (team)
128
+ fields.push(`👥 **Team:** ${this.refLink(team)}`);
129
+ if (businessModel)
130
+ fields.push(`💼 **Business Model:** ${this.refLink(businessModel)}`);
131
+ if (evolution)
132
+ fields.push(`🔄 **Evolution:** ${this.refLink(evolution)}`);
133
+ if (relationships.length) {
134
+ const relationshipLines = relationships.map(rel => `- ${this.refLink(rel.left?.link)} ${rel.arrow} ${this.refLink(rel.right?.link)}${rel.type ? ` \`${rel.type}\`` : ''}`);
135
+ fields.push(`**Relationships:**\n${relationshipLines.join('\n')}`);
136
+ }
137
+ if (terminology.length) {
138
+ const termLines = terminology.map(t => `- \`${t.name}\`: ${t.meaning ?? ''}`);
139
+ fields.push(`**Terminology:**\n${termLines.join('\n')}`);
140
+ }
141
+ if (decisions.length) {
142
+ const decisionLines = decisions.map(d => `- \`${d.name}\`: ${d.value ?? ''}`);
143
+ fields.push(`**Decisions:**\n${decisionLines.join('\n')}`);
144
+ }
145
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
146
+ `📕 **\`(boundedcontext)\` ${node.name}**\n\n` +
147
+ fields.join('\n\n');
148
+ }
149
+ if (ast.isNamespaceDeclaration && ast.isNamespaceDeclaration(node)) {
150
+ const fields = [`Contains ${node.children.length} elements.`];
151
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
152
+ `🧭 **\`(namespace)\` ${node.name}**\n\n` +
153
+ fields.join('\n\n');
154
+ }
155
+ if (ast.isContextMap && ast.isContextMap(node)) {
156
+ const fields = [];
157
+ if (node.boundedContexts.length) {
158
+ fields.push('---');
159
+ fields.push(`**📕 Bounded Contexts**\n${node.boundedContexts.flatMap(bc => bc.items.map(item => `- ${this.refLink(item.ref)}`)).join('\n')}`);
160
+ }
161
+ if (node.relationships.length) {
162
+ fields.push('---');
163
+ fields.push(`**🔗 Relationships**\n${node.relationships.map(r => `- ${this.refLink(r.left?.link)} ${r.arrow} ${this.refLink(r.right?.link)}${r.type ? ` \`${r.type}\`` : ''}`).join('\n')}`);
164
+ }
165
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
166
+ `🗺️ **\`(contextmap)\` ${node.name}**\n\n` +
167
+ fields.join('\n\n');
168
+ }
169
+ if (ast.isDomainMap && ast.isDomainMap(node)) {
170
+ const fields = [];
171
+ if (node.domains.length) {
172
+ fields.push('---');
173
+ fields.push(`**📁 Domains**\n${node.domains.flatMap(d => d.items.map(item => `- ${this.refLink(item.ref)}`)).join('\n')}`);
174
+ }
175
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
176
+ `🗺️ **\`(domainmap)\` ${node.name}**\n\n` +
177
+ fields.join('\n\n');
178
+ }
179
+ if (ast.isDecision && ast.isDecision(node)) {
180
+ const fields = [];
181
+ if (node.value) {
182
+ fields.push('---');
183
+ fields.push(`*Definition:* ${node.value}`);
184
+ }
185
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
186
+ `⚖️ **\`(decision)\` ${node.name}**\n\n` +
187
+ fields.join('\n\n');
188
+ }
189
+ if (ast.isPolicy && ast.isPolicy(node)) {
190
+ const fields = [];
191
+ if (node.value) {
192
+ fields.push('---');
193
+ fields.push(`*Definition:* ${node.value}`);
194
+ }
195
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
196
+ `📜 **\`(policy)\` ${node.name}**\n\n` +
197
+ fields.join('\n\n');
198
+ }
199
+ if (ast.isBusinessRule && ast.isBusinessRule(node)) {
200
+ const fields = [];
201
+ if (node.value) {
202
+ fields.push('---');
203
+ fields.push(`*Definition:* ${node.value}`);
204
+ }
205
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
206
+ `⚖️ **\`(rule)\` ${node.name}**\n\n` +
207
+ fields.join('\n\n');
208
+ }
209
+ if (ast.isDomainTerm && ast.isDomainTerm(node)) {
210
+ const fields = [];
211
+ if (node.meaning) {
212
+ fields.push('---');
213
+ fields.push(`*${node.meaning}*`);
214
+ }
215
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
216
+ `🗝️ **\`(term)\` ${node.name}**\n\n` +
217
+ fields.join('\n\n');
218
+ }
219
+ if (ast.isTeam && ast.isTeam(node)) {
220
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
221
+ `👥 **\`(team)\` ${node.name}**`;
222
+ }
223
+ if (ast.isClassification && ast.isClassification(node)) {
224
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
225
+ `🏷️ **\`(classification)\` ${node.name}**`;
226
+ }
227
+ if (ast.isMetadata && ast.isMetadata(node)) {
228
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
229
+ `🔖 **\`(metadata)\` ${node.name}**`;
230
+ }
231
+ if (ast.isRelationship && ast.isRelationship(node)) {
232
+ const leftPatterns = node.leftPatterns.join(', ');
233
+ const rightPatterns = node.rightPatterns.join(', ');
234
+ const fields = [];
235
+ fields.push(`${this.refLink(node.left.link)} ${node.arrow} ${this.refLink(node.right.link)}`);
236
+ if (node.type)
237
+ fields.push(`**Type:** \`${node.type}\``);
238
+ if (leftPatterns)
239
+ fields.push(`**Left patterns:** ${leftPatterns}`);
240
+ if (rightPatterns)
241
+ fields.push(`**Right patterns:** ${rightPatterns}`);
242
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
243
+ `🔗 **\`(relationship)\`**\n\n` +
244
+ fields.join('\n\n');
245
+ }
246
+ if (ast.isImportStatement && ast.isImportStatement(node)) {
247
+ const fields = [];
248
+ fields.push(`**URI:** \`${node.uri}\``);
249
+ if (node.alias)
250
+ fields.push(`**Alias:** \`${node.alias}\``);
251
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
252
+ `📦 **\`(import)\`**\n\n` +
253
+ fields.join('\n\n');
254
+ }
255
+ const title = ast.isType(node) ? node.name : node.$type.toLowerCase();
256
+ return (commentBlock ? `${commentBlock}\n\n---\n\n` : '') +
257
+ `ℹ️ **\`(${node.$type.toLowerCase()})\`${ast.isType(node) ? ` ${title}` : ''}**`;
258
+ }
259
+ catch (error) {
260
+ console.error('Error in getAstNodeHoverContent:', error);
261
+ return 'Unable to display complete information.';
262
+ }
263
+ }
264
+ getRefName(ref) {
265
+ const node = isReference(ref) ? ref.ref : ref;
266
+ if (node && ast.isType(node)) {
267
+ return node.name;
268
+ }
269
+ return '';
270
+ }
271
+ refLink(ref, label) {
272
+ if (label) {
273
+ return `[${label}](#${encodeURIComponent(label)})`;
274
+ }
275
+ const node = isReference(ref) ? ref.ref : ref;
276
+ if (node && ast.isType(node)) {
277
+ let linkLabel = node.name;
278
+ try {
279
+ linkLabel = this.qualifiedNameProvider.getQualifiedName(node.$container, node.name);
280
+ }
281
+ catch {
282
+ // fallback to name
283
+ }
284
+ return `[${linkLabel}](#${encodeURIComponent(linkLabel)})`;
285
+ }
286
+ return '';
287
+ }
288
+ getKeywordHoverContent(node) {
289
+ let comment = isAstNodeWithComment(node) ? node.$comment : undefined;
290
+ if (!comment) {
291
+ comment = CstUtils.findCommentNode(node.$cstNode, ['ML_COMMENT'])?.text;
292
+ }
293
+ if (comment && isJSDoc(comment)) {
294
+ const markdown = parseJSDoc(comment).toMarkdown();
295
+ if (markdown) {
296
+ return { contents: { kind: 'markdown', value: markdown } };
297
+ }
298
+ }
299
+ return undefined;
300
+ }
301
+ }
302
+ //# sourceMappingURL=domain-lang-hover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-lang-hover.js","sourceRoot":"","sources":["../../../src/lsp/hover/domain-lang-hover.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,GAAG,MAAM,wBAAwB,CAAC;AAG9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEjF;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,oBAAoB;IAK7D,YAAY,QAAyB;QACjC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC;QAC1E,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC;QAC9D,MAAM,cAAc,GAAG,QAA8B,CAAC;QACtD,IAAI,CAAC,qBAAqB,GAAG,cAAc,CAAC,UAAU,CAAC,qBAAqB,CAAC;IACjF,CAAC;IAEQ,KAAK,CAAC,eAAe,CAAC,QAAyB,EAAE,MAAmB;QACzE,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC;YACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,OAAO,SAAS,CAAC;YACrB,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YACtG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;gBACxD,OAAO,SAAS,CAAC;YACrB,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,UAAU,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;gBAC9D,IAAI,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC9D,CAAC;YACL,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnE,IAAI,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC9D,CAAC;YACL,CAAC;YAED,IAAI,OAAO,CAAC,aAAa,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBACxE,IAAI,YAAY,EAAE,CAAC;oBACf,OAAO,YAAY,CAAC;gBACxB,CAAC;gBAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACpE,IAAI,WAAW,EAAE,CAAC;oBACd,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,WAAW,EAAE,EAAE,EAAE,CAAC;gBAC1E,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAES,sBAAsB,CAAC,IAAa;QAC1C,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAClE,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAEvD,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;gBAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;gBAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAEtC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7C,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI;oBAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5E,MAAM,SAAS,GAAG,sBAAsB,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;gBAE3E,MAAM,MAAM,GAAa,CAAC,SAAS,CAAC,CAAC;gBACrC,IAAI,WAAW;oBAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC1C,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtD,IAAI,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;gBACjD,IAAI,IAAI;oBAAE,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClE,IAAI,IAAI,CAAC,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAEzE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,qBAAqB,IAAI,CAAC,IAAI,QAAQ;oBACtC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC7B,OAAO,MAAM,EAAE,CAAC;oBACZ,IACI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;wBACpB,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC;wBAC5B,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC;wBAClC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC;wBACxB,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC;wBACvB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EACrB,CAAC;wBACC,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;oBAC/C,CAAC;oBACD,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;gBAC/B,CAAC;gBAED,OAAO,sCAAsC,CAAC;YAClD,CAAC;YAED,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;gBAC3C,MAAM,cAAc,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;gBACrD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC;gBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;gBACtC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;gBAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;gBAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;gBACvC,MAAM,kBAAkB,GAAG,cAAc,EAAE,IAAI,CAAC;gBAChD,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI,CAAC;gBAE5B,MAAM,cAAc,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI;oBAAE,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC7E,IAAI,kBAAkB;oBAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;gBACtE,IAAI,QAAQ;oBAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAClD,MAAM,SAAS,GAAG,sBAAsB,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;gBAE3E,MAAM,MAAM,GAAa,CAAC,SAAS,CAAC,CAAC;gBACrC,IAAI,WAAW;oBAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC1C,IAAI,cAAc,IAAI,IAAI,IAAI,aAAa,IAAI,SAAS;oBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7E,IAAI,cAAc;oBAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBAC1F,IAAI,IAAI;oBAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5D,IAAI,aAAa;oBAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBACxF,IAAI,SAAS;oBAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAC3E,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACvB,MAAM,iBAAiB,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC3K,MAAM,CAAC,IAAI,CAAC,uBAAuB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvE,CAAC;gBACD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;oBACrB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC9E,MAAM,CAAC,IAAI,CAAC,qBAAqB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7D,CAAC;gBACD,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;oBACnB,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC9E,MAAM,CAAC,IAAI,CAAC,mBAAmB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBAED,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,6BAA6B,IAAI,CAAC,IAAI,QAAQ;oBAC9C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,GAAG,CAAC,sBAAsB,IAAI,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjE,MAAM,MAAM,GAAa,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,YAAY,CAAC,CAAC;gBACxE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,wBAAwB,IAAI,CAAC,IAAI,QAAQ;oBACzC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;oBAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClJ,CAAC;gBACD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjM,CAAC;gBACD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,0BAA0B,IAAI,CAAC,IAAI,QAAQ;oBAC3C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC/H,CAAC;gBACD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,yBAAyB,IAAI,CAAC,IAAI,QAAQ;oBAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/C,CAAC;gBACD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,uBAAuB,IAAI,CAAC,IAAI,QAAQ;oBACxC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/C,CAAC;gBACD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,qBAAqB,IAAI,CAAC,IAAI,QAAQ;oBACtC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/C,CAAC;gBACD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,mBAAmB,IAAI,CAAC,IAAI,QAAQ;oBACpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;gBACrC,CAAC;gBACD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,oBAAoB,IAAI,CAAC,IAAI,QAAQ;oBACrC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,mBAAmB,IAAI,CAAC,IAAI,IAAI,CAAC;YACzC,CAAC;YAED,IAAI,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,8BAA8B,IAAI,CAAC,IAAI,IAAI,CAAC;YACpD,CAAC;YAED,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,uBAAuB,IAAI,CAAC,IAAI,IAAI,CAAC;YAC7C,CAAC;YAED,IAAI,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC9F,IAAI,IAAI,CAAC,IAAI;oBAAE,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;gBACzD,IAAI,YAAY;oBAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,YAAY,EAAE,CAAC,CAAC;gBACpE,IAAI,aAAa;oBAAE,MAAM,CAAC,IAAI,CAAC,uBAAuB,aAAa,EAAE,CAAC,CAAC;gBACvE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,+BAA+B;oBAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,GAAG,CAAC,iBAAiB,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvD,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACxC,IAAI,IAAI,CAAC,KAAK;oBAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;gBAC5D,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,yBAAyB;oBACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACtE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,WAAW,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QACzF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO,yCAAyC,CAAC;QACrD,CAAC;IACL,CAAC;IAEO,UAAU,CAAC,GAA+C;QAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9C,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,IAAI,CAAC;QACrB,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAEO,OAAO,CAAC,GAA+C,EAAE,KAAc;QAC3E,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,IAAI,KAAK,MAAM,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC;QACvD,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAE9C,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;YAC1B,IAAI,CAAC;gBACD,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxF,CAAC;YAAC,MAAM,CAAC;gBACL,mBAAmB;YACvB,CAAC;YACD,OAAO,IAAI,SAAS,MAAM,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC;QAC/D,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAEkB,sBAAsB,CAAC,IAAa;QACnD,IAAI,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAErE,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC;QAC5E,CAAC;QAED,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;YAClD,IAAI,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;YAC/D,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Keyword explanations for DomainLang hover documentation.
3
+ *
4
+ * This dictionary provides fallback hover content for keywords that don't have
5
+ * JSDoc comments in the grammar file, or for providing richer DDD pattern explanations.
6
+ *
7
+ * Basic keyword documentation (domain, boundedcontext, etc.) is now in the grammar file
8
+ * as JSDoc comments. This dictionary focuses on DDD integration patterns and advanced concepts.
9
+ *
10
+ * @see src/language/domain-lang.langium for basic keyword JSDoc
11
+ * @see ddd-pattern-explanations.ts for role patterns and relationship types
12
+ */
13
+ export declare const keywordExplanations: Record<string, string>;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Keyword explanations for DomainLang hover documentation.
3
+ *
4
+ * This dictionary provides fallback hover content for keywords that don't have
5
+ * JSDoc comments in the grammar file, or for providing richer DDD pattern explanations.
6
+ *
7
+ * Basic keyword documentation (domain, boundedcontext, etc.) is now in the grammar file
8
+ * as JSDoc comments. This dictionary focuses on DDD integration patterns and advanced concepts.
9
+ *
10
+ * @see src/language/domain-lang.langium for basic keyword JSDoc
11
+ * @see ddd-pattern-explanations.ts for role patterns and relationship types
12
+ */
13
+ export const keywordExplanations = {
14
+ // Advanced syntax keywords
15
+ implements: "**implements** - Declares that a Bounded Context or type implements a Domain or interface.",
16
+ as: "**as** - Used for aliasing or renaming imports or types.",
17
+ from: "**from** - Specifies the source module or file for an import statement.",
18
+ type: "**type** - Declares a new type or alias in the model.",
19
+ map: "**map** - Defines a mapping or transformation between elements.",
20
+ this: "**this** - Refers to the current context or object.",
21
+ // DDD Classifiers
22
+ entity: "**Entity** - Domain object with distinct identity that runs through time.",
23
+ valueobject: "**Value Object** - Immutable object that describes a characteristic.",
24
+ aggregate: "**Aggregate** - Cluster of domain objects with a root and boundary.",
25
+ service: "**Service** - Stateless domain operation.",
26
+ event: "**Event** - Significant domain occurrence or state change.",
27
+ businessrule: "**Business Rule** - Rule that constrains business behavior.",
28
+ // DDD Integration Patterns
29
+ acl: "**ACL (Anti-Corruption Layer)** - Translation layer protecting downstream context from upstream changes.",
30
+ ohs: "**OHS (Open Host Service)** - Well-defined protocol providing access to a subsystem.",
31
+ pl: "**PL (Published Language)** - Documented shared language for context communication.",
32
+ cf: "**CF (Conformist)** - Downstream adopts upstream model without translation.",
33
+ bbom: "**BBoM (Big Ball of Mud)** - System with tangled architecture and no clear boundaries.",
34
+ sk: "**SK (Shared Kernel)** - Shared domain model subset requiring coordination.",
35
+ p: "**P (Partnership)** - Teams collaborate closely with shared success/failure.",
36
+ // DDD Relationship Types
37
+ separateways: "**Separate Ways** - No connection between contexts, each solves problems independently.",
38
+ partnership: "**Partnership** - Teams share risks and rewards with close collaboration.",
39
+ sharedkernel: "**Shared Kernel** - Shared domain model subset requiring coordination.",
40
+ customersupplier: "**Customer-Supplier** - Upstream prioritizes downstream needs.",
41
+ upstreamdownstream: "**Upstream-Downstream** - Upstream changes affect downstream.",
42
+ // Relationship arrows
43
+ '<->': "**Bidirectional** - Two contexts connected in both directions.",
44
+ '->': "**Upstream → Downstream** - Left depends on right.",
45
+ '<-': "**Downstream ← Upstream** - Right depends on left.",
46
+ };
47
+ //# sourceMappingURL=domain-lang-keywords.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-lang-keywords.js","sourceRoot":"","sources":["../../../src/lsp/hover/domain-lang-keywords.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACvD,2BAA2B;IAC3B,UAAU,EAAE,4FAA4F;IACxG,EAAE,EAAE,0DAA0D;IAC9D,IAAI,EAAE,yEAAyE;IAC/E,IAAI,EAAE,uDAAuD;IAC7D,GAAG,EAAE,iEAAiE;IACtE,IAAI,EAAE,qDAAqD;IAE3D,kBAAkB;IAClB,MAAM,EAAE,2EAA2E;IACnF,WAAW,EAAE,sEAAsE;IACnF,SAAS,EAAE,qEAAqE;IAChF,OAAO,EAAE,2CAA2C;IACpD,KAAK,EAAE,4DAA4D;IACnE,YAAY,EAAE,6DAA6D;IAE3E,2BAA2B;IAC3B,GAAG,EAAE,0GAA0G;IAC/G,GAAG,EAAE,sFAAsF;IAC3F,EAAE,EAAE,qFAAqF;IACzF,EAAE,EAAE,6EAA6E;IACjF,IAAI,EAAE,wFAAwF;IAC9F,EAAE,EAAE,6EAA6E;IACjF,CAAC,EAAE,8EAA8E;IAEjF,yBAAyB;IACzB,YAAY,EAAE,yFAAyF;IACvG,WAAW,EAAE,2EAA2E;IACxF,YAAY,EAAE,wEAAwE;IACtF,gBAAgB,EAAE,gEAAgE;IAClF,kBAAkB,EAAE,+DAA+D;IAEnF,sBAAsB;IACtB,KAAK,EAAE,gEAAgE;IACvE,IAAI,EAAE,oDAAoD;IAC1D,IAAI,EAAE,oDAAoD;CAC7D,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Manifest Diagnostics Service for DomainLang.
3
+ *
4
+ * Provides LSP diagnostics for model.yaml files by integrating the ManifestValidator
5
+ * with the VS Code language server protocol.
6
+ *
7
+ * This service:
8
+ * - Validates model.yaml files using ManifestValidator
9
+ * - Converts ManifestDiagnostic to LSP Diagnostic format
10
+ * - Sends diagnostics to the LSP connection
11
+ *
12
+ * @module
13
+ */
14
+ import type { Connection } from 'vscode-languageserver';
15
+ import { Diagnostic } from 'vscode-languageserver-types';
16
+ /**
17
+ * Service for validating model.yaml and sending diagnostics via LSP.
18
+ */
19
+ export declare class ManifestDiagnosticsService {
20
+ private readonly validator;
21
+ private connection;
22
+ /**
23
+ * Sets the LSP connection for sending diagnostics.
24
+ * Must be called before validateAndSendDiagnostics.
25
+ */
26
+ setConnection(connection: Connection): void;
27
+ /**
28
+ * Validates a model.yaml file and sends diagnostics to the LSP connection.
29
+ *
30
+ * @param manifestUri - URI of the model.yaml file
31
+ * @param content - Raw YAML content of the file
32
+ * @param options - Validation options
33
+ */
34
+ validateAndSendDiagnostics(manifestUri: string, content: string, options?: {
35
+ requirePublishable?: boolean;
36
+ }): Promise<void>;
37
+ /**
38
+ * Validates manifest content and returns LSP diagnostics.
39
+ *
40
+ * @param content - Raw YAML content
41
+ * @param options - Validation options
42
+ * @returns Array of LSP diagnostics
43
+ */
44
+ validate(content: string, options?: {
45
+ requirePublishable?: boolean;
46
+ }): Diagnostic[];
47
+ /**
48
+ * Converts a YAML error to an LSP Range.
49
+ */
50
+ private yamlErrorToRange;
51
+ /**
52
+ * Clears diagnostics for a manifest file.
53
+ * Call this when the file is closed or deleted.
54
+ */
55
+ clearDiagnostics(manifestUri: string): Promise<void>;
56
+ /**
57
+ * Converts a ManifestDiagnostic to an LSP Diagnostic.
58
+ */
59
+ private toVSCodeDiagnostic;
60
+ /**
61
+ * Converts ManifestSeverity to LSP DiagnosticSeverity.
62
+ */
63
+ private toVSCodeSeverity;
64
+ /**
65
+ * Finds the source range for a YAML path like "dependencies.core.version".
66
+ * Returns a fallback range at start of file if path not found.
67
+ */
68
+ private findRangeForPath;
69
+ /**
70
+ * Converts byte offsets to a VS Code Range using line/column calculation.
71
+ */
72
+ private offsetsToRange;
73
+ }
74
+ /**
75
+ * Gets or creates the manifest diagnostics service singleton.
76
+ */
77
+ export declare function getManifestDiagnosticsService(): ManifestDiagnosticsService;
78
+ /**
79
+ * Helper to validate a manifest URI with the given content.
80
+ * Convenience function for use in file watchers.
81
+ */
82
+ export declare function validateManifestFile(connection: Connection, manifestUri: string, content: string): Promise<void>;