@nowline/lsp 0.8.5 → 0.9.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.
Files changed (34) hide show
  1. package/dist/providers/completion.d.ts +7 -1
  2. package/dist/providers/completion.d.ts.map +1 -1
  3. package/dist/providers/completion.js +42 -32
  4. package/dist/providers/completion.js.map +1 -1
  5. package/dist/providers/definition.d.ts +1 -1
  6. package/dist/providers/definition.d.ts.map +1 -1
  7. package/dist/providers/definition.js +1 -1
  8. package/dist/providers/document-symbols.d.ts +2 -1
  9. package/dist/providers/document-symbols.d.ts.map +1 -1
  10. package/dist/providers/document-symbols.js +25 -22
  11. package/dist/providers/document-symbols.js.map +1 -1
  12. package/dist/providers/hover.d.ts +9 -0
  13. package/dist/providers/hover.d.ts.map +1 -1
  14. package/dist/providers/hover.js +109 -14
  15. package/dist/providers/hover.js.map +1 -1
  16. package/dist/providers/references.d.ts.map +1 -1
  17. package/dist/providers/references.js +3 -1
  18. package/dist/providers/references.js.map +1 -1
  19. package/dist/providers/rename.d.ts.map +1 -1
  20. package/dist/providers/rename.js +2 -2
  21. package/dist/providers/rename.js.map +1 -1
  22. package/dist/references/ast-utils.d.ts +41 -31
  23. package/dist/references/ast-utils.d.ts.map +1 -1
  24. package/dist/references/ast-utils.js +54 -129
  25. package/dist/references/ast-utils.js.map +1 -1
  26. package/dist/server.js.map +1 -1
  27. package/package.json +10 -10
  28. package/src/providers/completion.ts +42 -31
  29. package/src/providers/definition.ts +1 -1
  30. package/src/providers/document-symbols.ts +31 -21
  31. package/src/providers/hover.ts +124 -14
  32. package/src/providers/references.ts +2 -0
  33. package/src/providers/rename.ts +2 -1
  34. 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;AAmCnE;;;;;;;;;;;GAWG;AACH,qBAAa,yBAA0B,SAAQ,yBAAyB;gBACxD,QAAQ,EAAE,kBAAkB;cAIrB,aAAa,CAC5B,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,kBAAkB,GAC7B,YAAY,CAAC,IAAI,CAAC;IAQrB;;;OAGG;IACH,SAAS,CAAC,sBAAsB,CAC5B,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,kBAAkB,GAC7B,IAAI;CA4CV;AAED,MAAM,WAAW,oBAAoB;IACjC,GAAG,EAAE,MAAM,CAAC;CACf"}
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
- depends: new Set(['item', 'milestone', 'anchor', 'parallel', 'group']),
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
- if (hint.key === 'status') {
58
- for (const status of BUILTIN_STATUSES) {
66
+ const offer = (values, detail) => {
67
+ for (const value of values) {
59
68
  acceptor(context, {
60
- label: status,
69
+ label: value,
61
70
  kind: CompletionItemKind.EnumMember,
62
- detail: 'built-in status',
63
- insertText: status,
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":"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"}
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
- * `depends:[]`), look up the target id in the file-level entity index and
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 {
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/providers/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAWnE;;;;;;;GAOG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;gBACpD,SAAS,EAAE,kBAAkB;IAIzC,aAAa,CACT,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,gBAAgB,EACxB,YAAY,CAAC,EAAE,iBAAiB,GACjC,YAAY,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC;CAyB9C"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/providers/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAWnE;;;;;;;GAOG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;IAChE,YAAY,SAAS,EAAE,kBAAkB,EAExC;IAED,aAAa,CACT,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,gBAAgB,EACxB,YAAY,CAAC,EAAE,iBAAiB,GACjC,YAAY,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,CAwB1C;CACJ"}
@@ -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
- * `depends:[]`), look up the target id in the file-level entity index and
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":"AAoBA,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;AAGnE;;;;;;GAMG;AACH,qBAAa,6BAA8B,YAAW,sBAAsB;gBAC5D,SAAS,EAAE,kBAAkB;IAIzC,UAAU,CACN,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,oBAAoB,EAC7B,YAAY,CAAC,EAAE,iBAAiB,GACjC,YAAY,CAAC,cAAc,EAAE,CAAC;IAqBjC,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,YAAY;CAkBvB"}
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 ?? 'roadmap',
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
- const sym = this.simpleSymbol(lane, SymbolKind.Namespace, true);
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
- const sym = this.simpleSymbol(node, SymbolKind.Array, true);
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
- const sym = this.simpleSymbol(node, SymbolKind.Object, true);
103
- for (const child of node.content) {
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 ?? entityKind(entity);
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":"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"}
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":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,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;AAanE;;;;;;;GAOG;AACH,qBAAa,oBAAqB,YAAW,aAAa;gBAC1C,SAAS,EAAE,kBAAkB;IAIzC,eAAe,CACX,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,WAAW,EACnB,YAAY,CAAC,EAAE,iBAAiB,GACjC,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC;IAoBlC,OAAO,CAAC,QAAQ;CA2CnB"}
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"}
@@ -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":"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"}
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;AAYnE;;;;;;;;GAQG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;gBACpD,SAAS,EAAE,kBAAkB;IAIzC,cAAc,CACV,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,eAAe,EACvB,YAAY,CAAC,EAAE,iBAAiB,GACjC,YAAY,CAAC,QAAQ,EAAE,CAAC;CA6B9B"}
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;AAYnE;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,cAAc;gBAC5C,SAAS,EAAE,kBAAkB;IAIzC,aAAa,CACT,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,0BAA0B,GAAG,mBAAmB,EACxD,YAAY,CAAC,EAAE,iBAAiB,GACjC,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC;IAI5B,MAAM,CACR,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,YAAY,EACpB,YAAY,CAAC,EAAE,iBAAiB,GACjC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAmCxC"}
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"}
@@ -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?.name === leaf.text) {
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);