@codemirror/language
Advanced tools
Comparing version 0.19.4 to 0.19.5
@@ -0,1 +1,9 @@ | ||
## 0.19.5 (2021-11-17) | ||
### New features | ||
The new function `syntaxTreeAvailable` can be used to check if a fully-parsed syntax tree is available up to a given document position. | ||
The module now exports `syntaxParserRunning`, which tells you whether the background parser is still planning to do more work for a given editor view. | ||
## 0.19.4 (2021-11-13) | ||
@@ -2,0 +10,0 @@ |
import { NodeProp, NodeType, Parser, Tree, TreeFragment, Input, PartialParse, SyntaxNode } from '@lezer/common'; | ||
import { LRParser, ParserConfig } from '@lezer/lr'; | ||
import { Facet, Extension, EditorState } from '@codemirror/state'; | ||
import { EditorView } from '@codemirror/view'; | ||
@@ -142,2 +143,20 @@ /** | ||
/** | ||
Queries whether there is a full syntax tree available up to the | ||
given document position. If there isn't, the background parse | ||
process _might_ still be working and update the tree further, but | ||
there is no guarantee of that—the parser will [stop | ||
working](https://codemirror.net/6/docs/ref/#language.syntaxParserStopped) when it has spent a | ||
certain amount of time or has moved beyond the visible viewport. | ||
Always returns false if no language has been enabled. | ||
*/ | ||
declare function syntaxTreeAvailable(state: EditorState, upto?: number): boolean; | ||
/** | ||
Tells you whether the language parser is planning to do more | ||
parsing work (in a `requestIdleCallback` pseudo-thread) or has | ||
stopped running, either because it parsed the entire document, | ||
because it spent too much time and was cut off, or because there | ||
is no language parser enabled. | ||
*/ | ||
declare function syntaxParserRunning(view: EditorView): boolean; | ||
/** | ||
A parse context provided to parsers working on the editor content. | ||
@@ -594,2 +613,2 @@ */ | ||
export { IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, TreeIndentContext, continuedIndent, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldInside, foldNodeProp, foldService, foldable, getIndentUnit, getIndentation, indentNodeProp, indentOnInput, indentService, indentString, indentUnit, language, languageDataProp, syntaxTree }; | ||
export { IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, TreeIndentContext, continuedIndent, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldInside, foldNodeProp, foldService, foldable, getIndentUnit, getIndentation, indentNodeProp, indentOnInput, indentService, indentString, indentUnit, language, languageDataProp, syntaxParserRunning, syntaxTree, syntaxTreeAvailable }; |
import { NodeProp, Tree, TreeFragment, Parser, NodeType } from '@lezer/common'; | ||
import { StateEffect, StateField, Facet, EditorState } from '@codemirror/state'; | ||
import { ViewPlugin } from '@codemirror/view'; | ||
import { ViewPlugin, logException } from '@codemirror/view'; | ||
import { countColumn } from '@codemirror/text'; | ||
@@ -180,2 +180,26 @@ | ||
} | ||
/** | ||
Queries whether there is a full syntax tree available up to the | ||
given document position. If there isn't, the background parse | ||
process _might_ still be working and update the tree further, but | ||
there is no guarantee of that—the parser will [stop | ||
working](https://codemirror.net/6/docs/ref/#language.syntaxParserStopped) when it has spent a | ||
certain amount of time or has moved beyond the visible viewport. | ||
Always returns false if no language has been enabled. | ||
*/ | ||
function syntaxTreeAvailable(state, upto = state.doc.length) { | ||
var _a; | ||
return ((_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context.isDone(upto)) || false; | ||
} | ||
/** | ||
Tells you whether the language parser is planning to do more | ||
parsing work (in a `requestIdleCallback` pseudo-thread) or has | ||
stopped running, either because it parsed the entire document, | ||
because it spent too much time and was cut off, or because there | ||
is no language parser enabled. | ||
*/ | ||
function syntaxParserRunning(view) { | ||
var _a; | ||
return ((_a = view.plugin(parseWorker)) === null || _a === void 0 ? void 0 : _a.isWorking()) || false; | ||
} | ||
// Lezer-style Input object for a Text document. | ||
@@ -491,2 +515,3 @@ class DocInput { | ||
this.working = -1; | ||
this.workScheduled = 0; | ||
// End of the current time chunk | ||
@@ -542,3 +567,7 @@ this.chunkEnd = -1; | ||
if (cx.scheduleOn) { | ||
cx.scheduleOn.then(() => this.scheduleWork()); | ||
this.workScheduled++; | ||
cx.scheduleOn | ||
.then(() => this.scheduleWork()) | ||
.catch(err => logException(this.view.state, err)) | ||
.then(() => this.workScheduled--); | ||
cx.scheduleOn = null; | ||
@@ -551,2 +580,5 @@ } | ||
} | ||
isWorking() { | ||
return this.working >= 0 || this.workScheduled > 0; | ||
} | ||
}, { | ||
@@ -1111,2 +1143,2 @@ eventHandlers: { focus() { this.scheduleWork(); } } | ||
export { IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, TreeIndentContext, continuedIndent, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldInside, foldNodeProp, foldService, foldable, getIndentUnit, getIndentation, indentNodeProp, indentOnInput, indentService, indentString, indentUnit, language, languageDataProp, syntaxTree }; | ||
export { IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, TreeIndentContext, continuedIndent, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldInside, foldNodeProp, foldService, foldable, getIndentUnit, getIndentation, indentNodeProp, indentOnInput, indentService, indentString, indentUnit, language, languageDataProp, syntaxParserRunning, syntaxTree, syntaxTreeAvailable }; |
{ | ||
"name": "@codemirror/language", | ||
"version": "0.19.4", | ||
"version": "0.19.5", | ||
"description": "Language support infrastructure for the CodeMirror code editor", | ||
@@ -5,0 +5,0 @@ "scripts": { |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
114614
2900
0