@nowline/lsp 0.8.6 → 0.10.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/dist/providers/completion.d.ts +7 -1
- package/dist/providers/completion.d.ts.map +1 -1
- package/dist/providers/completion.js +42 -32
- package/dist/providers/completion.js.map +1 -1
- package/dist/providers/definition.d.ts +1 -1
- package/dist/providers/definition.js +1 -1
- package/dist/providers/document-symbols.d.ts +2 -1
- package/dist/providers/document-symbols.d.ts.map +1 -1
- package/dist/providers/document-symbols.js +25 -22
- package/dist/providers/document-symbols.js.map +1 -1
- package/dist/providers/hover.d.ts +9 -0
- package/dist/providers/hover.d.ts.map +1 -1
- package/dist/providers/hover.js +109 -14
- package/dist/providers/hover.js.map +1 -1
- package/dist/providers/references.d.ts.map +1 -1
- package/dist/providers/references.js +3 -1
- package/dist/providers/references.js.map +1 -1
- package/dist/providers/rename.d.ts.map +1 -1
- package/dist/providers/rename.js +2 -2
- package/dist/providers/rename.js.map +1 -1
- package/dist/references/ast-utils.d.ts +41 -31
- package/dist/references/ast-utils.d.ts.map +1 -1
- package/dist/references/ast-utils.js +54 -129
- package/dist/references/ast-utils.js.map +1 -1
- package/package.json +4 -4
- package/src/providers/completion.ts +42 -31
- package/src/providers/definition.ts +1 -1
- package/src/providers/document-symbols.ts +31 -21
- package/src/providers/hover.ts +124 -14
- package/src/providers/references.ts +2 -0
- package/src/providers/rename.ts +2 -1
- package/src/references/ast-utils.ts +81 -127
|
@@ -6,12 +6,18 @@ import type { NowlineLspServices } from '../nowline-lsp-module.js';
|
|
|
6
6
|
* completion (free from the grammar) and adds:
|
|
7
7
|
*
|
|
8
8
|
* - Id-reference completion when the cursor sits in a reference property's
|
|
9
|
-
* value position (`after:`, `before:`, `style:`, `size:`, `labels:[...]`,
|
|
9
|
+
* value position (`after:`, `before:`, `style:`, `size:`, `wave:`, `labels:[...]`,
|
|
10
10
|
* etc.). Each key only suggests entities whose kind makes sense for it
|
|
11
11
|
* (see `REF_KEY_TO_KINDS`).
|
|
12
12
|
* - Status-value completion: built-in values plus custom `status`
|
|
13
13
|
* declarations.
|
|
14
14
|
* - Icon / capacity-icon built-in vocabulary plus user-declared symbols.
|
|
15
|
+
* - Working-calendar values: the weekday names after `every:` and `hide` /
|
|
16
|
+
* `show` after the `non-working:` display key.
|
|
17
|
+
* - Style values: each enumerated style key's values, and the built-in
|
|
18
|
+
* colour names after `bg:`, `fg:` and `text:` (hex stays free-form).
|
|
19
|
+
* - `calendar:` modes on the roadmap line and `config:` / `roadmap:` modes
|
|
20
|
+
* on an `include` line.
|
|
15
21
|
*/
|
|
16
22
|
export declare class NowlineCompletionProvider extends DefaultCompletionProvider {
|
|
17
23
|
constructor(services: NowlineLspServices);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/providers/completion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,yBAAyB,EACzB,KAAK,WAAW,EACnB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/providers/completion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,yBAAyB,EACzB,KAAK,WAAW,EACnB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AA8CnE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,yBAA0B,SAAQ,yBAAyB;IACpE,YAAY,QAAQ,EAAE,kBAAkB,EAEvC;IAED,UAAmB,aAAa,CAC5B,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,kBAAkB,GAC7B,YAAY,CAAC,IAAI,CAAC,CAMpB;IAED;;;OAGG;IACH,SAAS,CAAC,sBAAsB,CAC5B,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,kBAAkB,GAC7B,IAAI,CAmCN;CACJ;AAED,MAAM,WAAW,oBAAoB;IACjC,GAAG,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DefaultCompletionProvider, } from 'langium/lsp';
|
|
2
2
|
import { CompletionItemKind } from '../lsp-protocol.js';
|
|
3
|
-
import { BUILTIN_CAPACITY_ICONS, BUILTIN_ICON_NAMES, BUILTIN_STATUSES, collectNamedEntities, entityKind, fileFromDocument, REFERENCE_PROP_KEYS, } from '../references/ast-utils.js';
|
|
3
|
+
import { BUILTIN_CAPACITY_ICONS, BUILTIN_ICON_NAMES, BUILTIN_STATUSES, CALENDAR_MODES, COLOR_NAMES, collectNamedEntities, entityKind, fileFromDocument, INCLUDE_MODES, NON_WORKING_DISPLAYS, REFERENCE_PROP_KEYS, STYLE_PROP_ENUMS, WEEKDAY_NAMES, } from '../references/ast-utils.js';
|
|
4
4
|
/**
|
|
5
5
|
* Per-key allowlist of entity kinds that make sense as values. Keeps
|
|
6
6
|
* suggestions focused — typing `style:` only shows styles instead of every
|
|
@@ -10,30 +10,39 @@ import { BUILTIN_CAPACITY_ICONS, BUILTIN_ICON_NAMES, BUILTIN_STATUSES, collectNa
|
|
|
10
10
|
* (`StyleDeclaration` → `style`, `ItemDeclaration` → `item`, …).
|
|
11
11
|
*/
|
|
12
12
|
const REF_KEY_TO_KINDS = {
|
|
13
|
-
after: new Set(['item', 'milestone', 'anchor', 'parallel', 'group']),
|
|
14
|
-
before: new Set(['item', 'milestone', 'anchor', 'parallel', 'group']),
|
|
15
|
-
|
|
16
|
-
on: new Set(['item', 'swimlane', 'parallel', 'group', 'milestone']),
|
|
13
|
+
after: new Set(['item', 'milestone', 'anchor', 'parallel', 'group', 'wave']),
|
|
14
|
+
before: new Set(['item', 'milestone', 'anchor', 'parallel', 'group', 'wave']),
|
|
15
|
+
on: new Set(['item', 'swimlane', 'parallel', 'group', 'milestone', 'wave']),
|
|
17
16
|
owner: new Set(['person', 'team']),
|
|
18
|
-
team: new Set(['team']),
|
|
19
17
|
style: new Set(['style']),
|
|
20
18
|
size: new Set(['size']),
|
|
21
19
|
status: new Set(['status']),
|
|
22
20
|
labels: new Set(['label']),
|
|
23
21
|
icon: new Set(['symbol']),
|
|
24
22
|
'capacity-icon': new Set(['symbol']),
|
|
23
|
+
wave: new Set(['wave']),
|
|
25
24
|
};
|
|
25
|
+
/** Style keys whose value is a colour (the validator's `isColorValue` keys). */
|
|
26
|
+
const COLOR_KEYS = new Set(['bg', 'fg', 'text']);
|
|
27
|
+
/** Keys on an `include` line; both take an include mode. */
|
|
28
|
+
const INCLUDE_MODE_KEYS = new Set(['config', 'roadmap']);
|
|
26
29
|
/**
|
|
27
30
|
* Custom completion provider. Defers to Langium's keyword + property-key
|
|
28
31
|
* completion (free from the grammar) and adds:
|
|
29
32
|
*
|
|
30
33
|
* - Id-reference completion when the cursor sits in a reference property's
|
|
31
|
-
* value position (`after:`, `before:`, `style:`, `size:`, `labels:[...]`,
|
|
34
|
+
* value position (`after:`, `before:`, `style:`, `size:`, `wave:`, `labels:[...]`,
|
|
32
35
|
* etc.). Each key only suggests entities whose kind makes sense for it
|
|
33
36
|
* (see `REF_KEY_TO_KINDS`).
|
|
34
37
|
* - Status-value completion: built-in values plus custom `status`
|
|
35
38
|
* declarations.
|
|
36
39
|
* - Icon / capacity-icon built-in vocabulary plus user-declared symbols.
|
|
40
|
+
* - Working-calendar values: the weekday names after `every:` and `hide` /
|
|
41
|
+
* `show` after the `non-working:` display key.
|
|
42
|
+
* - Style values: each enumerated style key's values, and the built-in
|
|
43
|
+
* colour names after `bg:`, `fg:` and `text:` (hex stays free-form).
|
|
44
|
+
* - `calendar:` modes on the roadmap line and `config:` / `roadmap:` modes
|
|
45
|
+
* on an `include` line.
|
|
37
46
|
*/
|
|
38
47
|
export class NowlineCompletionProvider extends DefaultCompletionProvider {
|
|
39
48
|
constructor(services) {
|
|
@@ -54,36 +63,35 @@ export class NowlineCompletionProvider extends DefaultCompletionProvider {
|
|
|
54
63
|
const file = fileFromDocument(context.document);
|
|
55
64
|
if (!file)
|
|
56
65
|
return;
|
|
57
|
-
|
|
58
|
-
for (const
|
|
66
|
+
const offer = (values, detail) => {
|
|
67
|
+
for (const value of values) {
|
|
59
68
|
acceptor(context, {
|
|
60
|
-
label:
|
|
69
|
+
label: value,
|
|
61
70
|
kind: CompletionItemKind.EnumMember,
|
|
62
|
-
detail
|
|
63
|
-
insertText:
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (hint.key === 'icon') {
|
|
68
|
-
for (const icon of BUILTIN_ICON_NAMES) {
|
|
69
|
-
acceptor(context, {
|
|
70
|
-
label: icon,
|
|
71
|
-
kind: CompletionItemKind.EnumMember,
|
|
72
|
-
detail: 'built-in icon',
|
|
73
|
-
insertText: icon,
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
if (hint.key === 'capacity-icon') {
|
|
78
|
-
for (const icon of BUILTIN_CAPACITY_ICONS) {
|
|
79
|
-
acceptor(context, {
|
|
80
|
-
label: icon,
|
|
81
|
-
kind: CompletionItemKind.EnumMember,
|
|
82
|
-
detail: 'built-in capacity icon',
|
|
83
|
-
insertText: icon,
|
|
71
|
+
detail,
|
|
72
|
+
insertText: value,
|
|
84
73
|
});
|
|
85
74
|
}
|
|
75
|
+
};
|
|
76
|
+
if (hint.key === 'status')
|
|
77
|
+
offer(BUILTIN_STATUSES, 'built-in status');
|
|
78
|
+
if (hint.key === 'every')
|
|
79
|
+
offer(WEEKDAY_NAMES, 'weekday');
|
|
80
|
+
if (hint.key === 'non-working')
|
|
81
|
+
offer(NON_WORKING_DISPLAYS, 'non-working display');
|
|
82
|
+
if (hint.key === 'icon')
|
|
83
|
+
offer(BUILTIN_ICON_NAMES, 'built-in icon');
|
|
84
|
+
if (hint.key === 'capacity-icon')
|
|
85
|
+
offer(BUILTIN_CAPACITY_ICONS, 'built-in capacity icon');
|
|
86
|
+
if (Object.hasOwn(STYLE_PROP_ENUMS, hint.key)) {
|
|
87
|
+
offer(STYLE_PROP_ENUMS[hint.key], `${hint.key} value`);
|
|
86
88
|
}
|
|
89
|
+
if (COLOR_KEYS.has(hint.key))
|
|
90
|
+
offer(COLOR_NAMES, 'built-in color');
|
|
91
|
+
if (hint.key === 'calendar')
|
|
92
|
+
offer(CALENDAR_MODES, 'calendar mode');
|
|
93
|
+
if (INCLUDE_MODE_KEYS.has(hint.key))
|
|
94
|
+
offer(INCLUDE_MODES, 'include mode');
|
|
87
95
|
if (REFERENCE_PROP_KEYS.has(hint.key)) {
|
|
88
96
|
const allowed = REF_KEY_TO_KINDS[hint.key];
|
|
89
97
|
for (const ent of collectNamedEntities(file)) {
|
|
@@ -168,6 +176,8 @@ function kindFor(kind) {
|
|
|
168
176
|
return CompletionItemKind.Snippet;
|
|
169
177
|
case 'footnote':
|
|
170
178
|
return CompletionItemKind.Text;
|
|
179
|
+
case 'wave':
|
|
180
|
+
return CompletionItemKind.Struct;
|
|
171
181
|
default:
|
|
172
182
|
return CompletionItemKind.Reference;
|
|
173
183
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/providers/completion.ts"],"names":[],"mappings":"AACA,OAAO,EAGH,yBAAyB,GAE5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAuB,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EACH,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,gBAAgB,
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/providers/completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import type { NowlineLspServices } from '../nowline-lsp-module.js';
|
|
|
8
8
|
* text) for cross-references, so Langium's default cross-ref-aware provider
|
|
9
9
|
* has nothing to follow. We walk the AST instead: when the cursor sits on a
|
|
10
10
|
* value of a reference property (`after:`, `before:`, `owner:`, `on:`,
|
|
11
|
-
* `
|
|
11
|
+
* `labels:[]`, ...), look up the target id in the file-level entity index and
|
|
12
12
|
* return its declaration site.
|
|
13
13
|
*/
|
|
14
14
|
export declare class NowlineDefinitionProvider implements DefinitionProvider {
|
|
@@ -5,7 +5,7 @@ import { buildEntityIndex, fileFromDocument, leafAt, nameRangeOf, propertyValueA
|
|
|
5
5
|
* text) for cross-references, so Langium's default cross-ref-aware provider
|
|
6
6
|
* has nothing to follow. We walk the AST instead: when the cursor sits on a
|
|
7
7
|
* value of a reference property (`after:`, `before:`, `owner:`, `on:`,
|
|
8
|
-
* `
|
|
8
|
+
* `labels:[]`, ...), look up the target id in the file-level entity index and
|
|
9
9
|
* return its declaration site.
|
|
10
10
|
*/
|
|
11
11
|
export class NowlineDefinitionProvider {
|
|
@@ -5,7 +5,7 @@ import type { NowlineLspServices } from '../nowline-lsp-module.js';
|
|
|
5
5
|
/**
|
|
6
6
|
* Outline view: roadmap → swimlanes → items, with parallel/group nesting and
|
|
7
7
|
* top-level anchors / milestones / footnotes / people / teams / labels /
|
|
8
|
-
* sizes / statuses surfaced as siblings of the swimlanes. Mirrors the layout
|
|
8
|
+
* sizes / statuses / waves surfaced as siblings of the swimlanes. Mirrors the layout
|
|
9
9
|
* engine's traversal so what authors see in the outline matches what gets
|
|
10
10
|
* rendered.
|
|
11
11
|
*/
|
|
@@ -19,6 +19,7 @@ export declare class NowlineDocumentSymbolProvider implements DocumentSymbolProv
|
|
|
19
19
|
private itemSymbol;
|
|
20
20
|
private parallelSymbol;
|
|
21
21
|
private groupSymbol;
|
|
22
|
+
private withTrackChildren;
|
|
22
23
|
private simpleSymbol;
|
|
23
24
|
}
|
|
24
25
|
//# sourceMappingURL=document-symbols.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-symbols.d.ts","sourceRoot":"","sources":["../../src/providers/document-symbols.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"document-symbols.d.ts","sourceRoot":"","sources":["../../src/providers/document-symbols.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAW,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EACR,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EAEvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAanE;;;;;;GAMG;AACH,qBAAa,6BAA8B,YAAW,sBAAsB;IACxE,YAAY,SAAS,EAAE,kBAAkB,EAExC;IAED,UAAU,CACN,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,oBAAoB,EAC7B,YAAY,CAAC,EAAE,iBAAiB,GACjC,YAAY,CAAC,cAAc,EAAE,CAAC,CAmBhC;IAED,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,YAAY;CAkBvB"}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
import { isAnchorDeclaration, isFootnoteDeclaration, isGroupBlock, isItemDeclaration, isLabelDeclaration, isMilestoneDeclaration, isParallelBlock, isPersonDeclaration, isSizeDeclaration, isStatusDeclaration, isSwimlaneDeclaration, isTeamDeclaration, } from '@nowline/core';
|
|
1
|
+
import { isAnchorDeclaration, isFootnoteDeclaration, isGroupBlock, isItemDeclaration, isLabelDeclaration, isMilestoneDeclaration, isParallelBlock, isPersonDeclaration, isSizeDeclaration, isStatusDeclaration, isSwimlaneDeclaration, isTeamDeclaration, isWaveDeclaration, singleLine, } from '@nowline/core';
|
|
2
|
+
import { trackChildren } from '@nowline/core/internal';
|
|
2
3
|
import { SymbolKind } from '../lsp-protocol.js';
|
|
3
4
|
import { entityKind, fileFromDocument, nameRangeOf } from '../references/ast-utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* An outline entry is one line of text, but a quoted title can carry
|
|
7
|
+
* explicit line breaks (`"Technology\nSelection"`), so each break is shown
|
|
8
|
+
* as a single space. `undefined` stays `undefined` so callers can fall back
|
|
9
|
+
* (as they must for a title that was only line breaks, which collapses to '').
|
|
10
|
+
*/
|
|
11
|
+
function singleLineTitle(title) {
|
|
12
|
+
return title === undefined ? undefined : singleLine(title);
|
|
13
|
+
}
|
|
4
14
|
/**
|
|
5
15
|
* Outline view: roadmap → swimlanes → items, with parallel/group nesting and
|
|
6
16
|
* top-level anchors / milestones / footnotes / people / teams / labels /
|
|
7
|
-
* sizes / statuses surfaced as siblings of the swimlanes. Mirrors the layout
|
|
17
|
+
* sizes / statuses / waves surfaced as siblings of the swimlanes. Mirrors the layout
|
|
8
18
|
* engine's traversal so what authors see in the outline matches what gets
|
|
9
19
|
* rendered.
|
|
10
20
|
*/
|
|
@@ -39,8 +49,8 @@ export class NowlineDocumentSymbolProvider {
|
|
|
39
49
|
const range = roadmap.$cstNode.range;
|
|
40
50
|
const nameRange = nameRangeOf(roadmap) ?? range;
|
|
41
51
|
return {
|
|
42
|
-
name: roadmap.name ?? roadmap.title
|
|
43
|
-
detail: roadmap.title && roadmap.name ? roadmap.title : 'roadmap',
|
|
52
|
+
name: roadmap.name ?? (singleLineTitle(roadmap.title) || 'roadmap'),
|
|
53
|
+
detail: roadmap.title && roadmap.name ? singleLine(roadmap.title) : 'roadmap',
|
|
44
54
|
kind: SymbolKind.Package,
|
|
45
55
|
range,
|
|
46
56
|
selectionRange: nameRange,
|
|
@@ -66,16 +76,12 @@ export class NowlineDocumentSymbolProvider {
|
|
|
66
76
|
return this.simpleSymbol(entry, SymbolKind.Number);
|
|
67
77
|
if (isStatusDeclaration(entry))
|
|
68
78
|
return this.simpleSymbol(entry, SymbolKind.Enum);
|
|
79
|
+
if (isWaveDeclaration(entry))
|
|
80
|
+
return this.simpleSymbol(entry, SymbolKind.Struct);
|
|
69
81
|
return undefined;
|
|
70
82
|
}
|
|
71
83
|
swimlaneSymbol(lane) {
|
|
72
|
-
|
|
73
|
-
for (const child of lane.content) {
|
|
74
|
-
const sub = this.trackChildSymbol(child);
|
|
75
|
-
if (sub)
|
|
76
|
-
sym.children.push(sub);
|
|
77
|
-
}
|
|
78
|
-
return sym;
|
|
84
|
+
return this.withTrackChildren(this.simpleSymbol(lane, SymbolKind.Namespace, true), lane);
|
|
79
85
|
}
|
|
80
86
|
trackChildSymbol(child) {
|
|
81
87
|
if (isItemDeclaration(child))
|
|
@@ -90,17 +96,14 @@ export class NowlineDocumentSymbolProvider {
|
|
|
90
96
|
return this.simpleSymbol(item, SymbolKind.Field);
|
|
91
97
|
}
|
|
92
98
|
parallelSymbol(node) {
|
|
93
|
-
|
|
94
|
-
for (const child of node.content) {
|
|
95
|
-
const sub = this.trackChildSymbol(child);
|
|
96
|
-
if (sub)
|
|
97
|
-
sym.children.push(sub);
|
|
98
|
-
}
|
|
99
|
-
return sym;
|
|
99
|
+
return this.withTrackChildren(this.simpleSymbol(node, SymbolKind.Array, true), node);
|
|
100
100
|
}
|
|
101
101
|
groupSymbol(node) {
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
return this.withTrackChildren(this.simpleSymbol(node, SymbolKind.Object, true), node);
|
|
103
|
+
}
|
|
104
|
+
// The container's track children (descriptions skipped) as nested symbols.
|
|
105
|
+
withTrackChildren(sym, container) {
|
|
106
|
+
for (const child of trackChildren(container)) {
|
|
104
107
|
const sub = this.trackChildSymbol(child);
|
|
105
108
|
if (sub)
|
|
106
109
|
sym.children.push(sub);
|
|
@@ -109,8 +112,8 @@ export class NowlineDocumentSymbolProvider {
|
|
|
109
112
|
}
|
|
110
113
|
simpleSymbol(entity, kind, withChildrenSlot = false) {
|
|
111
114
|
const range = entity.$cstNode.range;
|
|
112
|
-
const name = entity.name ?? entity.title
|
|
113
|
-
const detail = entity.title && entity.name ? entity.title : entityKind(entity);
|
|
115
|
+
const name = entity.name ?? (singleLineTitle(entity.title) || entityKind(entity));
|
|
116
|
+
const detail = entity.title && entity.name ? singleLine(entity.title) : entityKind(entity);
|
|
114
117
|
const symbol = {
|
|
115
118
|
name,
|
|
116
119
|
detail,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-symbols.js","sourceRoot":"","sources":["../../src/providers/document-symbols.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"document-symbols.js","sourceRoot":"","sources":["../../src/providers/document-symbols.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,15 @@ import type { NowlineLspServices } from '../nowline-lsp-module.js';
|
|
|
9
9
|
*
|
|
10
10
|
* - The `name=ID` token of an entity declaration.
|
|
11
11
|
* - The value of a reference property (`after:`, `before:`, `owner:`, etc.).
|
|
12
|
+
*
|
|
13
|
+
* Waves (specs/waves.md): a wave shows its position (`wave k of n`), title,
|
|
14
|
+
* description and member count; an item in a roadmap with waves shows its
|
|
15
|
+
* effective wave, or `background (no wave)`. Waves come from the file's own
|
|
16
|
+
* declarations only — the LSP does not resolve includes.
|
|
17
|
+
*
|
|
18
|
+
* Calendar declarations (`non-working`, `working`, specs/working-calendar.md):
|
|
19
|
+
* the declaration shows its id, title, and `date`, `every`, `start` and `end`,
|
|
20
|
+
* plus a note when its title is never drawn on the chart (§7.4).
|
|
12
21
|
*/
|
|
13
22
|
export declare class NowlineHoverProvider implements HoverProvider {
|
|
14
23
|
constructor(_services: NowlineLspServices);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../../src/providers/hover.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../../src/providers/hover.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAW,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAC;AAEvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAcnE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACtD,YAAY,SAAS,EAAE,kBAAkB,EAExC;IAED,eAAe,CACX,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,WAAW,EACnB,YAAY,CAAC,EAAE,iBAAiB,GACjC,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC,CAkBjC;IAED,OAAO,CAAC,QAAQ;CAuCnB"}
|
package/dist/providers/hover.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { assignWaves, isGroupBlock, isItemDeclaration, isNonWorkingDeclaration, isParallelBlock, isSwimlaneDeclaration, isWaveDeclaration, isWorkingDeclaration, ownWaves, singleLine, waveIndexMap, } from '@nowline/core';
|
|
2
|
+
import { classifyCalendarDeclaration } from '@nowline/core/internal';
|
|
1
3
|
import { MarkupKind } from '../lsp-protocol.js';
|
|
2
|
-
import { buildEntityIndex, declarationAt, entityKind, fileFromDocument, leafAt, propertyValueAt, propKey, REFERENCE_PROP_KEYS, } from '../references/ast-utils.js';
|
|
4
|
+
import { buildEntityIndex, declarationAt, entityKind, fileFromDocument, isCalendarDeclaration, leafAt, propertyValueAt, propKey, REFERENCE_PROP_KEYS, } from '../references/ast-utils.js';
|
|
3
5
|
/**
|
|
4
6
|
* Hover provider. Surfaces the resolved entity (kind + id + title), plus the
|
|
5
7
|
* subset of properties most authors care about while editing — status, owner,
|
|
@@ -7,6 +9,15 @@ import { buildEntityIndex, declarationAt, entityKind, fileFromDocument, leafAt,
|
|
|
7
9
|
*
|
|
8
10
|
* - The `name=ID` token of an entity declaration.
|
|
9
11
|
* - The value of a reference property (`after:`, `before:`, `owner:`, etc.).
|
|
12
|
+
*
|
|
13
|
+
* Waves (specs/waves.md): a wave shows its position (`wave k of n`), title,
|
|
14
|
+
* description and member count; an item in a roadmap with waves shows its
|
|
15
|
+
* effective wave, or `background (no wave)`. Waves come from the file's own
|
|
16
|
+
* declarations only — the LSP does not resolve includes.
|
|
17
|
+
*
|
|
18
|
+
* Calendar declarations (`non-working`, `working`, specs/working-calendar.md):
|
|
19
|
+
* the declaration shows its id, title, and `date`, `every`, `start` and `end`,
|
|
20
|
+
* plus a note when its title is never drawn on the chart (§7.4).
|
|
10
21
|
*/
|
|
11
22
|
export class NowlineHoverProvider {
|
|
12
23
|
constructor(_services) {
|
|
@@ -22,17 +33,17 @@ export class NowlineHoverProvider {
|
|
|
22
33
|
return undefined;
|
|
23
34
|
const decl = declarationAt(leaf);
|
|
24
35
|
if (decl)
|
|
25
|
-
return this.hoverFor(decl, leaf.range);
|
|
36
|
+
return this.hoverFor(file, decl, leaf.range);
|
|
26
37
|
const propHit = propertyValueAt(leaf);
|
|
27
38
|
if (propHit && REFERENCE_PROP_KEYS.has(propKey(propHit.prop))) {
|
|
28
39
|
const target = buildEntityIndex(file).get(propHit.value);
|
|
29
40
|
if (!target)
|
|
30
41
|
return undefined;
|
|
31
|
-
return this.hoverFor(target, leaf.range);
|
|
42
|
+
return this.hoverFor(file, target, leaf.range);
|
|
32
43
|
}
|
|
33
44
|
return undefined;
|
|
34
45
|
}
|
|
35
|
-
hoverFor(entity, range) {
|
|
46
|
+
hoverFor(file, entity, range) {
|
|
36
47
|
const kind = entityKind(entity);
|
|
37
48
|
const id = entity.name ?? '';
|
|
38
49
|
const title = entity.title;
|
|
@@ -41,18 +52,13 @@ export class NowlineHoverProvider {
|
|
|
41
52
|
lines.push(header);
|
|
42
53
|
if (title)
|
|
43
54
|
lines.push(`_${title}_`);
|
|
55
|
+
// Own paragraph so Markdown does not fold the wave lines into the title.
|
|
56
|
+
const waveInfo = waveLines(file, entity);
|
|
57
|
+
if (waveInfo.length)
|
|
58
|
+
lines.push('', ...waveInfo);
|
|
44
59
|
const props = entity
|
|
45
60
|
.properties ?? [];
|
|
46
|
-
const surfaced =
|
|
47
|
-
'status',
|
|
48
|
-
'owner',
|
|
49
|
-
'link',
|
|
50
|
-
'date',
|
|
51
|
-
'duration',
|
|
52
|
-
'size',
|
|
53
|
-
'effort',
|
|
54
|
-
'capacity',
|
|
55
|
-
];
|
|
61
|
+
const surfaced = isCalendarDeclaration(entity) ? CALENDAR_SURFACED : ITEM_SURFACED;
|
|
56
62
|
const rendered = [];
|
|
57
63
|
for (const key of surfaced) {
|
|
58
64
|
const prop = props.find((p) => propKey(p) === key);
|
|
@@ -66,6 +72,9 @@ export class NowlineHoverProvider {
|
|
|
66
72
|
lines.push('');
|
|
67
73
|
lines.push(...rendered);
|
|
68
74
|
}
|
|
75
|
+
const note = undrawnTitleNote(entity);
|
|
76
|
+
if (note)
|
|
77
|
+
lines.push('', `_${note}_`);
|
|
69
78
|
return {
|
|
70
79
|
range,
|
|
71
80
|
contents: {
|
|
@@ -75,4 +84,90 @@ export class NowlineHoverProvider {
|
|
|
75
84
|
};
|
|
76
85
|
}
|
|
77
86
|
}
|
|
87
|
+
const ITEM_SURFACED = ['status', 'owner', 'link', 'date', 'duration', 'size', 'effort', 'capacity'];
|
|
88
|
+
// A `non-working` / `working` declaration is described by its days, not by an
|
|
89
|
+
// item's status or duration (specs/working-calendar.md §4.1).
|
|
90
|
+
const CALENDAR_SURFACED = ['date', 'every', 'start', 'end'];
|
|
91
|
+
/**
|
|
92
|
+
* Why a calendar declaration's title is never drawn, or undefined when it is
|
|
93
|
+
* drawn, there is no title, or the shape is malformed (NW1, §4.1; core's
|
|
94
|
+
* `classifyCalendarDeclaration` reads the shape). Dated,
|
|
95
|
+
* titled declarations are labelled, `non-working` or `working`; a titled
|
|
96
|
+
* bounded recurrence is not (specs/working-calendar.md §7.4 "Which rules are
|
|
97
|
+
* labelled"). The open-ended week is the baseline and gets no note.
|
|
98
|
+
*/
|
|
99
|
+
function undrawnTitleNote(entity) {
|
|
100
|
+
if (!isNonWorkingDeclaration(entity) && !isWorkingDeclaration(entity))
|
|
101
|
+
return undefined;
|
|
102
|
+
if (!entity.title)
|
|
103
|
+
return undefined;
|
|
104
|
+
const { shape } = classifyCalendarDeclaration(entity);
|
|
105
|
+
if (shape === 'half-bounded-recurrence' || shape === 'bounded-recurrence') {
|
|
106
|
+
return 'Title not drawn on the chart: bounded recurrences are not labelled.';
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Wave lines for the hover: the wave summary on a wave declaration, the
|
|
112
|
+
* effective wave on an item. Empty when the file declares no waves.
|
|
113
|
+
*/
|
|
114
|
+
function waveLines(file, entity) {
|
|
115
|
+
if (!isWaveDeclaration(entity) && !isItemDeclaration(entity))
|
|
116
|
+
return [];
|
|
117
|
+
const waves = ownWaves(file);
|
|
118
|
+
if (waves.length === 0)
|
|
119
|
+
return [];
|
|
120
|
+
const waveIds = waveIndexMap(file);
|
|
121
|
+
const lanes = file.roadmapEntries.filter(isSwimlaneDeclaration);
|
|
122
|
+
const assignment = assignWaves(lanes, waveIds);
|
|
123
|
+
if (isWaveDeclaration(entity))
|
|
124
|
+
return waveSummary(entity, waves, waveIds, assignment);
|
|
125
|
+
const ew = assignment.waveOf.get(entity);
|
|
126
|
+
if (ew === undefined)
|
|
127
|
+
return ['background (no wave)'];
|
|
128
|
+
const wave = waves[ew - 1];
|
|
129
|
+
const source = waveSource(entity, assignment);
|
|
130
|
+
if (source === entity)
|
|
131
|
+
return [`wave "${wave.name}"`];
|
|
132
|
+
return [`wave "${wave.name}" (inherited from ${describeContainer(source)})`];
|
|
133
|
+
}
|
|
134
|
+
function waveSummary(wave, waves, waveIds, assignment) {
|
|
135
|
+
const k = wave.name ? waveIds.get(wave.name) : undefined;
|
|
136
|
+
// A repeated wave id (NL.E0300) only counts its first declaration.
|
|
137
|
+
if (k === undefined || waves[k - 1] !== wave)
|
|
138
|
+
return [];
|
|
139
|
+
const lines = [`wave ${k} of ${waves.length}`];
|
|
140
|
+
if (wave.description?.text)
|
|
141
|
+
lines.push('', wave.description.text);
|
|
142
|
+
let members = 0;
|
|
143
|
+
for (const [node, ew] of assignment.waveOf) {
|
|
144
|
+
if (ew === k && isItemDeclaration(node))
|
|
145
|
+
members++;
|
|
146
|
+
}
|
|
147
|
+
lines.push('', `${members} ${members === 1 ? 'member' : 'members'}`);
|
|
148
|
+
const labels = wave.properties.find((p) => propKey(p) === 'labels');
|
|
149
|
+
const labelIds = labels?.values ?? (labels?.value ? [labels.value] : []);
|
|
150
|
+
if (labelIds.length)
|
|
151
|
+
lines.push('', `labels: ${labelIds.join(', ')}`);
|
|
152
|
+
return lines;
|
|
153
|
+
}
|
|
154
|
+
// The node that sets an item's effective wave: the outermost of the item and
|
|
155
|
+
// its enclosing groups / parallels that has one. An enclosing container's wave
|
|
156
|
+
// wins over the item's own (specs/waves.md §4.4), and it reaches the item only
|
|
157
|
+
// through the containers in between.
|
|
158
|
+
function waveSource(item, assignment) {
|
|
159
|
+
let source = item;
|
|
160
|
+
let node = item.$container;
|
|
161
|
+
while ((isGroupBlock(node) || isParallelBlock(node)) && assignment.waveOf.has(node)) {
|
|
162
|
+
source = node;
|
|
163
|
+
node = node.$container;
|
|
164
|
+
}
|
|
165
|
+
return source;
|
|
166
|
+
}
|
|
167
|
+
function describeContainer(node) {
|
|
168
|
+
const kind = entityKind(node);
|
|
169
|
+
const named = node;
|
|
170
|
+
const label = named.name ?? (named.title === undefined ? undefined : singleLine(named.title));
|
|
171
|
+
return label ? `${kind} "${label}"` : kind;
|
|
172
|
+
}
|
|
78
173
|
//# sourceMappingURL=hover.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hover.js","sourceRoot":"","sources":["../../src/providers/hover.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hover.js","sourceRoot":"","sources":["../../src/providers/hover.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../src/providers/references.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../src/providers/references.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAanE;;;;;;;;GAQG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;IAChE,YAAY,SAAS,EAAE,kBAAkB,EAExC;IAED,cAAc,CACV,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,eAAe,EACvB,YAAY,CAAC,EAAE,iBAAiB,GACjC,YAAY,CAAC,QAAQ,EAAE,CAAC,CA4B1B;CACJ"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CstUtils } from 'langium';
|
|
2
2
|
import { Location } from '../lsp-protocol.js';
|
|
3
|
-
import { declarationAt, fileFromDocument, findDeclarationRange, leafAt, propertyValueAt, propKey, REFERENCE_PROP_KEYS, visitAllProperties, } from '../references/ast-utils.js';
|
|
3
|
+
import { declarationAt, fileFromDocument, findDeclarationRange, isCalendarDeclaration, leafAt, propertyValueAt, propKey, REFERENCE_PROP_KEYS, visitAllProperties, } from '../references/ast-utils.js';
|
|
4
4
|
/**
|
|
5
5
|
* Custom find-references provider. Resolves the symbol the cursor is on to a
|
|
6
6
|
* target id (either the declared name itself or the value the cursor sits on
|
|
@@ -46,6 +46,8 @@ export class NowlineReferencesProvider {
|
|
|
46
46
|
}
|
|
47
47
|
function resolveTargetId(leaf) {
|
|
48
48
|
const decl = declarationAt(leaf);
|
|
49
|
+
if (decl && isCalendarDeclaration(decl))
|
|
50
|
+
return undefined;
|
|
49
51
|
if (decl?.name)
|
|
50
52
|
return decl.name;
|
|
51
53
|
const propHit = propertyValueAt(leaf);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/providers/references.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/providers/references.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../src/providers/rename.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EACR,iBAAiB,EAEjB,mBAAmB,EACnB,KAAK,EACL,YAAY,EACZ,0BAA0B,EAE1B,aAAa,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../src/providers/rename.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EACR,iBAAiB,EAEjB,mBAAmB,EACnB,KAAK,EACL,YAAY,EACZ,0BAA0B,EAE1B,aAAa,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAanE;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IACxD,YAAY,SAAS,EAAE,kBAAkB,EAExC;IAED,aAAa,CACT,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,0BAA0B,GAAG,mBAAmB,EACxD,YAAY,CAAC,EAAE,iBAAiB,GACjC,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC,CAEjC;IAEK,MAAM,CACR,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,YAAY,EACpB,YAAY,CAAC,EAAE,iBAAiB,GACjC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAkCpC;CACJ"}
|
package/dist/providers/rename.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CstUtils } from 'langium';
|
|
2
|
-
import { declarationAt, fileFromDocument, findDeclarationRange, leafAt, propertyValueAt, propKey, REFERENCE_PROP_KEYS, visitAllProperties, } from '../references/ast-utils.js';
|
|
2
|
+
import { declarationAt, fileFromDocument, findDeclarationRange, isCalendarDeclaration, leafAt, propertyValueAt, propKey, REFERENCE_PROP_KEYS, visitAllProperties, } from '../references/ast-utils.js';
|
|
3
3
|
/**
|
|
4
4
|
* Rename an entity id (item, swimlane, anchor, etc.) and propagate the change
|
|
5
5
|
* to every reference position in the file. Refuses to rename when the cursor
|
|
@@ -56,7 +56,7 @@ function renameRangeAt(document, position) {
|
|
|
56
56
|
if (!leaf)
|
|
57
57
|
return undefined;
|
|
58
58
|
const decl = declarationAt(leaf);
|
|
59
|
-
if (decl
|
|
59
|
+
if (decl && !isCalendarDeclaration(decl) && decl.name === leaf.text) {
|
|
60
60
|
return { id: decl.name, range: leaf.range };
|
|
61
61
|
}
|
|
62
62
|
const hit = propertyValueAt(leaf);
|