mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-06 03:50:04 +02:00
npm update
This commit is contained in:
parent
0cdd3e9fee
commit
4696ba952f
1437 changed files with 32727 additions and 1248226 deletions
18
node_modules/@codemirror/language/CHANGELOG.md
generated
vendored
18
node_modules/@codemirror/language/CHANGELOG.md
generated
vendored
|
@ -1,3 +1,21 @@
|
|||
## 6.8.0 (2023-06-12)
|
||||
|
||||
### New features
|
||||
|
||||
The new `baseIndentFor` method in `TreeIndentContext` can be used to find the base indentation for an arbitrary node.
|
||||
|
||||
## 6.7.0 (2023-05-19)
|
||||
|
||||
### New features
|
||||
|
||||
Export `DocInput` class for feeding editor documents to a Lezer parser.
|
||||
|
||||
## 6.6.0 (2023-02-13)
|
||||
|
||||
### New features
|
||||
|
||||
Syntax-driven language data queries now support sublanguages, which make it possible to return different data for specific parts of the tree produced by a single language.
|
||||
|
||||
## 6.5.0 (2023-02-07)
|
||||
|
||||
### Bug fixes
|
||||
|
|
97
node_modules/@codemirror/language/dist/index.cjs
generated
vendored
97
node_modules/@codemirror/language/dist/index.cjs
generated
vendored
|
@ -28,6 +28,11 @@ function defineLanguageFacet(baseData) {
|
|||
});
|
||||
}
|
||||
/**
|
||||
Syntax node prop used to register sublanguages. Should be added to
|
||||
the top level node type for the language.
|
||||
*/
|
||||
const sublanguageProp = new common.NodeProp();
|
||||
/**
|
||||
A language object manages parsing and per-language
|
||||
[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is
|
||||
managed as a [Lezer](https://lezer.codemirror.net) tree. The class
|
||||
|
@ -64,14 +69,28 @@ class Language {
|
|||
this.parser = parser;
|
||||
this.extension = [
|
||||
language.of(this),
|
||||
state.EditorState.languageData.of((state, pos, side) => state.facet(languageDataFacetAt(state, pos, side)))
|
||||
state.EditorState.languageData.of((state, pos, side) => {
|
||||
let top = topNodeAt(state, pos, side), data = top.type.prop(languageDataProp);
|
||||
if (!data)
|
||||
return [];
|
||||
let base = state.facet(data), sub = top.type.prop(sublanguageProp);
|
||||
if (sub) {
|
||||
let innerNode = top.resolve(pos - top.from, side);
|
||||
for (let sublang of sub)
|
||||
if (sublang.test(innerNode, state)) {
|
||||
let data = state.facet(sublang.facet);
|
||||
return sublang.type == "replace" ? data : data.concat(base);
|
||||
}
|
||||
}
|
||||
return base;
|
||||
})
|
||||
].concat(extraExtensions);
|
||||
}
|
||||
/**
|
||||
Query whether this language is active at the given position.
|
||||
*/
|
||||
isActiveAt(state, pos, side = -1) {
|
||||
return languageDataFacetAt(state, pos, side) == this.data;
|
||||
return topNodeAt(state, pos, side).type.prop(languageDataProp) == this.data;
|
||||
}
|
||||
/**
|
||||
Find the document regions that were parsed using this language.
|
||||
|
@ -126,16 +145,14 @@ class Language {
|
|||
@internal
|
||||
*/
|
||||
Language.setState = state.StateEffect.define();
|
||||
function languageDataFacetAt(state, pos, side) {
|
||||
let topLang = state.facet(language);
|
||||
if (!topLang)
|
||||
return null;
|
||||
let facet = topLang.data;
|
||||
if (topLang.allowsNesting) {
|
||||
for (let node = syntaxTree(state).topNode; node; node = node.enter(pos, side, common.IterMode.ExcludeBuffers))
|
||||
facet = node.type.prop(languageDataProp) || facet;
|
||||
function topNodeAt(state, pos, side) {
|
||||
let topLang = state.facet(language), tree = syntaxTree(state).topNode;
|
||||
if (!topLang || topLang.allowsNesting) {
|
||||
for (let node = tree; node; node = node.enter(pos, side, common.IterMode.ExcludeBuffers))
|
||||
if (node.type.isTop)
|
||||
tree = node;
|
||||
}
|
||||
return facet;
|
||||
return tree;
|
||||
}
|
||||
/**
|
||||
A subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language) for use with Lezer
|
||||
|
@ -227,8 +244,15 @@ 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.
|
||||
/**
|
||||
Lezer-style
|
||||
[`Input`](https://lezer.codemirror.net/docs/ref#common.Input)
|
||||
object for a [`Text`](https://codemirror.net/6/docs/ref/#state.Text) object.
|
||||
*/
|
||||
class DocInput {
|
||||
/**
|
||||
Create an input object for the given document.
|
||||
*/
|
||||
constructor(doc) {
|
||||
this.doc = doc;
|
||||
this.cursorPos = 0;
|
||||
|
@ -514,14 +538,14 @@ class LanguageState {
|
|||
// state updates with parse work beyond the viewport.
|
||||
let upto = this.context.treeLen == tr.startState.doc.length ? undefined
|
||||
: Math.max(tr.changes.mapPos(this.context.treeLen), newCx.viewport.to);
|
||||
if (!newCx.work(20 /* Work.Apply */, upto))
|
||||
if (!newCx.work(20 /* Apply */, upto))
|
||||
newCx.takeTree();
|
||||
return new LanguageState(newCx);
|
||||
}
|
||||
static init(state) {
|
||||
let vpTo = Math.min(3000 /* Work.InitViewport */, state.doc.length);
|
||||
let vpTo = Math.min(3000 /* InitViewport */, state.doc.length);
|
||||
let parseState = ParseContext.create(state.facet(language).parser, state, { from: 0, to: vpTo });
|
||||
if (!parseState.work(20 /* Work.Apply */, vpTo))
|
||||
if (!parseState.work(20 /* Apply */, vpTo))
|
||||
parseState.takeTree();
|
||||
return new LanguageState(parseState);
|
||||
}
|
||||
|
@ -538,14 +562,14 @@ Language.state = state.StateField.define({
|
|||
}
|
||||
});
|
||||
let requestIdle = (callback) => {
|
||||
let timeout = setTimeout(() => callback(), 500 /* Work.MaxPause */);
|
||||
let timeout = setTimeout(() => callback(), 500 /* MaxPause */);
|
||||
return () => clearTimeout(timeout);
|
||||
};
|
||||
if (typeof requestIdleCallback != "undefined")
|
||||
requestIdle = (callback) => {
|
||||
let idle = -1, timeout = setTimeout(() => {
|
||||
idle = requestIdleCallback(callback, { timeout: 500 /* Work.MaxPause */ - 100 /* Work.MinPause */ });
|
||||
}, 100 /* Work.MinPause */);
|
||||
idle = requestIdleCallback(callback, { timeout: 500 /* MaxPause */ - 100 /* MinPause */ });
|
||||
}, 100 /* MinPause */);
|
||||
return () => idle < 0 ? clearTimeout(timeout) : cancelIdleCallback(idle);
|
||||
};
|
||||
const isInputPending = typeof navigator != "undefined" && ((_a = navigator.scheduling) === null || _a === void 0 ? void 0 : _a.isInputPending)
|
||||
|
@ -568,7 +592,7 @@ const parseWorker = view.ViewPlugin.fromClass(class ParseWorker {
|
|||
this.scheduleWork();
|
||||
if (update.docChanged) {
|
||||
if (this.view.hasFocus)
|
||||
this.chunkBudget += 50 /* Work.ChangeBonus */;
|
||||
this.chunkBudget += 50 /* ChangeBonus */;
|
||||
this.scheduleWork();
|
||||
}
|
||||
this.checkAsyncSchedule(cx);
|
||||
|
@ -584,19 +608,19 @@ const parseWorker = view.ViewPlugin.fromClass(class ParseWorker {
|
|||
this.working = null;
|
||||
let now = Date.now();
|
||||
if (this.chunkEnd < now && (this.chunkEnd < 0 || this.view.hasFocus)) { // Start a new chunk
|
||||
this.chunkEnd = now + 30000 /* Work.ChunkTime */;
|
||||
this.chunkBudget = 3000 /* Work.ChunkBudget */;
|
||||
this.chunkEnd = now + 30000 /* ChunkTime */;
|
||||
this.chunkBudget = 3000 /* ChunkBudget */;
|
||||
}
|
||||
if (this.chunkBudget <= 0)
|
||||
return; // No more budget
|
||||
let { state, viewport: { to: vpTo } } = this.view, field = state.field(Language.state);
|
||||
if (field.tree == field.context.tree && field.context.isDone(vpTo + 100000 /* Work.MaxParseAhead */))
|
||||
if (field.tree == field.context.tree && field.context.isDone(vpTo + 100000 /* MaxParseAhead */))
|
||||
return;
|
||||
let endTime = Date.now() + Math.min(this.chunkBudget, 100 /* Work.Slice */, deadline && !isInputPending ? Math.max(25 /* Work.MinSlice */, deadline.timeRemaining() - 5) : 1e9);
|
||||
let endTime = Date.now() + Math.min(this.chunkBudget, 100 /* Slice */, deadline && !isInputPending ? Math.max(25 /* MinSlice */, deadline.timeRemaining() - 5) : 1e9);
|
||||
let viewportFirst = field.context.treeLen < vpTo && state.doc.length > vpTo + 1000;
|
||||
let done = field.context.work(() => {
|
||||
return isInputPending && isInputPending() || Date.now() > endTime;
|
||||
}, vpTo + (viewportFirst ? 0 : 100000 /* Work.MaxParseAhead */));
|
||||
}, vpTo + (viewportFirst ? 0 : 100000 /* MaxParseAhead */));
|
||||
this.chunkBudget -= Date.now() - now;
|
||||
if (done || this.chunkBudget <= 0) {
|
||||
field.context.takeTree();
|
||||
|
@ -1038,13 +1062,20 @@ class TreeIndentContext extends IndentContext {
|
|||
on if it is covered by another such node.
|
||||
*/
|
||||
get baseIndent() {
|
||||
let line = this.state.doc.lineAt(this.node.from);
|
||||
return this.baseIndentFor(this.node);
|
||||
}
|
||||
/**
|
||||
Get the indentation for the reference line of the given node
|
||||
(see [`baseIndent`](https://codemirror.net/6/docs/ref/#language.TreeIndentContext.baseIndent)).
|
||||
*/
|
||||
baseIndentFor(node) {
|
||||
let line = this.state.doc.lineAt(node.from);
|
||||
// Skip line starts that are covered by a sibling (or cousin, etc)
|
||||
for (;;) {
|
||||
let atBreak = this.node.resolve(line.from);
|
||||
let atBreak = node.resolve(line.from);
|
||||
while (atBreak.parent && atBreak.parent.from == atBreak.from)
|
||||
atBreak = atBreak.parent;
|
||||
if (isParent(atBreak, this.node))
|
||||
if (isParent(atBreak, node))
|
||||
break;
|
||||
line = this.state.doc.lineAt(atBreak.from);
|
||||
}
|
||||
|
@ -2176,7 +2207,7 @@ class StreamLanguage extends Language {
|
|||
state = this.streamParser.startState(cx.unit);
|
||||
statePos = 0;
|
||||
}
|
||||
if (pos - statePos > 10000 /* C.MaxIndentScanDist */)
|
||||
if (pos - statePos > 10000 /* MaxIndentScanDist */)
|
||||
return null;
|
||||
while (statePos < pos) {
|
||||
let line = cx.state.doc.lineAt(statePos), end = Math.min(pos, line.to);
|
||||
|
@ -2258,7 +2289,7 @@ class Parse {
|
|||
this.chunks.push(tree.children[i]);
|
||||
this.chunkPos.push(tree.positions[i]);
|
||||
}
|
||||
if (context && this.parsedPos < context.viewport.from - 100000 /* C.MaxDistanceBeforeViewport */) {
|
||||
if (context && this.parsedPos < context.viewport.from - 100000 /* MaxDistanceBeforeViewport */) {
|
||||
this.state = this.lang.streamParser.startState(getIndentUnit(context.state));
|
||||
context.skipUntilInView(this.parsedPos, context.viewport.from);
|
||||
this.parsedPos = context.viewport.from;
|
||||
|
@ -2268,7 +2299,7 @@ class Parse {
|
|||
advance() {
|
||||
let context = ParseContext.get();
|
||||
let parseEnd = this.stoppedAt == null ? this.to : Math.min(this.to, this.stoppedAt);
|
||||
let end = Math.min(parseEnd, this.chunkStart + 2048 /* C.ChunkSize */);
|
||||
let end = Math.min(parseEnd, this.chunkStart + 2048 /* ChunkSize */);
|
||||
if (context)
|
||||
end = Math.min(end, context.viewport.to);
|
||||
while (this.parsedPos < end)
|
||||
|
@ -2352,7 +2383,7 @@ class Parse {
|
|||
let token = readToken(streamParser.token, stream, this.state);
|
||||
if (token)
|
||||
offset = this.emitToken(this.lang.tokenTable.resolve(token), this.parsedPos + stream.start, this.parsedPos + stream.pos, 4, offset);
|
||||
if (stream.start > 10000 /* C.MaxLineLength */)
|
||||
if (stream.start > 10000 /* MaxLineLength */)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -2368,7 +2399,7 @@ class Parse {
|
|||
length: this.parsedPos - this.chunkStart,
|
||||
nodeSet,
|
||||
topID: 0,
|
||||
maxBufferLength: 2048 /* C.ChunkSize */,
|
||||
maxBufferLength: 2048 /* ChunkSize */,
|
||||
reused: this.chunkReused
|
||||
});
|
||||
tree = new common.Tree(tree.type, tree.children, tree.positions, tree.length, [[this.lang.stateAfter, this.lang.streamParser.copyState(this.state)]]);
|
||||
|
@ -2463,6 +2494,7 @@ function docID(data) {
|
|||
return type;
|
||||
}
|
||||
|
||||
exports.DocInput = DocInput;
|
||||
exports.HighlightStyle = HighlightStyle;
|
||||
exports.IndentContext = IndentContext;
|
||||
exports.LRLanguage = LRLanguage;
|
||||
|
@ -2506,6 +2538,7 @@ exports.indentUnit = indentUnit;
|
|||
exports.language = language;
|
||||
exports.languageDataProp = languageDataProp;
|
||||
exports.matchBrackets = matchBrackets;
|
||||
exports.sublanguageProp = sublanguageProp;
|
||||
exports.syntaxHighlighting = syntaxHighlighting;
|
||||
exports.syntaxParserRunning = syntaxParserRunning;
|
||||
exports.syntaxTree = syntaxTree;
|
||||
|
|
1185
node_modules/@codemirror/language/dist/index.d.cts
generated
vendored
Normal file
1185
node_modules/@codemirror/language/dist/index.d.cts
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
69
node_modules/@codemirror/language/dist/index.d.ts
generated
vendored
69
node_modules/@codemirror/language/dist/index.d.ts
generated
vendored
|
@ -1,7 +1,7 @@
|
|||
import { NodeProp, Parser, Tree, TreeFragment, SyntaxNode, NodeType } from '@lezer/common';
|
||||
import { NodeProp, SyntaxNode, Parser, Tree, Input, TreeFragment, NodeType } from '@lezer/common';
|
||||
import { LRParser, ParserConfig } from '@lezer/lr';
|
||||
import * as _codemirror_state from '@codemirror/state';
|
||||
import { Facet, Extension, EditorState, StateField, Range } from '@codemirror/state';
|
||||
import { Facet, EditorState, Extension, Text, StateField, Range } from '@codemirror/state';
|
||||
import { EditorView, DecorationSet, Command, KeyBinding, ViewUpdate, BlockInfo, Decoration } from '@codemirror/view';
|
||||
import { Highlighter, Tag } from '@lezer/highlight';
|
||||
import { StyleModule, StyleSpec } from 'style-mod';
|
||||
|
@ -31,6 +31,44 @@ declare function defineLanguageFacet(baseData?: {
|
|||
[name: string]: any;
|
||||
}[]>;
|
||||
/**
|
||||
Some languages need to return different [language
|
||||
data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) for some parts of their
|
||||
tree. Sublanguages, registered by adding a [node
|
||||
prop](https://codemirror.net/6/docs/ref/#language.sublanguageProp) to the language's top syntax
|
||||
node, provide a mechanism to do this.
|
||||
|
||||
(Note that when using nested parsing, where nested syntax is
|
||||
parsed by a different parser and has its own top node type, you
|
||||
don't need a sublanguage.)
|
||||
*/
|
||||
interface Sublanguage {
|
||||
/**
|
||||
Determines whether the data provided by this sublanguage should
|
||||
completely replace the regular data or be added to it (with
|
||||
higher-precedence). The default is `"extend"`.
|
||||
*/
|
||||
type?: "replace" | "extend";
|
||||
/**
|
||||
A predicate that returns whether the node at the queried
|
||||
position is part of the sublanguage.
|
||||
*/
|
||||
test: (node: SyntaxNode, state: EditorState) => boolean;
|
||||
/**
|
||||
The language data facet that holds the sublanguage's data.
|
||||
You'll want to use
|
||||
[`defineLanguageFacet`](https://codemirror.net/6/docs/ref/#language.defineLanguageFacet) to create
|
||||
this.
|
||||
*/
|
||||
facet: Facet<{
|
||||
[name: string]: any;
|
||||
}>;
|
||||
}
|
||||
/**
|
||||
Syntax node prop used to register sublanguages. Should be added to
|
||||
the top level node type for the language.
|
||||
*/
|
||||
declare const sublanguageProp: NodeProp<Sublanguage[]>;
|
||||
/**
|
||||
A language object manages parsing and per-language
|
||||
[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is
|
||||
managed as a [Lezer](https://lezer.codemirror.net) tree. The class
|
||||
|
@ -174,6 +212,26 @@ is no language parser enabled.
|
|||
*/
|
||||
declare function syntaxParserRunning(view: EditorView): boolean;
|
||||
/**
|
||||
Lezer-style
|
||||
[`Input`](https://lezer.codemirror.net/docs/ref#common.Input)
|
||||
object for a [`Text`](https://codemirror.net/6/docs/ref/#state.Text) object.
|
||||
*/
|
||||
declare class DocInput implements Input {
|
||||
readonly doc: Text;
|
||||
private cursor;
|
||||
private cursorPos;
|
||||
private string;
|
||||
/**
|
||||
Create an input object for the given document.
|
||||
*/
|
||||
constructor(doc: Text);
|
||||
get length(): number;
|
||||
private syncTo;
|
||||
chunk(pos: number): string;
|
||||
get lineChunks(): boolean;
|
||||
read(from: number, to: number): string;
|
||||
}
|
||||
/**
|
||||
A parse context provided to parsers working on the editor content.
|
||||
*/
|
||||
declare class ParseContext {
|
||||
|
@ -529,6 +587,11 @@ declare class TreeIndentContext extends IndentContext {
|
|||
*/
|
||||
get baseIndent(): number;
|
||||
/**
|
||||
Get the indentation for the reference line of the given node
|
||||
(see [`baseIndent`](https://codemirror.net/6/docs/ref/#language.TreeIndentContext.baseIndent)).
|
||||
*/
|
||||
baseIndentFor(node: SyntaxNode): number;
|
||||
/**
|
||||
Continue looking for indentations in the node's parent nodes,
|
||||
and return the result of that.
|
||||
*/
|
||||
|
@ -1119,4 +1182,4 @@ declare class StreamLanguage<State> extends Language {
|
|||
get allowsNesting(): boolean;
|
||||
}
|
||||
|
||||
export { Config, HighlightStyle, IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, MatchResult, ParseContext, StreamLanguage, StreamParser, StringStream, TagStyle, TreeIndentContext, bracketMatching, bracketMatchingHandle, codeFolding, continuedIndent, defaultHighlightStyle, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldAll, foldCode, foldEffect, foldGutter, foldInside, foldKeymap, foldNodeProp, foldService, foldState, foldable, foldedRanges, forceParsing, getIndentUnit, getIndentation, highlightingFor, indentNodeProp, indentOnInput, indentRange, indentService, indentString, indentUnit, language, languageDataProp, matchBrackets, syntaxHighlighting, syntaxParserRunning, syntaxTree, syntaxTreeAvailable, toggleFold, unfoldAll, unfoldCode, unfoldEffect };
|
||||
export { Config, DocInput, HighlightStyle, IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, MatchResult, ParseContext, StreamLanguage, StreamParser, StringStream, Sublanguage, TagStyle, TreeIndentContext, bracketMatching, bracketMatchingHandle, codeFolding, continuedIndent, defaultHighlightStyle, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldAll, foldCode, foldEffect, foldGutter, foldInside, foldKeymap, foldNodeProp, foldService, foldState, foldable, foldedRanges, forceParsing, getIndentUnit, getIndentation, highlightingFor, indentNodeProp, indentOnInput, indentRange, indentService, indentString, indentUnit, language, languageDataProp, matchBrackets, sublanguageProp, syntaxHighlighting, syntaxParserRunning, syntaxTree, syntaxTreeAvailable, toggleFold, unfoldAll, unfoldCode, unfoldEffect };
|
||||
|
|
99
node_modules/@codemirror/language/dist/index.js
generated
vendored
99
node_modules/@codemirror/language/dist/index.js
generated
vendored
|
@ -1,4 +1,4 @@
|
|||
import { NodeProp, IterMode, Tree, TreeFragment, Parser, NodeType, NodeSet } from '@lezer/common';
|
||||
import { NodeProp, Tree, IterMode, TreeFragment, Parser, NodeType, NodeSet } from '@lezer/common';
|
||||
import { StateEffect, StateField, Facet, EditorState, countColumn, combineConfig, RangeSet, RangeSetBuilder, Prec } from '@codemirror/state';
|
||||
import { ViewPlugin, logException, EditorView, Decoration, WidgetType, gutter, GutterMarker } from '@codemirror/view';
|
||||
import { tags, tagHighlighter, highlightTree, styleTags } from '@lezer/highlight';
|
||||
|
@ -24,6 +24,11 @@ function defineLanguageFacet(baseData) {
|
|||
});
|
||||
}
|
||||
/**
|
||||
Syntax node prop used to register sublanguages. Should be added to
|
||||
the top level node type for the language.
|
||||
*/
|
||||
const sublanguageProp = /*@__PURE__*/new NodeProp();
|
||||
/**
|
||||
A language object manages parsing and per-language
|
||||
[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is
|
||||
managed as a [Lezer](https://lezer.codemirror.net) tree. The class
|
||||
|
@ -60,14 +65,28 @@ class Language {
|
|||
this.parser = parser;
|
||||
this.extension = [
|
||||
language.of(this),
|
||||
EditorState.languageData.of((state, pos, side) => state.facet(languageDataFacetAt(state, pos, side)))
|
||||
EditorState.languageData.of((state, pos, side) => {
|
||||
let top = topNodeAt(state, pos, side), data = top.type.prop(languageDataProp);
|
||||
if (!data)
|
||||
return [];
|
||||
let base = state.facet(data), sub = top.type.prop(sublanguageProp);
|
||||
if (sub) {
|
||||
let innerNode = top.resolve(pos - top.from, side);
|
||||
for (let sublang of sub)
|
||||
if (sublang.test(innerNode, state)) {
|
||||
let data = state.facet(sublang.facet);
|
||||
return sublang.type == "replace" ? data : data.concat(base);
|
||||
}
|
||||
}
|
||||
return base;
|
||||
})
|
||||
].concat(extraExtensions);
|
||||
}
|
||||
/**
|
||||
Query whether this language is active at the given position.
|
||||
*/
|
||||
isActiveAt(state, pos, side = -1) {
|
||||
return languageDataFacetAt(state, pos, side) == this.data;
|
||||
return topNodeAt(state, pos, side).type.prop(languageDataProp) == this.data;
|
||||
}
|
||||
/**
|
||||
Find the document regions that were parsed using this language.
|
||||
|
@ -122,16 +141,14 @@ class Language {
|
|||
@internal
|
||||
*/
|
||||
Language.setState = /*@__PURE__*/StateEffect.define();
|
||||
function languageDataFacetAt(state, pos, side) {
|
||||
let topLang = state.facet(language);
|
||||
if (!topLang)
|
||||
return null;
|
||||
let facet = topLang.data;
|
||||
if (topLang.allowsNesting) {
|
||||
for (let node = syntaxTree(state).topNode; node; node = node.enter(pos, side, IterMode.ExcludeBuffers))
|
||||
facet = node.type.prop(languageDataProp) || facet;
|
||||
function topNodeAt(state, pos, side) {
|
||||
let topLang = state.facet(language), tree = syntaxTree(state).topNode;
|
||||
if (!topLang || topLang.allowsNesting) {
|
||||
for (let node = tree; node; node = node.enter(pos, side, IterMode.ExcludeBuffers))
|
||||
if (node.type.isTop)
|
||||
tree = node;
|
||||
}
|
||||
return facet;
|
||||
return tree;
|
||||
}
|
||||
/**
|
||||
A subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language) for use with Lezer
|
||||
|
@ -223,8 +240,15 @@ 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.
|
||||
/**
|
||||
Lezer-style
|
||||
[`Input`](https://lezer.codemirror.net/docs/ref#common.Input)
|
||||
object for a [`Text`](https://codemirror.net/6/docs/ref/#state.Text) object.
|
||||
*/
|
||||
class DocInput {
|
||||
/**
|
||||
Create an input object for the given document.
|
||||
*/
|
||||
constructor(doc) {
|
||||
this.doc = doc;
|
||||
this.cursorPos = 0;
|
||||
|
@ -510,14 +534,14 @@ class LanguageState {
|
|||
// state updates with parse work beyond the viewport.
|
||||
let upto = this.context.treeLen == tr.startState.doc.length ? undefined
|
||||
: Math.max(tr.changes.mapPos(this.context.treeLen), newCx.viewport.to);
|
||||
if (!newCx.work(20 /* Work.Apply */, upto))
|
||||
if (!newCx.work(20 /* Apply */, upto))
|
||||
newCx.takeTree();
|
||||
return new LanguageState(newCx);
|
||||
}
|
||||
static init(state) {
|
||||
let vpTo = Math.min(3000 /* Work.InitViewport */, state.doc.length);
|
||||
let vpTo = Math.min(3000 /* InitViewport */, state.doc.length);
|
||||
let parseState = ParseContext.create(state.facet(language).parser, state, { from: 0, to: vpTo });
|
||||
if (!parseState.work(20 /* Work.Apply */, vpTo))
|
||||
if (!parseState.work(20 /* Apply */, vpTo))
|
||||
parseState.takeTree();
|
||||
return new LanguageState(parseState);
|
||||
}
|
||||
|
@ -534,14 +558,14 @@ Language.state = /*@__PURE__*/StateField.define({
|
|||
}
|
||||
});
|
||||
let requestIdle = (callback) => {
|
||||
let timeout = setTimeout(() => callback(), 500 /* Work.MaxPause */);
|
||||
let timeout = setTimeout(() => callback(), 500 /* MaxPause */);
|
||||
return () => clearTimeout(timeout);
|
||||
};
|
||||
if (typeof requestIdleCallback != "undefined")
|
||||
requestIdle = (callback) => {
|
||||
let idle = -1, timeout = setTimeout(() => {
|
||||
idle = requestIdleCallback(callback, { timeout: 500 /* Work.MaxPause */ - 100 /* Work.MinPause */ });
|
||||
}, 100 /* Work.MinPause */);
|
||||
idle = requestIdleCallback(callback, { timeout: 500 /* MaxPause */ - 100 /* MinPause */ });
|
||||
}, 100 /* MinPause */);
|
||||
return () => idle < 0 ? clearTimeout(timeout) : cancelIdleCallback(idle);
|
||||
};
|
||||
const isInputPending = typeof navigator != "undefined" && ((_a = navigator.scheduling) === null || _a === void 0 ? void 0 : _a.isInputPending)
|
||||
|
@ -564,7 +588,7 @@ const parseWorker = /*@__PURE__*/ViewPlugin.fromClass(class ParseWorker {
|
|||
this.scheduleWork();
|
||||
if (update.docChanged) {
|
||||
if (this.view.hasFocus)
|
||||
this.chunkBudget += 50 /* Work.ChangeBonus */;
|
||||
this.chunkBudget += 50 /* ChangeBonus */;
|
||||
this.scheduleWork();
|
||||
}
|
||||
this.checkAsyncSchedule(cx);
|
||||
|
@ -580,19 +604,19 @@ const parseWorker = /*@__PURE__*/ViewPlugin.fromClass(class ParseWorker {
|
|||
this.working = null;
|
||||
let now = Date.now();
|
||||
if (this.chunkEnd < now && (this.chunkEnd < 0 || this.view.hasFocus)) { // Start a new chunk
|
||||
this.chunkEnd = now + 30000 /* Work.ChunkTime */;
|
||||
this.chunkBudget = 3000 /* Work.ChunkBudget */;
|
||||
this.chunkEnd = now + 30000 /* ChunkTime */;
|
||||
this.chunkBudget = 3000 /* ChunkBudget */;
|
||||
}
|
||||
if (this.chunkBudget <= 0)
|
||||
return; // No more budget
|
||||
let { state, viewport: { to: vpTo } } = this.view, field = state.field(Language.state);
|
||||
if (field.tree == field.context.tree && field.context.isDone(vpTo + 100000 /* Work.MaxParseAhead */))
|
||||
if (field.tree == field.context.tree && field.context.isDone(vpTo + 100000 /* MaxParseAhead */))
|
||||
return;
|
||||
let endTime = Date.now() + Math.min(this.chunkBudget, 100 /* Work.Slice */, deadline && !isInputPending ? Math.max(25 /* Work.MinSlice */, deadline.timeRemaining() - 5) : 1e9);
|
||||
let endTime = Date.now() + Math.min(this.chunkBudget, 100 /* Slice */, deadline && !isInputPending ? Math.max(25 /* MinSlice */, deadline.timeRemaining() - 5) : 1e9);
|
||||
let viewportFirst = field.context.treeLen < vpTo && state.doc.length > vpTo + 1000;
|
||||
let done = field.context.work(() => {
|
||||
return isInputPending && isInputPending() || Date.now() > endTime;
|
||||
}, vpTo + (viewportFirst ? 0 : 100000 /* Work.MaxParseAhead */));
|
||||
}, vpTo + (viewportFirst ? 0 : 100000 /* MaxParseAhead */));
|
||||
this.chunkBudget -= Date.now() - now;
|
||||
if (done || this.chunkBudget <= 0) {
|
||||
field.context.takeTree();
|
||||
|
@ -1034,13 +1058,20 @@ class TreeIndentContext extends IndentContext {
|
|||
on if it is covered by another such node.
|
||||
*/
|
||||
get baseIndent() {
|
||||
let line = this.state.doc.lineAt(this.node.from);
|
||||
return this.baseIndentFor(this.node);
|
||||
}
|
||||
/**
|
||||
Get the indentation for the reference line of the given node
|
||||
(see [`baseIndent`](https://codemirror.net/6/docs/ref/#language.TreeIndentContext.baseIndent)).
|
||||
*/
|
||||
baseIndentFor(node) {
|
||||
let line = this.state.doc.lineAt(node.from);
|
||||
// Skip line starts that are covered by a sibling (or cousin, etc)
|
||||
for (;;) {
|
||||
let atBreak = this.node.resolve(line.from);
|
||||
let atBreak = node.resolve(line.from);
|
||||
while (atBreak.parent && atBreak.parent.from == atBreak.from)
|
||||
atBreak = atBreak.parent;
|
||||
if (isParent(atBreak, this.node))
|
||||
if (isParent(atBreak, node))
|
||||
break;
|
||||
line = this.state.doc.lineAt(atBreak.from);
|
||||
}
|
||||
|
@ -2172,7 +2203,7 @@ class StreamLanguage extends Language {
|
|||
state = this.streamParser.startState(cx.unit);
|
||||
statePos = 0;
|
||||
}
|
||||
if (pos - statePos > 10000 /* C.MaxIndentScanDist */)
|
||||
if (pos - statePos > 10000 /* MaxIndentScanDist */)
|
||||
return null;
|
||||
while (statePos < pos) {
|
||||
let line = cx.state.doc.lineAt(statePos), end = Math.min(pos, line.to);
|
||||
|
@ -2254,7 +2285,7 @@ class Parse {
|
|||
this.chunks.push(tree.children[i]);
|
||||
this.chunkPos.push(tree.positions[i]);
|
||||
}
|
||||
if (context && this.parsedPos < context.viewport.from - 100000 /* C.MaxDistanceBeforeViewport */) {
|
||||
if (context && this.parsedPos < context.viewport.from - 100000 /* MaxDistanceBeforeViewport */) {
|
||||
this.state = this.lang.streamParser.startState(getIndentUnit(context.state));
|
||||
context.skipUntilInView(this.parsedPos, context.viewport.from);
|
||||
this.parsedPos = context.viewport.from;
|
||||
|
@ -2264,7 +2295,7 @@ class Parse {
|
|||
advance() {
|
||||
let context = ParseContext.get();
|
||||
let parseEnd = this.stoppedAt == null ? this.to : Math.min(this.to, this.stoppedAt);
|
||||
let end = Math.min(parseEnd, this.chunkStart + 2048 /* C.ChunkSize */);
|
||||
let end = Math.min(parseEnd, this.chunkStart + 2048 /* ChunkSize */);
|
||||
if (context)
|
||||
end = Math.min(end, context.viewport.to);
|
||||
while (this.parsedPos < end)
|
||||
|
@ -2348,7 +2379,7 @@ class Parse {
|
|||
let token = readToken(streamParser.token, stream, this.state);
|
||||
if (token)
|
||||
offset = this.emitToken(this.lang.tokenTable.resolve(token), this.parsedPos + stream.start, this.parsedPos + stream.pos, 4, offset);
|
||||
if (stream.start > 10000 /* C.MaxLineLength */)
|
||||
if (stream.start > 10000 /* MaxLineLength */)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -2364,7 +2395,7 @@ class Parse {
|
|||
length: this.parsedPos - this.chunkStart,
|
||||
nodeSet,
|
||||
topID: 0,
|
||||
maxBufferLength: 2048 /* C.ChunkSize */,
|
||||
maxBufferLength: 2048 /* ChunkSize */,
|
||||
reused: this.chunkReused
|
||||
});
|
||||
tree = new Tree(tree.type, tree.children, tree.positions, tree.length, [[this.lang.stateAfter, this.lang.streamParser.copyState(this.state)]]);
|
||||
|
@ -2459,4 +2490,4 @@ function docID(data) {
|
|||
return type;
|
||||
}
|
||||
|
||||
export { HighlightStyle, IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, StreamLanguage, StringStream, TreeIndentContext, bracketMatching, bracketMatchingHandle, codeFolding, continuedIndent, defaultHighlightStyle, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldAll, foldCode, foldEffect, foldGutter, foldInside, foldKeymap, foldNodeProp, foldService, foldState, foldable, foldedRanges, forceParsing, getIndentUnit, getIndentation, highlightingFor, indentNodeProp, indentOnInput, indentRange, indentService, indentString, indentUnit, language, languageDataProp, matchBrackets, syntaxHighlighting, syntaxParserRunning, syntaxTree, syntaxTreeAvailable, toggleFold, unfoldAll, unfoldCode, unfoldEffect };
|
||||
export { DocInput, HighlightStyle, IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, StreamLanguage, StringStream, TreeIndentContext, bracketMatching, bracketMatchingHandle, codeFolding, continuedIndent, defaultHighlightStyle, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldAll, foldCode, foldEffect, foldGutter, foldInside, foldKeymap, foldNodeProp, foldService, foldState, foldable, foldedRanges, forceParsing, getIndentUnit, getIndentation, highlightingFor, indentNodeProp, indentOnInput, indentRange, indentService, indentString, indentUnit, language, languageDataProp, matchBrackets, sublanguageProp, syntaxHighlighting, syntaxParserRunning, syntaxTree, syntaxTreeAvailable, toggleFold, unfoldAll, unfoldCode, unfoldEffect };
|
||||
|
|
4
node_modules/@codemirror/language/package.json
generated
vendored
4
node_modules/@codemirror/language/package.json
generated
vendored
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@codemirror/language",
|
||||
"version": "6.5.0",
|
||||
"version": "6.8.0",
|
||||
"description": "Language support infrastructure for the CodeMirror code editor",
|
||||
"scripts": {
|
||||
"test": "cm-runtests",
|
||||
|
@ -34,7 +34,7 @@
|
|||
"style-mod": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@codemirror/buildhelper": "^0.1.5",
|
||||
"@codemirror/buildhelper": "^1.0.0",
|
||||
"@lezer/javascript": "^1.0.0"
|
||||
},
|
||||
"repository": {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue