@hydranium/core 1.0.0-next.346 → 1.0.0-next.348
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/lib/langium/scope/hydranium-scope-provider.d.ts +29 -13
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +49 -16
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
- package/lib/langium/scope/scope-extension-service.d.ts +36 -8
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
- package/lib/langium/scope/scope-extension-service.js +54 -9
- package/lib/langium/scope/scope-extension-service.js.map +1 -1
- package/lib/langium/serialization/yaml-serializer.d.ts +8 -0
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/yaml-serializer.js +20 -4
- package/lib/langium/serialization/yaml-serializer.js.map +1 -1
- package/package.json +5 -5
- package/src/langium/scope/hydranium-scope-provider.ts +57 -17
- package/src/langium/scope/scope-extension-service.ts +92 -15
- package/src/langium/serialization/yaml-serializer.ts +22 -4
|
@@ -12,7 +12,7 @@ import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
|
12
12
|
import { type HydraniumLanguageServices } from '../language-module.js';
|
|
13
13
|
import { type NameProvider } from '../naming/name-provider.js';
|
|
14
14
|
import { type HydraniumDocumentRegistry } from '../workspace/langium-documents.js';
|
|
15
|
-
import { type ScopeExtensionService } from './scope-extension-service.js';
|
|
15
|
+
import { type ScopeExtensionDescriptions, type ScopeExtensionService } from './scope-extension-service.js';
|
|
16
16
|
import { type TieredAstNodeDescription } from './scoped-ast-node-description.js';
|
|
17
17
|
/**
|
|
18
18
|
* Construction-time options for {@link HydraniumScopeProvider}. Extends
|
|
@@ -65,7 +65,7 @@ export interface ScopeContext {
|
|
|
65
65
|
/**
|
|
66
66
|
* Per-language scope provider that owns the full scope chain in ONE
|
|
67
67
|
* class. Bridges the protocol-layer {@link ReferenceContext} to
|
|
68
|
-
* Langium's {@link ReferenceInfo}, layers
|
|
68
|
+
* Langium's {@link ReferenceInfo}, layers scope-extension
|
|
69
69
|
* contributions ({@link ScopeExtensionService}) at their declared tier,
|
|
70
70
|
* and composes the cached project-tier chain (own-project → dependency
|
|
71
71
|
* → universal) on top of Langium's unfiltered global index.
|
|
@@ -74,9 +74,9 @@ export interface ScopeContext {
|
|
|
74
74
|
*
|
|
75
75
|
* ```
|
|
76
76
|
* document-local (Langium precomputed) [getScope, CACHED per build in localScope]
|
|
77
|
-
* extension:local [layerLocalExtension, per
|
|
77
|
+
* extension:local [layerLocalExtension, CACHED per descriptions]
|
|
78
78
|
* own-project → dependency → universal-index [createGlobalScope default, CACHED per ${project}::${refType}]
|
|
79
|
-
* extension:universal [layerUniversalExtension, per
|
|
79
|
+
* extension:universal [layerUniversalExtension, CACHED per descriptions, outermost]
|
|
80
80
|
* ```
|
|
81
81
|
*
|
|
82
82
|
* Implementation: {@link getScope} layers document-local on top of
|
|
@@ -145,6 +145,12 @@ export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
145
145
|
* document replaces.
|
|
146
146
|
*/
|
|
147
147
|
protected readonly nodeScopes: WeakMap<LocalSymbols, WeakMap<readonly AstNode[], Scope>>;
|
|
148
|
+
/**
|
|
149
|
+
* The scope of each scope extension's descriptions of one tier, keyed by
|
|
150
|
+
* the array: an extension with a cache key answers every reference of that
|
|
151
|
+
* key with the same one.
|
|
152
|
+
*/
|
|
153
|
+
protected readonly extensionScopes: WeakMap<readonly TieredAstNodeDescription[], Scope>;
|
|
148
154
|
protected readonly tracer: Tracer;
|
|
149
155
|
/**
|
|
150
156
|
* Narrows the inherited Langium {@link NameProvider} field to the framework's
|
|
@@ -224,18 +230,28 @@ export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
224
230
|
*/
|
|
225
231
|
protected createGlobalScope(referenceType: string, context: ReferenceInfo): Scope;
|
|
226
232
|
/**
|
|
227
|
-
* Layer
|
|
228
|
-
*
|
|
229
|
-
* are none.
|
|
233
|
+
* Layer each scope extension's `local`-tier descriptions on top of `inner`,
|
|
234
|
+
* an earlier extension's above a later one's, through {@link extensionScope}.
|
|
235
|
+
* Returns `inner` unchanged when there are none.
|
|
236
|
+
*/
|
|
237
|
+
protected layerLocalExtension(extensions: readonly ScopeExtensionDescriptions[], inner: Scope, _referenceType: string, _context: ReferenceInfo): Scope;
|
|
238
|
+
/**
|
|
239
|
+
* Layer each scope extension's `universal`-tier descriptions below `inner`,
|
|
240
|
+
* which shadows them, an earlier extension's above a later one's, through
|
|
241
|
+
* {@link extensionScope}. Returns `inner` unchanged when there are none.
|
|
242
|
+
*/
|
|
243
|
+
protected layerUniversalExtension(extensions: readonly ScopeExtensionDescriptions[], inner: Scope, _referenceType: string, _context: ReferenceInfo): Scope;
|
|
244
|
+
/**
|
|
245
|
+
* Chain the scope of each non-empty array above `outer`, an earlier array's
|
|
246
|
+
* above a later one's; `undefined` when there is neither.
|
|
230
247
|
*/
|
|
231
|
-
protected
|
|
248
|
+
protected chainExtensionScopes(tiers: ReadonlyArray<readonly TieredAstNodeDescription[]>, outer?: Scope): Scope | undefined;
|
|
232
249
|
/**
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
* unchanged when there are none.
|
|
250
|
+
* The scope of one extension's descriptions of one tier, through
|
|
251
|
+
* {@link createScope}, built once per array and shared by every reference
|
|
252
|
+
* it answers, so an override of `createScope` sees no reference context.
|
|
237
253
|
*/
|
|
238
|
-
protected
|
|
254
|
+
protected extensionScope(descriptions: readonly TieredAstNodeDescription[]): Scope;
|
|
239
255
|
/**
|
|
240
256
|
* Project-tier scope filter. Given a source URI and a global scope,
|
|
241
257
|
* returns the subset of descriptions whose owning project is visible
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydranium-scope-provider.d.ts","sourceRoot":"","sources":["../../../src/langium/scope/hydranium-scope-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EAKtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACJ,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAEnB,oBAAoB,EACpB,KAAK,YAAY,EAGjB,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,KAAK,GAAG,EAER,cAAc,EAEhB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAEnF,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"hydranium-scope-provider.d.ts","sourceRoot":"","sources":["../../../src/langium/scope/hydranium-scope-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ import { isTieredDescription } from './scoped-ast-node-description.js';
|
|
|
14
14
|
/**
|
|
15
15
|
* Per-language scope provider that owns the full scope chain in ONE
|
|
16
16
|
* class. Bridges the protocol-layer {@link ReferenceContext} to
|
|
17
|
-
* Langium's {@link ReferenceInfo}, layers
|
|
17
|
+
* Langium's {@link ReferenceInfo}, layers scope-extension
|
|
18
18
|
* contributions ({@link ScopeExtensionService}) at their declared tier,
|
|
19
19
|
* and composes the cached project-tier chain (own-project → dependency
|
|
20
20
|
* → universal) on top of Langium's unfiltered global index.
|
|
@@ -23,9 +23,9 @@ import { isTieredDescription } from './scoped-ast-node-description.js';
|
|
|
23
23
|
*
|
|
24
24
|
* ```
|
|
25
25
|
* document-local (Langium precomputed) [getScope, CACHED per build in localScope]
|
|
26
|
-
* extension:local [layerLocalExtension, per
|
|
26
|
+
* extension:local [layerLocalExtension, CACHED per descriptions]
|
|
27
27
|
* own-project → dependency → universal-index [createGlobalScope default, CACHED per ${project}::${refType}]
|
|
28
|
-
* extension:universal [layerUniversalExtension, per
|
|
28
|
+
* extension:universal [layerUniversalExtension, CACHED per descriptions, outermost]
|
|
29
29
|
* ```
|
|
30
30
|
*
|
|
31
31
|
* Implementation: {@link getScope} layers document-local on top of
|
|
@@ -94,6 +94,12 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
94
94
|
* document replaces.
|
|
95
95
|
*/
|
|
96
96
|
nodeScopes = new WeakMap();
|
|
97
|
+
/**
|
|
98
|
+
* The scope of each scope extension's descriptions of one tier, keyed by
|
|
99
|
+
* the array: an extension with a cache key answers every reference of that
|
|
100
|
+
* key with the same one.
|
|
101
|
+
*/
|
|
102
|
+
extensionScopes = new WeakMap();
|
|
97
103
|
tracer;
|
|
98
104
|
constructor(services, options = {}) {
|
|
99
105
|
super(services);
|
|
@@ -190,8 +196,8 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
190
196
|
getGlobalScope(referenceType, context) {
|
|
191
197
|
const projectChain = this.createGlobalScope(referenceType, context);
|
|
192
198
|
const extensions = this.scopeExtensionService.getDescriptions(referenceType, context.container);
|
|
193
|
-
const withUniversal = this.layerUniversalExtension(extensions
|
|
194
|
-
return this.layerLocalExtension(extensions
|
|
199
|
+
const withUniversal = this.layerUniversalExtension(extensions, projectChain, referenceType, context);
|
|
200
|
+
return this.layerLocalExtension(extensions, withUniversal, referenceType, context);
|
|
195
201
|
}
|
|
196
202
|
/**
|
|
197
203
|
* The SINGLE adopter-overridable level of the project/global scope.
|
|
@@ -224,21 +230,48 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
224
230
|
return this.getProjectScope(sourceUri, langiumGlobal, referenceType);
|
|
225
231
|
}
|
|
226
232
|
/**
|
|
227
|
-
* Layer
|
|
228
|
-
*
|
|
229
|
-
* are none.
|
|
233
|
+
* Layer each scope extension's `local`-tier descriptions on top of `inner`,
|
|
234
|
+
* an earlier extension's above a later one's, through {@link extensionScope}.
|
|
235
|
+
* Returns `inner` unchanged when there are none.
|
|
236
|
+
*/
|
|
237
|
+
layerLocalExtension(extensions, inner, _referenceType, _context) {
|
|
238
|
+
return (this.chainExtensionScopes(extensions.map(extension => extension.local), inner) ?? inner);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Layer each scope extension's `universal`-tier descriptions below `inner`,
|
|
242
|
+
* which shadows them, an earlier extension's above a later one's, through
|
|
243
|
+
* {@link extensionScope}. Returns `inner` unchanged when there are none.
|
|
244
|
+
*/
|
|
245
|
+
layerUniversalExtension(extensions, inner, _referenceType, _context) {
|
|
246
|
+
const below = this.chainExtensionScopes(extensions.map(extension => extension.universal));
|
|
247
|
+
return below ? new FallbackScope(inner, below) : inner;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Chain the scope of each non-empty array above `outer`, an earlier array's
|
|
251
|
+
* above a later one's; `undefined` when there is neither.
|
|
230
252
|
*/
|
|
231
|
-
|
|
232
|
-
|
|
253
|
+
chainExtensionScopes(tiers, outer) {
|
|
254
|
+
let result = outer;
|
|
255
|
+
for (let i = tiers.length - 1; i >= 0; i--) {
|
|
256
|
+
if (tiers[i].length > 0) {
|
|
257
|
+
const scope = this.extensionScope(tiers[i]);
|
|
258
|
+
result = result ? new FallbackScope(scope, result) : scope;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return result;
|
|
233
262
|
}
|
|
234
263
|
/**
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
*
|
|
238
|
-
* unchanged when there are none.
|
|
264
|
+
* The scope of one extension's descriptions of one tier, through
|
|
265
|
+
* {@link createScope}, built once per array and shared by every reference
|
|
266
|
+
* it answers, so an override of `createScope` sees no reference context.
|
|
239
267
|
*/
|
|
240
|
-
|
|
241
|
-
|
|
268
|
+
extensionScope(descriptions) {
|
|
269
|
+
let scope = this.extensionScopes.get(descriptions);
|
|
270
|
+
if (scope === undefined) {
|
|
271
|
+
scope = this.createScope(descriptions);
|
|
272
|
+
this.extensionScopes.set(descriptions, scope);
|
|
273
|
+
}
|
|
274
|
+
return scope;
|
|
242
275
|
}
|
|
243
276
|
/**
|
|
244
277
|
* Project-tier scope filter. Given a source URI and a global scope,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydranium-scope-provider.js","sourceRoot":"","sources":["../../../src/langium/scope/hydranium-scope-provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hydranium-scope-provider.js","sourceRoot":"","sources":["../../../src/langium/scope/hydranium-scope-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { type AstNode, type LangiumDocument } from '@hydranium/langium';
|
|
9
|
+
import { type AstNode, DocumentCache, type LangiumDocument } from '@hydranium/langium';
|
|
10
10
|
import { type Disposable } from 'vscode-languageserver';
|
|
11
11
|
import { type ProfileRecord, type ProfileSession, type Tracer } from '@hydranium/protocol';
|
|
12
12
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
@@ -76,8 +76,23 @@ export interface ScopeExtension extends RegistryItem {
|
|
|
76
76
|
* build the data up-front and hand a sync acceptor here.
|
|
77
77
|
*/
|
|
78
78
|
addDescriptions(context: AstNode, referenceType: string, document: LangiumDocument, accept: ScopeDescriptionAcceptor): void;
|
|
79
|
+
/**
|
|
80
|
+
* The node the descriptions for `context` belong to, so that while the
|
|
81
|
+
* referencing document is being linked, they, and the scope made of them,
|
|
82
|
+
* are built once per node rather than once per reference: a reference with
|
|
83
|
+
* the same node is answered with the first one's descriptions. Without it, for
|
|
84
|
+
* `undefined`, outside a link, such as a completion request, or for a
|
|
85
|
+
* `context` outside a built document, such as an operation's working copy,
|
|
86
|
+
* {@link addDescriptions} runs for every reference.
|
|
87
|
+
*
|
|
88
|
+
* The descriptions must depend on the node and `referenceType` alone. What
|
|
89
|
+
* they read through the node may come from another document: each link
|
|
90
|
+
* builds them afresh. A change made during one link, in place, is not seen
|
|
91
|
+
* until the next.
|
|
92
|
+
*/
|
|
93
|
+
cacheKey?(context: AstNode, referenceType: string): AstNode | undefined;
|
|
79
94
|
}
|
|
80
|
-
/**
|
|
95
|
+
/** One scope extension's descriptions for a reference, split by tier. */
|
|
81
96
|
export interface ScopeExtensionDescriptions {
|
|
82
97
|
readonly local: readonly TieredAstNodeDescription[];
|
|
83
98
|
readonly universal: readonly TieredAstNodeDescription[];
|
|
@@ -90,12 +105,14 @@ export interface ScopeExtensionDescriptions {
|
|
|
90
105
|
*/
|
|
91
106
|
export interface ScopeExtensionService extends ScopeExtensionRegistry {
|
|
92
107
|
/**
|
|
93
|
-
*
|
|
94
|
-
* `context`,
|
|
95
|
-
*
|
|
96
|
-
*
|
|
108
|
+
* The descriptions of each extension registered for `referenceType` that
|
|
109
|
+
* contributes to `context`, in registration order. An extension's entry is
|
|
110
|
+
* the same object for every reference of one {@link ScopeExtension.cacheKey},
|
|
111
|
+
* so a caller can key what it builds of it by identity. A caller that needs
|
|
112
|
+
* both tiers takes them from one call: a call per tier runs every extension
|
|
113
|
+
* twice.
|
|
97
114
|
*/
|
|
98
|
-
getDescriptions(referenceType: string, context: AstNode): ScopeExtensionDescriptions;
|
|
115
|
+
getDescriptions(referenceType: string, context: AstNode): readonly ScopeExtensionDescriptions[];
|
|
99
116
|
}
|
|
100
117
|
export type ScopeExtensionServiceOptions = LogNameOptions;
|
|
101
118
|
/**
|
|
@@ -121,6 +138,13 @@ export declare class DefaultScopeExtensionService implements ScopeExtensionServi
|
|
|
121
138
|
protected readonly tracer: Tracer;
|
|
122
139
|
/** Open from the first profiled call until {@link reportProfile}. */
|
|
123
140
|
protected profileSession?: ProfileSession;
|
|
141
|
+
/**
|
|
142
|
+
* Per referencing document, key node, extension and reference type, the
|
|
143
|
+
* descriptions answered during that document's link, dropped when it ends,
|
|
144
|
+
* when a build starts and right before its link. Absent without a document
|
|
145
|
+
* builder, which leaves every extension uncached.
|
|
146
|
+
*/
|
|
147
|
+
protected readonly kept?: DocumentCache<AstNode, Map<ScopeExtension, Map<string, ScopeExtensionDescriptions>>>;
|
|
124
148
|
constructor(services: ServerLanguageServices, options?: ScopeExtensionServiceOptions);
|
|
125
149
|
/**
|
|
126
150
|
* Register a single scope extension. Doubles as the imperative low-level
|
|
@@ -133,7 +157,11 @@ export declare class DefaultScopeExtensionService implements ScopeExtensionServi
|
|
|
133
157
|
* Holds the profile wrap, which an override would have to copy; to change
|
|
134
158
|
* which extensions run, override {@link extensionsFor}.
|
|
135
159
|
*/
|
|
136
|
-
getDescriptions(referenceType: string, context: AstNode): ScopeExtensionDescriptions;
|
|
160
|
+
getDescriptions(referenceType: string, context: AstNode): readonly ScopeExtensionDescriptions[];
|
|
161
|
+
/** The descriptions kept for `node` in `document`, built through `build` when there are none. */
|
|
162
|
+
protected keptDescriptions(document: LangiumDocument, node: AstNode, extension: ScopeExtension, referenceType: string, build: () => ScopeExtensionDescriptions): ScopeExtensionDescriptions;
|
|
163
|
+
/** Run `extension` against `context`, inside the profile session at `debug`. */
|
|
164
|
+
protected runExtension(extension: ScopeExtension, referenceType: string, context: AstNode, document: LangiumDocument): ScopeExtensionDescriptions;
|
|
137
165
|
/** The extensions that run for one reference: by default, those registered for `referenceType`. */
|
|
138
166
|
protected extensionsFor(referenceType: string, _context: AstNode): ScopeExtension[];
|
|
139
167
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-extension-service.d.ts","sourceRoot":"","sources":["../../../src/langium/scope/scope-extension-service.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"scope-extension-service.d.ts","sourceRoot":"","sources":["../../../src/langium/scope/scope-extension-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { AstUtils } from '@hydranium/langium';
|
|
9
|
+
import { AstUtils, DocumentCache, DocumentState } from '@hydranium/langium';
|
|
10
10
|
import { Format, Logger } from '@hydranium/protocol';
|
|
11
11
|
import { Registry } from '../../util/registry.js';
|
|
12
12
|
/** Build a {@link ScopeDescriptionAcceptor} that synthesises typed descriptions via `descriptions` and accumulates them into `into`. */
|
|
@@ -17,7 +17,7 @@ function createScopeDescriptionAcceptor(into, descriptions) {
|
|
|
17
17
|
push: description => into.push(description)
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
const NO_DESCRIPTIONS =
|
|
20
|
+
const NO_DESCRIPTIONS = [];
|
|
21
21
|
/**
|
|
22
22
|
* Default {@link ScopeExtensionService} implementation. Per-language
|
|
23
23
|
* registry for dynamic scope contributions: extra resolvable descriptions
|
|
@@ -41,6 +41,13 @@ export class DefaultScopeExtensionService {
|
|
|
41
41
|
tracer;
|
|
42
42
|
/** Open from the first profiled call until {@link reportProfile}. */
|
|
43
43
|
profileSession;
|
|
44
|
+
/**
|
|
45
|
+
* Per referencing document, key node, extension and reference type, the
|
|
46
|
+
* descriptions answered during that document's link, dropped when it ends,
|
|
47
|
+
* when a build starts and right before its link. Absent without a document
|
|
48
|
+
* builder, which leaves every extension uncached.
|
|
49
|
+
*/
|
|
50
|
+
kept;
|
|
44
51
|
constructor(services, options = {}) {
|
|
45
52
|
this.services = services;
|
|
46
53
|
this.tracer = services.shared.Tracer.for(options.logName ?? 'ScopeExtension').trace('instantiated');
|
|
@@ -56,6 +63,12 @@ export class DefaultScopeExtensionService {
|
|
|
56
63
|
const builder = services.shared.workspace.DocumentBuilder;
|
|
57
64
|
builder?.onUpdate(() => this.reportProfile());
|
|
58
65
|
builder?.onBuildEnded(() => this.reportProfile());
|
|
66
|
+
// Dropped once the document is linked, and all of it when a build starts and
|
|
67
|
+
// again right before its link, so neither a lookup made after the build starts
|
|
68
|
+
// nor a link a cancelled build left unfinished answers this link.
|
|
69
|
+
this.kept = builder ? new DocumentCache(services.shared, DocumentState.Linked) : undefined;
|
|
70
|
+
builder?.onUpdate(() => this.kept?.clear());
|
|
71
|
+
builder?.onBuildPhase(DocumentState.ComputedScopes, () => this.kept?.clear());
|
|
59
72
|
}
|
|
60
73
|
/**
|
|
61
74
|
* Register a single scope extension. Doubles as the imperative low-level
|
|
@@ -76,16 +89,48 @@ export class DefaultScopeExtensionService {
|
|
|
76
89
|
return NO_DESCRIPTIONS;
|
|
77
90
|
}
|
|
78
91
|
const document = AstUtils.getDocument(context);
|
|
92
|
+
// Only while the document is being linked: nothing tells a cache that a relink is about to start.
|
|
93
|
+
const linking = document.state < DocumentState.Linked && AstUtils.findRootNode(context) === document.parseResult.value;
|
|
94
|
+
const answered = [];
|
|
95
|
+
for (const extension of extensionsForType) {
|
|
96
|
+
const node = linking ? extension.cacheKey?.(context, referenceType) : undefined;
|
|
97
|
+
const descriptions = node
|
|
98
|
+
? this.keptDescriptions(document, node, extension, referenceType, () => this.runExtension(extension, referenceType, context, document))
|
|
99
|
+
: this.runExtension(extension, referenceType, context, document);
|
|
100
|
+
if (descriptions.local.length > 0 || descriptions.universal.length > 0) {
|
|
101
|
+
answered.push(descriptions);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return answered;
|
|
105
|
+
}
|
|
106
|
+
/** The descriptions kept for `node` in `document`, built through `build` when there are none. */
|
|
107
|
+
keptDescriptions(document, node, extension, referenceType, build) {
|
|
108
|
+
const byExtension = this.kept?.get(document.uri, node, () => new Map());
|
|
109
|
+
if (byExtension === undefined) {
|
|
110
|
+
return build();
|
|
111
|
+
}
|
|
112
|
+
let byType = byExtension.get(extension);
|
|
113
|
+
if (byType === undefined) {
|
|
114
|
+
byType = new Map();
|
|
115
|
+
byExtension.set(extension, byType);
|
|
116
|
+
}
|
|
117
|
+
let descriptions = byType.get(referenceType);
|
|
118
|
+
if (descriptions === undefined) {
|
|
119
|
+
descriptions = build();
|
|
120
|
+
byType.set(referenceType, descriptions);
|
|
121
|
+
}
|
|
122
|
+
return descriptions;
|
|
123
|
+
}
|
|
124
|
+
/** Run `extension` against `context`, inside the profile session at `debug`. */
|
|
125
|
+
runExtension(extension, referenceType, context, document) {
|
|
79
126
|
const collected = [];
|
|
80
127
|
const accept = createScopeDescriptionAcceptor(collected, this.services.workspace.AstNodeDescriptionProvider);
|
|
81
128
|
const session = Logger.isLevelEnabled('debug') ? (this.profileSession ??= this.tracer.profile('scope-extension')) : undefined;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
extension.addDescriptions(context, referenceType, document, accept);
|
|
88
|
-
}
|
|
129
|
+
if (session) {
|
|
130
|
+
session.scope(extension.id, () => extension.addDescriptions(context, referenceType, document, accept));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
extension.addDescriptions(context, referenceType, document, accept);
|
|
89
134
|
}
|
|
90
135
|
return {
|
|
91
136
|
local: collected.filter(description => description.tier === 'local'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-extension-service.js","sourceRoot":"","sources":["../../../src/langium/scope/scope-extension-service.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAgB,QAAQ,EAAwB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"scope-extension-service.js","sourceRoot":"","sources":["../../../src/langium/scope/scope-extension-service.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAgB,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAEhH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAwD,MAAM,qBAAqB,CAAC;AAG3G,OAAO,EAAE,QAAQ,EAAqB,MAAM,wBAAwB,CAAC;AA0CrE,wIAAwI;AACxI,SAAS,8BAA8B,CACpC,IAAgC,EAChC,YAAiD;IAEjD,OAAO;QACJ,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC9D,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtE,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;KAC7C,CAAC;AACL,CAAC;AA+DD,MAAM,eAAe,GAA0C,EAAE,CAAC;AAElE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,4BAA4B;IAchB,QAAQ;IAbX,eAAe,GAAG,IAAI,QAAQ,EAAkB,CAAC;IACjD,MAAM,CAAS;IAClC,qEAAqE;IAC3D,cAAc,CAAkB;IAC1C;;;;;OAKG;IACgB,IAAI,CAAwF;IAE/G,YACsB,QAAgC,EACnD,OAAO,GAAiC,EAAE;wBADvB,QAAQ;QAG3B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEpG,oEAAoE;QACpE,2EAA2E;QAC3E,gEAAgE;QAChE,oEAAoE;QACpE,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,CAAC;QACxD,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YACvD,YAAY,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,kEAAkE;QAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC;QAC1D,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC9C,OAAO,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAClD,6EAA6E;QAC7E,+EAA+E;QAC/E,kEAAkE;QAClE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjF,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,SAAyB;QAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,aAAqB,EAAE,OAAgB;QACpD,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACrE,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,eAAe,CAAC;QAC1B,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC/C,kGAAkG;QAClG,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC;QACvH,MAAM,QAAQ,GAAiC,EAAE,CAAC;QAClD,KAAK,MAAM,SAAS,IAAI,iBAAiB,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,MAAM,YAAY,GAAG,IAAI;gBACtB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,CAClE,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,CAChE;gBACH,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACpE,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/B,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IACnB,CAAC;IAED,iGAAiG;IACvF,gBAAgB,CACvB,QAAyB,EACzB,IAAa,EACb,SAAyB,EACzB,aAAqB,EACrB,KAAuC;QAEvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACxE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,KAAK,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACnB,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC9B,YAAY,GAAG,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,YAAY,CAAC;IACvB,CAAC;IAED,gFAAgF;IACtE,YAAY,CACnB,SAAyB,EACzB,aAAqB,EACrB,OAAgB,EAChB,QAAyB;QAEzB,MAAM,SAAS,GAA+B,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,8BAA8B,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAC7G,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9H,IAAI,OAAO,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1G,CAAC;aAAM,CAAC;YACL,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC;QACD,OAAO;YACJ,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,OAAO,CAAC;YACpE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC;SAC9E,CAAC;IACL,CAAC;IAED,mGAAmG;IACzF,aAAa,CAAC,aAAqB,EAAE,QAAiB;QAC7D,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED;;;;;OAKG;IACO,aAAa;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACO,mBAAmB,CAAC,MAAqB;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC;QAC3D,OAAO,4BAA4B,QAAQ,KAAK,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IACjH,CAAC;CACH"}
|
|
@@ -148,6 +148,14 @@ export declare class YamlSerializer<TAst extends AstNode = AstNode, TTransfer ex
|
|
|
148
148
|
/** Same sync-or-async tail pattern as {@link collectNodeLines}, for array elements. */
|
|
149
149
|
protected collectArrayLines(items: unknown[], nodeType: string, key: string, indentationLevel: number, lines: string[], startIndex: number): MaybePromise<string>;
|
|
150
150
|
protected pushArrayLine(serialized: string | undefined, indentationLevel: number, lines: string[]): void;
|
|
151
|
+
/**
|
|
152
|
+
* Level an array item's properties sit at: the first level at least four columns
|
|
153
|
+
* right of the array's key, so `- ` fits under the key and every property of the
|
|
154
|
+
* item starts at one column. Columns count {@link indentationChar} as one.
|
|
155
|
+
*/
|
|
156
|
+
protected arrayItemLevel(indentationLevel: number): number;
|
|
157
|
+
/** Prefix an array item with `- `, placed so the item's content starts at {@link arrayItemLevel}. */
|
|
158
|
+
protected arrayItemLine(text: string, indentationLevel: number): string;
|
|
151
159
|
/**
|
|
152
160
|
* YAML emits grammar-declared unquoted terminals (cardinality keywords,
|
|
153
161
|
* type literals) as bare strings rather than quoting them. The decision is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-serializer.d.ts","sourceRoot":"","sources":["../../../src/langium/serialization/yaml-serializer.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAiB,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE9F;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACrE;;;;;OAKG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClD;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrD;;;;;OAKG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrD;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC;;;;;;;;OAQG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,cAAc,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO,EAAE,SAAS,SAAS,eAAe,GAAG,eAAe,CAAE,SAAQ,kBAAkB,CACxI,IAAI,EACJ,SAAS,CACX;IACE,yDAAyD;IACzD,MAAM,CAAC,QAAQ,CAAC,oBAAoB,QAAQ;IAC5C,6DAA6D;IAC7D,MAAM,CAAC,QAAQ,CAAC,wBAAwB,OAAO;IAC/C,+DAA+D;IAC/D,MAAM,CAAC,QAAQ,CAAC,0BAA0B,KAAK;IAC/C,2FAA2F;IAC3F,MAAM,CAAC,QAAQ,CAAC,8BAA8B,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAExF,iGAAiG;IACjG,mBAA2B,OAAO,EAAE,qBAAqB,CAAC;IAE1D,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IACvC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAC3C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErE,YAAY,QAAQ,EAAE,yBAAyB,EAAE,OAAO,GAAE,qBAA0B,
|
|
1
|
+
{"version":3,"file":"yaml-serializer.d.ts","sourceRoot":"","sources":["../../../src/langium/serialization/yaml-serializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,9 @@ export class YamlSerializer extends AbstractSerializer {
|
|
|
46
46
|
this.newlineChar = options.newlineChar ?? YamlSerializer.DEFAULT_NEWLINE_CHAR;
|
|
47
47
|
this.indentationChar = options.indentationChar ?? YamlSerializer.DEFAULT_INDENTATION_CHAR;
|
|
48
48
|
this.indentationAmount = options.indentationAmount ?? YamlSerializer.DEFAULT_INDENTATION_AMOUNT;
|
|
49
|
+
if (!Number.isInteger(this.indentationAmount) || this.indentationAmount < 1) {
|
|
50
|
+
throw new Error(`[hydranium] YamlSerializer indentationAmount must be a positive integer, got ${this.indentationAmount}.`);
|
|
51
|
+
}
|
|
49
52
|
this.typeSpecificKeywords = options.typeSpecificKeywords ?? YamlSerializer.DEFAULT_TYPE_SPECIFIC_KEYWORDS;
|
|
50
53
|
}
|
|
51
54
|
/**
|
|
@@ -159,11 +162,11 @@ export class YamlSerializer extends AbstractSerializer {
|
|
|
159
162
|
if (isPromiseLike(maybe)) {
|
|
160
163
|
const resumeAt = i + 1;
|
|
161
164
|
return maybe.then(formatted => {
|
|
162
|
-
lines.push(this.
|
|
165
|
+
lines.push(this.arrayItemLine(formatted, indentationLevel));
|
|
163
166
|
return this.collectReferenceArrayLines(items, indentationLevel, lines, resumeAt);
|
|
164
167
|
});
|
|
165
168
|
}
|
|
166
|
-
lines.push(this.
|
|
169
|
+
lines.push(this.arrayItemLine(maybe, indentationLevel));
|
|
167
170
|
}
|
|
168
171
|
return lines.join(this.newlineChar);
|
|
169
172
|
}
|
|
@@ -178,7 +181,7 @@ export class YamlSerializer extends AbstractSerializer {
|
|
|
178
181
|
if (item === undefined) {
|
|
179
182
|
continue;
|
|
180
183
|
}
|
|
181
|
-
const maybe = this.serializePropertyValue(nodeType, key, item, indentationLevel, /* isArrayElement */ true);
|
|
184
|
+
const maybe = this.serializePropertyValue(nodeType, key, item, this.arrayItemLevel(indentationLevel), /* isArrayElement */ true);
|
|
182
185
|
if (isPromiseLike(maybe)) {
|
|
183
186
|
const resumeAt = i + 1;
|
|
184
187
|
return maybe.then(serialized => {
|
|
@@ -194,7 +197,20 @@ export class YamlSerializer extends AbstractSerializer {
|
|
|
194
197
|
if (serialized === undefined) {
|
|
195
198
|
return;
|
|
196
199
|
}
|
|
197
|
-
lines.push(this.
|
|
200
|
+
lines.push(this.arrayItemLine(serialized, indentationLevel));
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Level an array item's properties sit at: the first level at least four columns
|
|
204
|
+
* right of the array's key, so `- ` fits under the key and every property of the
|
|
205
|
+
* item starts at one column. Columns count {@link indentationChar} as one.
|
|
206
|
+
*/
|
|
207
|
+
arrayItemLevel(indentationLevel) {
|
|
208
|
+
return indentationLevel - 1 + Math.ceil(4 / this.indentationAmount);
|
|
209
|
+
}
|
|
210
|
+
/** Prefix an array item with `- `, placed so the item's content starts at {@link arrayItemLevel}. */
|
|
211
|
+
arrayItemLine(text, indentationLevel) {
|
|
212
|
+
const column = this.arrayItemLevel(indentationLevel) * this.indentationAmount - '- '.length;
|
|
213
|
+
return `${this.indentationChar.repeat(column)}- ${text}`;
|
|
198
214
|
}
|
|
199
215
|
/**
|
|
200
216
|
* YAML emits grammar-declared unquoted terminals (cardinality keywords,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-serializer.js","sourceRoot":"","sources":["../../../src/langium/serialization/yaml-serializer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"yaml-serializer.js","sourceRoot":"","sources":["../../../src/langium/serialization/yaml-serializer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hydranium/core",
|
|
3
|
-
"version": "1.0.0-next.
|
|
3
|
+
"version": "1.0.0-next.348",
|
|
4
4
|
"description": "Foundational runtime of the hydranium framework: AST coordination layer (services, integrity, AST extension, serialization, multi-client documents) plus the LSP textual head at the /lsp subpath. Consumed by protocol-head packages (@hydranium/data-server, @hydranium/glsp-server).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ast",
|
|
@@ -87,8 +87,8 @@
|
|
|
87
87
|
"diff": "^5.2.0"
|
|
88
88
|
},
|
|
89
89
|
"devDependencies": {
|
|
90
|
-
"@hydranium/langium": "1.0.0-next.
|
|
91
|
-
"@hydranium/protocol": "1.0.0-next.
|
|
90
|
+
"@hydranium/langium": "1.0.0-next.348",
|
|
91
|
+
"@hydranium/protocol": "1.0.0-next.348",
|
|
92
92
|
"@playwright/test": "^1.55.0",
|
|
93
93
|
"@types/diff": "^5.2.0",
|
|
94
94
|
"fake-indexeddb": "^6.2.5",
|
|
@@ -101,8 +101,8 @@
|
|
|
101
101
|
"vscode-languageserver-types": "3.18.0"
|
|
102
102
|
},
|
|
103
103
|
"peerDependencies": {
|
|
104
|
-
"@hydranium/langium": "1.0.0-next.
|
|
105
|
-
"@hydranium/protocol": "1.0.0-next.
|
|
104
|
+
"@hydranium/langium": "1.0.0-next.348",
|
|
105
|
+
"@hydranium/protocol": "1.0.0-next.348",
|
|
106
106
|
"@playwright/test": "^1.40.0",
|
|
107
107
|
"vscode-jsonrpc": "^9.0.0",
|
|
108
108
|
"vscode-languageserver": "~10.0.1",
|
|
@@ -41,7 +41,7 @@ import { type HydraniumLanguageServices } from '../language-module.js';
|
|
|
41
41
|
import { type NameProvider } from '../naming/name-provider.js';
|
|
42
42
|
import { type HydraniumDocumentRegistry } from '../workspace/langium-documents.js';
|
|
43
43
|
import { FallbackScope } from './fallback-scope.js';
|
|
44
|
-
import { type ScopeExtensionService } from './scope-extension-service.js';
|
|
44
|
+
import { type ScopeExtensionDescriptions, type ScopeExtensionService } from './scope-extension-service.js';
|
|
45
45
|
import { type TieredAstNodeDescription, isTieredDescription } from './scoped-ast-node-description.js';
|
|
46
46
|
|
|
47
47
|
/**
|
|
@@ -97,7 +97,7 @@ export interface ScopeContext {
|
|
|
97
97
|
/**
|
|
98
98
|
* Per-language scope provider that owns the full scope chain in ONE
|
|
99
99
|
* class. Bridges the protocol-layer {@link ReferenceContext} to
|
|
100
|
-
* Langium's {@link ReferenceInfo}, layers
|
|
100
|
+
* Langium's {@link ReferenceInfo}, layers scope-extension
|
|
101
101
|
* contributions ({@link ScopeExtensionService}) at their declared tier,
|
|
102
102
|
* and composes the cached project-tier chain (own-project → dependency
|
|
103
103
|
* → universal) on top of Langium's unfiltered global index.
|
|
@@ -106,9 +106,9 @@ export interface ScopeContext {
|
|
|
106
106
|
*
|
|
107
107
|
* ```
|
|
108
108
|
* document-local (Langium precomputed) [getScope, CACHED per build in localScope]
|
|
109
|
-
* extension:local [layerLocalExtension, per
|
|
109
|
+
* extension:local [layerLocalExtension, CACHED per descriptions]
|
|
110
110
|
* own-project → dependency → universal-index [createGlobalScope default, CACHED per ${project}::${refType}]
|
|
111
|
-
* extension:universal [layerUniversalExtension, per
|
|
111
|
+
* extension:universal [layerUniversalExtension, CACHED per descriptions, outermost]
|
|
112
112
|
* ```
|
|
113
113
|
*
|
|
114
114
|
* Implementation: {@link getScope} layers document-local on top of
|
|
@@ -176,6 +176,12 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
176
176
|
* document replaces.
|
|
177
177
|
*/
|
|
178
178
|
protected readonly nodeScopes = new WeakMap<LocalSymbols, WeakMap<readonly AstNode[], Scope>>();
|
|
179
|
+
/**
|
|
180
|
+
* The scope of each scope extension's descriptions of one tier, keyed by
|
|
181
|
+
* the array: an extension with a cache key answers every reference of that
|
|
182
|
+
* key with the same one.
|
|
183
|
+
*/
|
|
184
|
+
protected readonly extensionScopes = new WeakMap<readonly TieredAstNodeDescription[], Scope>();
|
|
179
185
|
protected readonly tracer: Tracer;
|
|
180
186
|
/**
|
|
181
187
|
* Narrows the inherited Langium {@link NameProvider} field to the framework's
|
|
@@ -289,8 +295,8 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
289
295
|
protected override getGlobalScope(referenceType: string, context: ReferenceInfo): Scope {
|
|
290
296
|
const projectChain = this.createGlobalScope(referenceType, context);
|
|
291
297
|
const extensions = this.scopeExtensionService.getDescriptions(referenceType, context.container);
|
|
292
|
-
const withUniversal = this.layerUniversalExtension(extensions
|
|
293
|
-
return this.layerLocalExtension(extensions
|
|
298
|
+
const withUniversal = this.layerUniversalExtension(extensions, projectChain, referenceType, context);
|
|
299
|
+
return this.layerLocalExtension(extensions, withUniversal, referenceType, context);
|
|
294
300
|
}
|
|
295
301
|
|
|
296
302
|
/**
|
|
@@ -325,32 +331,66 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
325
331
|
}
|
|
326
332
|
|
|
327
333
|
/**
|
|
328
|
-
* Layer
|
|
329
|
-
*
|
|
330
|
-
* are none.
|
|
334
|
+
* Layer each scope extension's `local`-tier descriptions on top of `inner`,
|
|
335
|
+
* an earlier extension's above a later one's, through {@link extensionScope}.
|
|
336
|
+
* Returns `inner` unchanged when there are none.
|
|
331
337
|
*/
|
|
332
338
|
protected layerLocalExtension(
|
|
333
|
-
|
|
339
|
+
extensions: readonly ScopeExtensionDescriptions[],
|
|
334
340
|
inner: Scope,
|
|
335
341
|
_referenceType: string,
|
|
336
342
|
_context: ReferenceInfo
|
|
337
343
|
): Scope {
|
|
338
|
-
return
|
|
344
|
+
return (
|
|
345
|
+
this.chainExtensionScopes(
|
|
346
|
+
extensions.map(extension => extension.local),
|
|
347
|
+
inner
|
|
348
|
+
) ?? inner
|
|
349
|
+
);
|
|
339
350
|
}
|
|
340
351
|
|
|
341
352
|
/**
|
|
342
|
-
* Layer
|
|
343
|
-
*
|
|
344
|
-
* {@link
|
|
345
|
-
* unchanged when there are none.
|
|
353
|
+
* Layer each scope extension's `universal`-tier descriptions below `inner`,
|
|
354
|
+
* which shadows them, an earlier extension's above a later one's, through
|
|
355
|
+
* {@link extensionScope}. Returns `inner` unchanged when there are none.
|
|
346
356
|
*/
|
|
347
357
|
protected layerUniversalExtension(
|
|
348
|
-
|
|
358
|
+
extensions: readonly ScopeExtensionDescriptions[],
|
|
349
359
|
inner: Scope,
|
|
350
360
|
_referenceType: string,
|
|
351
361
|
_context: ReferenceInfo
|
|
352
362
|
): Scope {
|
|
353
|
-
|
|
363
|
+
const below = this.chainExtensionScopes(extensions.map(extension => extension.universal));
|
|
364
|
+
return below ? new FallbackScope(inner, below) : inner;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* Chain the scope of each non-empty array above `outer`, an earlier array's
|
|
369
|
+
* above a later one's; `undefined` when there is neither.
|
|
370
|
+
*/
|
|
371
|
+
protected chainExtensionScopes(tiers: ReadonlyArray<readonly TieredAstNodeDescription[]>, outer?: Scope): Scope | undefined {
|
|
372
|
+
let result = outer;
|
|
373
|
+
for (let i = tiers.length - 1; i >= 0; i--) {
|
|
374
|
+
if (tiers[i].length > 0) {
|
|
375
|
+
const scope = this.extensionScope(tiers[i]);
|
|
376
|
+
result = result ? new FallbackScope(scope, result) : scope;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return result;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* The scope of one extension's descriptions of one tier, through
|
|
384
|
+
* {@link createScope}, built once per array and shared by every reference
|
|
385
|
+
* it answers, so an override of `createScope` sees no reference context.
|
|
386
|
+
*/
|
|
387
|
+
protected extensionScope(descriptions: readonly TieredAstNodeDescription[]): Scope {
|
|
388
|
+
let scope = this.extensionScopes.get(descriptions);
|
|
389
|
+
if (scope === undefined) {
|
|
390
|
+
scope = this.createScope(descriptions);
|
|
391
|
+
this.extensionScopes.set(descriptions, scope);
|
|
392
|
+
}
|
|
393
|
+
return scope;
|
|
354
394
|
}
|
|
355
395
|
|
|
356
396
|
/**
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
|
-
import { type AstNode, AstUtils, type LangiumDocument } from '@hydranium/langium';
|
|
10
|
+
import { type AstNode, AstUtils, DocumentCache, DocumentState, type LangiumDocument } from '@hydranium/langium';
|
|
11
11
|
import { type Disposable } from 'vscode-languageserver';
|
|
12
12
|
import { Format, Logger, type ProfileRecord, type ProfileSession, type Tracer } from '@hydranium/protocol';
|
|
13
13
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
@@ -84,9 +84,24 @@ export interface ScopeExtension extends RegistryItem {
|
|
|
84
84
|
* build the data up-front and hand a sync acceptor here.
|
|
85
85
|
*/
|
|
86
86
|
addDescriptions(context: AstNode, referenceType: string, document: LangiumDocument, accept: ScopeDescriptionAcceptor): void;
|
|
87
|
+
/**
|
|
88
|
+
* The node the descriptions for `context` belong to, so that while the
|
|
89
|
+
* referencing document is being linked, they, and the scope made of them,
|
|
90
|
+
* are built once per node rather than once per reference: a reference with
|
|
91
|
+
* the same node is answered with the first one's descriptions. Without it, for
|
|
92
|
+
* `undefined`, outside a link, such as a completion request, or for a
|
|
93
|
+
* `context` outside a built document, such as an operation's working copy,
|
|
94
|
+
* {@link addDescriptions} runs for every reference.
|
|
95
|
+
*
|
|
96
|
+
* The descriptions must depend on the node and `referenceType` alone. What
|
|
97
|
+
* they read through the node may come from another document: each link
|
|
98
|
+
* builds them afresh. A change made during one link, in place, is not seen
|
|
99
|
+
* until the next.
|
|
100
|
+
*/
|
|
101
|
+
cacheKey?(context: AstNode, referenceType: string): AstNode | undefined;
|
|
87
102
|
}
|
|
88
103
|
|
|
89
|
-
/**
|
|
104
|
+
/** One scope extension's descriptions for a reference, split by tier. */
|
|
90
105
|
export interface ScopeExtensionDescriptions {
|
|
91
106
|
readonly local: readonly TieredAstNodeDescription[];
|
|
92
107
|
readonly universal: readonly TieredAstNodeDescription[];
|
|
@@ -100,17 +115,19 @@ export interface ScopeExtensionDescriptions {
|
|
|
100
115
|
*/
|
|
101
116
|
export interface ScopeExtensionService extends ScopeExtensionRegistry {
|
|
102
117
|
/**
|
|
103
|
-
*
|
|
104
|
-
* `context`,
|
|
105
|
-
*
|
|
106
|
-
*
|
|
118
|
+
* The descriptions of each extension registered for `referenceType` that
|
|
119
|
+
* contributes to `context`, in registration order. An extension's entry is
|
|
120
|
+
* the same object for every reference of one {@link ScopeExtension.cacheKey},
|
|
121
|
+
* so a caller can key what it builds of it by identity. A caller that needs
|
|
122
|
+
* both tiers takes them from one call: a call per tier runs every extension
|
|
123
|
+
* twice.
|
|
107
124
|
*/
|
|
108
|
-
getDescriptions(referenceType: string, context: AstNode): ScopeExtensionDescriptions;
|
|
125
|
+
getDescriptions(referenceType: string, context: AstNode): readonly ScopeExtensionDescriptions[];
|
|
109
126
|
}
|
|
110
127
|
|
|
111
128
|
export type ScopeExtensionServiceOptions = LogNameOptions;
|
|
112
129
|
|
|
113
|
-
const NO_DESCRIPTIONS: ScopeExtensionDescriptions
|
|
130
|
+
const NO_DESCRIPTIONS: readonly ScopeExtensionDescriptions[] = [];
|
|
114
131
|
|
|
115
132
|
/**
|
|
116
133
|
* Default {@link ScopeExtensionService} implementation. Per-language
|
|
@@ -134,6 +151,13 @@ export class DefaultScopeExtensionService implements ScopeExtensionService {
|
|
|
134
151
|
protected readonly tracer: Tracer;
|
|
135
152
|
/** Open from the first profiled call until {@link reportProfile}. */
|
|
136
153
|
protected profileSession?: ProfileSession;
|
|
154
|
+
/**
|
|
155
|
+
* Per referencing document, key node, extension and reference type, the
|
|
156
|
+
* descriptions answered during that document's link, dropped when it ends,
|
|
157
|
+
* when a build starts and right before its link. Absent without a document
|
|
158
|
+
* builder, which leaves every extension uncached.
|
|
159
|
+
*/
|
|
160
|
+
protected readonly kept?: DocumentCache<AstNode, Map<ScopeExtension, Map<string, ScopeExtensionDescriptions>>>;
|
|
137
161
|
|
|
138
162
|
constructor(
|
|
139
163
|
protected readonly services: ServerLanguageServices,
|
|
@@ -153,6 +177,12 @@ export class DefaultScopeExtensionService implements ScopeExtensionService {
|
|
|
153
177
|
const builder = services.shared.workspace.DocumentBuilder;
|
|
154
178
|
builder?.onUpdate(() => this.reportProfile());
|
|
155
179
|
builder?.onBuildEnded(() => this.reportProfile());
|
|
180
|
+
// Dropped once the document is linked, and all of it when a build starts and
|
|
181
|
+
// again right before its link, so neither a lookup made after the build starts
|
|
182
|
+
// nor a link a cancelled build left unfinished answers this link.
|
|
183
|
+
this.kept = builder ? new DocumentCache(services.shared, DocumentState.Linked) : undefined;
|
|
184
|
+
builder?.onUpdate(() => this.kept?.clear());
|
|
185
|
+
builder?.onBuildPhase(DocumentState.ComputedScopes, () => this.kept?.clear());
|
|
156
186
|
}
|
|
157
187
|
|
|
158
188
|
/**
|
|
@@ -169,21 +199,68 @@ export class DefaultScopeExtensionService implements ScopeExtensionService {
|
|
|
169
199
|
* Holds the profile wrap, which an override would have to copy; to change
|
|
170
200
|
* which extensions run, override {@link extensionsFor}.
|
|
171
201
|
*/
|
|
172
|
-
getDescriptions(referenceType: string, context: AstNode): ScopeExtensionDescriptions {
|
|
202
|
+
getDescriptions(referenceType: string, context: AstNode): readonly ScopeExtensionDescriptions[] {
|
|
173
203
|
const extensionsForType = this.extensionsFor(referenceType, context);
|
|
174
204
|
if (extensionsForType.length === 0) {
|
|
175
205
|
return NO_DESCRIPTIONS;
|
|
176
206
|
}
|
|
177
207
|
const document = AstUtils.getDocument(context);
|
|
208
|
+
// Only while the document is being linked: nothing tells a cache that a relink is about to start.
|
|
209
|
+
const linking = document.state < DocumentState.Linked && AstUtils.findRootNode(context) === document.parseResult.value;
|
|
210
|
+
const answered: ScopeExtensionDescriptions[] = [];
|
|
211
|
+
for (const extension of extensionsForType) {
|
|
212
|
+
const node = linking ? extension.cacheKey?.(context, referenceType) : undefined;
|
|
213
|
+
const descriptions = node
|
|
214
|
+
? this.keptDescriptions(document, node, extension, referenceType, () =>
|
|
215
|
+
this.runExtension(extension, referenceType, context, document)
|
|
216
|
+
)
|
|
217
|
+
: this.runExtension(extension, referenceType, context, document);
|
|
218
|
+
if (descriptions.local.length > 0 || descriptions.universal.length > 0) {
|
|
219
|
+
answered.push(descriptions);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return answered;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/** The descriptions kept for `node` in `document`, built through `build` when there are none. */
|
|
226
|
+
protected keptDescriptions(
|
|
227
|
+
document: LangiumDocument,
|
|
228
|
+
node: AstNode,
|
|
229
|
+
extension: ScopeExtension,
|
|
230
|
+
referenceType: string,
|
|
231
|
+
build: () => ScopeExtensionDescriptions
|
|
232
|
+
): ScopeExtensionDescriptions {
|
|
233
|
+
const byExtension = this.kept?.get(document.uri, node, () => new Map());
|
|
234
|
+
if (byExtension === undefined) {
|
|
235
|
+
return build();
|
|
236
|
+
}
|
|
237
|
+
let byType = byExtension.get(extension);
|
|
238
|
+
if (byType === undefined) {
|
|
239
|
+
byType = new Map();
|
|
240
|
+
byExtension.set(extension, byType);
|
|
241
|
+
}
|
|
242
|
+
let descriptions = byType.get(referenceType);
|
|
243
|
+
if (descriptions === undefined) {
|
|
244
|
+
descriptions = build();
|
|
245
|
+
byType.set(referenceType, descriptions);
|
|
246
|
+
}
|
|
247
|
+
return descriptions;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/** Run `extension` against `context`, inside the profile session at `debug`. */
|
|
251
|
+
protected runExtension(
|
|
252
|
+
extension: ScopeExtension,
|
|
253
|
+
referenceType: string,
|
|
254
|
+
context: AstNode,
|
|
255
|
+
document: LangiumDocument
|
|
256
|
+
): ScopeExtensionDescriptions {
|
|
178
257
|
const collected: TieredAstNodeDescription[] = [];
|
|
179
258
|
const accept = createScopeDescriptionAcceptor(collected, this.services.workspace.AstNodeDescriptionProvider);
|
|
180
259
|
const session = Logger.isLevelEnabled('debug') ? (this.profileSession ??= this.tracer.profile('scope-extension')) : undefined;
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
extension.addDescriptions(context, referenceType, document, accept);
|
|
186
|
-
}
|
|
260
|
+
if (session) {
|
|
261
|
+
session.scope(extension.id, () => extension.addDescriptions(context, referenceType, document, accept));
|
|
262
|
+
} else {
|
|
263
|
+
extension.addDescriptions(context, referenceType, document, accept);
|
|
187
264
|
}
|
|
188
265
|
return {
|
|
189
266
|
local: collected.filter(description => description.tier === 'local'),
|
|
@@ -118,6 +118,9 @@ export class YamlSerializer<TAst extends AstNode = AstNode, TTransfer extends Tr
|
|
|
118
118
|
this.newlineChar = options.newlineChar ?? YamlSerializer.DEFAULT_NEWLINE_CHAR;
|
|
119
119
|
this.indentationChar = options.indentationChar ?? YamlSerializer.DEFAULT_INDENTATION_CHAR;
|
|
120
120
|
this.indentationAmount = options.indentationAmount ?? YamlSerializer.DEFAULT_INDENTATION_AMOUNT;
|
|
121
|
+
if (!Number.isInteger(this.indentationAmount) || this.indentationAmount < 1) {
|
|
122
|
+
throw new Error(`[hydranium] YamlSerializer indentationAmount must be a positive integer, got ${this.indentationAmount}.`);
|
|
123
|
+
}
|
|
121
124
|
this.typeSpecificKeywords = options.typeSpecificKeywords ?? YamlSerializer.DEFAULT_TYPE_SPECIFIC_KEYWORDS;
|
|
122
125
|
}
|
|
123
126
|
|
|
@@ -262,11 +265,11 @@ export class YamlSerializer<TAst extends AstNode = AstNode, TTransfer extends Tr
|
|
|
262
265
|
if (isPromiseLike(maybe)) {
|
|
263
266
|
const resumeAt = i + 1;
|
|
264
267
|
return maybe.then(formatted => {
|
|
265
|
-
lines.push(this.
|
|
268
|
+
lines.push(this.arrayItemLine(formatted, indentationLevel));
|
|
266
269
|
return this.collectReferenceArrayLines(items, indentationLevel, lines, resumeAt);
|
|
267
270
|
});
|
|
268
271
|
}
|
|
269
|
-
lines.push(this.
|
|
272
|
+
lines.push(this.arrayItemLine(maybe, indentationLevel));
|
|
270
273
|
}
|
|
271
274
|
return lines.join(this.newlineChar);
|
|
272
275
|
}
|
|
@@ -290,7 +293,7 @@ export class YamlSerializer<TAst extends AstNode = AstNode, TTransfer extends Tr
|
|
|
290
293
|
if (item === undefined) {
|
|
291
294
|
continue;
|
|
292
295
|
}
|
|
293
|
-
const maybe = this.serializePropertyValue(nodeType, key, item, indentationLevel, /* isArrayElement */ true);
|
|
296
|
+
const maybe = this.serializePropertyValue(nodeType, key, item, this.arrayItemLevel(indentationLevel), /* isArrayElement */ true);
|
|
294
297
|
if (isPromiseLike(maybe)) {
|
|
295
298
|
const resumeAt = i + 1;
|
|
296
299
|
return maybe.then(serialized => {
|
|
@@ -307,7 +310,22 @@ export class YamlSerializer<TAst extends AstNode = AstNode, TTransfer extends Tr
|
|
|
307
310
|
if (serialized === undefined) {
|
|
308
311
|
return;
|
|
309
312
|
}
|
|
310
|
-
lines.push(this.
|
|
313
|
+
lines.push(this.arrayItemLine(serialized, indentationLevel));
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Level an array item's properties sit at: the first level at least four columns
|
|
318
|
+
* right of the array's key, so `- ` fits under the key and every property of the
|
|
319
|
+
* item starts at one column. Columns count {@link indentationChar} as one.
|
|
320
|
+
*/
|
|
321
|
+
protected arrayItemLevel(indentationLevel: number): number {
|
|
322
|
+
return indentationLevel - 1 + Math.ceil(4 / this.indentationAmount);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/** Prefix an array item with `- `, placed so the item's content starts at {@link arrayItemLevel}. */
|
|
326
|
+
protected arrayItemLine(text: string, indentationLevel: number): string {
|
|
327
|
+
const column = this.arrayItemLevel(indentationLevel) * this.indentationAmount - '- '.length;
|
|
328
|
+
return `${this.indentationChar.repeat(column)}- ${text}`;
|
|
311
329
|
}
|
|
312
330
|
|
|
313
331
|
/**
|