@oml/language 0.7.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.
- package/README.md +44 -0
- package/out/oml/generated/ast.d.ts +2109 -0
- package/out/oml/generated/ast.js +1807 -0
- package/out/oml/generated/ast.js.map +1 -0
- package/out/oml/generated/grammar.d.ts +6 -0
- package/out/oml/generated/grammar.js +6885 -0
- package/out/oml/generated/grammar.js.map +1 -0
- package/out/oml/generated/module.d.ts +13 -0
- package/out/oml/generated/module.js +21 -0
- package/out/oml/generated/module.js.map +1 -0
- package/out/oml/index.d.ts +17 -0
- package/out/oml/index.js +19 -0
- package/out/oml/index.js.map +1 -0
- package/out/oml/oml-candidates.d.ts +27 -0
- package/out/oml/oml-candidates.js +146 -0
- package/out/oml/oml-candidates.js.map +1 -0
- package/out/oml/oml-code-actions.d.ts +6 -0
- package/out/oml/oml-code-actions.js +79 -0
- package/out/oml/oml-code-actions.js.map +1 -0
- package/out/oml/oml-completion.d.ts +50 -0
- package/out/oml/oml-completion.js +188 -0
- package/out/oml/oml-completion.js.map +1 -0
- package/out/oml/oml-converter.d.ts +10 -0
- package/out/oml/oml-converter.js +62 -0
- package/out/oml/oml-converter.js.map +1 -0
- package/out/oml/oml-document-validator.d.ts +10 -0
- package/out/oml/oml-document-validator.js +31 -0
- package/out/oml/oml-document-validator.js.map +1 -0
- package/out/oml/oml-document.d.ts +9 -0
- package/out/oml/oml-document.js +18 -0
- package/out/oml/oml-document.js.map +1 -0
- package/out/oml/oml-edit.d.ts +72 -0
- package/out/oml/oml-edit.js +1155 -0
- package/out/oml/oml-edit.js.map +1 -0
- package/out/oml/oml-formatter.d.ts +22 -0
- package/out/oml/oml-formatter.js +357 -0
- package/out/oml/oml-formatter.js.map +1 -0
- package/out/oml/oml-hover.d.ts +13 -0
- package/out/oml/oml-hover.js +71 -0
- package/out/oml/oml-hover.js.map +1 -0
- package/out/oml/oml-index-manager.d.ts +10 -0
- package/out/oml/oml-index-manager.js +48 -0
- package/out/oml/oml-index-manager.js.map +1 -0
- package/out/oml/oml-index.d.ts +20 -0
- package/out/oml/oml-index.js +133 -0
- package/out/oml/oml-index.js.map +1 -0
- package/out/oml/oml-module.d.ts +42 -0
- package/out/oml/oml-module.js +76 -0
- package/out/oml/oml-module.js.map +1 -0
- package/out/oml/oml-rename.d.ts +14 -0
- package/out/oml/oml-rename.js +114 -0
- package/out/oml/oml-rename.js.map +1 -0
- package/out/oml/oml-scope.d.ts +30 -0
- package/out/oml/oml-scope.js +225 -0
- package/out/oml/oml-scope.js.map +1 -0
- package/out/oml/oml-serializer.d.ts +2 -0
- package/out/oml/oml-serializer.js +883 -0
- package/out/oml/oml-serializer.js.map +1 -0
- package/out/oml/oml-utils.d.ts +53 -0
- package/out/oml/oml-utils.js +241 -0
- package/out/oml/oml-utils.js.map +1 -0
- package/out/oml/oml-validator.d.ts +49 -0
- package/out/oml/oml-validator.js +668 -0
- package/out/oml/oml-validator.js.map +1 -0
- package/out/oml/oml-workspace.d.ts +23 -0
- package/out/oml/oml-workspace.js +68 -0
- package/out/oml/oml-workspace.js.map +1 -0
- package/package.json +50 -0
- package/src/oml/generated/ast.ts +2641 -0
- package/src/oml/generated/grammar.ts +6887 -0
- package/src/oml/generated/module.ts +25 -0
- package/src/oml/index.ts +19 -0
- package/src/oml/oml-candidates.ts +176 -0
- package/src/oml/oml-code-actions.ts +120 -0
- package/src/oml/oml-completion.ts +222 -0
- package/src/oml/oml-converter.ts +66 -0
- package/src/oml/oml-document-validator.ts +39 -0
- package/src/oml/oml-document.ts +24 -0
- package/src/oml/oml-edit.ts +1292 -0
- package/src/oml/oml-formatter.ts +390 -0
- package/src/oml/oml-hover.ts +93 -0
- package/src/oml/oml-index-manager.ts +56 -0
- package/src/oml/oml-index.ts +145 -0
- package/src/oml/oml-module.ts +105 -0
- package/src/oml/oml-rename.ts +140 -0
- package/src/oml/oml-scope.ts +279 -0
- package/src/oml/oml-serializer.ts +1080 -0
- package/src/oml/oml-utils.ts +294 -0
- package/src/oml/oml-validator.ts +725 -0
- package/src/oml/oml-workspace.ts +81 -0
- package/src/oml/oml.langium +594 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
// Copyright (c) 2026 Modelware. All rights reserved.
|
|
2
|
+
/**
|
|
3
|
+
* OML Scope Provider
|
|
4
|
+
* Handles cross-file reference resolution, IRI abbreviation, and qualified name scoping
|
|
5
|
+
*
|
|
6
|
+
* Provides enhanced scope resolution for references across imported ontologies and abbreviated IRI names.
|
|
7
|
+
*/
|
|
8
|
+
import { AstUtils, DefaultScopeComputation, DefaultScopeProvider, EMPTY_SCOPE, URI, stream } from 'langium';
|
|
9
|
+
import { isOntology, isRelationBase, isRelationEntity } from './generated/ast.js';
|
|
10
|
+
import { getOntologyModelIndex } from './oml-index.js';
|
|
11
|
+
import { normalizeNamespace, } from './oml-utils.js';
|
|
12
|
+
export class OmlScopeComputation extends DefaultScopeComputation {
|
|
13
|
+
constructor(services) {
|
|
14
|
+
super(services);
|
|
15
|
+
}
|
|
16
|
+
async collectExportedSymbols(document, cancelToken) {
|
|
17
|
+
let exported;
|
|
18
|
+
try {
|
|
19
|
+
exported = await super.collectExportedSymbols(document, cancelToken);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
const root = document.parseResult?.value;
|
|
25
|
+
if (!root || !isOntology(root)) {
|
|
26
|
+
return exported;
|
|
27
|
+
}
|
|
28
|
+
const namespace = (root.namespace ?? '').toString().replace(/^<|>$/g, '').trim();
|
|
29
|
+
if (!namespace) {
|
|
30
|
+
return exported;
|
|
31
|
+
}
|
|
32
|
+
const exportedNames = new Set(exported.filter((desc) => desc.node === root).map((desc) => desc.name));
|
|
33
|
+
const rawName = `<${namespace}>`;
|
|
34
|
+
if (!exportedNames.has(rawName)) {
|
|
35
|
+
exported.push(this.descriptions.createDescription(root, rawName, document));
|
|
36
|
+
}
|
|
37
|
+
// Default Langium exports only the root and its direct children. OML also needs
|
|
38
|
+
// nested forward/reverse relations exported so workspace-wide completion and
|
|
39
|
+
// cross-document linking can resolve them as SemanticProperty references.
|
|
40
|
+
const nestedExportKeys = new Set(exported.map((desc) => `${desc.path}|${desc.name}`));
|
|
41
|
+
const statements = root.ownedStatements ?? [];
|
|
42
|
+
for (const statement of statements) {
|
|
43
|
+
if (!statement || typeof statement !== 'object') {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const forwardRelation = statement.forwardRelation;
|
|
47
|
+
if (forwardRelation?.name) {
|
|
48
|
+
const key = `${document.uri.toString()}#${forwardRelation.$cstNode?.offset ?? ''}|${forwardRelation.name}`;
|
|
49
|
+
if (!nestedExportKeys.has(key)) {
|
|
50
|
+
exported.push(this.descriptions.createDescription(forwardRelation, forwardRelation.name, document));
|
|
51
|
+
nestedExportKeys.add(key);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (isRelationBase(statement) && statement.reverseRelation?.name) {
|
|
55
|
+
const reverseRelation = statement.reverseRelation;
|
|
56
|
+
const key = `${document.uri.toString()}#${reverseRelation.$cstNode?.offset ?? ''}|${reverseRelation.name}`;
|
|
57
|
+
if (!nestedExportKeys.has(key)) {
|
|
58
|
+
exported.push(this.descriptions.createDescription(reverseRelation, reverseRelation.name, document));
|
|
59
|
+
nestedExportKeys.add(key);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return exported;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* OML-specific scope provider for resolving cross-document references.
|
|
68
|
+
*/
|
|
69
|
+
export class OmlScopeProvider extends DefaultScopeProvider {
|
|
70
|
+
constructor(services) {
|
|
71
|
+
super(services);
|
|
72
|
+
this.services = services;
|
|
73
|
+
}
|
|
74
|
+
getScope(context) {
|
|
75
|
+
let referenceType = '';
|
|
76
|
+
// Determine the expected reference type
|
|
77
|
+
try {
|
|
78
|
+
referenceType = this.reflection.getReferenceType(context);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return EMPTY_SCOPE;
|
|
82
|
+
}
|
|
83
|
+
const document = AstUtils.getDocument(context.container);
|
|
84
|
+
const localSymbols = document?.localSymbols;
|
|
85
|
+
// Linking should stay local/import-based. Workspace-global scope is only for ontology imports.
|
|
86
|
+
let result = referenceType === 'Ontology'
|
|
87
|
+
? this.getGlobalScope(referenceType, context)
|
|
88
|
+
: EMPTY_SCOPE;
|
|
89
|
+
// Add lexical local symbols (same behavior as DefaultScopeProvider, minus workspace-global fallback).
|
|
90
|
+
if (localSymbols) {
|
|
91
|
+
const scopes = [];
|
|
92
|
+
let currentNode = context.container;
|
|
93
|
+
do {
|
|
94
|
+
if (localSymbols.has(currentNode)) {
|
|
95
|
+
scopes.push(localSymbols.getStream(currentNode).filter((desc) => this.reflection.isSubtype(desc.type, referenceType)));
|
|
96
|
+
}
|
|
97
|
+
currentNode = currentNode.$container;
|
|
98
|
+
} while (currentNode);
|
|
99
|
+
for (let i = scopes.length - 1; i >= 0; i--) {
|
|
100
|
+
result = this.createScope(scopes[i], result);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Enhance with cross-document IRI abbreviations from imports
|
|
104
|
+
const ontology = document?.parseResult?.value;
|
|
105
|
+
if (ontology) {
|
|
106
|
+
result = this.addCurrentOntologyEntries(result, document, ontology);
|
|
107
|
+
result = this.addImportedOntologyEntries(result, ontology);
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
getExportedSymbols(ontology) {
|
|
112
|
+
const symbols = [];
|
|
113
|
+
const statements = ontology.ownedStatements || ontology.ownedMembers || [];
|
|
114
|
+
for (const statement of statements) {
|
|
115
|
+
if (!statement || typeof statement !== 'object') {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if ('name' in statement && statement.name) {
|
|
119
|
+
symbols.push({ node: statement, name: statement.name, relationAlias: false });
|
|
120
|
+
}
|
|
121
|
+
if (isRelationEntity(statement) && statement.forwardRelation?.name) {
|
|
122
|
+
symbols.push({
|
|
123
|
+
node: statement.forwardRelation,
|
|
124
|
+
name: statement.forwardRelation.name,
|
|
125
|
+
relationAlias: true
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
if (isRelationBase(statement) && statement.reverseRelation?.name) {
|
|
129
|
+
symbols.push({
|
|
130
|
+
node: statement.reverseRelation,
|
|
131
|
+
name: statement.reverseRelation.name,
|
|
132
|
+
relationAlias: true
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return symbols;
|
|
137
|
+
}
|
|
138
|
+
getImportNamespace(imp) {
|
|
139
|
+
// IMPORTANT: never dereference `imp.imported.ref` while building scopes,
|
|
140
|
+
// otherwise linking can recursively try to resolve the same import.
|
|
141
|
+
const raw = imp.imported?.$refText
|
|
142
|
+
?? imp?.imported
|
|
143
|
+
?? '';
|
|
144
|
+
return typeof raw === 'string' ? raw.replace(/^<|>$/g, '') : '';
|
|
145
|
+
}
|
|
146
|
+
resolveOntologyDocument(modelUri) {
|
|
147
|
+
const document = this.services.shared.workspace.LangiumDocuments.getDocument(URI.parse(modelUri));
|
|
148
|
+
if (!document) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
const root = document.parseResult?.value;
|
|
152
|
+
if (!root || !isOntology(root)) {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
const namespace = (root.namespace ?? '').toString().replace(/^<|>$/g, '');
|
|
156
|
+
if (!namespace) {
|
|
157
|
+
return undefined;
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
document,
|
|
161
|
+
ontology: root,
|
|
162
|
+
namespace
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
findOntologyByNamespace(normalizedNamespace) {
|
|
166
|
+
const index = getOntologyModelIndex(this.services.shared);
|
|
167
|
+
const modelUri = index.resolveModelUri(normalizedNamespace);
|
|
168
|
+
return modelUri ? this.resolveOntologyDocument(modelUri) : undefined;
|
|
169
|
+
}
|
|
170
|
+
resolveImports(ontology) {
|
|
171
|
+
const imports = (ontology.ownedImports ?? []);
|
|
172
|
+
const resolved = [];
|
|
173
|
+
for (const imp of imports) {
|
|
174
|
+
const ns = this.getImportNamespace(imp);
|
|
175
|
+
const normalized = normalizeNamespace(ns);
|
|
176
|
+
if (!normalized) {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
const target = this.findOntologyByNamespace(normalized);
|
|
180
|
+
if (!target) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
resolved.push({ prefix: imp.prefix, target });
|
|
184
|
+
}
|
|
185
|
+
return resolved;
|
|
186
|
+
}
|
|
187
|
+
addDescription(scope, node, name, document) {
|
|
188
|
+
try {
|
|
189
|
+
const desc = this.descriptions.createDescription(node, name, document);
|
|
190
|
+
return this.createScope(stream([desc]), scope);
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return scope;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
addCurrentOntologyEntries(scope, document, ontology) {
|
|
197
|
+
let result = scope;
|
|
198
|
+
const prefix = ontology.prefix;
|
|
199
|
+
for (const symbol of this.getExportedSymbols(ontology)) {
|
|
200
|
+
if (prefix) {
|
|
201
|
+
result = this.addDescription(result, symbol.node, `${prefix}:${symbol.name}`, document);
|
|
202
|
+
}
|
|
203
|
+
if (symbol.relationAlias) {
|
|
204
|
+
result = this.addDescription(result, symbol.node, symbol.name, document);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
addImportedOntologyEntries(scope, current) {
|
|
210
|
+
let result = scope;
|
|
211
|
+
for (const resolvedImport of this.resolveImports(current)) {
|
|
212
|
+
const imported = resolvedImport.target;
|
|
213
|
+
const importedSymbols = this.getExportedSymbols(imported.ontology);
|
|
214
|
+
for (const symbol of importedSymbols) {
|
|
215
|
+
if (resolvedImport.prefix) {
|
|
216
|
+
result = this.addDescription(result, symbol.node, `${resolvedImport.prefix}:${symbol.name}`, imported.document);
|
|
217
|
+
}
|
|
218
|
+
const separator = imported.namespace.endsWith('#') || imported.namespace.endsWith('/') ? '' : '#';
|
|
219
|
+
result = this.addDescription(result, symbol.node, `<${imported.namespace}${separator}${symbol.name}>`, imported.document);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return result;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=oml-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oml-scope.js","sourceRoot":"","sources":["../../src/oml/oml-scope.ts"],"names":[],"mappings":"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"}
|