@codemirror/language 6.11.2 → 6.12.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/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## 6.12.0 (2025-12-22)
2
+
3
+ ### New features
4
+
5
+ `LRLanguage.reconfigure` now supports changing the language data associated with the language.
6
+
7
+ ## 6.11.3 (2025-08-15)
8
+
9
+ ### Bug fixes
10
+
11
+ Make the stream parser user 4 times smaller chunks to reduce the amount of re-parsed code on changes.
12
+
1
13
  ## 6.11.2 (2025-06-27)
2
14
 
3
15
  ### Bug fixes
package/dist/index.cjs CHANGED
@@ -158,25 +158,41 @@ A subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language)
158
158
  parsers.
159
159
  */
160
160
  class LRLanguage extends Language {
161
- constructor(data, parser, name) {
162
- super(data, parser, [], name);
161
+ constructor(data, parser, languageData, name) {
162
+ super(data, parser, languageData ? [data.of(languageData)] : [], name);
163
163
  this.parser = parser;
164
+ this.languageData = languageData;
164
165
  }
165
166
  /**
166
167
  Define a language from a parser.
167
168
  */
168
169
  static define(spec) {
169
- let data = defineLanguageFacet(spec.languageData);
170
+ let data = defineLanguageFacet();
170
171
  return new LRLanguage(data, spec.parser.configure({
171
172
  props: [languageDataProp.add(type => type.isTop ? data : undefined)]
172
- }), spec.name);
173
+ }), spec.languageData || null, spec.name);
173
174
  }
174
175
  /**
175
176
  Create a new instance of this language with a reconfigured
176
- version of its parser and optionally a new name.
177
+ version of its parser, language data, and name.
178
+
179
+ When `languageData` is given, any property set to `undefined`
180
+ in it will be removed from the language's
181
+ [data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), any other property
182
+ is added.
177
183
  */
178
184
  configure(options, name) {
179
- return new LRLanguage(this.data, this.parser.configure(options), name || this.name);
185
+ let { languageData } = this;
186
+ if (options.languageData) {
187
+ languageData = {};
188
+ for (let prop in options.languageData)
189
+ if (options.languageData[prop] !== undefined)
190
+ languageData[prop] = options.languageData[prop];
191
+ for (let prop in this.languageData)
192
+ if (!(prop in options.languageData))
193
+ languageData[prop] = this.languageData[prop];
194
+ }
195
+ return new LRLanguage(this.data, this.parser.configure(options), languageData, name || this.name);
180
196
  }
181
197
  get allowsNesting() { return this.parser.hasWrappers(); }
182
198
  }
@@ -1657,7 +1673,7 @@ const baseTheme$1 = view.EditorView.baseTheme({
1657
1673
  });
1658
1674
 
1659
1675
  /**
1660
- A highlight style associates CSS styles with higlighting
1676
+ A highlight style associates CSS styles with highlighting
1661
1677
  [tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).
1662
1678
  */
