@domainlang/language 0.1.81
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.
- package/README.md +32 -0
- package/out/ast-augmentation.d.ts +6 -0
- package/out/ast-augmentation.js +2 -0
- package/out/ast-augmentation.js.map +1 -0
- package/out/domain-lang-module.d.ts +55 -0
- package/out/domain-lang-module.js +59 -0
- package/out/domain-lang-module.js.map +1 -0
- package/out/generated/ast.d.ts +770 -0
- package/out/generated/ast.js +565 -0
- package/out/generated/ast.js.map +1 -0
- package/out/generated/grammar.d.ts +6 -0
- package/out/generated/grammar.js +2502 -0
- package/out/generated/grammar.js.map +1 -0
- package/out/generated/module.d.ts +13 -0
- package/out/generated/module.js +21 -0
- package/out/generated/module.js.map +1 -0
- package/out/index.d.ts +13 -0
- package/out/index.js +17 -0
- package/out/index.js.map +1 -0
- package/out/lsp/domain-lang-completion.d.ts +37 -0
- package/out/lsp/domain-lang-completion.js +452 -0
- package/out/lsp/domain-lang-completion.js.map +1 -0
- package/out/lsp/domain-lang-formatter.d.ts +15 -0
- package/out/lsp/domain-lang-formatter.js +43 -0
- package/out/lsp/domain-lang-formatter.js.map +1 -0
- package/out/lsp/domain-lang-naming.d.ts +34 -0
- package/out/lsp/domain-lang-naming.js +49 -0
- package/out/lsp/domain-lang-naming.js.map +1 -0
- package/out/lsp/domain-lang-scope.d.ts +59 -0
- package/out/lsp/domain-lang-scope.js +102 -0
- package/out/lsp/domain-lang-scope.js.map +1 -0
- package/out/lsp/hover/ddd-pattern-explanations.d.ts +50 -0
- package/out/lsp/hover/ddd-pattern-explanations.js +196 -0
- package/out/lsp/hover/ddd-pattern-explanations.js.map +1 -0
- package/out/lsp/hover/domain-lang-hover.d.ts +19 -0
- package/out/lsp/hover/domain-lang-hover.js +306 -0
- package/out/lsp/hover/domain-lang-hover.js.map +1 -0
- package/out/lsp/hover/domain-lang-keywords.d.ts +13 -0
- package/out/lsp/hover/domain-lang-keywords.js +47 -0
- package/out/lsp/hover/domain-lang-keywords.js.map +1 -0
- package/out/main-browser.d.ts +1 -0
- package/out/main-browser.js +11 -0
- package/out/main-browser.js.map +1 -0
- package/out/main.d.ts +1 -0
- package/out/main.js +74 -0
- package/out/main.js.map +1 -0
- package/out/sdk/ast-augmentation.d.ts +136 -0
- package/out/sdk/ast-augmentation.js +62 -0
- package/out/sdk/ast-augmentation.js.map +1 -0
- package/out/sdk/index.d.ts +94 -0
- package/out/sdk/index.js +97 -0
- package/out/sdk/index.js.map +1 -0
- package/out/sdk/indexes.d.ts +16 -0
- package/out/sdk/indexes.js +97 -0
- package/out/sdk/indexes.js.map +1 -0
- package/out/sdk/loader-node.d.ts +47 -0
- package/out/sdk/loader-node.js +104 -0
- package/out/sdk/loader-node.js.map +1 -0
- package/out/sdk/loader.d.ts +49 -0
- package/out/sdk/loader.js +85 -0
- package/out/sdk/loader.js.map +1 -0
- package/out/sdk/patterns.d.ts +93 -0
- package/out/sdk/patterns.js +123 -0
- package/out/sdk/patterns.js.map +1 -0
- package/out/sdk/query.d.ts +90 -0
- package/out/sdk/query.js +679 -0
- package/out/sdk/query.js.map +1 -0
- package/out/sdk/resolution.d.ts +52 -0
- package/out/sdk/resolution.js +68 -0
- package/out/sdk/resolution.js.map +1 -0
- package/out/sdk/types.d.ts +301 -0
- package/out/sdk/types.js +8 -0
- package/out/sdk/types.js.map +1 -0
- package/out/services/dependency-analyzer.d.ts +94 -0
- package/out/services/dependency-analyzer.js +279 -0
- package/out/services/dependency-analyzer.js.map +1 -0
- package/out/services/dependency-resolver.d.ts +123 -0
- package/out/services/dependency-resolver.js +252 -0
- package/out/services/dependency-resolver.js.map +1 -0
- package/out/services/git-url-resolver.browser.d.ts +18 -0
- package/out/services/git-url-resolver.browser.js +15 -0
- package/out/services/git-url-resolver.browser.js.map +1 -0
- package/out/services/git-url-resolver.d.ts +192 -0
- package/out/services/git-url-resolver.js +382 -0
- package/out/services/git-url-resolver.js.map +1 -0
- package/out/services/governance-validator.d.ts +80 -0
- package/out/services/governance-validator.js +159 -0
- package/out/services/governance-validator.js.map +1 -0
- package/out/services/import-resolver.d.ts +18 -0
- package/out/services/import-resolver.js +22 -0
- package/out/services/import-resolver.js.map +1 -0
- package/out/services/performance-optimizer.d.ts +60 -0
- package/out/services/performance-optimizer.js +140 -0
- package/out/services/performance-optimizer.js.map +1 -0
- package/out/services/relationship-inference.d.ts +11 -0
- package/out/services/relationship-inference.js +98 -0
- package/out/services/relationship-inference.js.map +1 -0
- package/out/services/workspace-manager.d.ts +76 -0
- package/out/services/workspace-manager.js +323 -0
- package/out/services/workspace-manager.js.map +1 -0
- package/out/syntaxes/domain-lang.monarch.d.ts +76 -0
- package/out/syntaxes/domain-lang.monarch.js +29 -0
- package/out/syntaxes/domain-lang.monarch.js.map +1 -0
- package/out/utils/import-utils.d.ts +57 -0
- package/out/utils/import-utils.js +228 -0
- package/out/utils/import-utils.js.map +1 -0
- package/out/validation/bounded-context.d.ts +11 -0
- package/out/validation/bounded-context.js +79 -0
- package/out/validation/bounded-context.js.map +1 -0
- package/out/validation/classification.d.ts +3 -0
- package/out/validation/classification.js +3 -0
- package/out/validation/classification.js.map +1 -0
- package/out/validation/constants.d.ts +77 -0
- package/out/validation/constants.js +96 -0
- package/out/validation/constants.js.map +1 -0
- package/out/validation/domain-lang-validator.d.ts +2 -0
- package/out/validation/domain-lang-validator.js +27 -0
- package/out/validation/domain-lang-validator.js.map +1 -0
- package/out/validation/domain.d.ts +11 -0
- package/out/validation/domain.js +18 -0
- package/out/validation/domain.js.map +1 -0
- package/out/validation/import.d.ts +44 -0
- package/out/validation/import.js +135 -0
- package/out/validation/import.js.map +1 -0
- package/out/validation/maps.d.ts +21 -0
- package/out/validation/maps.js +56 -0
- package/out/validation/maps.js.map +1 -0
- package/out/validation/metadata.d.ts +7 -0
- package/out/validation/metadata.js +12 -0
- package/out/validation/metadata.js.map +1 -0
- package/out/validation/model.d.ts +12 -0
- package/out/validation/model.js +29 -0
- package/out/validation/model.js.map +1 -0
- package/out/validation/relationships.d.ts +12 -0
- package/out/validation/relationships.js +94 -0
- package/out/validation/relationships.js.map +1 -0
- package/out/validation/shared.d.ts +6 -0
- package/out/validation/shared.js +12 -0
- package/out/validation/shared.js.map +1 -0
- package/package.json +97 -0
- package/src/ast-augmentation.ts +5 -0
- package/src/domain-lang-module.ts +100 -0
- package/src/domain-lang.langium +356 -0
- package/src/generated/ast.ts +999 -0
- package/src/generated/grammar.ts +2504 -0
- package/src/generated/module.ts +25 -0
- package/src/index.ts +17 -0
- package/src/lsp/domain-lang-completion.ts +514 -0
- package/src/lsp/domain-lang-formatter.ts +51 -0
- package/src/lsp/domain-lang-naming.ts +56 -0
- package/src/lsp/domain-lang-scope.ts +137 -0
- package/src/lsp/hover/ddd-pattern-explanations.ts +237 -0
- package/src/lsp/hover/domain-lang-hover.ts +340 -0
- package/src/lsp/hover/domain-lang-keywords.ts +50 -0
- package/src/main-browser.ts +15 -0
- package/src/main.ts +85 -0
- package/src/sdk/README.md +297 -0
- package/src/sdk/ast-augmentation.ts +157 -0
- package/src/sdk/index.ts +128 -0
- package/src/sdk/indexes.ts +155 -0
- package/src/sdk/loader-node.ts +126 -0
- package/src/sdk/loader.ts +99 -0
- package/src/sdk/patterns.ts +147 -0
- package/src/sdk/query.ts +802 -0
- package/src/sdk/resolution.ts +78 -0
- package/src/sdk/types.ts +346 -0
- package/src/services/dependency-analyzer.ts +381 -0
- package/src/services/dependency-resolver.ts +334 -0
- package/src/services/git-url-resolver.browser.ts +31 -0
- package/src/services/git-url-resolver.ts +524 -0
- package/src/services/governance-validator.ts +219 -0
- package/src/services/import-resolver.ts +30 -0
- package/src/services/performance-optimizer.ts +170 -0
- package/src/services/relationship-inference.ts +121 -0
- package/src/services/workspace-manager.ts +416 -0
- package/src/syntaxes/domain-lang.monarch.ts +29 -0
- package/src/utils/import-utils.ts +274 -0
- package/src/validation/bounded-context.ts +99 -0
- package/src/validation/classification.ts +5 -0
- package/src/validation/constants.ts +124 -0
- package/src/validation/domain-lang-validator.ts +33 -0
- package/src/validation/domain.ts +24 -0
- package/src/validation/import.ts +171 -0
- package/src/validation/maps.ts +72 -0
- package/src/validation/metadata.ts +14 -0
- package/src/validation/model.ts +37 -0
- package/src/validation/relationships.ts +154 -0
- package/src/validation/shared.ts +14 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grammar.js","sourceRoot":"","sources":["../../src/generated/grammar.ts"],"names":[],"mappings":"AAAA;;;gFAGgF;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,IAAI,uBAA4C,CAAC;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAY,EAAE,CAAC,uBAAuB,IAAI,CAAC,uBAAuB,GAAG,mBAAmB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA87ExH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/******************************************************************************
|
|
2
|
+
* This file was generated by langium-cli 4.1.0.
|
|
3
|
+
* DO NOT EDIT MANUALLY!
|
|
4
|
+
******************************************************************************/
|
|
5
|
+
import type { LangiumSharedCoreServices, LangiumCoreServices, LangiumGeneratedCoreServices, LangiumGeneratedSharedCoreServices, Module } from 'langium';
|
|
6
|
+
export declare const DomainLangLanguageMetaData: {
|
|
7
|
+
readonly languageId: "domain-lang";
|
|
8
|
+
readonly fileExtensions: readonly [".dlang"];
|
|
9
|
+
readonly caseInsensitive: false;
|
|
10
|
+
readonly mode: "development";
|
|
11
|
+
};
|
|
12
|
+
export declare const DomainLangGeneratedSharedModule: Module<LangiumSharedCoreServices, LangiumGeneratedSharedCoreServices>;
|
|
13
|
+
export declare const DomainLangGeneratedModule: Module<LangiumCoreServices, LangiumGeneratedCoreServices>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/******************************************************************************
|
|
2
|
+
* This file was generated by langium-cli 4.1.0.
|
|
3
|
+
* DO NOT EDIT MANUALLY!
|
|
4
|
+
******************************************************************************/
|
|
5
|
+
import { DomainLangAstReflection } from './ast.js';
|
|
6
|
+
import { DomainLangGrammar } from './grammar.js';
|
|
7
|
+
export const DomainLangLanguageMetaData = {
|
|
8
|
+
languageId: 'domain-lang',
|
|
9
|
+
fileExtensions: ['.dlang'],
|
|
10
|
+
caseInsensitive: false,
|
|
11
|
+
mode: 'development'
|
|
12
|
+
};
|
|
13
|
+
export const DomainLangGeneratedSharedModule = {
|
|
14
|
+
AstReflection: () => new DomainLangAstReflection()
|
|
15
|
+
};
|
|
16
|
+
export const DomainLangGeneratedModule = {
|
|
17
|
+
Grammar: () => DomainLangGrammar(),
|
|
18
|
+
LanguageMetaData: () => DomainLangLanguageMetaData,
|
|
19
|
+
parser: {}
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/generated/module.ts"],"names":[],"mappings":"AAAA;;;gFAGgF;AAGhF,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACtC,UAAU,EAAE,aAAa;IACzB,cAAc,EAAE,CAAC,QAAQ,CAAC;IAC1B,eAAe,EAAE,KAAK;IACtB,IAAI,EAAE,aAAa;CACc,CAAC;AAEtC,MAAM,CAAC,MAAM,+BAA+B,GAA0E;IAClH,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,uBAAuB,EAAE;CACrD,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAA8D;IAChG,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE;IAClC,gBAAgB,EAAE,GAAG,EAAE,CAAC,0BAA0B;IAClD,MAAM,EAAE,EAAE;CACb,CAAC"}
|
package/out/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './domain-lang-module.js';
|
|
2
|
+
export * from './generated/ast.js';
|
|
3
|
+
export * from './generated/grammar.js';
|
|
4
|
+
export * from './generated/module.js';
|
|
5
|
+
export * from './ast-augmentation.js';
|
|
6
|
+
export * from './services/workspace-manager.js';
|
|
7
|
+
export * from './services/dependency-resolver.js';
|
|
8
|
+
export * from './services/dependency-analyzer.js';
|
|
9
|
+
export * from './services/governance-validator.js';
|
|
10
|
+
export * from './services/import-resolver.js';
|
|
11
|
+
export * from './services/relationship-inference.js';
|
|
12
|
+
export * from './services/git-url-resolver.js';
|
|
13
|
+
export * from './services/performance-optimizer.js';
|
package/out/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from './domain-lang-module.js';
|
|
2
|
+
export * from './generated/ast.js';
|
|
3
|
+
export * from './generated/grammar.js';
|
|
4
|
+
export * from './generated/module.js';
|
|
5
|
+
// Note: main.js is intentionally NOT exported here - it's the LSP entry point
|
|
6
|
+
// and creates a connection when imported, which breaks CLI/SDK standalone usage
|
|
7
|
+
export * from './ast-augmentation.js';
|
|
8
|
+
// Export services
|
|
9
|
+
export * from './services/workspace-manager.js';
|
|
10
|
+
export * from './services/dependency-resolver.js';
|
|
11
|
+
export * from './services/dependency-analyzer.js';
|
|
12
|
+
export * from './services/governance-validator.js';
|
|
13
|
+
export * from './services/import-resolver.js';
|
|
14
|
+
export * from './services/relationship-inference.js';
|
|
15
|
+
export * from './services/git-url-resolver.js';
|
|
16
|
+
export * from './services/performance-optimizer.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
package/out/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,8EAA8E;AAC9E,gFAAgF;AAChF,cAAc,uBAAuB,CAAC;AAEtC,kBAAkB;AAClB,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Completion provider for DomainLang - context-aware, grammar-aligned.
|
|
3
|
+
*
|
|
4
|
+
* **Design:**
|
|
5
|
+
* - Context-aware: Only suggests what's valid at cursor position
|
|
6
|
+
* - Grammar-aligned: Completions match grammar structure exactly
|
|
7
|
+
* - Simple: Uses parent node to determine context
|
|
8
|
+
* - Maintainable: Clear mapping from grammar to completions
|
|
9
|
+
*/
|
|
10
|
+
import { CompletionAcceptor, CompletionContext, DefaultCompletionProvider, NextFeature } from 'langium/lsp';
|
|
11
|
+
export declare class DomainLangCompletionProvider extends DefaultCompletionProvider {
|
|
12
|
+
protected completionFor(context: CompletionContext, next: NextFeature, acceptor: CompletionAcceptor): void;
|
|
13
|
+
private addTopLevelSnippets;
|
|
14
|
+
/**
|
|
15
|
+
* Add property/collection completions for BoundedContext.
|
|
16
|
+
*/
|
|
17
|
+
private addBoundedContextCompletions;
|
|
18
|
+
/**
|
|
19
|
+
* Add property completions for Domain.
|
|
20
|
+
*/
|
|
21
|
+
private addDomainCompletions;
|
|
22
|
+
/**
|
|
23
|
+
* Add completions for ContextMap.
|
|
24
|
+
* Suggests relationship patterns and context references.
|
|
25
|
+
*/
|
|
26
|
+
private addContextMapCompletions;
|
|
27
|
+
/**
|
|
28
|
+
* Add completions for DomainMap.
|
|
29
|
+
* Suggests domain references.
|
|
30
|
+
*/
|
|
31
|
+
private addDomainMapCompletions;
|
|
32
|
+
/**
|
|
33
|
+
* Add completions for relationships.
|
|
34
|
+
* Provides integration patterns and relationship types.
|
|
35
|
+
*/
|
|
36
|
+
private addRelationshipCompletions;
|
|
37
|
+
}
|
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Completion provider for DomainLang - context-aware, grammar-aligned.
|
|
3
|
+
*
|
|
4
|
+
* **Design:**
|
|
5
|
+
* - Context-aware: Only suggests what's valid at cursor position
|
|
6
|
+
* - Grammar-aligned: Completions match grammar structure exactly
|
|
7
|
+
* - Simple: Uses parent node to determine context
|
|
8
|
+
* - Maintainable: Clear mapping from grammar to completions
|
|
9
|
+
*/
|
|
10
|
+
import { DefaultCompletionProvider } from 'langium/lsp';
|
|
11
|
+
import { CompletionItemKind, InsertTextFormat } from 'vscode-languageserver';
|
|
12
|
+
import * as ast from '../generated/ast.js';
|
|
13
|
+
/**
|
|
14
|
+
* Top-level snippet templates for creating new AST nodes.
|
|
15
|
+
*/
|
|
16
|
+
const TOP_LEVEL_SNIPPETS = [
|
|
17
|
+
{
|
|
18
|
+
label: '⚡ Domain (simple)',
|
|
19
|
+
kind: CompletionItemKind.Snippet,
|
|
20
|
+
insertText: 'Domain ${1:Name} {}',
|
|
21
|
+
documentation: '📝 Snippet: Create a simple domain',
|
|
22
|
+
sortText: '0_snippet_domain_simple'
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
label: '⚡ Domain (detailed)',
|
|
26
|
+
kind: CompletionItemKind.Snippet,
|
|
27
|
+
insertText: [
|
|
28
|
+
'Domain ${1:Name} {',
|
|
29
|
+
'\tdescription: "${2:Description}"',
|
|
30
|
+
'\tvision: "${3:Vision}"',
|
|
31
|
+
'\tclassification: ${4:CoreDomain}',
|
|
32
|
+
'}'
|
|
33
|
+
].join('\n'),
|
|
34
|
+
documentation: '📝 Snippet: Create a domain with description and vision',
|
|
35
|
+
sortText: '0_snippet_domain_detailed'
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
label: '⚡ BoundedContext (simple)',
|
|
39
|
+
kind: CompletionItemKind.Snippet,
|
|
40
|
+
insertText: 'bc ${1:Name} for ${2:Domain} as ${3:Core} by ${4:Team}',
|
|
41
|
+
documentation: '📝 Snippet: Quick bounded context definition',
|
|
42
|
+
sortText: '0_snippet_bc_simple'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
label: '⚡ BoundedContext (detailed)',
|
|
46
|
+
kind: CompletionItemKind.Snippet,
|
|
47
|
+
insertText: [
|
|
48
|
+
'BoundedContext ${1:Name} for ${2:Domain} {',
|
|
49
|
+
'\tdescription: "${3:Description}"',
|
|
50
|
+
'\tteam: ${4:Team}',
|
|
51
|
+
'\trole: ${5:Core}',
|
|
52
|
+
'\t',
|
|
53
|
+
'\tterminology {',
|
|
54
|
+
'\t\tterm ${6:Term}: "${7:Definition}"',
|
|
55
|
+
'\t}',
|
|
56
|
+
'}'
|
|
57
|
+
].join('\n'),
|
|
58
|
+
documentation: '📝 Snippet: Full bounded context with all common blocks',
|
|
59
|
+
sortText: '0_snippet_bc_detailed'
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
label: '⚡ ContextMap',
|
|
63
|
+
kind: CompletionItemKind.Snippet,
|
|
64
|
+
insertText: [
|
|
65
|
+
'ContextMap ${1:Name} {',
|
|
66
|
+
'\tcontains ${2:Context1}, ${3:Context2}',
|
|
67
|
+
'}'
|
|
68
|
+
].join('\n'),
|
|
69
|
+
documentation: '📝 Snippet: Create a context map',
|
|
70
|
+
sortText: '0_snippet_contextmap'
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
label: '⚡ DomainMap',
|
|
74
|
+
kind: CompletionItemKind.Snippet,
|
|
75
|
+
insertText: [
|
|
76
|
+
'DomainMap ${1:Name} {',
|
|
77
|
+
'\tcontains ${2:Domain1}, ${3:Domain2}',
|
|
78
|
+
'}'
|
|
79
|
+
].join('\n'),
|
|
80
|
+
documentation: '📝 Snippet: Create a domain map',
|
|
81
|
+
sortText: '0_snippet_domainmap'
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
label: '⚡ Team',
|
|
85
|
+
kind: CompletionItemKind.Snippet,
|
|
86
|
+
insertText: 'Team ${1:TeamName}',
|
|
87
|
+
documentation: '📝 Snippet: Define a team',
|
|
88
|
+
sortText: '0_snippet_team'
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
label: '⚡ Classification',
|
|
92
|
+
kind: CompletionItemKind.Snippet,
|
|
93
|
+
insertText: 'Classification ${1:Name}',
|
|
94
|
+
documentation: '📝 Snippet: Define a reusable classification label',
|
|
95
|
+
sortText: '0_snippet_classification'
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
label: '⚡ Metadata',
|
|
99
|
+
kind: CompletionItemKind.Snippet,
|
|
100
|
+
insertText: 'Metadata ${1:KeyName}',
|
|
101
|
+
documentation: '📝 Snippet: Define a metadata key',
|
|
102
|
+
sortText: '0_snippet_metadata'
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
label: '⚡ Namespace',
|
|
106
|
+
kind: CompletionItemKind.Snippet,
|
|
107
|
+
insertText: [
|
|
108
|
+
'Namespace ${1:name.space} {',
|
|
109
|
+
'\t$0',
|
|
110
|
+
'}'
|
|
111
|
+
].join('\n'),
|
|
112
|
+
documentation: '📝 Snippet: Create a hierarchical namespace',
|
|
113
|
+
sortText: '0_snippet_namespace'
|
|
114
|
+
}
|
|
115
|
+
];
|
|
116
|
+
export class DomainLangCompletionProvider extends DefaultCompletionProvider {
|
|
117
|
+
completionFor(context, next, acceptor) {
|
|
118
|
+
const node = context.node;
|
|
119
|
+
if (!node) {
|
|
120
|
+
super.completionFor(context, next, acceptor);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
// Strategy: Check node type and container to determine what's allowed at cursor position
|
|
124
|
+
// Check if cursor is after the node (for top-level positioning)
|
|
125
|
+
const offset = context.offset;
|
|
126
|
+
const nodeEnd = node.$cstNode?.end ?? 0;
|
|
127
|
+
const isAfterNode = offset >= nodeEnd;
|
|
128
|
+
// If we're positioned after a BC/Domain (e.g., on next line): show top-level
|
|
129
|
+
if ((ast.isBoundedContext(node) || ast.isDomain(node)) && isAfterNode) {
|
|
130
|
+
this.addTopLevelSnippets(acceptor, context);
|
|
131
|
+
// Let Langium provide keywords like "bc", "Domain", etc.
|
|
132
|
+
super.completionFor(context, next, acceptor);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
// If we're AT a BoundedContext node: only BC documentation blocks
|
|
136
|
+
if (ast.isBoundedContext(node)) {
|
|
137
|
+
this.addBoundedContextCompletions(node, acceptor, context);
|
|
138
|
+
super.completionFor(context, next, acceptor);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
// If we're AT a Domain node: only Domain documentation blocks
|
|
142
|
+
if (ast.isDomain(node)) {
|
|
143
|
+
this.addDomainCompletions(node, acceptor, context);
|
|
144
|
+
super.completionFor(context, next, acceptor);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
// If we're AT a ContextMap node: relationships and contains
|
|
148
|
+
if (ast.isContextMap(node)) {
|
|
149
|
+
this.addContextMapCompletions(node, acceptor, context);
|
|
150
|
+
super.completionFor(context, next, acceptor);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
// If we're AT a DomainMap node: contains
|
|
154
|
+
if (ast.isDomainMap(node)) {
|
|
155
|
+
this.addDomainMapCompletions(node, acceptor, context);
|
|
156
|
+
super.completionFor(context, next, acceptor);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
// If we're AT the Model or NamespaceDeclaration level: all top-level constructs
|
|
160
|
+
if (ast.isModel(node) || ast.isNamespaceDeclaration(node)) {
|
|
161
|
+
this.addTopLevelSnippets(acceptor, context);
|
|
162
|
+
super.completionFor(context, next, acceptor);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const container = node.$container;
|
|
166
|
+
// Inside BoundedContext body: suggest missing scalar properties and collections
|
|
167
|
+
if (ast.isBoundedContext(container)) {
|
|
168
|
+
this.addBoundedContextCompletions(container, acceptor, context);
|
|
169
|
+
super.completionFor(context, next, acceptor);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
// Inside Domain body: suggest missing scalar properties
|
|
173
|
+
if (ast.isDomain(container)) {
|
|
174
|
+
this.addDomainCompletions(container, acceptor, context);
|
|
175
|
+
super.completionFor(context, next, acceptor);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// Inside ContextMap body: relationships and contains
|
|
179
|
+
if (ast.isContextMap(container)) {
|
|
180
|
+
this.addContextMapCompletions(container, acceptor, context);
|
|
181
|
+
super.completionFor(context, next, acceptor);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
// Inside DomainMap body: contains
|
|
185
|
+
if (ast.isDomainMap(container)) {
|
|
186
|
+
this.addDomainMapCompletions(container, acceptor, context);
|
|
187
|
+
super.completionFor(context, next, acceptor);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (ast.isRelationship(node) || ast.isRelationship(container)) {
|
|
191
|
+
this.addRelationshipCompletions(acceptor, context);
|
|
192
|
+
super.completionFor(context, next, acceptor);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
// Top level container (Model or NamespaceDeclaration): all top-level constructs
|
|
196
|
+
if (ast.isModel(container) || ast.isNamespaceDeclaration(container)) {
|
|
197
|
+
this.addTopLevelSnippets(acceptor, context);
|
|
198
|
+
}
|
|
199
|
+
// Let Langium handle default completions
|
|
200
|
+
super.completionFor(context, next, acceptor);
|
|
201
|
+
}
|
|
202
|
+
addTopLevelSnippets(acceptor, context) {
|
|
203
|
+
for (const snippet of TOP_LEVEL_SNIPPETS) {
|
|
204
|
+
acceptor(context, {
|
|
205
|
+
label: snippet.label,
|
|
206
|
+
kind: snippet.kind,
|
|
207
|
+
insertText: snippet.insertText,
|
|
208
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
209
|
+
documentation: snippet.documentation,
|
|
210
|
+
sortText: snippet.sortText
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Add property/collection completions for BoundedContext.
|
|
216
|
+
*/
|
|
217
|
+
addBoundedContextCompletions(node, acceptor, context) {
|
|
218
|
+
if (!node.description) {
|
|
219
|
+
acceptor(context, {
|
|
220
|
+
label: '⚡ description',
|
|
221
|
+
kind: CompletionItemKind.Snippet,
|
|
222
|
+
insertText: 'description: "${1:Description}"',
|
|
223
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
224
|
+
documentation: '📝 Snippet: Describe the bounded context\'s responsibility',
|
|
225
|
+
sortText: '0_snippet_description'
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
if (node.team.length === 0) {
|
|
229
|
+
acceptor(context, {
|
|
230
|
+
label: '⚡ team',
|
|
231
|
+
kind: CompletionItemKind.Snippet,
|
|
232
|
+
insertText: 'team: ${1:TeamName}',
|
|
233
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
234
|
+
documentation: '📝 Snippet: Assign the responsible team',
|
|
235
|
+
sortText: '0_snippet_team'
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
if (node.classification.length === 0) {
|
|
239
|
+
acceptor(context, {
|
|
240
|
+
label: '⚡ classification',
|
|
241
|
+
kind: CompletionItemKind.Snippet,
|
|
242
|
+
insertText: 'classification: ${1:Core}',
|
|
243
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
244
|
+
documentation: '📝 Snippet: Assign the strategic classification (Core, Supporting, Generic)',
|
|
245
|
+
sortText: '0_snippet_classification'
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
if (!node.businessModel) {
|
|
249
|
+
acceptor(context, {
|
|
250
|
+
label: '⚡ businessModel',
|
|
251
|
+
kind: CompletionItemKind.Snippet,
|
|
252
|
+
insertText: 'businessModel: ${1:Commercial}',
|
|
253
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
254
|
+
documentation: '📝 Snippet: Classify the business model',
|
|
255
|
+
sortText: '0_snippet_businessModel'
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
if (!node.evolution) {
|
|
259
|
+
acceptor(context, {
|
|
260
|
+
label: '⚡ evolution',
|
|
261
|
+
kind: CompletionItemKind.Snippet,
|
|
262
|
+
insertText: 'evolution: ${1:Product}',
|
|
263
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
264
|
+
documentation: '📝 Snippet: Define the evolution stage (Genesis, Custom, Product, Commodity)',
|
|
265
|
+
sortText: '0_snippet_evolution'
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
if (node.terminology.length === 0) {
|
|
269
|
+
acceptor(context, {
|
|
270
|
+
label: '⚡ terminology',
|
|
271
|
+
kind: CompletionItemKind.Snippet,
|
|
272
|
+
insertText: [
|
|
273
|
+
'terminology {',
|
|
274
|
+
'\tterm ${1:Term}: "${2:Definition}"',
|
|
275
|
+
'}'
|
|
276
|
+
].join('\n'),
|
|
277
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
278
|
+
documentation: '📝 Snippet: Define ubiquitous language terms',
|
|
279
|
+
sortText: '0_snippet_terminology'
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
if (node.decisions.length === 0) {
|
|
283
|
+
acceptor(context, {
|
|
284
|
+
label: '⚡ decisions',
|
|
285
|
+
kind: CompletionItemKind.Snippet,
|
|
286
|
+
insertText: [
|
|
287
|
+
'decisions {',
|
|
288
|
+
'\tdecision [${1|technical,business|}] ${2:DecisionName}: "${3:Rationale}"',
|
|
289
|
+
'}'
|
|
290
|
+
].join('\n'),
|
|
291
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
292
|
+
documentation: '📝 Snippet: Document architectural decisions',
|
|
293
|
+
sortText: '0_snippet_decisions'
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
if (node.relationships.length === 0) {
|
|
297
|
+
acceptor(context, {
|
|
298
|
+
label: '⚡ relationships',
|
|
299
|
+
kind: CompletionItemKind.Snippet,
|
|
300
|
+
insertText: [
|
|
301
|
+
'relationships {',
|
|
302
|
+
'\t${1:Context1} -> ${2:Context2}',
|
|
303
|
+
'}'
|
|
304
|
+
].join('\n'),
|
|
305
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
306
|
+
documentation: '📝 Snippet: Define relationships with other bounded contexts',
|
|
307
|
+
sortText: '0_snippet_relationships'
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
if (node.metadata.length === 0) {
|
|
311
|
+
acceptor(context, {
|
|
312
|
+
label: '⚡ metadata',
|
|
313
|
+
kind: CompletionItemKind.Snippet,
|
|
314
|
+
insertText: [
|
|
315
|
+
'metadata {',
|
|
316
|
+
'\t${1:Language}: "${2:TypeScript}"',
|
|
317
|
+
'}'
|
|
318
|
+
].join('\n'),
|
|
319
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
320
|
+
documentation: '📝 Snippet: Add metadata key-value pairs',
|
|
321
|
+
sortText: '0_snippet_metadata'
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Add property completions for Domain.
|
|
327
|
+
*/
|
|
328
|
+
addDomainCompletions(node, acceptor, context) {
|
|
329
|
+
if (!node.description) {
|
|
330
|
+
acceptor(context, {
|
|
331
|
+
label: '⚡ description',
|
|
332
|
+
kind: CompletionItemKind.Snippet,
|
|
333
|
+
insertText: 'description: "${1:Description}"',
|
|
334
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
335
|
+
documentation: '📝 Snippet: Describe what this domain encompasses',
|
|
336
|
+
sortText: '0_snippet_description'
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
if (!node.vision) {
|
|
340
|
+
acceptor(context, {
|
|
341
|
+
label: '⚡ vision',
|
|
342
|
+
kind: CompletionItemKind.Snippet,
|
|
343
|
+
insertText: 'vision: "${1:Vision statement}"',
|
|
344
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
345
|
+
documentation: '📝 Snippet: Define the strategic vision for this domain',
|
|
346
|
+
sortText: '0_snippet_vision'
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
if (!node.type) {
|
|
350
|
+
acceptor(context, {
|
|
351
|
+
label: '⚡ type',
|
|
352
|
+
kind: CompletionItemKind.Snippet,
|
|
353
|
+
insertText: 'type: ${1:Core}',
|
|
354
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
355
|
+
documentation: '📝 Snippet: Classify as Core, Supporting, or Generic domain type',
|
|
356
|
+
sortText: '0_snippet_type'
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Add completions for ContextMap.
|
|
362
|
+
* Suggests relationship patterns and context references.
|
|
363
|
+
*/
|
|
364
|
+
addContextMapCompletions(node, acceptor, context) {
|
|
365
|
+
// Suggest contains if no contexts yet
|
|
366
|
+
if (node.boundedContexts.length === 0) {
|
|
367
|
+
acceptor(context, {
|
|
368
|
+
label: 'contains',
|
|
369
|
+
kind: CompletionItemKind.Keyword,
|
|
370
|
+
insertText: 'contains ${1:Context1}, ${2:Context2}',
|
|
371
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
372
|
+
documentation: 'Add bounded contexts to this map',
|
|
373
|
+
sortText: '0_contains'
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
// Always suggest relationship snippet
|
|
377
|
+
acceptor(context, {
|
|
378
|
+
label: 'relationship (simple)',
|
|
379
|
+
kind: CompletionItemKind.Snippet,
|
|
380
|
+
insertText: '${1:Context1} -> ${2:Context2}',
|
|
381
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
382
|
+
documentation: 'Add a simple upstream-downstream relationship',
|
|
383
|
+
sortText: '1_relationship_simple'
|
|
384
|
+
});
|
|
385
|
+
acceptor(context, {
|
|
386
|
+
label: 'relationship (with patterns)',
|
|
387
|
+
kind: CompletionItemKind.Snippet,
|
|
388
|
+
insertText: '[${1|OHS,PL,ACL,CF,P,SK|}] ${2:Context1} -> [${3|OHS,PL,ACL,CF,P,SK|}] ${4:Context2}',
|
|
389
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
390
|
+
documentation: 'Add a relationship with integration patterns',
|
|
391
|
+
sortText: '1_relationship_patterns'
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Add completions for DomainMap.
|
|
396
|
+
* Suggests domain references.
|
|
397
|
+
*/
|
|
398
|
+
addDomainMapCompletions(node, acceptor, context) {
|
|
399
|
+
// Suggest contains if no domains yet
|
|
400
|
+
if (node.domains.length === 0) {
|
|
401
|
+
acceptor(context, {
|
|
402
|
+
label: 'contains',
|
|
403
|
+
kind: CompletionItemKind.Keyword,
|
|
404
|
+
insertText: 'contains ${1:Domain1}, ${2:Domain2}',
|
|
405
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
406
|
+
documentation: 'Add domains to this map',
|
|
407
|
+
sortText: '0_contains'
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Add completions for relationships.
|
|
413
|
+
* Provides integration patterns and relationship types.
|
|
414
|
+
*/
|
|
415
|
+
addRelationshipCompletions(acceptor, context) {
|
|
416
|
+
// Integration pattern completions
|
|
417
|
+
const patterns = [
|
|
418
|
+
{ label: 'OHS (Open Host Service)', insertText: '[OHS]', doc: 'Open Host Service pattern' },
|
|
419
|
+
{ label: 'PL (Published Language)', insertText: '[PL]', doc: 'Published Language pattern' },
|
|
420
|
+
{ label: 'ACL (Anti-Corruption Layer)', insertText: '[ACL]', doc: 'Anti-Corruption Layer pattern' },
|
|
421
|
+
{ label: 'CF (Conformist)', insertText: '[CF]', doc: 'Conformist pattern' },
|
|
422
|
+
{ label: 'P (Partnership)', insertText: '[P]', doc: 'Partnership pattern' },
|
|
423
|
+
{ label: 'SK (Shared Kernel)', insertText: '[SK]', doc: 'Shared Kernel pattern' }
|
|
424
|
+
];
|
|
425
|
+
for (const pattern of patterns) {
|
|
426
|
+
acceptor(context, {
|
|
427
|
+
label: pattern.label,
|
|
428
|
+
kind: CompletionItemKind.EnumMember,
|
|
429
|
+
insertText: pattern.insertText,
|
|
430
|
+
documentation: pattern.doc,
|
|
431
|
+
sortText: `0_${pattern.label}`
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
// Relationship arrow completions
|
|
435
|
+
const arrows = [
|
|
436
|
+
{ label: '->', doc: 'Upstream to downstream' },
|
|
437
|
+
{ label: '<-', doc: 'Downstream to upstream' },
|
|
438
|
+
{ label: '<->', doc: 'Bidirectional/Partnership' },
|
|
439
|
+
{ label: '><', doc: 'Separate Ways' }
|
|
440
|
+
];
|
|
441
|
+
for (const arrow of arrows) {
|
|
442
|
+
acceptor(context, {
|
|
443
|
+
label: arrow.label,
|
|
444
|
+
kind: CompletionItemKind.Operator,
|
|
445
|
+
insertText: arrow.label,
|
|
446
|
+
documentation: arrow.doc,
|
|
447
|
+
sortText: `1_${arrow.label}`
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
//# sourceMappingURL=domain-lang-completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-lang-completion.js","sourceRoot":"","sources":["../../src/lsp/domain-lang-completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AstNode } from "langium";
|
|
2
|
+
import { AbstractFormatter } from "langium/lsp";
|
|
3
|
+
/**
|
|
4
|
+
* Provides formatting for DomainLang documents.
|
|
5
|
+
* Handles indentation and newlines for block-based constructs.
|
|
6
|
+
*/
|
|
7
|
+
export declare class DomainLangFormatter extends AbstractFormatter {
|
|
8
|
+
protected format(node: AstNode): void;
|
|
9
|
+
/**
|
|
10
|
+
* Formats a block node with standard indentation and newlines.
|
|
11
|
+
*
|
|
12
|
+
* @param node - The AST node to format
|
|
13
|
+
*/
|
|
14
|
+
private formatBlock;
|
|
15
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { AbstractFormatter, Formatting } from "langium/lsp";
|
|
2
|
+
import * as ast from '../generated/ast.js';
|
|
3
|
+
/**
|
|
4
|
+
* Provides formatting for DomainLang documents.
|
|
5
|
+
* Handles indentation and newlines for block-based constructs.
|
|
6
|
+
*/
|
|
7
|
+
export class DomainLangFormatter extends AbstractFormatter {
|
|
8
|
+
format(node) {
|
|
9
|
+
// Namespace declarations
|
|
10
|
+
if (ast.isNamespaceDeclaration(node)) {
|
|
11
|
+
this.formatBlock(node);
|
|
12
|
+
}
|
|
13
|
+
// Domain declarations
|
|
14
|
+
if (ast.isDomain(node)) {
|
|
15
|
+
this.formatBlock(node);
|
|
16
|
+
}
|
|
17
|
+
// Bounded contexts
|
|
18
|
+
if (ast.isBoundedContext(node)) {
|
|
19
|
+
this.formatBlock(node);
|
|
20
|
+
}
|
|
21
|
+
// Context maps
|
|
22
|
+
if (ast.isContextMap(node)) {
|
|
23
|
+
this.formatBlock(node);
|
|
24
|
+
}
|
|
25
|
+
// Domain maps
|
|
26
|
+
if (ast.isDomainMap(node)) {
|
|
27
|
+
this.formatBlock(node);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Formats a block node with standard indentation and newlines.
|
|
32
|
+
*
|
|
33
|
+
* @param node - The AST node to format
|
|
34
|
+
*/
|
|
35
|
+
formatBlock(node) {
|
|
36
|
+
const formatter = this.getNodeFormatter(node);
|
|
37
|
+
const open = formatter.keyword('{');
|
|
38
|
+
const close = formatter.keyword('}');
|
|
39
|
+
formatter.interior(open, close).prepend(Formatting.indent());
|
|
40
|
+
close.prepend(Formatting.newLine());
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=domain-lang-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-lang-formatter.js","sourceRoot":"","sources":["../../src/lsp/domain-lang-formatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAE3C;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,iBAAiB;IAE5C,MAAM,CAAC,IAAa;QAC9B,yBAAyB;QACzB,IAAI,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,sBAAsB;QACtB,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,mBAAmB;QACnB,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,eAAe;QACf,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,cAAc;QACd,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,WAAW,CAAC,IAAa;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAErC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7D,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;CACJ"}
|