1663
1679
  class HighlightStyle {
@@ -2209,14 +2225,14 @@ A [language](https://codemirror.net/6/docs/ref/#language.Language) class based o
2209
2225
  */
2210
2226
  class StreamLanguage extends Language {
2211
2227
  constructor(parser) {
2212
- let data = defineLanguageFacet(parser.languageData);
2228
+ let data = defineLanguageFacet();
2213
2229
  let p = fullParser(parser), self;
2214
2230
  let impl = new class extends common.Parser {
2215
2231
  createParse(input, fragments, ranges) {
2216
2232
  return new Parse(self, input, fragments, ranges);
2217
2233
  }
2218
2234
  };
2219
- super(data, impl, [], parser.name);
2235
+ super(data, impl, parser.languageData ? [data.of(parser.languageData)] : [], parser.name);
2220
2236
  this.topNode = docID(data, this);
2221
2237
  self = this;
2222
2238
  this.streamParser = p;
@@ -2340,7 +2356,7 @@ class Parse {
2340
2356
  advance() {
2341
2357
  let context = ParseContext.get();
2342
2358
  let parseEnd = this.stoppedAt == null ? this.to : Math.min(this.to, this.stoppedAt);
2343
- let end = Math.min(parseEnd, this.chunkStart + 2048 /* C.ChunkSize */);
2359
+ let end = Math.min(parseEnd, this.chunkStart + 512 /* C.ChunkSize */);
2344
2360
  if (context)
2345
2361
  end = Math.min(end, context.viewport.to);
2346
2362
  while (this.parsedPos < end)
@@ -2446,7 +2462,7 @@ class Parse {
2446
2462
  length: this.parsedPos - this.chunkStart,
2447
2463
  nodeSet,
2448
2464
  topID: 0,
2449
- maxBufferLength: 2048 /* C.ChunkSize */,
2465
+ maxBufferLength: 512 /* C.ChunkSize */,
2450
2466
  reused: this.chunkReused
2451
2467
  });
2452
2468
  tree = new common.Tree(tree.type, tree.children, tree.positions, tree.length, [[this.lang.stateAfter, this.lang.streamParser.copyState(this.state)]]);
package/dist/index.d.cts CHANGED
@@ -143,6 +143,7 @@ parsers.
143
143
  */
144
144
  declare class LRLanguage extends Language {
145
145
  readonly parser: LRParser;
146
+ private languageData;
146
147
  private constructor();
147
148
  /**
148
149
  Define a language from a parser.
@@ -168,9 +169,18 @@ declare class LRLanguage extends Language {
168
169
  }): LRLanguage;
169
170
  /**
170
171
  Create a new instance of this language with a reconfigured
171
- version of its parser and optionally a new name.
172
+ version of its parser, language data, and name.
173
+
174
+ When `languageData` is given, any property set to `undefined`
175
+ in it will be removed from the language's
176
+ [data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), any other property
177
+ is added.
172
178
  */
173
- configure(options: ParserConfig, name?: string): LRLanguage;
179
+ configure(options: ParserConfig & {
180
+ languageData?: {
181
+ [name: string]: any;
182
+ };
183
+ }, name?: string): LRLanguage;
174
184
  get allowsNesting(): boolean;
175
185
  }
176
186
  /**
@@ -828,7 +838,7 @@ to fold or unfold the line).
828
838
  declare function foldGutter(config?: FoldGutterConfig): Extension;
829
839
 
830
840
  /**
831
- A highlight style associates CSS styles with higlighting
841
+ A highlight style associates CSS styles with highlighting
832
842
  [tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).
833
843
  */
834
844
  declare class HighlightStyle implements Highlighter {
package/dist/index.d.ts CHANGED
@@ -143,6 +143,7 @@ parsers.
143
143
  */
144
144
  declare class LRLanguage extends Language {
145
145
  readonly parser: LRParser;
146
+ private languageData;
146
147
  private constructor();
147
148
  /**
148
149
  Define a language from a parser.
@@ -168,9 +169,18 @@ declare class LRLanguage extends Language {
168
169
  }): LRLanguage;
169
170
  /**
170
171
  Create a new instance of this language with a reconfigured
171
- version of its parser and optionally a new name.
172
+ version of its parser, language data, and name.
173
+
174
+ When `languageData` is given, any property set to `undefined`
175
+ in it will be removed from the language's
176
+ [data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), any other property
177
+ is added.
172
178
  */
173
- configure(options: ParserConfig, name?: string): LRLanguage;
179
+ configure(options: ParserConfig & {
180
+ languageData?: {
181
+ [name: string]: any;
182
+ };
183
+ }, name?: string): LRLanguage;
174
184
  get allowsNesting(): boolean;
175
185
  }
176
186
  /**
@@ -828,7 +838,7 @@ to fold or unfold the line).
828
838
  declare function foldGutter(config?: FoldGutterConfig): Extension;
829
839
 
830
840
  /**
831
- A highlight style associates CSS styles with higlighting
841
+ A highlight style associates CSS styles with highlighting
832
842
  [tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).
833
843
  */
834
844
  declare class HighlightStyle implements Highlighter {
package/dist/index.js CHANGED
@@ -156,25 +156,41 @@ A subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language)
156
156
  parsers.
157
157
  */
158
158
  class LRLanguage extends Language {
159
- constructor(data, parser, name) {
160
- super(data, parser, [], name);
159
+ constructor(data, parser, languageData, name) {
160
+ super(data, parser, languageData ? [data.of(languageData)] : [], name);
161
161
  this.parser = parser;
162
+ this.languageData = languageData;
162
163
  }
163
164
  /**
164
165
  Define a language from a parser.
165
166
  */
166
167
  static define(spec) {
167
- let data = defineLanguageFacet(spec.languageData);
168
+ let data = defineLanguageFacet();
168
169
  return new LRLanguage(data, spec.parser.configure({
169
170
  props: [languageDataProp.add(type => type.isTop ? data : undefined)]
170
- }), spec.name);
171
+ }), spec.languageData || null, spec.name);
171
172
  }
172
173
  /**
173
174
  Create a new instance of this language with a reconfigured
174
- version of its parser and optionally a new name.
175
+ version of its parser, language data, and name.
176
+
177
+ When `languageData` is given, any property set to `undefined`
178
+ in it will be removed from the language's
179
+ [data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), any other property
180
+ is added.
175
181
  */
176
182
  configure(options, name) {
177
- return new LRLanguage(this.data, this.parser.configure(options), name || this.name);
183
+ let { languageData } = this;
184
+ if (options.languageData) {
185
+ languageData = {};
186
+ for (let prop in options.languageData)
187
+ if (options.languageData[prop] !== undefined)
188
+ languageData[prop] = options.languageData[prop];
189
+ for (let prop in this.languageData)
190
+ if (!(prop in options.languageData))
191
+ languageData[prop] = this.languageData[prop];
192
+ }
193
+ return new LRLanguage(this.data, this.parser.configure(options), languageData, name || this.name);
178
194
  }
179
195
  get allowsNesting() { return this.parser.hasWrappers(); }
180
196
  }
@@ -1655,7 +1671,7 @@ const baseTheme$1 = /*@__PURE__*/EditorView.baseTheme({
1655
1671
  });
1656
1672
 
1657
1673
  /**
1658
- A highlight style associates CSS styles with higlighting
1674
+ A highlight style associates CSS styles with highlighting
1659
1675
  [tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).
1660
1676
  */
1661
1677
  class HighlightStyle {
@@ -2207,14 +2223,14 @@ A [language](https://codemirror.net/6/docs/ref/#language.Language) class based o
2207
2223
  */
2208
2224
  class StreamLanguage extends Language {
2209
2225
  constructor(parser) {
2210
- let data = defineLanguageFacet(parser.languageData);
2226
+ let data = defineLanguageFacet();
2211
2227
  let p = fullParser(parser), self;
2212
2228
  let impl = new class extends Parser {
2213
2229
  createParse(input, fragments, ranges) {
2214
2230
  return new Parse(self, input, fragments, ranges);
2215
2231
  }
2216
2232
  };
2217
- super(data, impl, [], parser.name);
2233
+ super(data, impl, parser.languageData ? [data.of(parser.languageData)] : [], parser.name);
2218
2234
  this.topNode = docID(data, this);
2219
2235
  self = this;
2220
2236
  this.streamParser = p;
@@ -2338,7 +2354,7 @@ class Parse {
2338
2354
  advance() {
2339
2355
  let context = ParseContext.get();
2340
2356
  let parseEnd = this.stoppedAt == null ? this.to : Math.min(this.to, this.stoppedAt);
2341
- let end = Math.min(parseEnd, this.chunkStart + 2048 /* C.ChunkSize */);
2357
+ let end = Math.min(parseEnd, this.chunkStart + 512 /* C.ChunkSize */);
2342
2358
  if (context)
2343
2359
  end = Math.min(end, context.viewport.to);
2344
2360
  while (this.parsedPos < end)
@@ -2444,7 +2460,7 @@ class Parse {
2444
2460
  length: this.parsedPos - this.chunkStart,
2445
2461
  nodeSet,
2446
2462
  topID: 0,
2447
- maxBufferLength: 2048 /* C.ChunkSize */,
2463
+ maxBufferLength: 512 /* C.ChunkSize */,
2448
2464
  reused: this.chunkReused
2449
2465
  });
2450
2466
  tree = new Tree(tree.type, tree.children, tree.positions, tree.length, [[this.lang.stateAfter, this.lang.streamParser.copyState(this.state)]]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codemirror/language",
3
- "version": "6.11.2",
3
+ "version": "6.12.0",
4
4
  "description": "Language support infrastructure for the CodeMirror code editor",
5
5
  "scripts": {
6
6
  "test": "cm-runtests",