From 4a701e2520f6bbc9f038240ac9c50591ff02ee22 Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 17 Aug 2024 09:19:00 -0700 Subject: [PATCH 01/28] =?UTF-8?q?Move=20indentation-related=20tasks=20to?= =?UTF-8?q?=20their=20own=20class=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …and out of `WASMTreeSitterLanguageMode` for reasons of encapsulation. --- src/wasm-tree-sitter-language-mode.js | 6353 +++++++++++++------------ 1 file changed, 3291 insertions(+), 3062 deletions(-) diff --git a/src/wasm-tree-sitter-language-mode.js b/src/wasm-tree-sitter-language-mode.js index 6ec91ae196..b7e1615b84 100644 --- a/src/wasm-tree-sitter-language-mode.js +++ b/src/wasm-tree-sitter-language-mode.js @@ -200,6 +200,24 @@ class WASMTreeSitterLanguageMode { // performed and injections are populated. this.resolveNextTransactionPromise(); + // In contrast to `FoldResolver`s — which exist on each layer — we create a + // single `IndentResolver` per language mode. + // + // We do this because folds aggregate, so we can always either (a) delegate + // a job to an arbitrary layer's `FoldResolver`, or (b) ask _all_ layers to + // do something and then assemble the results. + // + // Indentation tasks, on the other hand, cannot be divided into work that + // considers only a single `LanguageLayer` at a time. For instance, a given + // indentation task might consult one layer's indentation query to know + // whether to indent a line, but another layer's indentation query to know + // whether to dedent the line. There are no simplicity gains to be made. + // + // `IndentResolver` _could_ therefore fold its methods into + // `WASMTreeSitterLanguageMode`, but is separate from it for reasons of + // code organization. + this.indentResolver = new IndentResolver(this.buffer, this); + this.ready = this.grammar.getLanguage() .then(language => { this.rootLanguage = language; @@ -1170,7 +1188,8 @@ class WASMTreeSitterLanguageMode { // than just returning `commentDelimiters` data because we still want to // take the adjusted range into account if we can.) const { grammar } = this.getSyntaxNodeAndGrammarContainingRange(range); - const { grammar: originalPositionGrammar } = this.getSyntaxNodeAndGrammarContainingRange(new Range(position, position)); + const { grammar: originalPositionGrammar } = this.getSyntaxNodeAndGrammarContainingRange( + new Range(position, position)); if (grammar && grammar.getCommentDelimiters) { let delimiters = grammar.getCommentDelimiters(); @@ -1257,39 +1276,40 @@ class WASMTreeSitterLanguageMode { return result; } - // Get the suggested indentation level for an existing line in the buffer. + // Essential: Get the suggested indentation level for an existing line in the + // buffer. // - // * `bufferRow` - A {Number} indicating the buffer row. - // * `tabLength` - A {Number} signifying the length of a tab, in spaces, + // * `bufferRow` A {Number} indicating the buffer row. + // * `tabLength` A {Number} signifying the length of a tab, in spaces, // according to the current settings of the buffer. - // * `options` (optional) - An {Object} will the following properties,all of - // which are optional: - // * `options.skipBlankLines`: {Boolean} indicating whether to ignore blank - // lines when determining which row to use as a reference row. Default is - // `true`. Irrelevant if `options.comparisonRow` is specified. - // * `options.skipDedentCheck`: {Boolean} indicationg whether to skip the - // second phase of the check and determine only if the current row should - // _start out_ indented from the reference row. - // * `options.preserveLeadingWhitespace`: {Boolean} indicating whether to - // adjust the returned number to account for the indentation level of any - // whitespace that may already be on the row. Defaults to `false`. - // * `options.forceTreeParse`: {Boolean} indicating whether to force this - // method to synchronously parse the buffer into a tree, even if it - // otherwise would not. Defaults to `false`. - // * `options.comparisonRow`: A {Number} specifying the row to use as a - // reference row. Must be a valid row that occurs earlier in the buffer - // than `row`. If omitted, this method will determine the reference row on - // its own. + // * `options` An optional {Object} will the following properties, all of + // which are themselves optional: + // * `options.skipBlankLines`: {Boolean} indicating whether to ignore blank + // lines when determining which row to use as a reference row. Default is + // `true`. Irrelevant if `options.comparisonRow` is specified. + // * `options.skipDedentCheck`: {Boolean} indicationg whether to skip the + // second phase of the check and determine only if the current row should + // _start out_ indented from the reference row. + // * `options.preserveLeadingWhitespace`: {Boolean} indicating whether to + // adjust the returned number to account for the indentation level of any + // whitespace that may already be on the row. Defaults to `false`. + // * `options.forceTreeParse`: {Boolean} indicating whether to force this + // method to synchronously parse the buffer into a tree, even if it + // otherwise would not. Defaults to `false`. + // * `options.comparisonRow`: A {Number} specifying the row to use as a + // reference row. Must be a valid row that occurs earlier in the buffer + // than `row`. If omitted, this method will determine the reference row + // on its own. // - // Will return either an immediate result or a {Promise}, depending on - // whether it can make a synchronous decision. + // Returns a {Number}, {null}, or a {Promise} that will resolve with either + // a {Number} or {undefined}. // - // When acting synchronously, this method returns a {Number}, or {null} if - // this method cannot make a suggestion. It will return a synchronous result - // if (a) the tree is clean, (b) the language mode decides it can afford to - // do a synchronous re-parse of the buffer, or (c) `options.forceTreeParse` - // is `true`. Otherwise, this method will wait until the end of the current - // buffer transaction. + // This method will return a synchronous result if (a) the tree is clean, (b) + // the language mode decides it can afford to do a synchronous re-parse of + // the buffer, or (c) `options.forceTreeParse` is `true`. Otherwise, this + // method will wait until the end of the current buffer transaction. If this + // method synchronously returns {null}, it means that this method cannot make + // a suggestion. // // When acting asynchronously, this method may or may not be able to give an // answer. If it can, it will return a {Promise} that resolves with a @@ -1299,3555 +1319,3764 @@ class WASMTreeSitterLanguageMode { // signalling that a fallback style of indentation adjustment should take // place. // - suggestedIndentForBufferRow(row, tabLength, rawOptions = {}) { - // NOTE: This method is hundreds of lines long, but so much of that total - // consists of comments like this one — because this is a hard thing to - // intuit. This code needs lots of explanation, but that doesn't mean - // that the logic is impossibly complex. - let root = this.rootLanguageLayer; - if (row === 0) { return 0; } - if (!root || !root.tree || !root.ready) { return null; } - - let options = { - skipBlankLines: true, - skipDedentCheck: false, - preserveLeadingWhitespace: false, - indentationLevels: null, - forceTreeParse: false, - ...rawOptions - }; + suggestedIndentForBufferRow(...args) { + return this.indentResolver.suggestedIndentForBufferRow(...args); + } - let originalControllingLayer = options.controllingLayer; + // Given a range of buffer rows, retrieves the suggested indent for each one + // while re-using the same tree. Computing these results in bulk may prevent + // a tree re-parse after each individual line adjustment when auto-indenting + // multiple rows at once. + // + // * `startRow` The row {Number} to start at. + // * `endRow` The row {Number} to end at. + // + // Returns either a {Map} or {null}. If a {Map}, its keys will be row numbers + // and its values will be desired indentation levels. May not return the + // entire range of requested rows, in which case the caller should + // auto-indent the remaining rows through another means. If {null}, signifies + // that no auto-indent should be attempted at all for the given range. + suggestedIndentForBufferRows(...args) { + return this.indentResolver.suggestedIndentForBufferRows(...args); + } - let comparisonRow = options.comparisonRow; - if (comparisonRow === undefined) { - comparisonRow = row - 1; - if (options.skipBlankLines) { - // It usually makes no sense to compare to a blank row, so we'll move - // upward until we find a line with text on it. - while (this.buffer.isRowBlank(comparisonRow) && comparisonRow > 0) { - comparisonRow--; - } - } - } + // Get the suggested indentation level for a line in the buffer on which the + // user is currently typing. This may return a different result from + // {::suggestedIndentForBufferRow} in order to avoid unexpected changes in + // indentation. It may also return undefined if no change should be made. + // + // * row - The row {Number} + // + // Returns a {Number}. + suggestedIndentForEditedBufferRow(...args) { + return this.indentResolver.suggestedIndentForEditedBufferRow(...args); + } - let existingIndent = 0; - if (options.preserveLeadingWhitespace) { - // When this option is true, the indent level we return will be _added - // to_ however much indentation is already present on the line. Whatever - // the purpose of this option, we can't just pretend it isn't there, - // because it will produce silly outcomes. Instead, let's account for - // that level of indentation and try to subtract it from whatever level - // we return later on. - // - // Sadly, if the row is _more_ indented than we need it to be, we won't - // be able to dedent it into the correct position. This option probably - // needs to be revisited. - existingIndent = this.indentLevelForLine( - this.buffer.lineForRow(row), tabLength); - } - let comparisonRowIndent = options.comparisonRowIndent; - if (comparisonRowIndent === undefined) { - comparisonRowIndent = this.indentLevelForLine( - this.buffer.lineForRow(comparisonRow), tabLength); - } + // Get the suggested indentation level for a given line of text, if it were + // inserted at the given row in the buffer. + // + // * bufferRow - A {Number} indicating the buffer row + // + // Returns a {Number}. + suggestedIndentForLineAtBufferRow(row, _line, tabLength) { + // We can't answer this question accurately for text that isn't yet in the + // tree, so instead we'll just note that this request was made and try to + // correct indentation when the transaction is over. + this.autoIndentRequests++; + return this.suggestedIndentForBufferRow(row, tabLength); + } - // What's the right place to measure from? Often we're here because the - // user just hit Enter, which means we'd run before injection layers have - // been re-parsed. Hence the injection's language layer might not know - // whether it controls the point at the cursor. So instead we look for the - // layer that controls the point at the end of the comparison row. This may - // not always be correct, but we'll find out. - let comparisonRowEnd = new Point( - comparisonRow, - this.buffer.lineLengthForRow(comparisonRow) - ); + // Private - // Find the deepest layer that actually has an indents query. (Layers that - // don't define one, such as specialized injection grammars, are telling us - // they don't care about indentation. If a grammar wants to _prevent_ a - // shallower layer from controlling indentation, it should define an empty - // `indents.scm`, perhaps with an explanatory comment.) - let controllingLayer = this.controllingLayerAtPoint( - comparisonRowEnd, - (layer) => { - if (!layer.queries.indentsQuery) return false; - // We want to exclude layers with a content range that _begins at_ the - // cursor position. Why? Because the content that starts at the cursor - // is about to shift down to the next line. It'd be odd if that layer - // was in charge of the indentation hint if it didn't have any content - // on the preceding line. - // - // So first we test for containment exclusive of endpoints… - if (layer.containsPoint(comparisonRowEnd, true)) { - return true; - } + getAllInjectionLayers() { + let markers = this.injectionsMarkerLayer.getMarkers(); + return markers.map(m => m.languageLayer); + } - // …but we'll still accept layers that have a content range which - // _ends_ at the cursor position. - return layer.getCurrentRanges()?.some(r => { - return r.end.compare(comparisonRowEnd) === 0; - }); - } - ); + getAllLanguageLayers(where = null) { + let layers = [ + this.rootLanguageLayer, + ...this.getAllInjectionLayers() + ]; + if (!where) return layers; - if (!controllingLayer) { - // There's no layer with an indents query to help us out. The default - // behavior in this situation with any grammar — even plain text — is to - // match the previous line's indentation. - return comparisonRowIndent - existingIndent; + let results = []; + for (let layer of layers) { + if (!where(layer)) continue; + results.push(layer); } - let { queries: { indentsQuery }, scopeResolver } = controllingLayer; + return results; + } - // TODO: We use `ScopeResolver` here so that we can use its tests. Maybe we - // need a way to share those tests across different kinds of capture - // resolvers. - scopeResolver.reset(); + // Given a {Point}, returns all injection {LanguageLayer}s whose extent + // includes that point. Does not include the root language layer. + // + // A {LanguageLayer} can have multiple content ranges. Its “extent” is a + // single contiguous {Range} that includes all of its content ranges. To + // return only layers with a content range that spans the given point, pass + // `{ exact: true }` as the second argument. + // + // * point - A {Point} representing a buffer position. + // * options - An {Object} containing these keys: + // * exact - {Boolean} that checks content ranges instead of extent. + injectionLayersAtPoint(point, { exact = false } = {}) { + let injectionMarkers = this.injectionsMarkerLayer.findMarkers({ + containsPosition: point + }); - let indentTree = null; - if (options.tree && originalControllingLayer === controllingLayer) { - // Make sure this tree belongs to the layer we expect it to. - indentTree = options.tree; - } + injectionMarkers.sort((a, b) => { + return a.getRange().compare(b.getRange()) || + b.depth - a.depth; + }); - if (!indentTree) { - if (!controllingLayer.treeIsDirty || options.forceTreeParse || !this.shouldUseAsyncIndent()) { - // If we're in this code path, it either means the tree is clean (the - // `get` path) or that we're willing to spend the time to do a - // synchronous reparse (the `parse` path). Either way, we'll be able to - // deliver a synchronous answer to the question. - indentTree = controllingLayer.getOrParseTree(); - } else { - // We can't answer this yet because we don't yet have a new syntax - // tree, and are unwilling to spend time doing a synchronous re-parse. - // Return a promise that will fulfill once the transaction is over. - // - // TODO: For async, we might need an approach where we suggest a - // preliminary indent level and then follow up later with a more - // accurate one. It's a bit disorienting that the editor falls back to - // an indent level of `0` when a newline is inserted. - let comparisonRowText = this.buffer.lineForRow(comparisonRow) - let rowText = this.buffer.lineForRow(row) - return this.atTransactionEnd().then(({ changeCount }) => { - let shouldFallback = false; - // If this was the only change in the transaction, then we can - // definitely adjust the indentation level after the fact. If not, - // then we might still be able to make indentation decisions in cases - // where they do not affect one another. - // - // Hence if neither the comparison row nor the current row has had - // its contents change in any way since we were first called, we will - // assume it's safe to adjust the indentation level after the fact. - // Otherwise we'll fall back to a single transaction-wide indentation - // adjustment — fewer tree parses, but more likely to produce unusual - // results. - if (changeCount > 1) { - if (comparisonRowText !== this.buffer.lineForRow(comparisonRow)) { - shouldFallback = true; - } - if (rowText !== this.buffer.lineForRow(row)) { - shouldFallback = true; - } - } - if (shouldFallback) { - // We're now revisiting this indentation question at the end of the - // transaction. Other changes may have taken place since we were - // first asked what the indent level should be for this line. So - // how do we know if the question is still relevant? After all, the - // text that was on this row earlier might be on some other row - // now. - // - // So we compare the text that was on the row when we were first - // called… to the text that is on the row now that the transaction - // is over. If they're the same, that's a _strong_ indicator that - // the result we return will still be relevant. - // - // If not, as is the case in this code path, we return `undefined`, - // signalling to the `TextEditor` that its only recourse is to - // auto-indent the whole extent of the transaction instead. - return undefined; - } + let results = injectionMarkers.map(m => m.languageLayer); - // If we get this far, it's safe to auto-indent this line. Either it - // was the only change in its transaction or the other changes - // happened on different lines. But we've retained the original - // values for `comparisonRow` and `comparisonRowIndent` because - // that's the proper basis from which to determine the given row's - // indent level. - let result = this.suggestedIndentForBufferRow(row, tabLength, { - ...rawOptions, - comparisonRow: comparisonRow, - comparisonRowIndent: comparisonRowIndent, - tree: controllingLayer.tree, - controllingLayer - }); - return result; - }); - } + if (exact) { + results = results.filter(l => l.containsPoint(point)); } + return results; + } - let positionSet = new Set; + // Given a {Point}, returns all {LanguageLayer}s whose extent includes that + // point. + // + // A {LanguageLayer} can have multiple content ranges. Its “extent” is a + // single contiguous {Range} that includes all of its content ranges. To + // return only layers with a content range that spans the given point, pass + // `{ exact: true }` as the second argument. + // + // * point - A {Point} representing a buffer position. + // * options - An {Object} containing these keys: + // * exact - {Boolean} that checks content ranges instead of extent. + languageLayersAtPoint(point, { exact = false } = {}) { + let injectionLayers = this.injectionLayersAtPoint(point, { exact }); + return [ + this.rootLanguageLayer, + ...injectionLayers + ]; + } - // Capture in two phases. The first phase covers any captures from the - // comparison row that can cause the _following_ row to be indented. - let indentCaptures = indentsQuery.captures( - indentTree.rootNode, - { row: comparisonRow, column: 0 }, - { row: row, column: 0 } + // Returns the deepest language layer at a given point, or optionally the + // deepest layer to fulfill a criterion. + // + // Will ignore any layer whose content ranges do not include the point, even if + // the point is within its extent. + controllingLayerAtPoint(point, where = FUNCTION_TRUE) { + let layers = this.languageLayersAtPoint(point, { exact: true }); + + // Deeper layers go first. + layers.sort((a, b) => b.depth - a.depth); + return layers.find(layer => where(layer)) ?? null; + } + + firstNonWhitespaceRange(row) { + return this.buffer.findInRangeSync( + /\S/, + new Range(new Point(row, 0), new Point(row, Infinity)) ); + } - let indentCapturePosition = null; - let indentDelta = 0; - let dedentNextDelta = 0; + // DEPRECATED - for (let capture of indentCaptures) { - let { node, name, setProperties: props = {} } = capture; + tokenizedLineForRow(row) { + const lineText = this.buffer.lineForRow(row); + const tokens = []; - // Ignore “phantom” nodes that aren't present in the buffer. - if (node.text === '' && !props['indent.allowEmpty']) { - continue; - } + const iterator = this.buildHighlightIterator(); + let start = { row, column: 0 }; - // Ignore anything that isn't actually on the row. - if (node.endPosition.row < comparisonRow) { continue; } - if (node.startPosition.row > comparisonRow) { continue; } + const scopes = iterator.seek(start, row) || []; - // Ignore anything that fails a scope test. - if (!scopeResolver.store(capture)) { continue; } + // eslint-disable-next-line no-constant-condition + while (true) { + const end = { ...iterator.getPosition() }; + if (end.row > row) { + end.row = row; + end.column = lineText.length; + } - // Only consider a given combination of capture name and buffer range - // once, even if it's captured more than once in `indents.scm`. - let key = `${name}/${node.startIndex}/${node.endIndex}`; - if (positionSet.has(key)) { continue; } - positionSet.add(key); + if (end.column > start.column) { + tokens.push( + new Token({ + value: lineText.substring(start.column, end.column), + scopes: scopes.map(s => this.scopeNameForScopeId(s)) + }) + ); + } - if (name === 'indent') { - if (indentCapturePosition === null) { - indentCapturePosition = node.endPosition; - } - indentDelta++; - } else if (name === 'dedent.next') { - // This isn't often needed, but it's a way for the current line to - // signal that the _next_ line should be dedented no matter what its - // content is. - dedentNextDelta++; - } else if (name === 'dedent') { - // `dedent` tokens don't count for anything unless they happen - // after the first `indent` token. They only tell us whether an indent - // that _seems_ like it should happen is cancelled out. - // - // Consider: - // - // } else if (foo) { - // - // We should still indent the succeeding line because the initial `}` - // does not cancel out the `{` at the end of the line. On the other - // hand: - // - // } else if (foo) {} - // - // The second `}` _does_ cancel out the first occurrence of `{` because - // it comes later. - if (!indentCapturePosition || comparePoints(node.startPosition, indentCapturePosition) < 0) { - // This capture either happened before the first indent capture on - // the row or is _the same node_ as the indent capture, in which case - // we should construe the dedent as happening _before_ the indent. - // - // For example: the "elsif" node in Ruby triggers a dedent on its own - // line, but also signals an indent on the next line. The dedent - // shouldn't cancel out the indent. - continue; - } - indentDelta--; - if (indentDelta < 0) { - // In the _indent_ phase, the delta won't ever go lower than `0`. - // This is because we assume that the previous line is correctly - // indented! The only function that `dedent` serves for us in this - // phase is canceling out an earlier `indent` and preventing false - // positives. - // - // So no matter how many `dedent` tokens we see on a particular line… - // if the _last_ token we see is an `indent` token, then it hints - // that the next line should be indented by one level. - indentDelta = 0; + if (end.column < lineText.length) { + const closeScopeCount = iterator.getCloseScopeIds().length; + for (let i = 0; i < closeScopeCount; i++) { + scopes.pop(); } - + scopes.push(...iterator.getOpenScopeIds()); + start = end; + iterator.moveToSuccessor(); + } else { + break; } } - // `@indent` and `@dedent` can increase the next line's indent level by one - // at most, and can't decrease the next line's indent level at all on their - // own. - // - // Why? There are few coding patterns in the wild that would cause us to - // indent more than one level based on tokens found on the _previous_ line. - // And there are also few scenarios in which we'd want to dedent a certain - // line before we even know the content of that line. - // - // Hence we distill the results above into a net indentation level change - // of either 1 or 0, depending on whether we saw more `@indent`s than - // `@dedent`s. - // - // If there's a genuine need to dedent the current row based solely on the - // content of the comparison row, then `@dedent.next` can be used. - // - // And if a language needs to indent more than one level from one line to - // the next, then `@match` captures can be used to specify an exact level - // of indentation relative to another specific node. If a `@match` capture - // exists, we'll catch it in the dedent captures phase, and these - // heuristics will be ignored. - // - indentDelta = clamp(indentDelta, 0, 1); + return new TokenizedLine({ + openScopes: [], + text: lineText, + tokens, + tags: [], + ruleStack: [], + lineEnding: this.buffer.lineEndingForRow(row), + tokenIterator: this.tokenIterator, + grammar: this.grammar + }); + } - // Process `@dedent.next` captures as a last step; they act as a strong - // hint about the next line's indentation. - indentDelta -= clamp(dedentNextDelta, 0, 1); + tokenForPosition(point) { + if (Array.isArray(point)) { + point = new Point(...point); + } + const scopes = this.scopeDescriptorForPosition(point).getScopesArray(); + let range = this.bufferRangeForScopeAtPosition( + last(scopes), + point + ); + return new Token({ + scopes, + value: this.buffer.getTextInRange(range) + }); + } +} - let dedentDelta = 0; - let line = this.buffer.lineForRow(row); - let rowStartingColumn = Math.max(line.search(/\S/), 0); +// Responsible for deciding the ranges of folds on a given language layer. +// +// Understands two kinds of folds: +// +// * A “simple” fold is one with a capture name of `@fold` in a folds query. It +// can be described with only one capture. It starts at the end of the row +// that the captured node starts on, and ends at a configurable position +// controlled by the `fold.endAt` adjustment (which defaults to +// `lastChild.startPosition`). +// +// Simple folds should be used whenever you're able to predict the end of a +// fold range simply from holding a reference to its starting node. +// +// * A “divided” fold is one where the two ends of the fold must be described +// in two separate query captures. It starts at the end of the row of a node +// captured with the name of `@fold.start`, and it ends at the very next +// `@fold.end` that it encounters in the document. +// +// When determining the end of a fold that is marked with `@fold.start`, +// Pulsar will search the buffer for the next “balanced” occurrence of +// `@fold.end`. For instance, when trying to find a match for a `@fold.start` +// on row 9, Pulsar might encounter another `@fold.start` on row 10, +// and would then understand that the next `@fold.end` it sees will end +// _that_ fold and not the one we're looking for. If Pulsar _does not_ find a +// matching `@fold.end`, the given line will not be considered to be +// foldable. +// +// Because they can trigger a buffer-wide search, divided folds are +// not recommended to use unless they're truly needed. Use them only when the +// structure of the syntax tree doesn't allow you to determine the end of the +// fold without applying your own heuristic. +// +class FoldResolver { + constructor(buffer, layer) { + this.buffer = buffer; + this.layer = layer; - if (!options.skipDedentCheck) { - scopeResolver.reset(); + this.boundaries = null; + this.boundariesStartingPosition = null; + } - // The controlling layer on the previous line gets to decide what our - // starting indent is on the current line. But it might not extend to the - // current line, so we should determine which layer is in charge of the - // second phase. - // - // The comparison point we use is that of the first character on the - // line. If we start earlier than that, we might not pick up on the - // presence of an injection layer. - let rowStart = new Point(row, rowStartingColumn); - let dedentControllingLayer = this.controllingLayerAtPoint( - rowStart, - (layer) => { - if (!layer.queries.indentsQuery) return false; - // We're inverting the logic from above: now we want to allow layers - // that _begin_ at the cursor and exclude layers that _end_ at the - // cursor. Because we'll be analyzing content that comes _after_ the - // cursor to understand whether to dedent! - // - // So first we test for containment exclusive of endpoints… - if (layer.containsPoint(rowStart, true)) { - return true; - } + // Retrieve the first valid fold range for this row in this language layer — + // that is, the first fold range that spans more than one row. + getFoldRangeForRow(row) { + if (!this.layer.tree || !this.layer.queries.foldsQuery) { return null; } + let start = Point.fromObject({ row, column: 0 }); + let end = Point.fromObject({ row: row + 1, column: 0 }); - // …but we'll still accept layers that have a content range which - // _starts_ at the cursor position. - return layer.getCurrentRanges()?.some(r => { - return r.start.compare(rowStart) === 0; - }); - } - ); + let tree = this.layer.getOrParseTree({ force: false }); + // Search for folds that begin somewhere on the given row. + let iterator = this.getOrCreateBoundariesIterator(tree.rootNode, start, end); - if (dedentControllingLayer && dedentControllingLayer !== controllingLayer) { - // If this layer is different from the one we used above, then we - // should run this layer's indents query against its own tree. (If _no_ - // layers qualify at this position, we won't hit this code path, so - // we'll reluctantly still use the original layer and tree.) - indentsQuery = dedentControllingLayer.queries.indentsQuery; - indentTree = dedentControllingLayer.getOrParseTree(); + // More than one fold can match for a given row, so we'll stop as soon as + // we find the fold that starts earliest on the row. (The fold itself will + // be “resolved” in such a way that it doesn't begin until the end of the + // row, but we still consider the intrinsic range of the fold capture when + // deciding which one to honor.) + while (iterator.key) { + if (comparePoints(iterator.key.position, end) >= 0) { break; } + let capture = iterator.value; + let { name } = capture; + if (name === 'fold') { + let range = this.resolveRangeForSimpleFold(capture); + if (this.isValidFold(range)) { return range; } + } else if (name === 'fold.start') { + let range = this.resolveRangeForDividedFold(capture); + if (this.isValidFold(range)) { return range; } } + iterator.next(); + } - // The second phase covers any captures on the current line that can - // cause the current line to be indented or dedented. - let dedentCaptures = indentsQuery.captures( - indentTree.rootNode, - { row: row, column: 0 }, - { row: row + 1, column: 0 } - ); + return null; + } - let currentRowText = this.buffer.lineForRow(row); - currentRowText = currentRowText.trim(); - positionSet.clear(); + isValidFold(range) { + return range && range.end.row > range.start.row; + } - for (let capture of dedentCaptures) { - let { name, node, setProperties: props = {} } = capture; - let { text } = node; + // Returns all valid fold ranges in this language layer. + // + // There are two rules about folds that we can't change: + // + // 1. A fold must collapse at least one line’s worth of content. + // 2. The UI for expanding and collapsing folds envisions that each line can + // manage a maximum of _one_ fold. + // + // Hence a fold range is “valid” when it + // * resolves to a range that spans more than one line; + // * starts on a line that hasn't already been promised to an earlier fold. + getAllFoldRanges() { + if (!this.layer.tree || !this.layer.queries.foldsQuery) { return []; } + let range = this.layer.getExtent(); + // We use a Tree-sitter query to find folds; then we arrange the folds in + // buffer order. The first valid fold we find on a given line is included + // in the list; any other folds on the line are ignored. + let iterator = this.getOrCreateBoundariesIterator( + this.layer.tree.rootNode, range.start, range.end); - // Ignore “phantom” nodes that aren't present in the buffer. - if (text === '' && !props['indent.allowEmpty']) { continue; } + let results = []; + let lastValidFoldRange = null; + while (iterator.key) { + let capture = iterator.value; + let { name } = capture; + let range; + if (name === 'fold') { + range = this.resolveRangeForSimpleFold(capture); + } else if (name === 'fold.start') { + range = this.resolveRangeForDividedFold(capture); + } + if (this.isValidFold(range)) { + // Recognize only the first fold for each row. + if (lastValidFoldRange?.start?.row !== range.start.row) { + results.push(range); + lastValidFoldRange = range; + } + } + iterator.next(); + } - // Ignore anything that isn't actually on the row. - if (node.endPosition.row < row) { continue; } - if (node.startPosition.row > row) { continue; } + return results; + } - // Ignore anything that fails a scope test. - if (!scopeResolver.store(capture)) { continue; } + // Invalidates the fold resolver's cached boundary data in response to a + // change in the document. + reset() { + this.boundaries = null; + this.boundariesRange = null; + } - // Imagine you've got: - // - // { ^foo, bar } = something - // - // and the caret represents the cursor. Pressing Enter will move - // everything after the cursor to a new line and _should_ indent the - // line, even though there's a closing brace on the new line that would - // otherwise mark a dedent. - // - // Thus we don't want to honor a `@dedent` or `@match` capture unless - // it's the first non-whitespace content in the line. We'll use similar - // logic for `suggestedIndentForEditedBufferRow`. - // - // If a capture is confident it knows what it's doing, it can opt out - // of this behavior with `(#set! indent.force true)`. - if (!props['indent.force'] && !currentRowText.startsWith(text)) { continue; } + canReuseBoundaries(start, end) { + if (!this.boundariesRange) { return false; } + return this.boundariesRange.containsRange( + new Range(start, end) + ); + } - // The '@match' capture short-circuits a lot of this logic by pointing - // us to a different node and asking us to match the indentation of - // whatever row that node starts on. - if (name === 'match') { - let matchIndentLevel = this.resolveIndentMatchCapture( - capture, row, tabLength, options.indentationLevels); - if (typeof matchIndentLevel === 'number') { - scopeResolver.reset(); - return Math.max(matchIndentLevel - existingIndent, 0); - } - } else if (name === 'none') { - scopeResolver.reset(); - return 0; - } + prefillFoldCache(range) { + if (!this.layer.tree || !this.layer.queries.foldsQuery) { return; } + this.getOrCreateBoundariesIterator( + this.layer.tree.rootNode, + range.start, + range.end + ); + } - // Only `@dedent` or `@match` captures can change this line's - // indentation. We handled `@match` above, so we'll filter out all non- - // `@dedent`s now. - if (name !== 'dedent') { continue; } + getOrCreateBoundariesIterator(rootNode, start, end) { + if (!this.layer.tree || !this.layer.queries.foldsQuery) { return null; } + if (this.canReuseBoundaries(start, end)) { + let result = this.boundaries.ge(start); + return result; + } - // Only consider a given range once, even if it's marked with multiple - // captures. - let key = `${node.startIndex}/${node.endIndex}`; - if (positionSet.has(key)) { continue; } - positionSet.add(key); - dedentDelta--; + let scopeResolver = this.layer.scopeResolver; + scopeResolver.reset(); + + // Instead of keying off of a plain buffer position, this tree also + // considers whether the boundary is a fold start or a fold end. If one + // boundary ends at the same point that another one starts, the ending + // boundary will be visited first. + let boundaries = createTree(compareBoundaries); + let captures = this.layer.queries.foldsQuery.captures(rootNode, start, end); + + for (let capture of captures) { + // NOTE: Currently, the first fold to match for a given starting position + // is the only one considered. That's because we use a version of a + // red-black tree in which we silently ignore any attempts to add a key + // that is equivalent in value to that of a previously added key. + // + // Attempts to use `capture.final` and `capture.shy` won't harm anything, + // but they'll be redundant. Other types of custom predicates, however, + // should work just fine. + let result = scopeResolver.store(capture); + if (!result) { continue; } + + // Some folds are unusual enough that they can flip from valid to + // invalid, or vice versa, based on edits to rows other than their + // starting row. We need to keep track of these nodes so that we can + // invalidate the fold cache properly when edits happen inside of them. + if (scopeResolver.shouldInvalidateFoldOnChange(capture)) { + this.layer.foldNodesToInvalidateOnChange.add(capture.node.id); } - // `@indent`/`@dedent` captures, no matter how many there are, can - // dedent the current line by one level at most. To indent more than - // that, one must use a `@match` capture. - dedentDelta = clamp(dedentDelta, -1, 0); + if (capture.node.startPosition.row < start.row) { + // This fold starts before the range we're interested in. We needed to + // run these nodes through the scope resolver for various reasons, but + // they're not relevant to our iterator. + continue; + } + if (capture.name === 'fold') { + boundaries = boundaries.insert({ + position: capture.node.startPosition, + boundary: 'start' + }, capture); + } else if (capture.name.startsWith('fold.')) { + let key = this.keyForDividedFold(capture); + boundaries = boundaries.insert(key, capture); + } } scopeResolver.reset(); - let finalIndent = comparisonRowIndent + indentDelta + dedentDelta + existingIndent; - // console.log('score:', comparisonRowIndent, '+', indentDelta, '-', ((dedentDelta < 0) ? -dedentDelta : dedentDelta), '=', finalIndent); - return Math.max(finalIndent - existingIndent, 0); + this.boundaries = boundaries; + this.boundariesRange = new Range(start, end); + + return boundaries.ge(start); } - // Given a range of buffer rows, retrieves the suggested indent for each one - // while re-using the same tree. Prevents a tree re-parse after each - // individual line adjustment when auto-indenting. - // - // * startRow - The row {Number} to start at - // * endRow - The row {Number} to end at - // - // Returns a {Map} whose keys are rows and whose values are desired - // indentation levels. May not return the entire range of requested rows, in - // which case the caller should auto-indent the remaining rows through - // another means. May also return {null} to signify that no auto-indent - // should be attempted at all for the given range. - suggestedIndentForBufferRows(startRow, endRow, tabLength, options = {}) { - let root = this.rootLanguageLayer; - if (!root || !root.tree) { - let results = new Map(); - for (let row = startRow; row <= endRow; row++) { - results.set(row, null); + // Given a `@fold.start` capture, queries the rest of the layer's extent to + // find a matching `@fold.end`. + resolveRangeForDividedFold(capture) { + let { name } = capture; + let key = this.keyForDividedFold(capture); + if (name !== 'fold.start') { return null; } + + let extent = this.layer.getExtent(); + + let iterator = this.getOrCreateBoundariesIterator( + this.layer.tree.rootNode, + key.position, + extent.end + ); + + let depth = 0; + let matchedEndCapture = null; + + while (iterator.key && comparePoints(iterator.key.position, extent.end) <= 0) { + let { name, node } = iterator.value; + let isSelf = node.id === capture.node.id; + if (name === 'fold.end' && !isSelf) { + if (depth === 0) { + matchedEndCapture = iterator.value; + break; + } else { + depth--; + } + } else if (name === 'fold.start' && !isSelf) { + // A later `fold.start` has occurred, so the next `fold.end` will pair + // with it, not with ours. + depth++; } - return results; + iterator.next(); } - let results = new Map(); - let comparisonRow = null; - let comparisonRowIndent = null; + // There's no guarantee that a matching `@fold.end` will even appear, so if + // it doesn't, then this row does not contain a valid fold. + if (!matchedEndCapture) { return null; } - let { isPastedText = false } = options; - let indentDelta; + return new Range( + this.resolvePositionForDividedFold(capture), + this.resolvePositionForDividedFold(matchedEndCapture) + ); + } - for (let row = startRow; row <= endRow; row++) { - // If this row were being indented by `suggestedIndentForBufferRow`, it'd - // look at the end of the previous row to find the controlling layer, - // because we start at the previous row to find the suggested indent for - // the current row. - let controllingLayer = this.controllingLayerAtPoint( - this.buffer.clipPosition(new Point(row - 1, Infinity)), - // This query isn't as precise as the one we end up making later, but - // that's OK. This is just a first pass. - (layer) => !!layer.queries.indentsQuery && !!layer.tree - ); - if (isPastedText) { - // In this mode, we're not trying to auto-indent every line; instead, - // we're trying to auto-indent the _first_ line of a region of text - // that's just been pasted, while trying to preserve the relative - // levels of indentation within the pasted region. So if the - // auto-indent of the first line increases its indent by one level, - // all other lines should also be increased by one level — without even - // consulting their own suggested indent levels. - if (row === startRow) { - // The only time we consult the indents query is for the first row, - // so we're not going to insist that the _entire range_ fall under - // the control of a layer with an indents query — just the row we - // need. - if (!controllingLayer) { return null; } - let tree = controllingLayer.getOrParseTree(); - - let firstLineCurrentIndent = this.indentLevelForLine( - this.buffer.lineForRow(row), tabLength); - - let firstLineIdealIndent = this.suggestedIndentForBufferRow( - row, - tabLength, - { - ...options, - controllingLayer, - tree - } - ); - - if (firstLineIdealIndent == null) { - // If we decline to suggest an indent level for the first line, - // then there's no change to be made here. Keep the whole region - // the way it is. - return null; - } else { - indentDelta = firstLineIdealIndent - firstLineCurrentIndent; - if (indentDelta === 0) { - // If the first row doesn't have to be adjusted, neither do any - // others. - return null; - } - results.set(row, firstLineIdealIndent); - } - continue; - } - - // All rows other than the first are easy — just apply the delta. - let actualIndent = this.indentLevelForLine( - this.buffer.lineForRow(row), tabLength); + keyForDividedFold(capture) { + let { name, node } = capture; + if (name === 'fold.start') { + // Eventually we'll alter this position to occur at the end of the given + // row, but we keep the original value around for a while because we want + // to honor whichever fold technically happens “earliest” on a given row. + return { position: node.startPosition, boundary: 'start' }; + } else if (name === 'fold.end') { + return { position: node.startPosition, boundary: 'end' }; + } else { + return null; + } + } - results.set(row, actualIndent + indentDelta); - continue; - } + // Returns `true` if there is no non-whitespace content on this position's + // row before this position's column. + positionIsNotPrecededByTextOnLine(position) { + let textForRow = this.buffer.lineForRow(position.row) + let precedingText = textForRow.substring(0, position.column) + return !(/\S/.test(precedingText)) + } - // For line X to know its appropriate indentation level, it needs row X-1, - // if it exists, to be indented properly. That's why `TextEditor` wants to - // indent each line atomically. Instead, we'll determine the right level - // for the first row, then supply the result for the previous row when we - // call `suggestedIndentForBufferRow` for the _next_ row, and so on, so - // that `suggestedIndentForBufferRow` doesn't try to look up the comparison - // row itself and find out we haven't actually fixed any of the previous - // rows' indentations yet. - let indent; - if (controllingLayer) { - let tree = controllingLayer.getOrParseTree(); - let rowOptions = { - ...options, - tree, - comparisonRow: comparisonRow ?? undefined, - comparisonRowIndent: comparisonRowIndent ?? undefined, - indentationLevels: results - }; - indent = this.suggestedIndentForBufferRow(row, tabLength, rowOptions); - if (indent === null) { - // We could not retrieve the correct indentation level for this row - // without re-parsing the tree. We should give up and return what we - // have so that `TextEditor` can finish the job through a less - // efficient means. - return results; - } + resolvePositionForDividedFold(capture) { + let { name, node } = capture; + if (name === 'fold.start') { + return new Point(node.startPosition.row, Infinity); + } else if (name === 'fold.end') { + let end = node.startPosition; + if (end.column === 0 || this.positionIsNotPrecededByTextOnLine(end)) { + // If the fold ends at the start of the line, adjust it so that it + // actually ends at the end of the previous line. This behavior is + // implied in the existing specs. + return new Point(end.row - 1, Infinity); } else { - // We could not retrieve the correct indentation level for this row - // because it isn't governed by any layer that has an indents query. - return results; + return new Point.fromObject(end, true); } - results.set(row, indent); - comparisonRow = row; - comparisonRowIndent = indent; + } else { + return null; } - - return results; } - // Get the suggested indentation level for a line in the buffer on which the - // user is currently typing. This may return a different result from - // {::suggestedIndentForBufferRow} in order to avoid unexpected changes in - // indentation. It may also return undefined if no change should be made. - // - // * row - The row {Number} - // - // Returns a {Number}. - suggestedIndentForEditedBufferRow(row, tabLength, options = {}) { - const line = this.buffer.lineForRow(row); - const currentRowIndent = this.indentLevelForLine(line, tabLength); - - // If the row is not indented at all, we have nothing to do, because we can - // only dedent a line at this phase. - if (currentRowIndent === 0) { return; } - - // If we're on the first row, we have no preceding line to compare - // ourselves to. We should do nothing. - if (row === 0) { return; } + normalizeFoldProperty(prop) { + if (prop.startsWith('fold.')) { + prop = prop.replace(/^fold./, ''); + } + return prop; + } - // By the time this function runs, we probably know enough to be sure of - // which layer controls the beginning of this row, even if we don't know - // which one owns the position at the cursor. - // - // Use the position of the first text on the line as the reference point. - let rowStartingColumn = Math.max(line.search(/\S/), 0); - let controllingLayer = this.controllingLayerAtPoint( - new Point(row, rowStartingColumn), - (layer) => !!layer.queries.indentsQuery - ); + capturePropertyIsFoldAdjustment(prop) { + prop = this.normalizeFoldProperty(prop); + return prop in FoldResolver.ADJUSTMENTS; + } - if (!controllingLayer) { return undefined; } + applyFoldAdjustment(prop, ...args) { + prop = this.normalizeFoldProperty(prop); + return FoldResolver.ADJUSTMENTS[prop](...args); + } - let { queries: { indentsQuery }, scopeResolver } = controllingLayer; - if (!indentsQuery) { return undefined; } + resolveRangeForSimpleFold(capture) { + let { node, setProperties: props } = capture; + if (node.type === 'ERROR') { return null; } + let start = new Point(node.startPosition.row, Infinity); + let end = node.endPosition; - // TODO: We use `ScopeResolver` here so that we can use its tests. Maybe we - // need a way to share those tests across different kinds of capture - // resolvers. - scopeResolver.reset(); + let defaultOptions = { 'fold.endAt': 'lastChild.startPosition' }; + let options = { ...defaultOptions, ...props }; - // Ideally, we're running when the tree is clean, but if not, we must - // re-parse the tree in order to make an accurate indents query. - let indentTree = options.tree; - if (!indentTree) { - if (!controllingLayer.treeIsDirty || options.forceTreeParse || !this.useAsyncIndent || !this.useAsyncParsing) { - indentTree = controllingLayer.getOrParseTree(); - } else { - return this.atTransactionEnd().then(({ changeCount }) => { - if (changeCount > 1) { - // Unlike `suggestedIndentForBufferRow`, we should not return - // `undefined` here and implicitly tell `TextEditor` to handle the - // auto-indent itself. If there were several changes in this - // transaction, we missed our chance to dedent this row, and should - // return `null` to signal that `TextEditor` should do nothing - // about it. - return null; - } - let result = this.suggestedIndentForEditedBufferRow(row, tabLength, { - ...options, - tree: controllingLayer.tree - }); - if (currentRowIndent === result) { - // Return `null` here so that `TextEditor` realizes that no work - // needs to be done. - return null; - } - return result; - }); + try { + for (let key in options) { + if (!this.capturePropertyIsFoldAdjustment(key)) { continue; } + let value = options[key]; + end = this.applyFoldAdjustment(key, end, node, value, props, this.layer); } - } + if (!end) { return null; } - if (!indentTree) { - console.error(`No indent tree!`, controllingLayer.inspect()); - return undefined; + end = Point.fromObject(end, true); + end = this.buffer.clipPosition(end); + + if (end.row <= start.row) { return null; } + return new Range(start, end); + } catch (error) { + // If any of our assumptions are violated, fall back to an end point that we know can't fail: the end of the captured node itself. + console.warn("Error resolving fold range:"); + console.warn(error.message); + return new Range(start, node.range.end); } + } +} - const indents = indentsQuery.captures( - indentTree.rootNode, - { row: row, column: 0 }, - { row: row + 1, column: 0 } - ); +FoldResolver.ADJUSTMENTS = { + // Use a node position descriptor to describe where the fold should end. + // Overrides the default descriptor of `lastChild.startPosition`. + endAt(end, node, value) { + end = resolveNodePosition(node, value); + return end; + }, - let lineText = this.buffer.lineForRow(row).trim(); + // Adjust the end point by a fixed number of characters in either direction. + // Will cross rows if necessary. + offsetEnd(end, _node, value, _props, layer) { + let { languageMode } = layer; + value = Number(value); + if (isNaN(value)) { return end; } + return languageMode.adjustPositionByOffset(end, value); + }, - // This is the indent level that is suggested from context — the level we'd - // have if this row were completely blank. We won't alter the indent level - // of the current row — even if it's “wrong” — unless typing triggers a - // dedent. But once a dedent is triggered, we should dedent one level from - // this value, not from the current row indent. - // - // If more than one level of dedent is needed, a `@match` capture must be - // used so that indent level can be expressed in absolute terms. - const originalRowIndent = this.suggestedIndentForBufferRow(row, tabLength, { - skipBlankLines: true, - skipDedentCheck: true, - tree: indentTree - }); + // Adjust the column of the fold's end point. Use `0` to end the fold at the + // start of the line. + adjustEndColumn(end, _node, value, _props, layer) { + let column = Number(value); + if (isNaN(column)) { return end; } + let newEnd = Point.fromObject({ column, row: end.row }); + return layer.buffer.clipPosition(newEnd); + }, - let seenDedent = false; - for (let indent of indents) { - let { node, setProperties: props = {} } = indent; - // Ignore captures that aren't on this row. - if (node.startPosition.row !== row) { continue; } - // Ignore captures that fail their scope tests. - if (!scopeResolver.store(indent)) { continue; } + // Adjust the end point to be immediately before the current line begins. + // Useful if the end line also contains the start of a fold and thus should + // stay on a separate screen line. + adjustToEndOfPreviousRow(end) { + return new Point(end.row - 1, Infinity); + } +}; - // For all captures — even `@match` captures — we get one bite at the - // apple, and it's when the text of the capture is the only - // non-whitespace text on the line. - // - // Otherwise, this capture will assert itself after every keystroke, and - // the user has no way to opt out of the correction. - // - // If the capture is confident it knows what it's doing, and is using - // some other mechanism to ensure the adjustment will happen exactly - // once, it can bypass this behavior with `(#set! indent.force true)`. - // - if (!props['indent.force'] && node.text !== lineText) { continue; } +class NullLanguageModeHighlightIterator { + seek() { + return []; + } + compare() { + return 1; + } + moveToSuccessor() {} + getPosition() { + return Point.INFINITY; + } + getOpenScopeIds() { + return []; + } + getCloseScopeIds() { + return []; + } +} - // `@match` is authoritative; honor the first one we see and ignore other - // captures. - if (indent.name === 'match') { - let matchIndentLevel = this.resolveIndentMatchCapture(indent, row, tabLength); - if (typeof matchIndentLevel === 'number') { - scopeResolver.reset(); - return matchIndentLevel; - } - } else if (indent.name === 'none') { - scopeResolver.reset(); - return 0; - } +class NullLayerHighlightIterator { + seek() { + return [false, new OpenScopeMap]; + } + compare() { + return 1; + } + moveToSuccessor() {} + getPosition() { + return Point.INFINITY; + } + getOpenScopeIds() { + return []; + } + getCloseScopeIds() { + return []; + } +} - if (indent.name !== 'dedent') { continue; } +let lastIteratorId = 0; - // Even after we've seen a `@dedent`, we allow the loop to continue, - // because we'd prefer a `@match` capture over this `@dedent` capture - // even if it happened to come later in the loop. - seenDedent = true; - } +// An iterator for marking boundaries in the buffer to apply syntax +// highlighting. +// +// Manages a collection of `LayerHighlightIterators`, which are the classes +// doing the real work of marking boundaries. `HighlightIterator` is in charge +// of understanding, at any given point, which of the iterators needs to be +// advanced next. +class HighlightIterator { + constructor(languageMode) { + this.id = lastIteratorId++; + this.languageMode = languageMode; + this.iterators = null; + } - scopeResolver.reset(); + inspect() { + return `[HighlightIterator id=${this.id} iterators=${this.iterators?.length ?? 0}]`; + } - if (seenDedent) { - return Math.max(0, originalRowIndent - 1); + seek(start, endRow) { + if (!(start instanceof Point)) { + start = Point.fromObject(start, true); } + let { buffer, rootLanguageLayer } = this.languageMode; + if (!rootLanguageLayer) { return []; } - return currentRowIndent; - } + let end = { + row: endRow, + column: buffer.lineLengthForRow(endRow) + }; - // Get the suggested indentation level for a given line of text, if it were - // inserted at the given row in the buffer. - // - // * bufferRow - A {Number} indicating the buffer row - // - // Returns a {Number}. - suggestedIndentForLineAtBufferRow(row, line, tabLength) { - // We can't answer this question accurately for text that isn't yet in the - // tree, so instead we'll just note that this request was made and try to - // correct indentation when the transaction is over. - this.autoIndentRequests++; - return this.suggestedIndentForBufferRow(row, tabLength); - } + this.end = end; + this.iterators = []; - // Private + if (Math.max(start.column, end.column) > LINE_LENGTH_LIMIT_FOR_HIGHLIGHTING) { + return []; + } - // Given a `@match` capture, attempts to resolve it to an absolute - // indentation level. - resolveIndentMatchCapture(capture, currentRow, tabLength, indentationLevels = null) { - let { node, setProperties: props = {} } = capture; + let injectionMarkers = this.languageMode.injectionsMarkerLayer.findMarkers( + { + intersectsRange: new Range( + start, + new Point(endRow + 1, 0) + ) + } + ); - // A `@match` capture must specify - // - // (#set! indent.matchIndentOf foo) + injectionMarkers.sort((a, b) => { + // Shallower injections get visited first. + return a.languageLayer.depth - b.languageLayer.depth; + }); + + const iterator = rootLanguageLayer.buildHighlightIterator(); + + // We need to know which open scopes were contributed by which language + // layer so that we know which ones to “cover” if we see an injection with + // the `coverShallowerScopes` option. // - // where "foo" is a node descriptor. It may optionally specify + // What's worse is that we need to know _where_ each of those open scopes + // would've been added, because that open scope shouldn't truly be added + // _if_ it would've been suppressed by a deeper layer. + let openScopesByLayer = new Map(); + + // The contract of `LayerHighlightIterator#seek` is different from the + // contract of `HighlightIterator#seek`. Instead of an array of open + // scopes, we have it return an two-item array. // - // (#set! indent.offsetIndent X) + // The first item is a boolean that indicates whether the iterator needs to + // mark anything _within_ the range that will be highlighted. If not, it + // doesn't need to go into the list of iterators. // - // where "X" is a number, positive or negative. + // The second item is an `OpenScopeMap` (rather than just an array of + // already open scopes) that retains information about where each open + // scope was opened, because we'll need that information in a moment. // - if (!props['indent.matchIndentOf']) { return undefined; } - let offsetIndent = props['indent.offsetIndent'] ?? "0"; - offsetIndent = Number(offsetIndent); - if (isNaN(offsetIndent)) { offsetIndent = 0; } - - // Follow a node descriptor to a target node. - let targetPosition = resolveNodePosition(node, props['indent.matchIndentOf']); + let [result, openScopes] = iterator.seek(start, endRow); - // That node must start on a row earlier than ours. - let targetRow = targetPosition?.row; - if (typeof targetRow !== 'number' || targetRow >= currentRow) { - return undefined; + if (rootLanguageLayer?.tree?.rootNode.hasChanges()) { + // The tree is dirty. We should keep going — if we stop now, then the + // user will see a flash of unhighlighted text over this whole range. But + // we should also schedule a re-highlight at the end of the transaction, + // once the tree will be clean again. + let range = new Range(start, iterator._getEndPosition(endRow)); + this.languageMode.atTransactionEnd().then(() => { + this.languageMode.emitRangeUpdate(range); + }); } - let baseIndent; - if (indentationLevels) { - // If we were given this table of indentation levels, it means we're in a - // “batch” mode where we're trying to cut down on the number of tree - // re-parses. In this scenario, if the row we want is represented in the - // table, we should use the level indicated by the table. If it isn't, - // that's a sign that the line is outside of the range being - // batch-indented, which would mean that it's safe to look up its level - // directly. - baseIndent = indentationLevels.get(targetRow); - } - if (!baseIndent) { - baseIndent = this.indentLevelForLine( - this.buffer.lineForRow(targetRow), tabLength); + // An iterator can contribute to the list of already open scopes even if it + // has no boundaries to mark within the range of this highlighting job. + openScopesByLayer.set(iterator, openScopes); + + if (result) { + this.iterators.push(iterator); } - // An offset can optionally be applied to the target. - let result = baseIndent + offsetIndent; + // The logic that we use for `coverShallowerScopes` needs to be respected + // here. As we build these iterators, if we find that any of them cover + // their parent iterator at this position, we need to revisit the list of + // open scopes, removing any that aren't their layer's base language scope. + for (const marker of injectionMarkers) { + const iterator = marker.languageLayer.buildHighlightIterator(); + let [result, openScopes] = iterator.seek(start, endRow); - return Math.max(result, 0); - } + // Just as with the root layer, any injection layer may need to add to + // the list of open scopes whether or not they need to mark anything + // within this range. + if (result) { this.iterators.push(iterator); } - getAllInjectionLayers() { - let markers = this.injectionsMarkerLayer.getMarkers(); - return markers.map(m => m.languageLayer); - } + if (iterator?.languageLayer?.injectionPoint?.coverShallowerScopes) { + // The procedure we follow for covering scopes in the _middle_ of a + // highlighting task needs to be emulated when deciding which scopes + // are already open at the _start_ of the task. This layer wants to + // cover shallower scopes, so we need to re-assess our list of already + // open scopes to see if any of them _would've_ been covered at the + // point when they were opened. + let ranges = iterator.languageLayer.getCurrentRanges(); + for (let [earlierIterator, earlierOpenScopes] of openScopesByLayer) { + // It's possible, though uncommon, for injections to overlap, because + // there's no mechanism that prevents it. Since we sorted the layers + // by depth earlier, this iterator won't have a lower depth than the + // previous one. But it may have _the same_ depth, so we need to + // account for that. + if (earlierIterator.depth >= iterator.depth) { continue; } - getAllLanguageLayers(where = null) { - let layers = [ - this.rootLanguageLayer, - ...this.getAllInjectionLayers() - ]; - if (!where) return layers; + // For each of the open scopes that an earlier iterator gave us, we + // need to look at the point at which that scope would've been added. + // If that point falls within the purview of our newer iterator, then + // we should suppress that scope unless it's the layer's base + // language scope. + let languageScopeId = earlierIterator.languageLayer.languageScopeId; + for (let [point, scopes] of earlierOpenScopes) { + let pointIsCoveredByNewIterator = ranges.some(r => r.containsPoint(point)); + if (!pointIsCoveredByNewIterator) { continue; } + earlierOpenScopes.set(point, scopes.filter(id => id === languageScopeId)); + } + } + } + openScopesByLayer.set(iterator, openScopes); + } - let results = []; - for (let layer of layers) { - if (!where(layer)) continue; - results.push(layer); - } + // Sort the iterators so that the last one in the array is the earliest + // in the document, and represents the current position. + this.iterators.sort((a, b) => b.compare(a)); - return results; - } + this.detectCoveredScope(); - // Given a {Point}, returns all injection {LanguageLayer}s whose extent - // includes that point. Does not include the root language layer. - // - // A {LanguageLayer} can have multiple content ranges. Its “extent” is a - // single contiguous {Range} that includes all of its content ranges. To - // return only layers with a content range that spans the given point, pass - // `{ exact: true }` as the second argument. - // - // * point - A {Point} representing a buffer position. - // * options - An {Object} containing these keys: - // * exact - {Boolean} that checks content ranges instead of extent. - injectionLayersAtPoint(point, { exact = false } = {}) { - let injectionMarkers = this.injectionsMarkerLayer.findMarkers({ - containsPosition: point - }); + // Our nightmare is almost over, but one chore remains. The ordering of + // already open scopes should be consistent; scopes added earlier in the + // buffer should appear in the list before scopes added later. This ensures + // that, e.g., `scopeDescriptorForPosition` returns scopes in the proper + // hierarchy. + let sortedOpenScopes = []; - injectionMarkers.sort((a, b) => { - return a.getRange().compare(b.getRange()) || - b.depth - a.depth; - }); + // First we'll gather all the point/scope-list pairs into a flat list… + let unsortedScopeBundles = []; + for (let [iterator, layerOpenScopeMap] of openScopesByLayer) { + for (let [point, scopes] of layerOpenScopeMap) { + unsortedScopeBundles.push({ point, scopes, iterator }); + } + } - let results = injectionMarkers.map(m => m.languageLayer); + // …then sort them by buffer position, with shallower layers first in case + // of ties. + unsortedScopeBundles.sort((a, b) => ( + a.point.compare(b.point) || a.iterator.depth - b.iterator.depth + )); - if (exact) { - results = results.filter(l => l.containsPoint(point)); + // Now we can flatten all the scopes themselves, preserving order. + for (let { scopes } of unsortedScopeBundles) { + sortedOpenScopes.push(...scopes); } - return results; - } - // Given a {Point}, returns all {LanguageLayer}s whose extent includes that - // point. - // - // A {LanguageLayer} can have multiple content ranges. Its “extent” is a - // single contiguous {Range} that includes all of its content ranges. To - // return only layers with a content range that spans the given point, pass - // `{ exact: true }` as the second argument. - // - // * point - A {Point} representing a buffer position. - // * options - An {Object} containing these keys: - // * exact - {Boolean} that checks content ranges instead of extent. - languageLayersAtPoint(point, { exact = false } = {}) { - let injectionLayers = this.injectionLayersAtPoint(point, { exact }); - return [ - this.rootLanguageLayer, - ...injectionLayers - ]; + return sortedOpenScopes; } - // Returns the deepest language layer at a given point, or optionally the - // deepest layer to fulfill a criterion. - // - // Will ignore any layer whose content ranges do not include the point, even if - // the point is within its extent. - controllingLayerAtPoint(point, where = FUNCTION_TRUE) { - let layers = this.languageLayersAtPoint(point, { exact: true }); + moveToSuccessor() { + // `this.iterators` is _always_ sorted from farthest position to nearest + // position, so the last item in the collection is always the next one to + // act. + let leader = last(this.iterators); + if (!leader) { return; } - // Deeper layers go first. - layers.sort((a, b) => b.depth - a.depth); - return layers.find(layer => where(layer)) ?? null; - } + if (leader.moveToSuccessor()) { + // It was able to move to a successor, so now we have to "file" it into + // the right place in `this.iterators` so that the sorting is correct. + const leaderIndex = this.iterators.length - 1; + let i = leaderIndex; + while (i > 0 && this.iterators[i - 1].compare(leader) < 0) { + i--; + } + if (i < leaderIndex) { + this.iterators.splice(i, 0, this.iterators.pop()); + } + } else { + // It was not able to move to a successor, so it must be done. Remove it + // from the collection. + this.iterators.pop(); + } - firstNonWhitespaceRange(row) { - return this.buffer.findInRangeSync( - /\S/, - new Range(new Point(row, 0), new Point(row, Infinity)) - ); + this.detectCoveredScope(); } - // DEPRECATED - - tokenizedLineForRow(row) { - const lineText = this.buffer.lineForRow(row); - const tokens = []; - - const iterator = this.buildHighlightIterator(); - let start = { row, column: 0 }; - - const scopes = iterator.seek(start, row) || []; - - // eslint-disable-next-line no-constant-condition - while (true) { - const end = { ...iterator.getPosition() }; - if (end.row > row) { - end.row = row; - end.column = lineText.length; - } - - if (end.column > start.column) { - tokens.push( - new Token({ - value: lineText.substring(start.column, end.column), - scopes: scopes.map(s => this.scopeNameForScopeId(s)) - }) - ); - } + getPosition() { + let iterator = last(this.iterators || []); + if (iterator) { + // this.logPosition(); + return iterator.getPosition(); + } else { + return Point.INFINITY; + } + } - if (end.column < lineText.length) { - const closeScopeCount = iterator.getCloseScopeIds().length; - for (let i = 0; i < closeScopeCount; i++) { - scopes.pop(); - } - scopes.push(...iterator.getOpenScopeIds()); - start = end; - iterator.moveToSuccessor(); + getCloseScopeIds() { + let iterator = last(this.iterators); + // if (this.currentIteratorIsCovered === true || this.currentIteratorIsCovered === 'close') { + // console.log( + // iterator.name, + // iterator.depth, + // 'would close', + // iterator._inspectScopes( + // iterator.getCloseScopeIds() + // ), + // 'at', + // iterator.getPosition().toString(), + // 'but scope is covered!' + // ); + // } else { + // console.log( + // iterator.name, + // iterator.depth, + // 'CLOSING', + // iterator.getPosition().toString(), + // iterator._inspectScopes( + // iterator.getCloseScopeIds() + // ) + // ); + // } + if (iterator) { + // If this iterator is covered completely, or if it's covered in a + // position that prevents us from closing scopes… + if (this.currentIteratorIsCovered === true || this.currentIteratorIsCovered === 'close') { + // …then the only closing scope we're allowed to apply is one that ends + // the base scope of an injection range. + return iterator.getCloseScopeIds().filter(id => { + return iterator.languageLayer.languageScopeId === id; + }); } else { - break; + return iterator.getCloseScopeIds(); } } - - return new TokenizedLine({ - openScopes: [], - text: lineText, - tokens, - tags: [], - ruleStack: [], - lineEnding: this.buffer.lineEndingForRow(row), - tokenIterator: this.tokenIterator, - grammar: this.grammar - }); + return []; } - tokenForPosition(point) { - if (Array.isArray(point)) { - point = new Point(...point); + getOpenScopeIds() { + let iterator = last(this.iterators); + // let ids = iterator.getOpenScopeIds(); + // if (this.currentIteratorIsCovered === true || this.currentIteratorIsCovered === 'open') { + // console.log( + // iterator.name, + // iterator.depth, + // 'would open', + // iterator._inspectScopes( + // iterator.getOpenScopeIds() + // ), + // 'at', + // iterator.getPosition().toString(), + // 'but scope is covered!' + // ); + // } else { + // console.log( + // iterator.name, + // iterator.depth, + // 'OPENING', + // iterator.getPosition().toString(), + // iterator._inspectScopes( + // iterator.getOpenScopeIds() + // ) + // ); + // } + if (iterator) { + // If this iterator is covered completely, or if it's covered in a + // position that prevents us from opening scopes… + if (this.currentIteratorIsCovered === true || this.currentIteratorIsCovered === 'open') { + // …then the only opening scope we're allowed to apply is one that ends + // the base scope of an injection range. + return iterator.getOpenScopeIds().filter(id => { + return iterator.languageLayer.languageScopeId === id; + }); + } else { + return iterator.getOpenScopeIds(); + } } - const scopes = this.scopeDescriptorForPosition(point).getScopesArray(); - let range = this.bufferRangeForScopeAtPosition( - last(scopes), - point - ); - return new Token({ - scopes, - value: this.buffer.getTextInRange(range) - }); + return []; } -} -// Responsible for deciding the ranges of folds on a given language layer. -// -// Understands two kinds of folds: -// -// * A “simple” fold is one with a capture name of `@fold` in a folds query. It -// can be described with only one capture. It starts at the end of the row -// that the captured node starts on, and ends at a configurable position -// controlled by the `fold.endAt` adjustment (which defaults to -// `lastChild.startPosition`). -// -// Simple folds should be used whenever you're able to predict the end of a -// fold range simply from holding a reference to its starting node. -// -// * A “divided” fold is one where the two ends of the fold must be described -// in two separate query captures. It starts at the end of the row of a node -// captured with the name of `@fold.start`, and it ends at the very next -// `@fold.end` that it encounters in the document. -// -// When determining the end of a fold that is marked with `@fold.start`, -// Pulsar will search the buffer for the next “balanced” occurrence of -// `@fold.end`. For instance, when trying to find a match for a `@fold.start` -// on row 9, Pulsar might encounter another `@fold.start` on row 10, -// and would then understand that the next `@fold.end` it sees will end -// _that_ fold and not the one we're looking for. If Pulsar _does not_ find a -// matching `@fold.end`, the given line will not be considered to be -// foldable. -// -// Because they can trigger a buffer-wide search, divided folds are -// not recommended to use unless they're truly needed. Use them only when the -// structure of the syntax tree doesn't allow you to determine the end of the -// fold without applying your own heuristic. -// -class FoldResolver { - constructor(buffer, layer) { - this.buffer = buffer; - this.layer = layer; + // Detect whether the iterator that's about to act has its scopes covered by + // a different iterator asserting a `coverShallowerScopes` option. + detectCoveredScope() { + const layerCount = this.iterators.length; + if (layerCount > 1) { + const rest = [...this.iterators]; + const leader = rest.pop(); + let covers = false; + for (let it of rest) { + let iteratorCovers = it.coversIteratorAtPosition(leader, leader.getPosition()); + if (iteratorCovers !== false) { + covers = iteratorCovers; + break; + } + } - this.boundaries = null; - this.boundariesStartingPosition = null; + if (covers) { + this.currentIteratorIsCovered = covers; + return; + } + } + + this.currentIteratorIsCovered = false; } - // Retrieve the first valid fold range for this row in this language layer — - // that is, the first fold range that spans more than one row. - getFoldRangeForRow(row) { - if (!this.layer.tree || !this.layer.queries.foldsQuery) { return null; } - let start = Point.fromObject({ row, column: 0 }); - let end = Point.fromObject({ row: row + 1, column: 0 }); + logPosition() { + let iterator = last(this.iterators); + iterator?.logPosition(); + } +} - let tree = this.layer.getOrParseTree({ force: false }); - // Search for folds that begin somewhere on the given row. - let iterator = this.getOrCreateBoundariesIterator(tree.rootNode, start, end); +const EMPTY_SCOPES = Object.freeze([]); - // More than one fold can match for a given row, so we'll stop as soon as - // we find the fold that starts earliest on the row. (The fold itself will - // be “resolved” in such a way that it doesn't begin until the end of the - // row, but we still consider the intrinsic range of the fold capture when - // deciding which one to honor.) - while (iterator.key) { - if (comparePoints(iterator.key.position, end) >= 0) { break; } - let capture = iterator.value; - let { name } = capture; - if (name === 'fold') { - let range = this.resolveRangeForSimpleFold(capture); - if (this.isValidFold(range)) { return range; } - } else if (name === 'fold.start') { - let range = this.resolveRangeForDividedFold(capture); - if (this.isValidFold(range)) { return range; } - } - iterator.next(); - } +// Iterates through everything that a `LanguageLayer` is responsible for, +// marking boundaries for scope insertion. +class LayerHighlightIterator { + constructor(languageLayer) { + this.languageLayer = languageLayer; + this.name = languageLayer.grammar.scopeName; + this.depth = languageLayer.depth; - return null; + let { injectionPoint } = this.languageLayer; + + this.coverShallowerScopes = injectionPoint?.coverShallowerScopes ?? false } - isValidFold(range) { - return range && range.end.row > range.start.row; + // If this isn't the root language layer, we need to make sure this iterator + // doesn't try to go past its marker boundary. + _getEndPosition(endRow) { + let { marker } = this.languageLayer; + let { buffer } = this.languageLayer.languageMode; + let naiveEndPoint = new Point( + endRow, + buffer.lineLengthForRow(endRow) + ); + + if (marker) { + return Point.min(marker.getRange().end, naiveEndPoint) + } else { + return buffer.clipPosition(naiveEndPoint); + } } - // Returns all valid fold ranges in this language layer. + // TODO: This still doesn't make much sense, so I suppose it's good that + // we've now made it an opt-in feature. // - // There are two rules about folds that we can't change: + // The main problem with this logic is that it runs the risk of covering only + // one half of a pair of boundaries. If a scope range from the root layer is + // coterminous with a scope range from an injection layer, that's easy to + // detect and handle; but what if the root layer's range starts at the same + // point but ends later? We'd prevent the root layer from opening the scope + // but not closing it. // - // 1. A fold must collapse at least one line’s worth of content. - // 2. The UI for expanding and collapsing folds envisions that each line can - // manage a maximum of _one_ fold. + // I still don't fully understand the use cases for `detectCoveredScope`, + // though I assume there are at least a few. I am quite sure, however, that + // if we want an injection layer to veto a shallower layer's scope, it ought + // to happen in a way that either prevents _both_ boundaries or allows _both_ + // boundaries. I'm not sure how to pull that off at this point, though. // - // Hence a fold range is “valid” when it - // * resolves to a range that spans more than one line; - // * starts on a line that hasn't already been promised to an earlier fold. - getAllFoldRanges() { - if (!this.layer.tree || !this.layer.queries.foldsQuery) { return []; } - let range = this.layer.getExtent(); - // We use a Tree-sitter query to find folds; then we arrange the folds in - // buffer order. The first valid fold we find on a given line is included - // in the list; any other folds on the line are ignored. - let iterator = this.getOrCreateBoundariesIterator( - this.layer.tree.rootNode, range.start, range.end); + // https://github.com/atom/atom/pull/19556 has good discussion about the + // impetus for this feature. + coversIteratorAtPosition(iterator, position) { + // When does a layer prevent another layer from applying scopes? - let results = []; - let lastValidFoldRange = null; - while (iterator.key) { - let capture = iterator.value; - let { name } = capture; - let range; - if (name === 'fold') { - range = this.resolveRangeForSimpleFold(capture); - } else if (name === 'fold.start') { - range = this.resolveRangeForDividedFold(capture); - } - if (this.isValidFold(range)) { - // Recognize only the first fold for each row. - if (lastValidFoldRange?.start?.row !== range.start.row) { - results.push(range); - lastValidFoldRange = range; - } + // When the option is asserted… + if (!this.coverShallowerScopes) { return false; } + + // …and this iterator is deeper than the other… + if (iterator.depth > this.depth) { return false; } + + // …and one of this iterator's content ranges actually includes this + // position. (With caveats!) + let ranges = this.languageLayer.getCurrentRanges(); + if (ranges) { + // A given layer's content ranges aren't allowed to overlap each other. + // So only a single range from this list can possibly match. + let overlappingRange = ranges.find(range => range.containsPoint(position)) + if (!overlappingRange) return false; + + // If the current position is right in the middle of an injection's + // range, then it should cover all attempts to apply scopes. But what if + // we're on one of its edges? Since closing scopes act before opening + // scopes, + // + // * if this iterator _starts_ a range at position X, it doesn't get to + // prevent another iterator from _ending_ a scope at position X; + // * if this iterator _ends_ a range at position X, it doesn't get to + // prevent another iterator from _starting_ a scope at position X. + // + // So at a given position, `currentIteratorIsCovered` can be `true` (all + // scopes suppressed), `false` (none suppressed), `"close"` (only closing + // scopes suppressed), or `"open"` (only opening scopes suppressed). + if (overlappingRange.end.compare(position) === 0) { + // We're at the right edge of the injection range. We want to prevent + // iterators from closing scopes, but not from opening them. + return 'close'; + } else if (overlappingRange.start.compare(position) === 0) { + // We're at the left edge of the injection range. We want to prevent + // iterators from opening scopes, but not from closing them. + return 'open'; + } else { + return true; } - iterator.next(); } - - return results; } - // Invalidates the fold resolver's cached boundary data in response to a - // change in the document. - reset() { - this.boundaries = null; - this.boundariesRange = null; - } + seek(start, endRow) { + let end = this._getEndPosition(endRow); + // let isDevMode = atom.inDevMode(); - canReuseBoundaries(start, end) { - if (!this.boundariesRange) { return false; } - return this.boundariesRange.containsRange( - new Range(start, end) - ); + // let timeKey; + // if (isDevMode) { + // timeKey = `${this.name} getSyntaxBoundaries`; + // console.time(timeKey); + // } + let [boundaries, openScopes] = this.languageLayer.getSyntaxBoundaries( + start, end); + + this.iterator = boundaries?.begin; + if (!this.iterator?.key) { + return [false, openScopes]; + } + + this.start = Point.fromObject(start, true); + this.end = end; + // if (isDevMode) { console.timeEnd(timeKey); } + return [true, openScopes]; } - prefillFoldCache(range) { - if (!this.layer.tree || !this.layer.queries.foldsQuery) { return; } - this.getOrCreateBoundariesIterator( - this.layer.tree.rootNode, - range.start, - range.end - ); + isAtInjectionBoundary() { + let position = Point.fromObject(this.iterator.key.position); + return position.isEqual(this.start) || position.isEqual(this.end); } - getOrCreateBoundariesIterator(rootNode, start, end) { - if (!this.layer.tree || !this.layer.queries.foldsQuery) { return null; } - if (this.canReuseBoundaries(start, end)) { - let result = this.boundaries.ge(start); - return result; + _inspectScopes(ids) { + if (Array.isArray(ids)) { + return ids.map(id => this._inspectScopes(id)).join(', ') } + return this.languageLayer.languageMode.scopeNameForScopeId(ids); + } - let scopeResolver = this.layer.scopeResolver; - scopeResolver.reset(); + getOpenScopeIds() { + let { key, value } = this.iterator; + return key.boundary === 'end' ? EMPTY_SCOPES : [...value.scopeIds]; + } - // Instead of keying off of a plain buffer position, this tree also - // considers whether the boundary is a fold start or a fold end. If one - // boundary ends at the same point that another one starts, the ending - // boundary will be visited first. - let boundaries = createTree(compareBoundaries); - let captures = this.layer.queries.foldsQuery.captures(rootNode, start, end); + getCloseScopeIds() { + let { key, value } = this.iterator; + return key.boundary === 'start' ? EMPTY_SCOPES : [...value.scopeIds]; + } - for (let capture of captures) { - // NOTE: Currently, the first fold to match for a given starting position - // is the only one considered. That's because we use a version of a - // red-black tree in which we silently ignore any attempts to add a key - // that is equivalent in value to that of a previously added key. - // - // Attempts to use `capture.final` and `capture.shy` won't harm anything, - // but they'll be redundant. Other types of custom predicates, however, - // should work just fine. - let result = scopeResolver.store(capture); - if (!result) { continue; } + opensScopes() { + return this.iterator?.key?.boundary === 'start'; + } - // Some folds are unusual enough that they can flip from valid to - // invalid, or vice versa, based on edits to rows other than their - // starting row. We need to keep track of these nodes so that we can - // invalidate the fold cache properly when edits happen inside of them. - if (scopeResolver.shouldInvalidateFoldOnChange(capture)) { - this.layer.foldNodesToInvalidateOnChange.add(capture.node.id); - } + closesScopes() { + return this.iterator?.key?.boundary === 'end'; + } - if (capture.node.startPosition.row < start.row) { - // This fold starts before the range we're interested in. We needed to - // run these nodes through the scope resolver for various reasons, but - // they're not relevant to our iterator. - continue; - } - if (capture.name === 'fold') { - boundaries = boundaries.insert({ - position: capture.node.startPosition, - boundary: 'start' - }, capture); - } else if (capture.name.startsWith('fold.')) { - let key = this.keyForDividedFold(capture); - boundaries = boundaries.insert(key, capture); - } - } + getPosition() { + return this.iterator?.key?.position ?? Point.INFINITY; + } - scopeResolver.reset(); + logPosition() { + let pos = this.getPosition(); + let { key, value } = this.iterator; - this.boundaries = boundaries; - this.boundariesRange = new Range(start, end); + let { languageMode } = this.languageLayer; + let verb = key.boundary === 'end' ? 'close' : 'open'; - return boundaries.ge(start); + console.log( + `[highlight] (${pos.row}, ${pos.column})`, + verb, + value.scopeIds.map(id => languageMode.scopeNameForScopeId(id)), + 'next?', + this.iterator.hasNext + ); } - // Given a `@fold.start` capture, queries the rest of the layer's extent to - // find a matching `@fold.end`. - resolveRangeForDividedFold(capture) { - let { name } = capture; - let key = this.keyForDividedFold(capture); - if (name !== 'fold.start') { return null; } - - let extent = this.layer.getExtent(); - - let iterator = this.getOrCreateBoundariesIterator( - this.layer.tree.rootNode, - key.position, - extent.end + compare(other) { + // First, favor the one whose current position is earlier. + const result = comparePoints( + this.iterator.key.position, + other.iterator.key.position ); + if (result !== 0) { return result; } - let depth = 0; - let matchedEndCapture = null; + // Failing that, favor iterators that need to close scopes over those that + // don't. + let ourBoundary = this.iterator.key.boundary; + let theirBoundary = other.iterator.key.boundary; + let bothClosing = ourBoundary === 'end' && theirBoundary === 'end'; - while (iterator.key && comparePoints(iterator.key.position, extent.end) <= 0) { - let { name, node } = iterator.value; - let isSelf = node.id === capture.node.id; - if (name === 'fold.end' && !isSelf) { - if (depth === 0) { - matchedEndCapture = iterator.value; - break; - } else { - depth--; - } - } else if (name === 'fold.start' && !isSelf) { - // A later `fold.start` has occurred, so the next `fold.end` will pair - // with it, not with ours. - depth++; - } - iterator.next(); + if (ourBoundary === 'end' && !bothClosing) { + return -1; + } else if (theirBoundary === 'end' && !bothClosing) { + return 1; } - // There's no guarantee that a matching `@fold.end` will even appear, so if - // it doesn't, then this row does not contain a valid fold. - if (!matchedEndCapture) { return null; } - - return new Range( - this.resolvePositionForDividedFold(capture), - this.resolvePositionForDividedFold(matchedEndCapture) - ); - } - - keyForDividedFold(capture) { - let { name, node } = capture; - if (name === 'fold.start') { - // Eventually we'll alter this position to occur at the end of the given - // row, but we keep the original value around for a while because we want - // to honor whichever fold technically happens “earliest” on a given row. - return { position: node.startPosition, boundary: 'start' }; - } else if (name === 'fold.end') { - return { position: node.startPosition, boundary: 'end' }; + if (bothClosing) { + // When both iterators are closing scopes, the deeper layer should act + // first. + return other.languageLayer.depth - this.languageLayer.depth; } else { - return null; + // When both iterators are opening scopes, the shallower layer should act + // first. + return this.languageLayer.depth - other.languageLayer.depth; } } - // Returns `true` if there is no non-whitespace content on this position's - // row before this position's column. - positionIsNotPrecededByTextOnLine(position) { - let textForRow = this.buffer.lineForRow(position.row) - let precedingText = textForRow.substring(0, position.column) - return !(/\S/.test(precedingText)) - } - - resolvePositionForDividedFold(capture) { - let { name, node } = capture; - if (name === 'fold.start') { - return new Point(node.startPosition.row, Infinity); - } else if (name === 'fold.end') { - let end = node.startPosition; - if (end.column === 0 || this.positionIsNotPrecededByTextOnLine(end)) { - // If the fold ends at the start of the line, adjust it so that it - // actually ends at the end of the previous line. This behavior is - // implied in the existing specs. - return new Point(end.row - 1, Infinity); - } else { - return new Point.fromObject(end, true); - } - } else { - return null; + moveToSuccessor() { + if (!this.iterator.hasNext || this.done) { + return false; } + this.iterator.next(); + this.done = this.isDone(); + return true; } - normalizeFoldProperty(prop) { - if (prop.startsWith('fold.')) { - prop = prop.replace(/^fold./, ''); - } - return prop; + peekAtSuccessor() { + if (!this.iterator.hasNext) { return null; } + this.iterator.next(); + let key = this.iterator.key; + this.iterator.prev(); + return key; } - capturePropertyIsFoldAdjustment(prop) { - prop = this.normalizeFoldProperty(prop); - return prop in FoldResolver.ADJUSTMENTS; - } + isDone() { + if (!this.iterator.hasNext) { return true; } + if (!this.end) { return false; } - applyFoldAdjustment(prop, ...args) { - prop = this.normalizeFoldProperty(prop); - return FoldResolver.ADJUSTMENTS[prop](...args); + let next = this.peekAtSuccessor(); + return comparePoints(next.position, this.end) > 0; } +} - resolveRangeForSimpleFold(capture) { - let { node, setProperties: props } = capture; - if (node.type === 'ERROR') { return null; } - let start = new Point(node.startPosition.row, Infinity); - let end = node.endPosition; - - let defaultOptions = { 'fold.endAt': 'lastChild.startPosition' }; - let options = { ...defaultOptions, ...props }; - - try { - for (let key in options) { - if (!this.capturePropertyIsFoldAdjustment(key)) { continue; } - let value = options[key]; - end = this.applyFoldAdjustment(key, end, node, value, props, this.layer); - } - if (!end) { return null; } - - end = Point.fromObject(end, true); - end = this.buffer.clipPosition(end); - - if (end.row <= start.row) { return null; } - return new Range(start, end); - } catch (error) { - // If any of our assumptions are violated, fall back to an end point that we know can't fail: the end of the captured node itself. - console.warn("Error resolving fold range:"); - console.warn(error.message); - return new Range(start, node.range.end); - } +class GrammarLoadError extends Error { + constructor(grammar, queryType) { + super(`Grammar ${grammar.scopeName} failed to load its ${queryType}. Please fix this error or contact the maintainer.`); + this.name = 'GrammarLoadError'; + this.queryType = queryType; } } -FoldResolver.ADJUSTMENTS = { - // Use a node position descriptor to describe where the fold should end. - // Overrides the default descriptor of `lastChild.startPosition`. - endAt(end, node, value) { - end = resolveNodePosition(node, value); - return end; - }, - - // Adjust the end point by a fixed number of characters in either direction. - // Will cross rows if necessary. - offsetEnd(end, node, value, props, layer) { - let { languageMode } = layer; - value = Number(value); - if (isNaN(value)) { return end; } - return languageMode.adjustPositionByOffset(end, value); - }, +// Manages all aspects of a given language's parsing duties over a given region +// of the buffer. +// +// The base `LanguageLayer` that's in charge of the entire buffer is the "root" +// `LanguageLayer`. Other `LanguageLayer`s are created when injections are +// required. Those injected languages may require injections themselves, +// meaning a layer could be of arbitrary depth. +// +// For example: a PHP file could inject an HTML grammar, which in turn injects +// a JavaScript grammar for `SCRIPT` blocks, which in turn injects a regex +// grammar for regular expressions. +// +// Thus, for many editor-related tasks that depend on the context of the +// cursor, we should figure out how many different `LanguageLayer`s are +// operating in that particular region, and either (a) compose their output or +// (b) choose the output of the most specific layer that meets our needs, +// depending on the task. +// +class LanguageLayer { + constructor(marker, languageMode, grammar, depth, injectionPoint) { + this.marker = marker; + this.languageMode = languageMode; + this.buffer = this.languageMode.buffer; + this.grammar = grammar; + this.depth = depth; + this.injectionPoint = injectionPoint; + this.rangeList = new RangeList(); - // Adjust the column of the fold's end point. Use `0` to end the fold at the - // start of the line. - adjustEndColumn(end, node, value, props, layer) { - let column = Number(value); - if (isNaN(column)) { return end; } - let newEnd = Point.fromObject({ column, row: end.row }); - return layer.buffer.clipPosition(newEnd); - }, + this.nodesToInvalidateOnChange = new Set(); + this.foldNodesToInvalidateOnChange = new Set(); - // Adjust the end point to be immediately before the current line begins. - // Useful if the end line also contains the start of a fold and thus should - // stay on a separate screen line. - adjustToEndOfPreviousRow(end) { - return new Point(end.row - 1, Infinity); - } -}; + this.tree = null; + this.lastSyntaxTree = null; + this.temporaryTrees = []; + this.patchSinceCurrentParseStarted = null; -class NullLanguageModeHighlightIterator { - seek() { - return []; - } - compare() { - return 1; - } - moveToSuccessor() {} - getPosition() { - return Point.INFINITY; - } - getOpenScopeIds() { - return []; - } - getCloseScopeIds() { - return []; - } -} + this.subscriptions = new CompositeDisposable; -class NullLayerHighlightIterator { - seek() { - return [false, new OpenScopeMap]; - } - compare() { - return 1; - } - moveToSuccessor() {} - getPosition() { - return Point.INFINITY; - } - getOpenScopeIds() { - return []; - } - getCloseScopeIds() { - return []; + this.currentRangesLayer = this.buffer.addMarkerLayer(); + this.ready = false; + this.queries = {}; + + // A constructor can't go async, so all our async administrative tasks hang + // off this promise. We can `await this.languageLoaded` later on. + this.languageLoaded = this.grammar.getLanguage().then(language => { + this.language = language; + // All queries are optional. Regular expression language layers, for + // instance, don't really have a need for any queries other than + // `highlightsQuery`, and some kinds of layers don't even need + // `highlightsQuery`. + let queries = ['highlightsQuery', 'foldsQuery', 'indentsQuery', 'localsQuery', 'tagsQuery']; + let promises = []; + + for (let queryType of queries) { + if (grammar[queryType]) { + let promise = this.grammar.getQuery(queryType).then(query => { + this.queries[queryType] = query; + }).catch(() => { + throw new GrammarLoadError(grammar, queryType); + }); + promises.push(promise); + } + } + return Promise.all(promises); + }).catch((err) => { + if (err.name === 'GrammarLoadError') { + console.warn(err.message); + if (err.queryType === 'highlightsQuery') { + // Recover by setting an empty `highlightsQuery` so that we don't + // propagate errors. + // + // TODO: Warning? + grammar.setQueryForTest( + 'highlightsQuery', + `; (placeholder)` + ); + } + } else { + throw err; + } + }).then(() => { + // This used to be called only in dev mode. But there are other use cases + // for dynamically reloading queries, so now we observer for changes in a + // grammar's queries in all cases. + // + // The grammar itself, however, will still only watch the query files + // themselves for changes if we're in dev mode. + this.observeQueryChanges(); + + this.tree = null; + this.scopeResolver = new ScopeResolver( + this, + (name, text) => this.languageMode.idForScope(name, text) + ); + this.foldResolver = new FoldResolver(this.buffer, this); + + // What should our language scope name be? Should we even have one? + let languageScope; + if (depth === 0) { + languageScope = this.grammar.scopeName; + } else { + // Injections can control the base scope name of the grammar being + // injected. + languageScope = injectionPoint.languageScope; + + // The `languageScope` parameter can be a function. That means we won't + // decide now; we'll decide later on a range-by-range basis. + + // Honor an explicit `null`, but fall back to the default scope name + // otherwise. + if (languageScope === undefined) { + languageScope = this.grammar.scopeName; + } + } + + this.languageScope = languageScope; + if (languageScope === null || typeof languageScope === 'function') { + // If `languageScope` is a function, we'll still often end up with a + // `languageScopeId` (or several); we just won't be able to compute it + // ahead of time. + this.languageScopeId = null; + } else { + this.languageScopeId = this.languageMode.idForScope(languageScope); + } + this.ready = true; + }); } -} -let lastIteratorId = 0; + // Previously we were storing compiled queries directly on the language + // layer. Now we store them on a `queries` object instead. + // + // All internal usages have been changed, but packages might still try to + // find these queries at their old locations. For that reason, we'll define + // shims for backward compatibility. + get highlightsQuery() { return this.queries.highlightsQuery; } + set highlightsQuery(value) { this.queries.highlightsQuery = value; } -// An iterator for marking boundaries in the buffer to apply syntax -// highlighting. -// -// Manages a collection of `LayerHighlightIterators`, which are the classes -// doing the real work of marking boundaries. `HighlightIterator` is in charge -// of understanding, at any given point, which of the iterators needs to be -// advanced next. -class HighlightIterator { - constructor(languageMode) { - this.id = lastIteratorId++; - this.languageMode = languageMode; - this.iterators = null; + get indentsQuery() { return this.queries.indentsQuery; } + set indentsQuery(value) { this.queries.indentsQuery = value; } + + get foldsQuery() { return this.queries.foldsQuery; } + set foldsQuery(value) { this.queries.foldsQuery = value; } + + get tagsQuery() { return this.queries.tagsQuery; } + set tagsQuery(value) { this.queries.tagsQuery = value; } + + get localsQuery() { return this.queries.localsQuery; } + set localsQuery(value) { this.queries.localsQuery = value; } + + isDirty() { + if (!this.tree) { return false; } + return this.tree.rootNode.hasChanges(); } inspect() { - return `[HighlightIterator id=${this.id} iterators=${this.iterators?.length ?? 0}]`; + let { scopeName } = this.grammar; + return `[LanguageLayer ${scopeName || '(anonymous)'} depth=${this.depth} file=${this.buffer.getPath()}]`; } - seek(start, endRow) { - if (!(start instanceof Point)) { - start = Point.fromObject(start, true); - } - let { buffer, rootLanguageLayer } = this.languageMode; - if (!rootLanguageLayer) { return []; } + destroy() { + if (this.destroyed) { return; } + this.destroyed = true; - let end = { - row: endRow, - column: buffer.lineLengthForRow(endRow) - }; + // Clean up all tree-sitter trees. + let temporaryTrees = this.temporaryTrees ?? []; + let trees = new Set([this.tree, this.lastSyntaxTree, ...temporaryTrees]); + trees = [...trees]; - this.end = end; - this.iterators = []; + this.tree = null; + this.lastSyntaxTree = null; + this.temporaryTrees = []; - if (Math.max(start.column, end.column) > LINE_LENGTH_LIMIT_FOR_HIGHLIGHTING) { - return []; + while (trees.length > 0) { + let tree = trees.pop(); + if (!tree) { continue; } + tree.delete(); } - let injectionMarkers = this.languageMode.injectionsMarkerLayer.findMarkers( - { - intersectsRange: new Range( - start, - new Point(endRow + 1, 0) - ) + this.marker?.destroy(); + this.currentRangesLayer?.destroy(); + this.foldResolver?.reset(); + this.scopeResolver?.destroy(); + this.subscriptions.dispose(); + + for (const marker of this.languageMode.injectionsMarkerLayer.getMarkers()) { + if (marker.parentLanguageLayer === this) { + marker.languageLayer.destroy(); } - ); + } + } - injectionMarkers.sort((a, b) => { - // Shallower injections get visited first. - return a.languageLayer.depth - b.languageLayer.depth; - }); - - const iterator = rootLanguageLayer.buildHighlightIterator(); - - // We need to know which open scopes were contributed by which language - // layer so that we know which ones to “cover” if we see an injection with - // the `coverShallowerScopes` option. - // - // What's worse is that we need to know _where_ each of those open scopes - // would've been added, because that open scope shouldn't truly be added - // _if_ it would've been suppressed by a deeper layer. - let openScopesByLayer = new Map(); - - // The contract of `LayerHighlightIterator#seek` is different from the - // contract of `HighlightIterator#seek`. Instead of an array of open - // scopes, we have it return an two-item array. - // - // The first item is a boolean that indicates whether the iterator needs to - // mark anything _within_ the range that will be highlighted. If not, it - // doesn't need to go into the list of iterators. - // - // The second item is an `OpenScopeMap` (rather than just an array of - // already open scopes) that retains information about where each open - // scope was opened, because we'll need that information in a moment. - // - let [result, openScopes] = iterator.seek(start, endRow); - - if (rootLanguageLayer?.tree?.rootNode.hasChanges()) { - // The tree is dirty. We should keep going — if we stop now, then the - // user will see a flash of unhighlighted text over this whole range. But - // we should also schedule a re-highlight at the end of the transaction, - // once the tree will be clean again. - let range = new Range(start, iterator._getEndPosition(endRow)); - this.languageMode.atTransactionEnd().then(() => { - this.languageMode.emitRangeUpdate(range); - }); - } - - // An iterator can contribute to the list of already open scopes even if it - // has no boundaries to mark within the range of this highlighting job. - openScopesByLayer.set(iterator, openScopes); + // Reload a query of a given type from the grammar. + async reloadGrammarQuery(queryType) { + if (!this.queries[queryType]) { return; } + let originalQuery = this.queries[queryType]; + try { + let query = await this.grammar.getQuery(queryType); + this.queries[queryType] = query; - if (result) { - this.iterators.push(iterator); + // Force a re-highlight of this layer's entire region. + let range = this.getExtent(); + this.languageMode.emitRangeUpdate(range); + this.nodesToInvalidateOnChange.clear(); + this.foldNodesToInvalidateOnChange.clear(); + } catch (error) { + this.queries[queryType] = originalQuery; + console.error(`Error parsing query file: ${queryType}`); + console.error(error); } + } - // The logic that we use for `coverShallowerScopes` needs to be respected - // here. As we build these iterators, if we find that any of them cover - // their parent iterator at this position, we need to revisit the list of - // open scopes, removing any that aren't their layer's base language scope. - for (const marker of injectionMarkers) { - const iterator = marker.languageLayer.buildHighlightIterator(); - let [result, openScopes] = iterator.seek(start, endRow); - - // Just as with the root layer, any injection layer may need to add to - // the list of open scopes whether or not they need to mark anything - // within this range. - if (result) { this.iterators.push(iterator); } + // Observe the grammar for changes in queries. + // + // This won't happen very often. It can happen if a user edits a grammar’s + // query files, but those edits are only monitored in dev mode. + // + // It can also happen if a community package uses an API on + // {WASMTreeSitterGrammar} to modify a query after initial load. + observeQueryChanges() { + this.grammar.onDidChangeQuery(async ({ queryType }) => { + if (this._pendingQueryFileChange) { return; } + // Debounce the reloading. Sometimes multiple callbacks fire when a query + // file is saved. + this._pendingQueryFileChange = true; + await this.reloadGrammarQuery(queryType); + this._pendingQueryFileChange = false; + }) + } - if (iterator?.languageLayer?.injectionPoint?.coverShallowerScopes) { - // The procedure we follow for covering scopes in the _middle_ of a - // highlighting task needs to be emulated when deciding which scopes - // are already open at the _start_ of the task. This layer wants to - // cover shallower scopes, so we need to re-assess our list of already - // open scopes to see if any of them _would've_ been covered at the - // point when they were opened. - let ranges = iterator.languageLayer.getCurrentRanges(); - for (let [earlierIterator, earlierOpenScopes] of openScopesByLayer) { - // It's possible, though uncommon, for injections to overlap, because - // there's no mechanism that prevents it. Since we sorted the layers - // by depth earlier, this iterator won't have a lower depth than the - // previous one. But it may have _the same_ depth, so we need to - // account for that. - if (earlierIterator.depth >= iterator.depth) { continue; } + getExtent() { + return this.marker?.getRange() ?? this.languageMode.buffer.getRange(); + } - // For each of the open scopes that an earlier iterator gave us, we - // need to look at the point at which that scope would've been added. - // If that point falls within the purview of our newer iterator, then - // we should suppress that scope unless it's the layer's base - // language scope. - let languageScopeId = earlierIterator.languageLayer.languageScopeId; - for (let [point, scopes] of earlierOpenScopes) { - let pointIsCoveredByNewIterator = ranges.some(r => r.containsPoint(point)); - if (!pointIsCoveredByNewIterator) { continue; } - earlierOpenScopes.set(point, scopes.filter(id => id === languageScopeId)); - } - } - } - openScopesByLayer.set(iterator, openScopes); + // Run a highlights query for the given range and process the raw captures + // through a `ScopeResolver`. + getSyntaxBoundaries(from, to) { + let { buffer } = this.languageMode; + if (!(this.language && this.tree)) { + return [[], new OpenScopeMap()]; } - // Sort the iterators so that the last one in the array is the earliest - // in the document, and represents the current position. - this.iterators.sort((a, b) => b.compare(a)); + from = buffer.clipPosition(Point.fromObject(from, true)); + to = buffer.clipPosition(Point.fromObject(to, true)); - this.detectCoveredScope(); + let boundaries = createTree(compareBoundaries); + let extent = this.getExtent(); - // Our nightmare is almost over, but one chore remains. The ordering of - // already open scopes should be consistent; scopes added earlier in the - // buffer should appear in the list before scopes added later. This ensures - // that, e.g., `scopeDescriptorForPosition` returns scopes in the proper - // hierarchy. - let sortedOpenScopes = []; + let captures = this.queries.highlightsQuery?.captures(this.tree.rootNode, from, to) ?? []; + this.scopeResolver.reset(); - // First we'll gather all the point/scope-list pairs into a flat list… - let unsortedScopeBundles = []; - for (let [iterator, layerOpenScopeMap] of openScopesByLayer) { - for (let [point, scopes] of layerOpenScopeMap) { - unsortedScopeBundles.push({ point, scopes, iterator }); + for (let capture of captures) { + let { node } = capture; + if (this.scopeResolver.shouldInvalidateOnChange(capture)) { + // This node wants to be invalidated in its entirety whenever a change + // happens within it. This setting should be added to a query whenever + // (a) a certain node's scope name can change just from its contents + // changing, and (b) that node can possibly span more than one line. + // + // Without this setting, we're liable to invalidate only the line that + // a change happened on, because we have no other way of knowing how + // significant of a change it is. If we were able to do so, we'd set + // this property automatically on any capture that (a) involved a + // `#match?` predicate, and (b) started and ended on different lines. + this.nodesToInvalidateOnChange.add(node.id); } - } - - // …then sort them by buffer position, with shallower layers first in case - // of ties. - unsortedScopeBundles.sort((a, b) => ( - a.point.compare(b.point) || a.iterator.depth - b.iterator.depth - )); - - // Now we can flatten all the scopes themselves, preserving order. - for (let { scopes } of unsortedScopeBundles) { - sortedOpenScopes.push(...scopes); - } - - return sortedOpenScopes; - } - - moveToSuccessor() { - // `this.iterators` is _always_ sorted from farthest position to nearest - // position, so the last item in the collection is always the next one to - // act. - let leader = last(this.iterators); - if (!leader) { return; } + // Phantom nodes invented by the parse tree. Indentation captures can use + // `allowEmpty` to force these to be considered, but for marking scopes, + // there's no need for it; it'd just cause us to open and close a scope + // in the same position. + if (node.childCount === 0 && node.text === '') { continue; } - if (leader.moveToSuccessor()) { - // It was able to move to a successor, so now we have to "file" it into - // the right place in `this.iterators` so that the sorting is correct. - const leaderIndex = this.iterators.length - 1; - let i = leaderIndex; - while (i > 0 && this.iterators[i - 1].compare(leader) < 0) { - i--; - } - if (i < leaderIndex) { - this.iterators.splice(i, 0, this.iterators.pop()); - } - } else { - // It was not able to move to a successor, so it must be done. Remove it - // from the collection. - this.iterators.pop(); + // Ask the `ScopeResolver` to process each capture in turn. Some captures + // will be ignored if they fail certain tests, and some will have their + // original range altered. + this.scopeResolver.store(capture); } - this.detectCoveredScope(); - } + // A `HighlightIterator` will want to know which scopes were already open + // when this range began. Sadly, we also have to keep track of the point in + // the buffer at which each of those scopes would've been added, because + // it's possible that later we'll find out that a deeper iterator has + // suppressed the application of that scope boundary at that position. + let alreadyOpenScopes = new OpenScopeMap(); - getPosition() { - let iterator = last(this.iterators || []); - if (iterator) { - // this.logPosition(); - return iterator.getPosition(); - } else { - return Point.INFINITY; - } - } + // How do we add a layer's root scope? There's no easy answer. + // + // If we rely on the grammar author to map the tree's root node to the + // language's root scope, they could forget to do it, or map a scope that + // isn't the same as the one given in the grammar's config file. We'd also + // limit the ability of that `highlights.scm` to be used in multiple + // contexts — for example, the HTML grammar would always carry around a + // `text.html.basic` scope name no matter where we put it. + // + // If we manage it ourselves, we invite the complexity of _manually_ + // applying a root scope — plus knowing when it actually _shouldn't_ be + // applied, and making sure that `scopeDescriptorForPosition` returns + // results that agree with reality. + // + // Option B is the one we reluctantly choose because it gives us more + // control. Here's roughly how this works: + // + // * The base language scope on the root layer will always be applied. + // * The base language scope on an injection layer will be applied in areas + // where that injection is active, unless we were told otherwise in + // `addInjectionPoint`. That method's `languageScope` property can + // define another scope name to use instead… or pass `null`, signaling + // that we should skip the root scope altogether. (This is the best + // approach for special-purpose injections like `todo` and `hyperlink`.) + // * A grammar can still opt to place a root scope conditionally based on + // whether it's on an injection layer. This also allows a grammar to + // apply that root scope more selectively in injection contexts if + // desired. - getCloseScopeIds() { - let iterator = last(this.iterators); - // if (this.currentIteratorIsCovered === true || this.currentIteratorIsCovered === 'close') { - // console.log( - // iterator.name, - // iterator.depth, - // 'would close', - // iterator._inspectScopes( - // iterator.getCloseScopeIds() - // ), - // 'at', - // iterator.getPosition().toString(), - // 'but scope is covered!' - // ); - // } else { - // console.log( - // iterator.name, - // iterator.depth, - // 'CLOSING', - // iterator.getPosition().toString(), - // iterator._inspectScopes( - // iterator.getCloseScopeIds() - // ) - // ); - // } - if (iterator) { - // If this iterator is covered completely, or if it's covered in a - // position that prevents us from closing scopes… - if (this.currentIteratorIsCovered === true || this.currentIteratorIsCovered === 'close') { - // …then the only closing scope we're allowed to apply is one that ends - // the base scope of an injection range. - return iterator.getCloseScopeIds().filter(id => { - return iterator.languageLayer.languageScopeId === id; - }); - } else { - return iterator.getCloseScopeIds(); - } - } - return []; - } + // Ensure the whole source file (or whole bounds of the injection) is + // annotated with the language's base scope name. We _do not_ want to leave + // this up to the grammar author; it's too important. Also ensure that the + // base scope name of an injection covers the true boundaries of where that + // injection is active. + // + // NOTE: If an injection is active over a number of disjoint ranges, this + // may have some surprising effects. For instance, areas where PHP is + // injected into HTML… + // + //

+ // + // …will include ``, but may exclude the + // spaces between those tokens. This is a consequence of the design of + // a particular Tree-sitter parser and should be mitigated with the + // `includeAdjacentWhitespace` option of `addInjectionPoint`. + // + let includedRanges = this.depth === 0 ? [extent] : this.getCurrentRanges(); - getOpenScopeIds() { - let iterator = last(this.iterators); - // let ids = iterator.getOpenScopeIds(); - // if (this.currentIteratorIsCovered === true || this.currentIteratorIsCovered === 'open') { - // console.log( - // iterator.name, - // iterator.depth, - // 'would open', - // iterator._inspectScopes( - // iterator.getOpenScopeIds() - // ), - // 'at', - // iterator.getPosition().toString(), - // 'but scope is covered!' - // ); - // } else { - // console.log( - // iterator.name, - // iterator.depth, - // 'OPENING', - // iterator.getPosition().toString(), - // iterator._inspectScopes( - // iterator.getOpenScopeIds() - // ) - // ); - // } - if (iterator) { - // If this iterator is covered completely, or if it's covered in a - // position that prevents us from opening scopes… - if (this.currentIteratorIsCovered === true || this.currentIteratorIsCovered === 'open') { - // …then the only opening scope we're allowed to apply is one that ends - // the base scope of an injection range. - return iterator.getOpenScopeIds().filter(id => { - return iterator.languageLayer.languageScopeId === id; - }); - } else { - return iterator.getOpenScopeIds(); - } + let languageScopeIdForRange = () => this.languageScopeId; + if (typeof this.languageScope === 'function') { + languageScopeIdForRange = (range) => { + let scopeName = this.languageScope(this.grammar, this.languageMode.buffer, range); + if (Array.isArray(scopeName)) { + return scopeName.map(s => this.languageMode.idForScope(s)); + } else { + return this.languageMode.idForScope(scopeName); + } + }; } - return []; - } - // Detect whether the iterator that's about to act has its scopes covered by - // a different iterator asserting a `coverShallowerScopes` option. - detectCoveredScope() { - const layerCount = this.iterators.length; - if (layerCount > 1) { - const rest = [...this.iterators]; - const leader = rest.pop(); - let covers = false; - for (let it of rest) { - let iteratorCovers = it.coversIteratorAtPosition(leader, leader.getPosition()); - if (iteratorCovers !== false) { - covers = iteratorCovers; - break; + if (this.languageScopeId || typeof this.languageScope === 'function') { + for (let range of includedRanges) { + // Filter out ranges that have no intersection with ours. + if (range.end.isLessThanOrEqual(from)) { continue; } + if (range.start.isGreaterThanOrEqual(to)) { continue; } + + let languageScopeIds = languageScopeIdForRange(range); + if (!languageScopeIds) continue; + + if (!Array.isArray(languageScopeIds)) { + languageScopeIds = [languageScopeIds]; } - } - if (covers) { - this.currentIteratorIsCovered = covers; - return; + if (range.start.isLessThan(from)) { + // If we get this far, we know that the base language scope was open + // when our range began. + alreadyOpenScopes.set( + range.start, + languageScopeIds + ); + } else { + // Range start must be between `from` and `to`, or else equal `from` + // exactly. + for (let id of languageScopeIds) { + this.scopeResolver.setBoundary( + range.start, + id, + 'open', + { root: true, length: Infinity } + ); + } + } + + if (range.end.isGreaterThan(to)) { + // Do nothing; we don't need to set this boundary. + } else { + // The range must end somewhere within our range. + // + // Close the boundaries in the opposite order of how we opened them. + for (let i = languageScopeIds.length - 1; i >= 0; i--) { + this.scopeResolver.setBoundary( + range.end, + languageScopeIds[i], + 'close', + { root: true, length: Infinity } + ); + } + } } } - this.currentIteratorIsCovered = false; - } - - logPosition() { - let iterator = last(this.iterators); - iterator?.logPosition(); - } -} + // `ScopeResolver` ensures that these points will be iterated in buffer + // order. + for (let [point, data] of this.scopeResolver) { + // The boundaries that occur before the start of our range will tell us + // which scopes should already be open when our range starts. + if (point.isLessThan(from)) { + alreadyOpenScopes.set(point, data.open); + for (let c of data.close) { + alreadyOpenScopes.removeLastOccurrenceOf(c); + } + continue; + } else if (point.isGreaterThan(to)) { + continue; + } -const EMPTY_SCOPES = Object.freeze([]); + let OPEN_KEY = { position: point, boundary: 'start' }; + let CLOSE_KEY = { position: point, boundary: 'end' }; -// Iterates through everything that a `LanguageLayer` is responsible for, -// marking boundaries for scope insertion. -class LayerHighlightIterator { - constructor(languageLayer) { - this.languageLayer = languageLayer; - this.name = languageLayer.grammar.scopeName; - this.depth = languageLayer.depth; + // Each point will contain either one or more scopes to _close_… + if (data.close.length > 0) { + boundaries = boundaries.insert(CLOSE_KEY, { + scopeIds: Object.freeze(data.close) + }); + } - let { injectionPoint } = this.languageLayer; + // …or one or more scopes to _open_. One point is not allowed to close + // one scope and open another; there's always a chance that a different + // injection layer needs to act in between. + if (data.open.length > 0) { + boundaries = boundaries.insert(OPEN_KEY, { + scopeIds: Object.freeze(data.open) + }); + } + } - this.coverShallowerScopes = injectionPoint?.coverShallowerScopes ?? false + return [boundaries, alreadyOpenScopes]; } - // If this isn't the root language layer, we need to make sure this iterator - // doesn't try to go past its marker boundary. - _getEndPosition(endRow) { - let { marker } = this.languageLayer; - let { buffer } = this.languageLayer.languageMode; - let naiveEndPoint = new Point( - endRow, - buffer.lineLengthForRow(endRow) - ); - - if (marker) { - return Point.min(marker.getRange().end, naiveEndPoint) + buildHighlightIterator() { + if (this.tree) { + return new LayerHighlightIterator(this, this.tree); } else { - return buffer.clipPosition(naiveEndPoint); + return new NullLayerHighlightIterator(); } } - // TODO: This still doesn't make much sense, so I suppose it's good that - // we've now made it an opt-in feature. - // - // The main problem with this logic is that it runs the risk of covering only - // one half of a pair of boundaries. If a scope range from the root layer is - // coterminous with a scope range from an injection layer, that's easy to - // detect and handle; but what if the root layer's range starts at the same - // point but ends later? We'd prevent the root layer from opening the scope - // but not closing it. - // - // I still don't fully understand the use cases for `detectCoveredScope`, - // though I assume there are at least a few. I am quite sure, however, that - // if we want an injection layer to veto a shallower layer's scope, it ought - // to happen in a way that either prevents _both_ boundaries or allows _both_ - // boundaries. I'm not sure how to pull that off at this point, though. - // - // https://github.com/atom/atom/pull/19556 has good discussion about the - // impetus for this feature. - coversIteratorAtPosition(iterator, position) { - // When does a layer prevent another layer from applying scopes? + handleTextChange(edit, oldText, newText) { + // Any text change within the layer invalidates our cached fold boundary + // tree. This usually isn't a big deal because the language mode's own cache + // is able to adjust when content shifts up and down, so typically only the + // ranges that actually change will have fold data re-queried. + if (this.foldResolver) { this.foldResolver.reset(); } - // When the option is asserted… - if (!this.coverShallowerScopes) { return false; } + const { + startPosition, + oldEndPosition, + newEndPosition + } = edit; - // …and this iterator is deeper than the other… - if (iterator.depth > this.depth) { return false; } + if (this.tree) { + this.tree.edit(edit); + if (this.lastSyntaxTree && this.tree !== this.lastSyntaxTree) { + // This happens after an off-schedule parse that we've decided we can + // re-use at the end of the current transaction. But when that happens, + // we'll call `getChangedRanges` between `lastSyntaxTree` and the new + // tree, so `lastSyntaxTree` needs to receive the same tree edits. + this.lastSyntaxTree.edit(edit); + } + // We're tentatively marking this tree as dirty; we won't know if it + // needs to be reparsed until the transaction is done. If it doesn't, + // that means that the edits didn't encroach on the contents of the + // layer, and we'll mark those trees as clean at the end of the + // transaction. + this.treeIsDirty = true; + if (this.editedRange) { + if (startPosition.isLessThan(this.editedRange.start)) { + this.editedRange.start = startPosition; + } if (oldEndPosition.isLessThan(this.editedRange.end)) { + this.editedRange.end = newEndPosition.traverse( + this.editedRange.end.traversalFrom(oldEndPosition) + ); + } else { + this.editedRange.end = newEndPosition; + } + } else { + this.editedRange = new Range(startPosition, newEndPosition); + } + } - // …and one of this iterator's content ranges actually includes this - // position. (With caveats!) - let ranges = this.languageLayer.getCurrentRanges(); - if (ranges) { - // A given layer's content ranges aren't allowed to overlap each other. - // So only a single range from this list can possibly match. - let overlappingRange = ranges.find(range => range.containsPoint(position)) - if (!overlappingRange) return false; + if (this.patchSinceCurrentParseStarted) { + this.patchSinceCurrentParseStarted.splice( + startPosition, + oldEndPosition.traversalFrom(startPosition), + newEndPosition.traversalFrom(startPosition), + oldText, + newText + ) + } + } - // If the current position is right in the middle of an injection's - // range, then it should cover all attempts to apply scopes. But what if - // we're on one of its edges? Since closing scopes act before opening - // scopes, - // - // * if this iterator _starts_ a range at position X, it doesn't get to - // prevent another iterator from _ending_ a scope at position X; - // * if this iterator _ends_ a range at position X, it doesn't get to - // prevent another iterator from _starting_ a scope at position X. + async update(nodeRangeSet, params = {}) { + if (!this.languageMode.useAsyncParsing) { + // Practically speaking, updates that affect _only this layer_ will happen + // synchronously, because we've made sure not to call this method until the + // root grammar's tree-sitter parser has been loaded. But we can't load any + // potential injection layers' languages because we don't know which ones + // we'll need _until_ we parse this layer's tree for the first time. // - // So at a given position, `currentIteratorIsCovered` can be `true` (all - // scopes suppressed), `false` (none suppressed), `"close"` (only closing - // scopes suppressed), or `"open"` (only opening scopes suppressed). - if (overlappingRange.end.compare(position) === 0) { - // We're at the right edge of the injection range. We want to prevent - // iterators from closing scopes, but not from opening them. - return 'close'; - } else if (overlappingRange.start.compare(position) === 0) { - // We're at the left edge of the injection range. We want to prevent - // iterators from opening scopes, but not from closing them. - return 'open'; - } else { - return true; - } + // Thus the first call to `_populateInjections` will probably go async + // while we wait for the injections' parsers to load, and the user might + // notice the delay. But once that happens, all subsequent updates _should_ + // be synchronous, except for a case where a change in the buffer causes us + // to need a new kind of injection whose parser hasn't yet been loaded. + if (!this.ready) { await this.languageLoaded; } + await this._performUpdate(nodeRangeSet); + return true; + } + + if (!this.currentParsePromise) { + do { + params = { ...params, async: false }; + if (!this.ready) { + params.async = true; + await this.languageLoaded; + } + this.currentParsePromise = this._performUpdate(nodeRangeSet, params); + if (!params.async) { break; } + await this.currentParsePromise; + } while ( + !this.destroyed && + (!this.tree || this.tree.rootNode.hasChanges()) + ); + + this.currentParsePromise = null; + // `true` means that this update occurs in its own distinct transaction. + return true; + } else { + // `false` means that the previous transaction isn't done, so this + // transaction's work will be subsumed into it. + return false; } } - seek(start, endRow) { - let end = this._getEndPosition(endRow); - // let isDevMode = atom.inDevMode(); + getLocalReferencesAtPoint(point) { + if (!this.queries.localsQuery) { return []; } + let captures = this.queries.localsQuery.captures( + this.tree.rootNode, + point, + point + 1 + ); - // let timeKey; - // if (isDevMode) { - // timeKey = `${this.name} getSyntaxBoundaries`; - // console.time(timeKey); - // } - let [boundaries, openScopes] = this.languageLayer.getSyntaxBoundaries( - start, end); + captures = captures.filter(cap => { + if (cap.name !== 'local.reference') { return false; } + if (!rangeForNode(cap.node).containsPoint(point)) { + return false; + } + return true; + }); - this.iterator = boundaries?.begin; - if (!this.iterator?.key) { - return [false, openScopes]; - } + let nodes = captures.map(cap => cap.node); + nodes = nodes.sort((a, b) => b.range.compare(a.range)); - this.start = Point.fromObject(start, true); - this.end = end; - // if (isDevMode) { console.timeEnd(timeKey); } - return [true, openScopes]; + return nodes; } - isAtInjectionBoundary() { - let position = Point.fromObject(this.iterator.key.position); - return position.isEqual(this.start) || position.isEqual(this.end); - } + // EXPERIMENTAL: Given a local reference node, tries to find the node that + // defines it. + findDefinitionForLocalReference(node, captures = null) { + if (!this.queries.localsQuery) { return []; } + let name = node.text; + if (!name) { return []; } + let localRange = rangeForNode(node); + let globalScope = this.tree.rootNode; - _inspectScopes(ids) { - if (Array.isArray(ids)) { - return ids.map(id => this._inspectScopes(id)).join(', ') + if (!captures) { + captures = this.groupLocalsCaptures( + this.queries.localsQuery.captures( + globalScope, + globalScope.startPosition, + globalScope.endPosition + ) + ); } - return this.languageLayer.languageMode.scopeNameForScopeId(ids); - } - getOpenScopeIds() { - let { key, value } = this.iterator; - return key.boundary === 'end' ? EMPTY_SCOPES : [...value.scopeIds]; - } + let { scopes, definitions } = captures; - getCloseScopeIds() { - let { key, value } = this.iterator; - return key.boundary === 'start' ? EMPTY_SCOPES : [...value.scopeIds]; - } + // Consider only the scopes that can influence our local node. + let relevantScopes = scopes.filter((scope) => { + let range = rangeForNode(scope); + return range.containsRange(localRange); + }).sort((a, b) => { + a.range.compare(b.range) + }); - opensScopes() { - return this.iterator?.key?.boundary === 'start'; - } + relevantScopes.push(globalScope); - closesScopes() { - return this.iterator?.key?.boundary === 'end'; - } + // Consider only the definitions whose names match the target's. + let relevantDefinitions = definitions.filter( + (def) => def.text === name + ); + if (relevantDefinitions.length === 0) { return []; } - getPosition() { - return this.iterator?.key?.position ?? Point.INFINITY; - } + let definitionsByBaseScope = new Index(); + for (let rDef of relevantDefinitions) { + // Find all the scopes that include this definition. The largest of those + // scopes will be its "base" scope. If there are no scopes that include + // this definition, it must have been defined globally. + let rDefScopes = scopes.filter(s => { + return isBetweenPoints( + rDef.startPosition, + s.startPosition, + s.endPosition + ); + }).sort((a, b) => { + return rangeForNode(b).compare(rangeForNode(a)); + }); - logPosition() { - let pos = this.getPosition(); - let { key, value } = this.iterator; + let baseScope = rDefScopes[0] ?? globalScope; - let { languageMode } = this.languageLayer; - let verb = key.boundary === 'end' ? 'close' : 'open'; + // Group each definition by its scope. Since any variable can be + // redefined an arbitrary number of times, each scope might include + // multiple definitions of this identifier. + definitionsByBaseScope.add(baseScope, rDef); + } - console.log( - `[highlight] (${pos.row}, ${pos.column})`, - verb, - value.scopeIds.map(id => languageMode.scopeNameForScopeId(id)), - 'next?', - this.iterator.hasNext - ); - } + // Moving from smallest to largest scope, get definitions that were made in + // that scope, and return the closest one to the reference. + for (let scope of relevantScopes) { + let definitionsInScope = definitionsByBaseScope.get(scope) ?? []; + let { length } = definitionsInScope; + if (length === 0) { continue; } + if (length === 1) { return definitionsInScope[0]; } - compare(other) { - // First, favor the one whose current position is earlier. - const result = comparePoints( - this.iterator.key.position, - other.iterator.key.position - ); - if (result !== 0) { return result; } + // Here's how we want to sort these candidates: + // + // * In each scope, look for a definitions that happen before the local's + // position. The closest such definition in the narrowest scope is our + // ideal target. + // * Failing that, take note of all the definitions that happened _after_ + // the local's position in all relevant scopes. Choose the closest to + // the local. + // + let definitionsBeforeLocal = []; + let definitionsAfterLocal = []; - // Failing that, favor iterators that need to close scopes over those that - // don't. - let ourBoundary = this.iterator.key.boundary; - let theirBoundary = other.iterator.key.boundary; - let bothClosing = ourBoundary === 'end' && theirBoundary === 'end'; + for (let def of definitionsInScope) { + let result = comparePoints(def.startPosition, localRange.start); - if (ourBoundary === 'end' && !bothClosing) { - return -1; - } else if (theirBoundary === 'end' && !bothClosing) { - return 1; - } + let bucket = result < 0 ? + definitionsBeforeLocal : + definitionsAfterLocal; - if (bothClosing) { - // When both iterators are closing scopes, the deeper layer should act - // first. - return other.languageLayer.depth - this.languageLayer.depth; - } else { - // When both iterators are opening scopes, the shallower layer should act - // first. - return this.languageLayer.depth - other.languageLayer.depth; + bucket.push(def); + } + + if (definitionsBeforeLocal.length > 0) { + let maxBeforeLocal; + for (let def of definitionsBeforeLocal) { + if (!maxBeforeLocal) { + maxBeforeLocal = def; + continue; + } + + let result = comparePoints(def, maxBeforeLocal); + if (result > 0) { + maxBeforeLocal = def; + } + } + return maxBeforeLocal; + } + + // TODO: For definitions that happen after the local in the buffer, it's + // not 100% clear what the right answer should be. I imagine it varies by + // language. Best guess for now is the one that's closest to the local + // reference. + let minAfterLocal; + for (let def of definitionsAfterLocal) { + if (!minAfterLocal) { + minAfterLocal = def; + continue; + } + + let result = comparePoints(def, minAfterLocal); + if (result < 0) { + minAfterLocal = def; + } + } + + return minAfterLocal; } } - moveToSuccessor() { - if (!this.iterator.hasNext || this.done) { - return false; + groupLocalsCaptures(captures) { + let scopes = []; + let definitions = []; + let references = []; + + for (let capture of captures) { + let { name, node } = capture; + switch (name) { + case 'local.scope': + scopes.push(node); + break; + case 'local.definition': + definitions.push(node); + break; + case 'local.reference': + references.push(node); + break; + } } - this.iterator.next(); - this.done = this.isDone(); - return true; - } - peekAtSuccessor() { - if (!this.iterator.hasNext) { return null; } - this.iterator.next(); - let key = this.iterator.key; - this.iterator.prev(); - return key; + return { scopes, definitions, references }; } - isDone() { - if (!this.iterator.hasNext) { return true; } - if (!this.end) { return false; } - - let next = this.peekAtSuccessor(); - return comparePoints(next.position, this.end) > 0; - } -} + // Given a range and a `Set` of node IDs, test if any of those nodes' ranges + // overlap with the given range. + // + // We use this to test if a given edit should trigger the behavior indicated + // by `(fold|highlight).invalidateOnChange`. + searchForNodesInRange(range, nodeIdSet) { + let node = this.getSyntaxNodeContainingRange( + range, + n => nodeIdSet.has(n.id) + ); -class GrammarLoadError extends Error { - constructor(grammar, queryType) { - super(`Grammar ${grammar.scopeName} failed to load its ${queryType}. Please fix this error or contact the maintainer.`); - this.name = 'GrammarLoadError'; - this.queryType = queryType; + if (node) { + // One of this node's ancestors might also be in our list, so we'll + // traverse upwards and find out. + let ancestor = node.parent; + while (ancestor) { + if (nodeIdSet.has(ancestor.id)) { + node = ancestor; + } + ancestor = ancestor.parent; + } + return node; + } + return null; } -} -// Manages all aspects of a given language's parsing duties over a given region -// of the buffer. -// -// The base `LanguageLayer` that's in charge of the entire buffer is the "root" -// `LanguageLayer`. Other `LanguageLayer`s are created when injections are -// required. Those injected languages may require injections themselves, -// meaning a layer could be of arbitrary depth. -// -// For example: a PHP file could inject an HTML grammar, which in turn injects -// a JavaScript grammar for `SCRIPT` blocks, which in turn injects a regex -// grammar for regular expressions. -// -// Thus, for many editor-related tasks that depend on the context of the -// cursor, we should figure out how many different `LanguageLayer`s are -// operating in that particular region, and either (a) compose their output or -// (b) choose the output of the most specific layer that meets our needs, -// depending on the task. -// -class LanguageLayer { - constructor(marker, languageMode, grammar, depth, injectionPoint) { - this.marker = marker; - this.languageMode = languageMode; - this.buffer = this.languageMode.buffer; - this.grammar = grammar; - this.depth = depth; - this.injectionPoint = injectionPoint; - this.rangeList = new RangeList(); + async _performUpdate(nodeRangeSet, params = {}) { + // It's much more common in specs than in real life, but it's always + // possible for a layer to get destroyed during the async period between + // layer updates. + if (this.destroyed) return; - this.nodesToInvalidateOnChange = new Set(); - this.foldNodesToInvalidateOnChange = new Set(); + let includedRanges = null; + this.rangeList.clear(); - this.tree = null; - this.lastSyntaxTree = null; - this.temporaryTrees = []; - this.patchSinceCurrentParseStarted = null; + if (nodeRangeSet) { + includedRanges = nodeRangeSet.getRanges(this.languageMode.buffer); + if (includedRanges.length === 0) { + // We have no ranges to inject into. This layer should no longer exist. + const range = this.marker.getRange(); + this.destroy(); + this.languageMode.emitRangeUpdate(range); + return; + } + } - this.subscriptions = new CompositeDisposable; + this.patchSinceCurrentParseStarted = new Patch(); + let language = this.grammar.getLanguageSync(); + let tree; + if (this.languageMode.useAsyncParsing) { + tree = this.languageMode.parseAsync( + language, + this.tree, + includedRanges, + // { tag: `Parsing ${this.inspect()} (async) ${params.id}` } + ); + if (tree.then) { + params.async = true; + tree = await tree; + } + } else { + tree = this.languageMode.parse( + language, + this.tree, + includedRanges, + // { tag: `Parsing ${this.inspect()} (sync) ${params.id}` } + ); + } - this.currentRangesLayer = this.buffer.addMarkerLayer(); - this.ready = false; - this.queries = {}; + let changes = this.patchSinceCurrentParseStarted.getChanges(); + this.patchSinceCurrentParseStarted = null; - // A constructor can't go async, so all our async administrative tasks hang - // off this promise. We can `await this.languageLoaded` later on. - this.languageLoaded = this.grammar.getLanguage().then(language => { - this.language = language; - // All queries are optional. Regular expression language layers, for - // instance, don't really have a need for any queries other than - // `highlightsQuery`, and some kinds of layers don't even need - // `highlightsQuery`. - let queries = ['highlightsQuery', 'foldsQuery', 'indentsQuery', 'localsQuery', 'tagsQuery']; - let promises = []; + for (let change of changes) { + let newExtent = Point.fromObject(change.newEnd).traversalFrom(change.newStart); + tree.edit( + this._treeEditForBufferChange( + change.newStart, + change.oldEnd, + Point.fromObject(change.oldStart).traverse(newExtent), + change.oldText, + change.newText + ) + ); + } - for (let queryType of queries) { - if (grammar[queryType]) { - let promise = this.grammar.getQuery(queryType).then(query => { - this.queries[queryType] = query; - }).catch(() => { - throw new GrammarLoadError(grammar, queryType); - }); - promises.push(promise); - } - } - return Promise.all(promises); - }).catch((err) => { - if (err.name === 'GrammarLoadError') { - console.warn(err.message); - if (err.queryType === 'highlightsQuery') { - // Recover by setting an empty `highlightsQuery` so that we don't - // propagate errors. - // - // TODO: Warning? - grammar.setQueryForTest( - 'highlightsQuery', - `; (placeholder)` - ); - } - } else { - throw err; - } - }).then(() => { - // This used to be called only in dev mode. But there are other use cases - // for dynamically reloading queries, so now we observer for changes in a - // grammar's queries in all cases. - // - // The grammar itself, however, will still only watch the query files - // themselves for changes if we're in dev mode. - this.observeQueryChanges(); + if (includedRanges) { + this.setCurrentRanges(includedRanges); + } - this.tree = null; - this.scopeResolver = new ScopeResolver( - this, - (name, text) => this.languageMode.idForScope(name, text) - ); - this.foldResolver = new FoldResolver(this.buffer, this); + let affectedRange = this.editedRange; + this.lastTransactionEditedRange = this.editedRange; + this.editedRange = null; - // What should our language scope name be? Should we even have one? - let languageScope; - if (depth === 0) { - languageScope = this.grammar.scopeName; - } else { - // Injections can control the base scope name of the grammar being - // injected. - languageScope = injectionPoint.languageScope; + let foldRangeList = new RangeList(); - // The `languageScope` parameter can be a function. That means we won't - // decide now; we'll decide later on a range-by-range basis. + // Look for a node that was marked with `invalidateOnChange`. If we find + // one, we should invalidate that node's entire buffer region. + if (affectedRange) { - // Honor an explicit `null`, but fall back to the default scope name - // otherwise. - if (languageScope === undefined) { - languageScope = this.grammar.scopeName; - } + // First look for nodes that were previously marked with + // `highlight.invalidateOnChange`; those will specify ranges for which + // we'll need to force a re-highlight. + let node = this.searchForNodesInRange( + affectedRange, + this.nodesToInvalidateOnChange + ); + if (node) { + this.rangeList.add(node.range); } - this.languageScope = languageScope; - if (languageScope === null || typeof languageScope === 'function') { - // If `languageScope` is a function, we'll still often end up with a - // `languageScopeId` (or several); we just won't be able to compute it - // ahead of time. - this.languageScopeId = null; - } else { - this.languageScopeId = this.languageMode.idForScope(languageScope); + // Now look for nodes that were previously marked with + // `fold.invalidateOnChange`; those will specify ranges that need their + // fold cache updated even when highlighting is unaffected. + let foldNode = this.searchForNodesInRange( + affectedRange, + this.foldNodesToInvalidateOnChange + ); + if (foldNode) { + foldRangeList.add(foldNode.range); } - this.ready = true; - }); - } - - // Previously we were storing compiled queries directly on the language - // layer. Now we store them on a `queries` object instead. - // - // All internal usages have been changed, but packages might still try to - // find these queries at their old locations. For that reason, we'll define - // shims for backward compatibility. - get highlightsQuery() { return this.queries.highlightsQuery; } - set highlightsQuery(value) { this.queries.highlightsQuery = value; } - - get indentsQuery() { return this.queries.indentsQuery; } - set indentsQuery(value) { this.queries.indentsQuery = value; } + } - get foldsQuery() { return this.queries.foldsQuery; } - set foldsQuery(value) { this.queries.foldsQuery = value; } + this.nodesToInvalidateOnChange.clear(); + this.foldNodesToInvalidateOnChange.clear(); - get tagsQuery() { return this.queries.tagsQuery; } - set tagsQuery(value) { this.queries.tagsQuery = value; } + if (this.lastSyntaxTree) { + const rangesWithSyntaxChanges = this.lastSyntaxTree.getChangedRanges(tree); - get localsQuery() { return this.queries.localsQuery; } - set localsQuery(value) { this.queries.localsQuery = value; } + let oldSyntaxTree = this.lastSyntaxTree; + this.lastSyntaxTree = tree; - isDirty() { - if (!this.tree) { return false; } - return this.tree.rootNode.hasChanges(); - } + let oldTree = this.tree; + this.tree = tree; + this.treeIsDirty = false; - inspect() { - let { scopeName } = this.grammar; - return `[LanguageLayer ${scopeName || '(anonymous)'} depth=${this.depth} file=${this.buffer.getPath()}]`; - } + oldTree?.delete(); + oldSyntaxTree?.delete(); - destroy() { - if (this.destroyed) { return; } - this.destroyed = true; + while (this.temporaryTrees.length > 0) { + let tree = this.temporaryTrees.pop(); + tree.delete(); + } - // Clean up all tree-sitter trees. - let temporaryTrees = this.temporaryTrees ?? []; - let trees = new Set([this.tree, this.lastSyntaxTree, ...temporaryTrees]); - trees = [...trees]; + if (rangesWithSyntaxChanges.length > 0) { + for (const range of rangesWithSyntaxChanges) { + this.rangeList.add(rangeForNode(range)); + } - this.tree = null; - this.lastSyntaxTree = null; - this.temporaryTrees = []; + const combinedRangeWithSyntaxChange = new Range( + rangesWithSyntaxChanges[0].startPosition, + last(rangesWithSyntaxChanges).endPosition + ); - while (trees.length > 0) { - let tree = trees.pop(); - if (!tree) { continue; } - tree.delete(); - } + if (affectedRange) { + this.rangeList.add(affectedRange); + affectedRange = affectedRange.union(combinedRangeWithSyntaxChange); + } else { + affectedRange = combinedRangeWithSyntaxChange; + } + } + } else { + this.tree = tree; + this.treeIsDirty = false; - this.marker?.destroy(); - this.currentRangesLayer?.destroy(); - this.foldResolver?.reset(); - this.scopeResolver?.destroy(); - this.subscriptions.dispose(); + // Store a reference to this tree so we can compare it with the next + // transaction's tree later on. + this.lastSyntaxTree = tree; - for (const marker of this.languageMode.injectionsMarkerLayer.getMarkers()) { - if (marker.parentLanguageLayer === this) { - marker.languageLayer.destroy(); + // Like legacy tree-sitter, we're patching syntax nodes so that they have + // a `range` property that returns a `Range`. We're doing this for + // compatibility, but we can't get a reference to the node class itself; + // we have to wait until we have an instance and grab the prototype from + // there. + // + // This is the earliest place in the editor lifecycle where we're + // guaranteed to be holding an instance of `Node`. Once we patch it here, + // we're good to go. + // + ensureNodeIsPatched(tree.rootNode); + + this.rangeList.add(rangeForNode(tree.rootNode)); + if (includedRanges) { + affectedRange = new Range( + includedRanges[0].startPosition, + last(includedRanges).endPosition + ); + } else { + affectedRange = MAX_RANGE; } } - } - - // Reload a query of a given type from the grammar. - async reloadGrammarQuery(queryType) { - if (!this.queries[queryType]) { return; } - let originalQuery = this.queries[queryType]; - try { - let query = await this.grammar.getQuery(queryType); - this.queries[queryType] = query; - // Force a re-highlight of this layer's entire region. - let range = this.getExtent(); + // Now that we've assembled and coalesced all the ranges that need + // invalidating, we'll invalidate them in buffer order. + for (let range of this.rangeList) { this.languageMode.emitRangeUpdate(range); - this.nodesToInvalidateOnChange.clear(); - this.foldNodesToInvalidateOnChange.clear(); - } catch (error) { - this.queries[queryType] = originalQuery; - console.error(`Error parsing query file: ${queryType}`); - console.error(error); } - } - - // Observe the grammar for changes in queries. - // - // This won't happen very often. It can happen if a user edits a grammar’s - // query files, but those edits are only monitored in dev mode. - // - // It can also happen if a community package uses an API on - // {WASMTreeSitterGrammar} to modify a query after initial load. - observeQueryChanges() { - this.grammar.onDidChangeQuery(async ({ queryType }) => { - if (this._pendingQueryFileChange) { return; } - // Debounce the reloading. Sometimes multiple callbacks fire when a query - // file is saved. - this._pendingQueryFileChange = true; - await this.reloadGrammarQuery(queryType); - this._pendingQueryFileChange = false; - }) - } - getExtent() { - return this.marker?.getRange() ?? this.languageMode.buffer.getRange(); - } - - // Run a highlights query for the given range and process the raw captures - // through a `ScopeResolver`. - getSyntaxBoundaries(from, to) { - let { buffer } = this.languageMode; - if (!(this.language && this.tree)) { - return [[], new OpenScopeMap()]; + for (let range of foldRangeList) { + // The fold cache is automatically cleared for any range that needs + // re-highlighting. But sometimes we need to go further and invalidate + // rows that don't even need highlighting changes. + this.languageMode.emitFoldUpdate(range); } - from = buffer.clipPosition(Point.fromObject(from, true)); - to = buffer.clipPosition(Point.fromObject(to, true)); - - let boundaries = createTree(compareBoundaries); - let extent = this.getExtent(); - - let captures = this.queries.highlightsQuery?.captures(this.tree.rootNode, from, to) ?? []; - this.scopeResolver.reset(); - - for (let capture of captures) { - let { node } = capture; - if (this.scopeResolver.shouldInvalidateOnChange(capture)) { - // This node wants to be invalidated in its entirety whenever a change - // happens within it. This setting should be added to a query whenever - // (a) a certain node's scope name can change just from its contents - // changing, and (b) that node can possibly span more than one line. - // - // Without this setting, we're liable to invalidate only the line that - // a change happened on, because we have no other way of knowing how - // significant of a change it is. If we were able to do so, we'd set - // this property automatically on any capture that (a) involved a - // `#match?` predicate, and (b) started and ended on different lines. - this.nodesToInvalidateOnChange.add(node.id); + if (affectedRange) { + let injectionPromise = this._populateInjections(affectedRange, nodeRangeSet); + if (injectionPromise) { + params.async = true; + return injectionPromise; } - // Phantom nodes invented by the parse tree. Indentation captures can use - // `allowEmpty` to force these to be considered, but for marking scopes, - // there's no need for it; it'd just cause us to open and close a scope - // in the same position. - if (node.childCount === 0 && node.text === '') { continue; } - - // Ask the `ScopeResolver` to process each capture in turn. Some captures - // will be ignored if they fail certain tests, and some will have their - // original range altered. - this.scopeResolver.store(capture); } + } - // A `HighlightIterator` will want to know which scopes were already open - // when this range began. Sadly, we also have to keep track of the point in - // the buffer at which each of those scopes would've been added, because - // it's possible that later we'll find out that a deeper iterator has - // suppressed the application of that scope boundary at that position. - let alreadyOpenScopes = new OpenScopeMap(); - - // How do we add a layer's root scope? There's no easy answer. - // - // If we rely on the grammar author to map the tree's root node to the - // language's root scope, they could forget to do it, or map a scope that - // isn't the same as the one given in the grammar's config file. We'd also - // limit the ability of that `highlights.scm` to be used in multiple - // contexts — for example, the HTML grammar would always carry around a - // `text.html.basic` scope name no matter where we put it. - // - // If we manage it ourselves, we invite the complexity of _manually_ - // applying a root scope — plus knowing when it actually _shouldn't_ be - // applied, and making sure that `scopeDescriptorForPosition` returns - // results that agree with reality. - // - // Option B is the one we reluctantly choose because it gives us more - // control. Here's roughly how this works: - // - // * The base language scope on the root layer will always be applied. - // * The base language scope on an injection layer will be applied in areas - // where that injection is active, unless we were told otherwise in - // `addInjectionPoint`. That method's `languageScope` property can - // define another scope name to use instead… or pass `null`, signaling - // that we should skip the root scope altogether. (This is the best - // approach for special-purpose injections like `todo` and `hyperlink`.) - // * A grammar can still opt to place a root scope conditionally based on - // whether it's on an injection layer. This also allows a grammar to - // apply that root scope more selectively in injection contexts if - // desired. - - // Ensure the whole source file (or whole bounds of the injection) is - // annotated with the language's base scope name. We _do not_ want to leave - // this up to the grammar author; it's too important. Also ensure that the - // base scope name of an injection covers the true boundaries of where that - // injection is active. - // - // NOTE: If an injection is active over a number of disjoint ranges, this - // may have some surprising effects. For instance, areas where PHP is - // injected into HTML… - // - //

- // - // …will include ``, but may exclude the - // spaces between those tokens. This is a consequence of the design of - // a particular tree-sitter parser and should be mitigated with the - // `includeAdjacentWhitespace` option of `addInjectionPoint`. - // - let includedRanges = this.depth === 0 ? [extent] : this.getCurrentRanges(); + setCurrentRanges(includedRanges) { + if (this.depth === 0) { return; } + let oldRangeMarkers = this.currentRangesLayer.getMarkers(); + for (let marker of oldRangeMarkers) { + marker.destroy(); + } - let languageScopeIdForRange = () => this.languageScopeId; - if (typeof this.languageScope === 'function') { - languageScopeIdForRange = (range) => { - let scopeName = this.languageScope(this.grammar, this.languageMode.buffer, range); - if (Array.isArray(scopeName)) { - return scopeName.map(s => this.languageMode.idForScope(s)); - } else { - return this.languageMode.idForScope(scopeName); - } - }; + // These are the “official” ranges, received right after the parent layer's + // tree parse. We'll get a new set of official ranges at the end of the + // next transaction, but until then, we should try our best to adapt to + // buffer changes, and to allow each range to shift or grow or shrink so + // that off-schedule parses are more likely to be accurate. + for (let range of includedRanges) { + range = rangeForNode(range); + this.currentRangesLayer.markRange(range); } + } - if (this.languageScopeId || typeof this.languageScope === 'function') { - for (let range of includedRanges) { - // Filter out ranges that have no intersection with ours. - if (range.end.isLessThanOrEqual(from)) { continue; } - if (range.start.isGreaterThanOrEqual(to)) { continue; } + getCurrentRanges() { + let markers = this.currentRangesLayer?.getMarkers(); + if (!markers || markers.length === 0) { return null; } + return markers.map(m => m.getRange()); + } - let languageScopeIds = languageScopeIdForRange(range); - if (!languageScopeIds) continue; + // Checks whether a given {Point} lies within one of this layer's content + // ranges — not just its extent. The optional `exclusive` flag will return + // `false` if the point lies on a boundary of a content range. + containsPoint(point, exclusive = false) { + let ranges = this.getCurrentRanges() ?? [this.getExtent()]; + return ranges.some(r => r.containsPoint(point, exclusive)); + } - if (!Array.isArray(languageScopeIds)) { - languageScopeIds = [languageScopeIds]; - } + // Returns a syntax tree for the current buffer. + // + // By default, this method will either return the current tree (if it's up to + // date) or synchronously parse the buffer into a new tree (if it isn't). + // + // If you don't want to force a re-parse and don't mind that the current tree + // might be stale, pass `force: false` as an option. + // + // In certain circumstances, the new tree might be promoted to the canonical + // tree for this layer. To prevent this, pass `anonymous: false` as an option. + // + // All trees returned by this method are managed by this language layer and + // will be deleted when the next transaction is complete. Retaining a + // reference to the returned tree will not prevent this from happening. To + // opt into managing the life cycle of the returned tree, copy it immediately + // when you receive it. + // + getOrParseTree({ force = true, anonymous = false } = {}) { + if (this.tree && (!this.treeIsDirty || !force)) { return this.tree; } - if (range.start.isLessThan(from)) { - // If we get this far, we know that the base language scope was open - // when our range began. - alreadyOpenScopes.set( - range.start, - languageScopeIds - ); - } else { - // Range start must be between `from` and `to`, or else equal `from` - // exactly. - for (let id of languageScopeIds) { - this.scopeResolver.setBoundary( - range.start, - id, - 'open', - { root: true, length: Infinity } - ); - } - } + // Eventually we'll take this out, but for now it serves as an indicator of + // how often we have to manually re-parse in between transactions — + // something we'd like to do as little as possible. + if (atom.inDevMode()) { + console.warn('Re-parsing tree!', this.inspect(), this.treeIsDirty); + } - if (range.end.isGreaterThan(to)) { - // Do nothing; we don't need to set this boundary. - } else { - // The range must end somewhere within our range. - // - // Close the boundaries in the opposite order of how we opened them. - for (let i = languageScopeIds.length - 1; i >= 0; i--) { - this.scopeResolver.setBoundary( - range.end, - languageScopeIds[i], - 'close', - { root: true, length: Infinity } - ); - } - } - } + let ranges = null; + if (this.depth > 0) { + ranges = this.getCurrentRanges().map(r => { + return rangeToTreeSitterRangeSpec(r, this.buffer); + }); } - // `ScopeResolver` ensures that these points will be iterated in buffer - // order. - for (let [point, data] of this.scopeResolver) { - // The boundaries that occur before the start of our range will tell us - // which scopes should already be open when our range starts. - if (point.isLessThan(from)) { - alreadyOpenScopes.set(point, data.open); - for (let c of data.close) { - alreadyOpenScopes.removeLastOccurrenceOf(c); - } - continue; - } else if (point.isGreaterThan(to)) { - continue; - } + // The goal here is that, if a re-parse is needed in between transactions, + // we assign the result back to `this.tree` so that we can at least cut + // down on the incremental amount of work that the end-of-transaction parse + // has to do — it can pick up where we left off. So for the root language + // layer, this represents more of a shifting of work than a duplication. + // + // But this isn't safe to do for injection layers because `ranges` may be + // stale, despite our efforts to keep them fresh through markers. The + // stakes are low enough for indents that we can attempt a tree parse and + // act on the results even if we're not certain they're accurate — but when + // we do another scheduled incremental parse, we have to be 100% sure that + // we're working from an accurate tree. + // + // Re-parsing of an injection layer can only safely happen when we know its + // true ranges, and that cannot be determined except through the process + // that an injection layer's parent goes through during the + // end-of-transaction update, unless we're willing to do an off-schedule + // parse of _all_ language layers in this layer's ancestry. That's not + // completely out of the question for the future — but, failing that, there + // probably isn't a way to “fix” this for injection layers except through + // cutting down on off-schedule parses. + // + let then = performance.now() + let tree = this.languageMode.parse( + this.language, + this.tree, + ranges, + // { tag: `Re-parsing ${this.inspect()}` } + ); + let now = performance.now() - let OPEN_KEY = { position: point, boundary: 'start' }; - let CLOSE_KEY = { position: point, boundary: 'end' }; + let parseTime = now - then; - if (data.close.length > 0) { - boundaries = boundaries.insert(CLOSE_KEY, { - scopeIds: Object.freeze(data.close) - }); - } + // Since we can't look into the future, we don't know how many times during + // this transaction we'll be asked to make indentation sugestions. If we + // knew ahead of time, we'd be able to decide at the beginning of a + // transaction whether we could afford to do synchronous indentation. + // + // Instead, we do the next best thing: we start out doing synchronous + // indentation, then fall back to asynchronous indentation once we've + // exceeded our time budget. So we keep track of how long each reparse + // takes and subtract it from our budget. + this.languageMode.currentTransactionReparseBudgetMs -= parseTime; - if (data.open.length > 0) { - boundaries = boundaries.insert(OPEN_KEY, { - scopeIds: Object.freeze(data.open) - }); - } + if (this.depth === 0 && !anonymous) { + this.tree = tree; + this.treeIsDirty = false; + } else { + // Keep track of any off-schedule trees we generate so that we can GC them + // when the next transaction is done. + this.temporaryTrees.push(tree); } - - return [boundaries, alreadyOpenScopes]; + return tree; } - buildHighlightIterator() { - if (this.tree) { - return new LayerHighlightIterator(this, this.tree); + getText() { + let { buffer } = this.languageMode; + if (!this.marker) { + return buffer.getText(); } else { - return new NullLayerHighlightIterator(); + return buffer.getTextInRange(this.marker.getRange()); } } - handleTextChange(edit, oldText, newText) { - // Any text change within the layer invalidates our cached fold boundary - // tree. This usually isn't a big deal because the language mode's own cache - // is able to adjust when content shifts up and down, so typically only the - // ranges that actually change will have fold data re-queried. - if (this.foldResolver) { this.foldResolver.reset(); } + // Given a point, return all syntax captures that are active at that point. + // Used by `bufferRangeForScopeAtPosition`. + scopeMapAtPosition(point) { + if (!this.language || !this.tree) { return []; } + let { scopeResolver } = this; + scopeResolver.reset(); - const { - startPosition, - oldEndPosition, - newEndPosition - } = edit; + // If the cursor is resting before column X, we want all scopes that cover + // the character in column X. + let captures = this.queries.highlightsQuery?.captures( + this.tree.rootNode, + point, + { row: point.row, column: point.column + 1 } + ) ?? []; - if (this.tree) { - this.tree.edit(edit); - if (this.lastSyntaxTree && this.tree !== this.lastSyntaxTree) { - // This happens after an off-schedule parse that we've decided we can - // re-use at the end of the current transaction. But when that happens, - // we'll call `getChangedRanges` between `lastSyntaxTree` and the new - // tree, so `lastSyntaxTree` needs to receive the same tree edits. - this.lastSyntaxTree.edit(edit); + let results = []; + for (let capture of captures) { + // Storing the capture will return its range (after any potential + // adjustments) — or `false`, to signify that the capture was ignored. + let range = scopeResolver.store(capture); + if (!range) { continue; } + + // Since the range might have been adjusted, we wait until after + // resolution. + if (comparePoints(range.endPosition, point) === 0) { continue; } + if (isBetweenPoints(point, range.startPosition, range.endPosition)) { + results.push({ capture, adjustedRange: range }); } - // We're tentatively marking this tree as dirty; we won't know if it - // needs to be reparsed until the transaction is done. If it doesn't, - // that means that the edits didn't encroach on the contents of the - // layer, and we'll mark those trees as clean at the end of the - // transaction. - this.treeIsDirty = true; - if (this.editedRange) { - if (startPosition.isLessThan(this.editedRange.start)) { - this.editedRange.start = startPosition; - } if (oldEndPosition.isLessThan(this.editedRange.end)) { - this.editedRange.end = newEndPosition.traverse( - this.editedRange.end.traversalFrom(oldEndPosition) - ); - } else { - this.editedRange.end = newEndPosition; - } - } else { - this.editedRange = new Range(startPosition, newEndPosition); + } + + scopeResolver.reset(); + + // Sort from biggest to smallest. + results = results.sort((a, b) => { + return nodeBreadth(b.adjustedRange) - nodeBreadth(a.adjustedRange); + }); + + return results; + } + + // Like `WASMTreeSitterLanguageMode#getSyntaxNodeAtPosition`, but for just this + // layer. + getSyntaxNodeAtPosition(position, where = FUNCTION_TRUE) { + if (!this.language || !this.tree) { return null; } + let { buffer } = this.languageMode; + + let index = buffer.characterIndexForPosition(position); + let node = this.tree.rootNode.descendantForIndex(index); + + while (node) { + if (where(node, this.grammar)) { + return node; } + node = node.parent; } - if (this.patchSinceCurrentParseStarted) { - this.patchSinceCurrentParseStarted.splice( - startPosition, - oldEndPosition.traversalFrom(startPosition), - newEndPosition.traversalFrom(startPosition), - oldText, - newText - ) - } + return null; } - async update(nodeRangeSet, params = {}) { - if (!this.languageMode.useAsyncParsing) { - // Practically speaking, updates that affect _only this layer_ will happen - // synchronously, because we've made sure not to call this method until the - // root grammar's tree-sitter parser has been loaded. But we can't load any - // potential injection layers' languages because we don't know which ones - // we'll need _until_ we parse this layer's tree for the first time. - // - // Thus the first call to `_populateInjections` will probably go async - // while we wait for the injections' parsers to load, and the user might - // notice the delay. But once that happens, all subsequent updates _should_ - // be synchronous, except for a case where a change in the buffer causes us - // to need a new kind of injection whose parser hasn't yet been loaded. - if (!this.ready) { await this.languageLoaded; } - await this._performUpdate(nodeRangeSet); - return true; + // Used to find the most specific node affected by an edited range. + getSyntaxNodeContainingRange(range, where = FUNCTION_TRUE) { + if (!this.language || !this.tree) { return null; } + let { buffer } = this.languageMode; + + if (range.start.isEqual(range.end)) { + return this.getSyntaxNodeAtPosition(range.start, where); } - if (!this.currentParsePromise) { - do { - params = { ...params, async: false }; - if (!this.ready) { - params.async = true; - await this.languageLoaded; + let indexStart = buffer.characterIndexForPosition(range.start); + let indexEnd = buffer.characterIndexForPosition(range.end); + + let rangeBreadth = indexEnd - indexStart; + let node = this.getSyntaxNodeAtPosition( + range.start, + (node) => { + let breadth = node.endIndex - node.startIndex; + let qualifies = node.startIndex <= indexEnd && + node.endIndex >= indexEnd && + breadth >= rangeBreadth; + return qualifies && where(node); + } + ); + + return node ?? null; + } + + _populateInjections(range, nodeRangeSet) { + if (!this.tree) { return; } + const promises = []; + + // We won't touch _all_ injections, but we will touch any injection that + // could possibly have been affected by this layer's update. + let existingInjectionMarkers = this.languageMode.injectionsMarkerLayer + .findMarkers({ intersectsRange: range }) + .filter(marker => marker.parentLanguageLayer === this); + + if (existingInjectionMarkers.length > 0) { + // Enlarge our range to contain all of the injection zones in the + // affected buffer range. + let earliest = range.start, latest = range.end; + for (let marker of existingInjectionMarkers) { + range = marker.getRange(); + if (range.start.compare(earliest) === -1) { + earliest = range.start; } - this.currentParsePromise = this._performUpdate(nodeRangeSet, params); - if (!params.async) { break; } - await this.currentParsePromise; - } while ( - !this.destroyed && - (!this.tree || this.tree.rootNode.hasChanges()) - ); + if (range.end.compare(latest) === 1) { + latest = range.end; + } + } - this.currentParsePromise = null; - // `true` means that this update occurs in its own distinct transaction. - return true; - } else { - // `false` means that the previous transaction isn't done, so this - // transaction's work will be subsumed into it. - return false; + range = range.union(new Range(earliest, latest)); } - } - getLocalReferencesAtPoint(point) { - if (!this.queries.localsQuery) { return []; } - let captures = this.queries.localsQuery.captures( - this.tree.rootNode, - point, - point + 1 + // Why do we have to do this explicitly? Because `descendantsOfType` will + // incorrectly return nodes if the range runs from (0, 0) to (0, 0). All + // other empty ranges seem not to have this problem. Upon cursory + // inspection, this bug doesn't seem to be limited to `web-tree-sitter`. + if (range.isEmpty()) { return; } + + // Now that we've enlarged the range, we might have more existing injection + // markers to consider. But check for containment rather than intersection + // so that we don't have to enlarge it again. + existingInjectionMarkers = this.languageMode.injectionsMarkerLayer + .findMarkers({ startsInRange: range, endsInRange: range }) + .filter(marker => marker.parentLanguageLayer === this); + + const markersToUpdate = new Map(); + + // Query for all the nodes that could possibly prompt the creation of + // injection points. + const nodes = this.tree.rootNode.descendantsOfType( + Object.keys(this.grammar.injectionPointsByType), + range.start, + range.end ); - captures = captures.filter(cap => { - if (cap.name !== 'local.reference') { return false; } - if (!rangeForNode(cap.node).containsPoint(point)) { - return false; - } - return true; - }); + let existingInjectionMarkerIndex = 0; + let newLanguageLayers = 0; + for (const node of nodes) { + // A given node can be the basis for an arbitrary number of injection + // points, but first it has to pass our gauntlet of tests: + for (const injectionPoint of this.grammar.injectionPointsByType[node.type]) { + // Does it give us a language string? + const languageName = injectionPoint.language(node); + if (!languageName) { continue; } - let nodes = captures.map(cap => cap.node); - nodes = nodes.sort((a, b) => b.range.compare(a.range)); + // Does that string match up with a grammar that we recognize? + const grammar = this.languageMode.grammarForLanguageString( + languageName); + if (!grammar) { continue; } - return nodes; - } + // Does it offer us a node, or array of nodes, which a new injection + // layer should use for its content? + const contentNodes = injectionPoint.content(node, this.buffer); + if (!contentNodes) { continue; } - // EXPERIMENTAL: Given a local reference node, tries to find the node that - // defines it. - findDefinitionForLocalReference(node, captures = null) { - if (!this.queries.localsQuery) { return []; } - let name = node.text; - if (!name) { return []; } - let localRange = rangeForNode(node); - let globalScope = this.tree.rootNode; + const injectionNodes = [].concat(contentNodes); + if (!injectionNodes.length) continue; - if (!captures) { - captures = this.groupLocalsCaptures( - this.queries.localsQuery.captures( - globalScope, - globalScope.startPosition, - globalScope.endPosition - ) - ); - } + const injectionRange = node.range; - let { scopes, definitions } = captures; + let marker; - // Consider only the scopes that can influence our local node. - let relevantScopes = scopes.filter((scope) => { - let range = rangeForNode(scope); - return range.containsRange(localRange); - }).sort((a, b) => { - a.range.compare(b.range) - }); + // It's surprisingly hard to match up the injection point that we now + // know we need… with the one that may already exist that was created + // or updated based on the state of the tree from the last keystroke. + // There is no continuity between the previous tree and the new tree + // that we can rely on. Unless the marker and the base node of the + // injection point agree on an exact range, we can't be sure enough to + // re-use an existing layer. + // + // This isn't a huge deal because (a) markers are good at adapting to + // changes, so those two things will agree more often than you think; + // (b) even when they don't agree, it's not very costly to destroy and + // recreate another `LanguageLayer`. + // + // Since both `existingInjectionMarkers` and `nodes` are guaranteed to + // be sorted in buffer order, we can take shortcuts in how we pair them + // up. + // + for ( + let i = existingInjectionMarkerIndex, + n = existingInjectionMarkers.length; + i < n; + i++ + ) { + const existingMarker = existingInjectionMarkers[i]; + const comparison = existingMarker.getRange().compare(injectionRange); + if (comparison > 0) { + // This marker seems to occur after the range we want to inject + // into, meaning there's a good chance it's not ours. And it means + // that none of the remaining markers will likely be our candidate, + // either; so we should give up and create a new one. + break; + } else if (comparison === 0) { + // Luckily, the range matches up exactly, so this is almost + // certainly a previous version of the same intended injection. It + // also means that any markers before this point in the list have + // either already matched with candidate injection points or cannot + // possibly match up; thus we can ignore them for the rest of the + // matching process. + existingInjectionMarkerIndex = i; + if (existingMarker.languageLayer.grammar === grammar) { + marker = existingMarker; + break; + } + } else { + // This marker occurs before our range. Since all injection + // candidates from this point forward are guaranteed to be of an + // equal or later range, there's no chance of this marker matching + // any candidates from this point forward. We can ignore it, and + // anything before it, in subsequent trips through the loop. + existingInjectionMarkerIndex = i; + } + } - relevantScopes.push(globalScope); + if (!marker) { + // If we didn't match up with an existing marker/layer, we'll have to + // create them. + marker = this.languageMode.injectionsMarkerLayer.markRange( + injectionRange); - // Consider only the definitions whose names match the target's. - let relevantDefinitions = definitions.filter( - (def) => def.text === name - ); - if (relevantDefinitions.length === 0) { return []; } + marker.languageLayer = new LanguageLayer( + marker, + this.languageMode, + grammar, + this.depth + 1, + injectionPoint + ); - let definitionsByBaseScope = new Index(); - for (let rDef of relevantDefinitions) { - // Find all the scopes that include this definition. The largest of those - // scopes will be its "base" scope. If there are no scopes that include - // this definition, it must have been defined globally. - let rDefScopes = scopes.filter(s => { - return isBetweenPoints( - rDef.startPosition, - s.startPosition, - s.endPosition + marker.parentLanguageLayer = this; + // eslint-disable-next-line no-unused-vars + newLanguageLayers++; + } + + markersToUpdate.set( + marker, + new NodeRangeSet( + nodeRangeSet, + injectionNodes, + injectionPoint + ) ); - }).sort((a, b) => { - return rangeForNode(b).compare(rangeForNode(a)); - }); + } + } - let baseScope = rDefScopes[0] ?? globalScope; + let staleLanguageLayers = 0; + for (const marker of existingInjectionMarkers) { + // Any markers that didn't get matched up with injection points are now + // stale and should be destroyed. + if (!markersToUpdate.has(marker)) { + this.languageMode.emitRangeUpdate(marker.getRange()); + marker.languageLayer.destroy(); + // eslint-disable-next-line no-unused-vars + staleLanguageLayers++; + } + } - // Group each definition by its scope. Since any variable can be - // redefined an arbitrary number of times, each scope might include - // multiple definitions of this identifier. - definitionsByBaseScope.add(baseScope, rDef); + if (markersToUpdate.size > 0) { + for (const [marker, nodeRangeSet] of markersToUpdate) { + promises.push(marker.languageLayer.update(nodeRangeSet)); + } } - // Moving from smallest to largest scope, get definitions that were made in - // that scope, and return the closest one to the reference. - for (let scope of relevantScopes) { - let definitionsInScope = definitionsByBaseScope.get(scope) ?? []; - let { length } = definitionsInScope; - if (length === 0) { continue; } - if (length === 1) { return definitionsInScope[0]; } + return Promise.all(promises); + } - // Here's how we want to sort these candidates: - // - // * In each scope, look for a definitions that happen before the local's - // position. The closest such definition in the narrowest scope is our - // ideal target. - // * Failing that, take note of all the definitions that happened _after_ - // the local's position in all relevant scopes. Choose the closest to - // the local. - // - let definitionsBeforeLocal = []; - let definitionsAfterLocal = []; + _treeEditForBufferChange(start, oldEnd, newEnd, oldText, newText) { + let startIndex = this.buffer.characterIndexForPosition(start); + return { + startIndex, + oldEndIndex: startIndex + oldText.length, + newEndIndex: startIndex + newText.length, + startPosition: start, + oldEndPosition: oldEnd, + newEndPosition: newEnd + }; + } +} - for (let def of definitionsInScope) { - let result = comparePoints(def.startPosition, localRange.start); +// An injection `LanguageLayer` may need to parse and highlight a strange +// subset of its stated range — for instance, all the descendants within a +// parent that are of a particular type. A `NodeRangeSet` is how that strange +// subset is expressed. +class NodeRangeSet { + constructor(previous, nodes, injectionPoint) { + this.previous = previous; + this.newlinesBetween = injectionPoint.newlinesBetween; + this.includeAdjacentWhitespace = injectionPoint.includeAdjacentWhitespace; + this.includeChildren = injectionPoint.includeChildren; - let bucket = result < 0 ? - definitionsBeforeLocal : - definitionsAfterLocal; + // We shouldn't retain references to nodes here because the tree might get + // disposed of later. Let's compile the information we need now while we're + // sure the tree is fresh. + this.nodeSpecs = []; + for (let node of nodes) { + this.nodeSpecs.push(this.getNodeSpec(node, true)); + } + } - bucket.push(def); + getNodeSpec(node, getChildren) { + let { startIndex, endIndex, startPosition, endPosition, id } = node; + let result = { startIndex, endIndex, startPosition, endPosition, id }; + if (getChildren && node.childCount > 0) { + result.children = []; + for (let child of node.children) { + result.children.push(this.getNodeSpec(child, false)); } + } + return result; + } - if (definitionsBeforeLocal.length > 0) { - let maxBeforeLocal; - for (let def of definitionsBeforeLocal) { - if (!maxBeforeLocal) { - maxBeforeLocal = def; - continue; - } + getRanges(buffer) { + const previousRanges = this.previous?.getRanges(buffer); + let result = []; - let result = comparePoints(def, maxBeforeLocal); - if (result > 0) { - maxBeforeLocal = def; - } - } - return maxBeforeLocal; + for (let node of this.nodeSpecs) { + // An injection point isn't given the point at which the buffer ends, so + // it's free to return an `endIndex` of `Infinity` here and rely on us to + // clip it to the boundary of the buffer. + if (node.endIndex === Infinity) { + node = this._clipRange(node, buffer); } + let position = node.startPosition, index = node.startIndex; - // TODO: For definitions that happen after the local in the buffer, it's - // not 100% clear what the right answer should be. I imagine it varies by - // language. Best guess for now is the one that's closest to the local - // reference. - let minAfterLocal; - for (let def of definitionsAfterLocal) { - if (!minAfterLocal) { - minAfterLocal = def; - continue; - } - - let result = comparePoints(def, minAfterLocal); - if (result < 0) { - minAfterLocal = def; + if (node.children && !this.includeChildren) { + // If `includeChildren` is `false`, we're effectively collecting all + // the disjoint text nodes that are direct descendants of this node. + for (const child of node.children) { + const nextIndex = child.startIndex; + if (nextIndex > index) { + this._pushRange(buffer, previousRanges, result, { + startIndex: index, + endIndex: nextIndex, + startPosition: position, + endPosition: child.startPosition + }); + } + position = child.endPosition; + index = child.endIndex; } } - return minAfterLocal; + if (node.endIndex > index) { + this._pushRange(buffer, previousRanges, result, { + startIndex: index, + endIndex: node.endIndex, + startPosition: position, + endPosition: node.endPosition + }); + } } - } - - groupLocalsCaptures(captures) { - let scopes = []; - let definitions = []; - let references = []; - for (let capture of captures) { - let { name, node } = capture; - switch (name) { - case 'local.scope': - scopes.push(node); - break; - case 'local.definition': - definitions.push(node); - break; - case 'local.reference': - references.push(node); - break; + let whitespaceRanges = []; + if (this.includeAdjacentWhitespace && result.length > 1) { + // Look at the region between each pair of results. If it's entirely + // whitespace, include it in the range. + for (let i = 1; i < result.length; i++) { + let current = result[i], previous = result[i - 1]; + if (current.startIndex === previous.endIndex) { continue; } + let pseudoRange = { + startPosition: previous.endPosition, + startIndex: previous.endIndex, + endPosition: current.startPosition, + endIndex: current.startIndex + }; + let rangeText = buffer.getTextInRange(rangeForNode(pseudoRange)); + if (!/\S/.test(rangeText)) { + whitespaceRanges.push(pseudoRange); + } } + result.push(...whitespaceRanges); + result = result.sort((a, b) => { + return a.startIndex - b.startIndex || + a.endIndex - b.endIndex; + }); } - - return { scopes, definitions, references }; + return this._consolidateRanges(result); } - // Given a range and a `Set` of node IDs, test if any of those nodes' ranges - // overlap with the given range. - // - // We use this to test if a given edit should trigger the behavior indicated - // by `(fold|highlight).invalidateOnChange`. - searchForNodesInRange(range, nodeIdSet) { - let node = this.getSyntaxNodeContainingRange( - range, - n => nodeIdSet.has(n.id) - ); + _clipRange(range, buffer) { + // Convert this range spec to an actual `Range`, clip it, then convert it + // back to a range spec with accurate `startIndex` and `endIndex` values. + let clippedRange = buffer.clipRange(rangeForNode(range)); + return rangeToTreeSitterRangeSpec(clippedRange, buffer); + } - if (node) { - // One of this node's ancestors might also be in our list, so we'll - // traverse upwards and find out. - let ancestor = node.parent; - while (ancestor) { - if (nodeIdSet.has(ancestor.id)) { - node = ancestor; + // Combine adjacent ranges to minimize the number of boundaries. + _consolidateRanges(ranges) { + if (ranges.length === 1) { return ranges; } + let consolidated = []; + let candidate; + let lastIndex = ranges.length - 1; + for (let i = 0; i < ranges.length; i++) { + let range = ranges[i]; + if (!candidate) { + candidate = range; + continue; + } + if (candidate.endIndex === range.startIndex) { + // Keep enlarging the last node for as long as subsequent nodes are + // adjacent to it. + candidate = { + startIndex: candidate.startIndex, + startPosition: candidate.startPosition, + endIndex: range.endIndex, + endPosition: range.endPosition + }; + if (i === lastIndex) { + consolidated.push(candidate); + } + } else { + // We found a disjoint range, so push our candidate into the result set + // and promote a new candidate (unless we're at the end). + consolidated.push(candidate); + if (i === lastIndex) { + consolidated.push(range); + } else { + candidate = range; } - ancestor = ancestor.parent; } - return node; } - return null; - } - async _performUpdate(nodeRangeSet, params = {}) { - // It's much more common in specs than in real life, but it's always - // possible for a layer to get destroyed during the async period between - // layer updates. - if (this.destroyed) return; + return consolidated; + } - let includedRanges = null; - this.rangeList.clear(); + coversRange(candidateRange) { + let ranges = this.getRanges().map(r => rangeForNode(r)); + return ranges.some(range => { + return range.containsRange(candidateRange); + }); + } - if (nodeRangeSet) { - includedRanges = nodeRangeSet.getRanges(this.languageMode.buffer); - if (includedRanges.length === 0) { - // We have no ranges to inject into. This layer should no longer exist. - const range = this.marker.getRange(); - this.destroy(); - this.languageMode.emitRangeUpdate(range); - return; + _pushRange(buffer, previousRanges, newRanges, newRange) { + if (!previousRanges) { + if (this.newlinesBetween) { + const { startIndex, startPosition } = newRange; + this._ensureNewline(buffer, newRanges, startIndex, startPosition); } + newRanges.push(newRange); + return; } - this.patchSinceCurrentParseStarted = new Patch(); - let language = this.grammar.getLanguageSync(); - let tree; - if (this.languageMode.useAsyncParsing) { - tree = this.languageMode.parseAsync( - language, - this.tree, - includedRanges, - // { tag: `Parsing ${this.inspect()} (async) ${params.id}` } + for (const previousRange of previousRanges) { + if (previousRange.endIndex <= newRange.startIndex) continue; + if (previousRange.startIndex >= newRange.endIndex) break; + const startIndex = Math.max( + previousRange.startIndex, + newRange.startIndex ); - if (tree.then) { - params.async = true; - tree = await tree; - } - } else { - tree = this.languageMode.parse( - language, - this.tree, - includedRanges, - // { tag: `Parsing ${this.inspect()} (sync) ${params.id}` } + const endIndex = Math.min(previousRange.endIndex, newRange.endIndex); + const startPosition = Point.max( + previousRange.startPosition, + newRange.startPosition ); - } - - let changes = this.patchSinceCurrentParseStarted.getChanges(); - this.patchSinceCurrentParseStarted = null; - - for (let change of changes) { - let newExtent = Point.fromObject(change.newEnd).traversalFrom(change.newStart); - tree.edit( - this._treeEditForBufferChange( - change.newStart, - change.oldEnd, - Point.fromObject(change.oldStart).traverse(newExtent), - change.oldText, - change.newText - ) + const endPosition = Point.min( + previousRange.endPosition, + newRange.endPosition ); + if (this.newlinesBetween) { + this._ensureNewline(buffer, newRanges, startIndex, startPosition); + } + newRanges.push({ startIndex, endIndex, startPosition, endPosition }); } + } - if (includedRanges) { - this.setCurrentRanges(includedRanges); + // For injection points with `newlinesBetween` enabled, ensure that a + // newline is included between each disjoint range. + _ensureNewline(buffer, newRanges, startIndex, startPosition) { + const lastRange = last(newRanges); + if (lastRange && lastRange.endPosition.row < startPosition.row) { + newRanges.push({ + startPosition: new Point( + startPosition.row - 1, + buffer.lineLengthForRow(startPosition.row - 1) + ), + endPosition: new Point(startPosition.row, 0), + startIndex: startIndex - startPosition.column - 1, + endIndex: startIndex - startPosition.column + }); } + } +} - let affectedRange = this.editedRange; - this.lastTransactionEditedRange = this.editedRange; - this.editedRange = null; - - let foldRangeList = new RangeList(); - - // Look for a node that was marked with `invalidateOnChange`. If we find - // one, we should invalidate that node's entire buffer region. - if (affectedRange) { - - // First look for nodes that were previously marked with - // `highlight.invalidateOnChange`; those will specify ranges for which - // we'll need to force a re-highlight. - let node = this.searchForNodesInRange( - affectedRange, - this.nodesToInvalidateOnChange - ); - if (node) { - this.rangeList.add(node.range); - } +// A subclass of map that associates a set of scope names with the editor +// locations at which they are opened. +// +// In some complicated scenarios, we need to know where a scope was opened when +// deciding how to handle it. +class OpenScopeMap extends Map { + constructor() { + super(); + } - // Now look for nodes that were previously marked with - // `fold.invalidateOnChange`; those will specify ranges that need their - // fold cache updated even when highlighting is unaffected. - let foldNode = this.searchForNodesInRange( - affectedRange, - this.foldNodesToInvalidateOnChange - ); - if (foldNode) { - foldRangeList.add(foldNode.range); - } + getScopesArray() { + let results = []; + let keys = [...this.keys()]; + keys.sort(comparePoints); + for (let key of keys) { + let value = this.get(key); + results.push(...value); } + return results; + } - this.nodesToInvalidateOnChange.clear(); - this.foldNodesToInvalidateOnChange.clear(); - - if (this.lastSyntaxTree) { - const rangesWithSyntaxChanges = this.lastSyntaxTree.getChangedRanges(tree); - - let oldSyntaxTree = this.lastSyntaxTree; - this.lastSyntaxTree = tree; - - let oldTree = this.tree; - this.tree = tree; - this.treeIsDirty = false; - - oldTree?.delete(); - oldSyntaxTree?.delete(); - - while (this.temporaryTrees.length > 0) { - let tree = this.temporaryTrees.pop(); - tree.delete(); - } - - if (rangesWithSyntaxChanges.length > 0) { - for (const range of rangesWithSyntaxChanges) { - this.rangeList.add(rangeForNode(range)); - } - - const combinedRangeWithSyntaxChange = new Range( - rangesWithSyntaxChanges[0].startPosition, - last(rangesWithSyntaxChanges).endPosition - ); - - if (affectedRange) { - this.rangeList.add(affectedRange); - affectedRange = affectedRange.union(combinedRangeWithSyntaxChange); - } else { - affectedRange = combinedRangeWithSyntaxChange; - } - } - } else { - this.tree = tree; - this.treeIsDirty = false; - - // Store a reference to this tree so we can compare it with the next - // transaction's tree later on. - this.lastSyntaxTree = tree; - - // Like legacy tree-sitter, we're patching syntax nodes so that they have - // a `range` property that returns a `Range`. We're doing this for - // compatibility, but we can't get a reference to the node class itself; - // we have to wait until we have an instance and grab the prototype from - // there. - // - // This is the earliest place in the editor lifecycle where we're - // guaranteed to be holding an instance of `Node`. Once we patch it here, - // we're good to go. - // - ensureNodeIsPatched(tree.rootNode); - - this.rangeList.add(rangeForNode(tree.rootNode)); - if (includedRanges) { - affectedRange = new Range( - includedRanges[0].startPosition, - last(includedRanges).endPosition - ); - } else { - affectedRange = MAX_RANGE; + removeLastOccurrenceOf(scopeId) { + let keys = [...this.keys()]; + keys.reverse(); + for (let key of keys) { + let value = this.get(key); + if (value.includes(scopeId)) { + removeLastOccurrenceOf(value, scopeId); + return true; } } + return false; + } +} - // Now that we've assembled and coalesced all the ranges that need - // invalidating, we'll invalidate them in buffer order. - for (let range of this.rangeList) { - this.languageMode.emitRangeUpdate(range); +// Like a map, but expects each key to have multiple values. +class Index extends Map { + constructor() { + super(); + } + + add(key, ...values) { + let existing = this.get(key); + if (!existing) { + existing = []; + this.set(key, existing); } + existing.push(...values); + } +} - for (let range of foldRangeList) { - // The fold cache is automatically cleared for any range that needs - // re-highlighting. But sometimes we need to go further and invalidate - // rows that don't even need highlighting changes. - this.languageMode.emitFoldUpdate(range); - } - if (affectedRange) { - let injectionPromise = this._populateInjections(affectedRange, nodeRangeSet); - if (injectionPromise) { - params.async = true; - return injectionPromise; - } - } +// A class designed to aggregate and normalize a set of ranges. Each time a +// buffer range is added, it's compared to the existing list; if there are +// intersections with range already in the list, those intersections are +// combined into one larger range. +// +// Assumes all ranges are instances of `Range` rather than tree-sitter range +// specs. +class RangeList { + constructor() { + this.ranges = []; } - setCurrentRanges(includedRanges) { - if (this.depth === 0) { return; } - let oldRangeMarkers = this.currentRangesLayer.getMarkers(); - for (let marker of oldRangeMarkers) { - marker.destroy(); + clear() { + this.ranges.length = 0; + } + + add(newRange) { + let intersecting = []; + for (let range of this.ranges) { + if (newRange.intersectsWith(range)) { + intersecting.push(range); + } } - // These are the “official” ranges, received right after the parent layer's - // tree parse. We'll get a new set of official ranges at the end of the - // next transaction, but until then, we should try our best to adapt to - // buffer changes, and to allow each range to shift or grow or shrink so - // that off-schedule parses are more likely to be accurate. - for (let range of includedRanges) { - range = rangeForNode(range); - this.currentRangesLayer.markRange(range); + for (let i = intersecting.length - 1; i >= 0; i--) { + let index = this.ranges.indexOf(intersecting[i]); + this.ranges.splice(index, 1); } + while (intersecting.length > 0) { + newRange = newRange.union(intersecting.shift()); + } + this.insertOrdered(newRange); } - getCurrentRanges() { - let markers = this.currentRangesLayer?.getMarkers(); - if (!markers || markers.length === 0) { return null; } - return markers.map(m => m.getRange()); + insertOrdered(newRange) { + let index = this.ranges.findIndex(r => { + return r.start.compare(newRange.start) > 0; + }); + this.ranges.splice(index, 0, newRange); } - // Checks whether a given {Point} lies within one of this layer's content - // ranges — not just its extent. The optional `exclusive` flag will return - // `false` if the point lies on a boundary of a content range. - containsPoint(point, exclusive = false) { - let ranges = this.getCurrentRanges() ?? [this.getExtent()]; - return ranges.some(r => r.containsPoint(point, exclusive)); + inspect() { + let ranges = this.ranges.map(r => r.toString()); + return `[RangeList: ${ranges.join(', ')}]`; } - // Returns a syntax tree for the current buffer. - // - // By default, this method will either return the current tree (if it's up to - // date) or synchronously parse the buffer into a new tree (if it isn't). - // - // If you don't want to force a re-parse and don't mind that the current tree - // might be stale, pass `force: false` as an option. - // - // In certain circumstances, the new tree might be promoted to the canonical - // tree for this layer. To prevent this, pass `anonymous: false` as an option. - // - // All trees returned by this method are managed by this language layer and - // will be deleted when the next transaction is complete. Retaining a - // reference to the returned tree will not prevent this from happening. To - // opt into managing the life cycle of the returned tree, copy it immediately - // when you receive it. - // - getOrParseTree({ force = true, anonymous = false } = {}) { - if (this.tree && (!this.treeIsDirty || !force)) { return this.tree; } - - // Eventually we'll take this out, but for now it serves as an indicator of - // how often we have to manually re-parse in between transactions — - // something we'd like to do as little as possible. - if (atom.inDevMode()) { - console.warn('Re-parsing tree!', this.inspect(), this.treeIsDirty); - } - - let ranges = null; - if (this.depth > 0) { - ranges = this.getCurrentRanges().map(r => { - return rangeToTreeSitterRangeSpec(r, this.buffer); - }); + *[Symbol.iterator]() { + for (let range of this.ranges) { + yield range; } + } +} - // The goal here is that, if a re-parse is needed in between transactions, - // we assign the result back to `this.tree` so that we can at least cut - // down on the incremental amount of work that the end-of-transaction parse - // has to do — it can pick up where we left off. So for the root language - // layer, this represents more of a shifting of work than a duplication. - // - // But this isn't safe to do for injection layers because `ranges` may be - // stale, despite our efforts to keep them fresh through markers. The - // stakes are low enough for indents that we can attempt a tree parse and - // act on the results even if we're not certain they're accurate — but when - // we do another scheduled incremental parse, we have to be 100% sure that - // we're working from an accurate tree. - // - // Re-parsing of an injection layer can only safely happen when we know its - // true ranges, and that cannot be determined except through the process - // that an injection layer's parent goes through during the - // end-of-transaction update, unless we're willing to do an off-schedule - // parse of _all_ language layers in this layer's ancestry. That's not - // completely out of the question for the future — but, failing that, there - // probably isn't a way to “fix” this for injection layers except through - // cutting down on off-schedule parses. - // - let then = performance.now() - let tree = this.languageMode.parse( - this.language, - this.tree, - ranges, - // { tag: `Re-parsing ${this.inspect()}` } - ); - let now = performance.now() +// Private: A class that manages indentation hinting for a single editor. +// +// Each instance of `WASMTreeSitterLanguageMode` has exactly one instance of +// `IndentResolver`; the purpose of this class is to encapsulate indentation +// logic instead of having it dominate the language mode for those +// familiarizing themselves with the code. +class IndentResolver { + constructor(buffer, languageMode) { + this.buffer = buffer; + this.languageMode = languageMode; + this.emitter = new Emitter(); + } - let parseTime = now - then; + // Get the suggested indentation level for an existing line in the + // buffer. + // + // See {WASMTreeSitterLanguageMode::suggestedIndentForBufferRow}. + suggestedIndentForBufferRow(row, tabLength, rawOptions = {}) { + if (row === 0) { return 0; } + let root = this.languageMode.rootLanguageLayer; + if (!root || !root.tree || !root.ready) { return null; } + let { languageMode } = this; + let options = { + skipBlankLines: true, + skipDedentCheck: false, + preserveLeadingWhitespace: false, + indentationLevels: null, + forceTreeParse: false, + ...rawOptions + }; - // Since we can't look into the future, we don't know how many times during - // this transaction we'll be asked to make indentation sugestions. If we - // knew ahead of time, we'd be able to decide at the beginning of a - // transaction whether we could afford to do synchronous indentation. - // - // Instead, we do the next best thing: we start out doing synchronous - // indentation, then fall back to asynchronous indentation once we've - // exceeded our time budget. So we keep track of how long each reparse - // takes and subtract it from our budget. - this.languageMode.currentTransactionReparseBudgetMs -= parseTime; + let originalControllingLayer = options.controllingLayer; - if (this.depth === 0 && !anonymous) { - this.tree = tree; - this.treeIsDirty = false; - } else { - // Keep track of any off-schedule trees we generate so that we can GC them - // when the next transaction is done. - this.temporaryTrees.push(tree); + let comparisonRow = options.comparisonRow; + if (comparisonRow === undefined) { + comparisonRow = row - 1; + if (options.skipBlankLines) { + // It usually makes no sense to compare to a blank row, so we'll move + // upward until we find a line with text on it. + while (this.buffer.isRowBlank(comparisonRow) && comparisonRow > 0) { + comparisonRow--; + } + } } - return tree; - } - getText() { - let { buffer } = this.languageMode; - if (!this.marker) { - return buffer.getText(); - } else { - return buffer.getTextInRange(this.marker.getRange()); + let existingIndent = 0; + if (options.preserveLeadingWhitespace) { + // When this option is true, the indent level we return will be _added + // to_ however much indentation is already present on the line. Whatever + // the purpose of this option, we can't just pretend it isn't there, + // because it will produce silly outcomes. Instead, let's account for + // that level of indentation and try to subtract it from whatever level + // we return later on. + // + // Sadly, if the row is _more_ indented than we need it to be, we won't + // be able to dedent it into the correct position. This option probably + // needs to be revisited. + existingIndent = this.indentLevelForLine( + this.buffer.lineForRow(row), tabLength); } - } - // Given a point, return all syntax captures that are active at that point. - // Used by `bufferRangeForScopeAtPosition`. - scopeMapAtPosition(point) { - if (!this.language || !this.tree) { return []; } - let { scopeResolver } = this; - scopeResolver.reset(); + let comparisonRowIndent = options.comparisonRowIndent; + if (comparisonRowIndent === undefined) { + comparisonRowIndent = languageMode.indentLevelForLine( + this.buffer.lineForRow(comparisonRow), tabLength); + } - // If the cursor is resting before column X, we want all scopes that cover - // the character in column X. - let captures = this.queries.highlightsQuery?.captures( - this.tree.rootNode, - point, - { row: point.row, column: point.column + 1 } - ) ?? []; + // What's the right place to measure from? Often we're here because the + // user just hit Enter, which means we'd run before injection layers have + // been re-parsed. Hence the injection's language layer might not know + // whether it controls the point at the cursor. So instead we look for the + // layer that controls the point at the end of the comparison row. This may + // not always be correct, but we'll find out. + let comparisonRowEnd = new Point( + comparisonRow, + this.buffer.lineLengthForRow(comparisonRow) + ); - let results = []; - for (let capture of captures) { - // Storing the capture will return its range (after any potential - // adjustments) — or `false`, to signify that the capture was ignored. - let range = scopeResolver.store(capture); - if (!range) { continue; } + // Find the deepest layer that actually has an indents query. (Layers that + // don't define one, such as specialized injection grammars, are telling us + // they don't care about indentation. If a grammar wants to _prevent_ a + // shallower layer from controlling indentation, it should define an empty + // `indents.scm`, perhaps with an explanatory comment.) + let controllingLayer = languageMode.controllingLayerAtPoint( + comparisonRowEnd, + (layer) => { + if (!layer.queries.indentsQuery) return false; + // We want to exclude layers with a content range that _begins at_ the + // cursor position. Why? Because the content that starts at the cursor + // is about to shift down to the next line. It'd be odd if that layer + // was in charge of the indentation hint if it didn't have any content + // on the preceding line. + // + // So first we test for containment exclusive of endpoints… + if (layer.containsPoint(comparisonRowEnd, true)) { + return true; + } - // Since the range might have been adjusted, we wait until after - // resolution. - if (comparePoints(range.endPosition, point) === 0) { continue; } - if (isBetweenPoints(point, range.startPosition, range.endPosition)) { - results.push({ capture, adjustedRange: range }); + // …but we'll still accept layers that have a content range which + // _ends_ at the cursor position. + return layer.getCurrentRanges()?.some(r => { + return r.end.compare(comparisonRowEnd) === 0; + }); } - } + ); - scopeResolver.reset(); + if (!controllingLayer) { + // There's no layer with an indents query to help us out. The default + // behavior in this situation with any grammar — even plain text — is to + // match the previous line's indentation. + return comparisonRowIndent - existingIndent; + } - // Sort from biggest to smallest. - results = results.sort((a, b) => { - return nodeBreadth(b.adjustedRange) - nodeBreadth(a.adjustedRange); - }); + let { queries: { indentsQuery }, scopeResolver } = controllingLayer; - return results; - } + // TODO: We use `ScopeResolver` here so that we can use its tests. Maybe we + // need a way to share those tests across different kinds of capture + // resolvers. + scopeResolver.reset(); - // Like `WASMTreeSitterLanguageMode#getSyntaxNodeAtPosition`, but for just this - // layer. - getSyntaxNodeAtPosition(position, where = FUNCTION_TRUE) { - if (!this.language || !this.tree) { return null; } - let { buffer } = this.languageMode; + let indentTree = null; + if (options.tree && originalControllingLayer === controllingLayer) { + // Make sure this tree belongs to the layer we expect it to. + indentTree = options.tree; + } - let index = buffer.characterIndexForPosition(position); - let node = this.tree.rootNode.descendantForIndex(index); + if (!indentTree) { + if (!controllingLayer.treeIsDirty || options.forceTreeParse || !languageMode.shouldUseAsyncIndent()) { + // If we're in this code path, it either means the tree is clean (the + // `get` path) or that we're willing to spend the time to do a + // synchronous reparse (the `parse` path). Either way, we'll be able to + // deliver a synchronous answer to the question. + indentTree = controllingLayer.getOrParseTree(); + } else { + // We can't answer this yet because we don't yet have a new syntax + // tree, and are unwilling to spend time doing a synchronous re-parse. + // Return a promise that will fulfill once the transaction is over. + // + // TODO: For async, we might need an approach where we suggest a + // preliminary indent level and then follow up later with a more + // accurate one. It's a bit disorienting that the editor falls back to + // an indent level of `0` when a newline is inserted. + let comparisonRowText = this.buffer.lineForRow(comparisonRow) + let rowText = this.buffer.lineForRow(row) + return languageMode.atTransactionEnd().then(({ changeCount }) => { + let shouldFallback = false; + // If this was the only change in the transaction, then we can + // definitely adjust the indentation level after the fact. If not, + // then we might still be able to make indentation decisions in cases + // where they do not affect one another. + // + // Hence if neither the comparison row nor the current row has had + // its contents change in any way since we were first called, we will + // assume it's safe to adjust the indentation level after the fact. + // Otherwise we'll fall back to a single transaction-wide indentation + // adjustment — fewer tree parses, but more likely to produce unusual + // results. + if (changeCount > 1) { + if (comparisonRowText !== this.buffer.lineForRow(comparisonRow)) { + shouldFallback = true; + } + if (rowText !== this.buffer.lineForRow(row)) { + shouldFallback = true; + } + } + if (shouldFallback) { + // We're now revisiting this indentation question at the end of the + // transaction. Other changes may have taken place since we were + // first asked what the indent level should be for this line. So + // how do we know if the question is still relevant? After all, the + // text that was on this row earlier might be on some other row + // now. + // + // So we compare the text that was on the row when we were first + // called… to the text that is on the row now that the transaction + // is over. If they're the same, that's a _strong_ indicator that + // the result we return will still be relevant. + // + // If not, as is the case in this code path, we return `undefined`, + // signalling to the `TextEditor` that its only recourse is to + // auto-indent the whole extent of the transaction instead. + return undefined; + } - while (node) { - if (where(node, this.grammar)) { - return node; + // If we get this far, it's safe to auto-indent this line. Either it + // was the only change in its transaction or the other changes + // happened on different lines. But we've retained the original + // values for `comparisonRow` and `comparisonRowIndent` because + // that's the proper basis from which to determine the given row's + // indent level. + let result = this.suggestedIndentForBufferRow(row, tabLength, { + ...rawOptions, + comparisonRow: comparisonRow, + comparisonRowIndent: comparisonRowIndent, + tree: controllingLayer.tree, + controllingLayer + }); + return result; + }); } - node = node.parent; } - return null; - } + let positionSet = new Set; - // Used to find the most specific node affected by an edited range. - getSyntaxNodeContainingRange(range, where = FUNCTION_TRUE) { - if (!this.language || !this.tree) { return null; } - let { buffer } = this.languageMode; + // Capture in two phases. The first phase covers any captures from the + // comparison row that can cause the _following_ row to be indented. + let indentCaptures = indentsQuery.captures( + indentTree.rootNode, + { row: comparisonRow, column: 0 }, + { row: row, column: 0 } + ); - if (range.start.isEqual(range.end)) { - return this.getSyntaxNodeAtPosition(range.start, where); - } + let indentCapturePosition = null; + let indentDelta = 0; + let dedentNextDelta = 0; + let matchNextResult = null; - let indexStart = buffer.characterIndexForPosition(range.start); - let indexEnd = buffer.characterIndexForPosition(range.end); + for (let capture of indentCaptures) { + let { node, name } = capture; + let allowEmpty = this.getProperty(capture, 'allowEmpty', 'boolean', false); - let rangeBreadth = indexEnd - indexStart; - let node = this.getSyntaxNodeAtPosition( - range.start, - (node) => { - let breadth = node.endIndex - node.startIndex; - let qualifies = node.startIndex <= indexEnd && - node.endIndex >= indexEnd && - breadth >= rangeBreadth; - return qualifies && where(node); + // Ignore “phantom” nodes that aren't present in the buffer. + if (node.text === '' && !allowEmpty) { + continue; } - ); - return node ?? null; - } + // Ignore anything that isn't actually on the row. + if (node.endPosition.row < comparisonRow) { continue; } + if (node.startPosition.row > comparisonRow) { continue; } - _populateInjections(range, nodeRangeSet) { - if (!this.tree) { return; } - const promises = []; + // Ignore anything that fails a scope test. + if (!scopeResolver.store(capture)) { continue; } - // We won't touch _all_ injections, but we will touch any injection that - // could possibly have been affected by this layer's update. - let existingInjectionMarkers = this.languageMode.injectionsMarkerLayer - .findMarkers({ intersectsRange: range }) - .filter(marker => marker.parentLanguageLayer === this); + // Only consider a given combination of capture name and buffer range + // once, even if it's captured more than once in `indents.scm`. + let key = `${name}/${node.startIndex}/${node.endIndex}`; + if (positionSet.has(key)) { continue; } + positionSet.add(key); - if (existingInjectionMarkers.length > 0) { - // Enlarge our range to contain all of the injection zones in the - // affected buffer range. - let earliest = range.start, latest = range.end; - for (let marker of existingInjectionMarkers) { - range = marker.getRange(); - if (range.start.compare(earliest) === -1) { - earliest = range.start; + if (name === 'indent') { + if (indentCapturePosition === null) { + indentCapturePosition = node.endPosition; } - if (range.end.compare(latest) === 1) { - latest = range.end; + indentDelta++; + } else if (name === 'dedent.next') { + // This isn't often needed, but it's a way for the current line to + // signal that the _next_ line should be dedented no matter what its + // content is. + dedentNextDelta++; + } else if (name === 'match.next') { + matchNextResult = this.resolveMatch(capture, { + row, + comparisonRow, + tabLength, + indentationLevels: options.indentationLevels + }) ?? null; + if (matchNextResult !== null) { break; } + } else if (name === 'dedent') { + // `dedent` tokens don't count for anything unless they happen + // after the first `indent` token. They only tell us whether an indent + // that _seems_ like it should happen is cancelled out. + // + // Consider: + // + // } else if (foo) { + // + // We should still indent the succeeding line because the initial `}` + // does not cancel out the `{` at the end of the line. On the other + // hand: + // + // } else if (foo) {} + // + // The second `}` _does_ cancel out the first occurrence of `{` because + // it comes later. + if (!indentCapturePosition || comparePoints(node.startPosition, indentCapturePosition) < 0) { + // This capture either happened before the first indent capture on + // the row or is _the same node_ as the indent capture, in which case + // we should construe the dedent as happening _before_ the indent. + // + // For example: the "elsif" node in Ruby triggers a dedent on its own + // line, but also signals an indent on the next line. The dedent + // shouldn't cancel out the indent. + continue; + } + indentDelta--; + if (indentDelta < 0) { + // In the _indent_ phase, the delta won't ever go lower than `0`. + // This is because we assume that the previous line is correctly + // indented! The only function that `dedent` serves for us in this + // phase is canceling out an earlier `indent` and preventing false + // positives. + // + // So no matter how many `dedent` tokens we see on a particular line… + // if the _last_ token we see is an `indent` token, then it hints + // that the next line should be indented by one level. + indentDelta = 0; } } + } + + // `@indent` and `@dedent` can increase the next line's indent level by one + // at most, and can't decrease the next line's indent level at all on their + // own. + // + // Why? There are few coding patterns in the wild that would cause us to + // indent more than one level based on tokens found on the _previous_ line. + // And there are also few scenarios in which we'd want to dedent a certain + // line before we even know the content of that line. + // + // Hence we distill the results above into a net indentation level change + // of either 1 or 0, depending on whether we saw more `@indent`s than + // `@dedent`s. + // + // If there's a genuine need to dedent the current row based solely on the + // content of the comparison row, then `@dedent.next` can be used. + // + // And if a language needs to indent more than one level from one line to + // the next, then `@match` captures can be used to specify an exact level + // of indentation relative to another specific node. If a `@match` capture + // exists, we'll catch it in the dedent captures phase, and these + // heuristics will be ignored. + // + indentDelta = clamp(indentDelta, 0, 1); - range = range.union(new Range(earliest, latest)); + // Process `@dedent.next` captures as a last step; they act as a strong + // hint about the next line's indentation. + indentDelta -= clamp(dedentNextDelta, 0, 1); + + // If we got a result from a `match.next` capture, that supersedes any + // other results. Set `indentDelta` to `0`; we'll instead use + // `matchNextResult` as the baseline to which we'll add any further deltas. + if (matchNextResult !== null) { + indentDelta = 0; } - // Why do we have to do this explicitly? Because `descendantsOfType` will - // incorrectly return nodes if the range runs from (0, 0) to (0, 0). All - // other empty ranges seem not to have this problem. Upon cursory - // inspection, this bug doesn't seem to be limited to `web-tree-sitter`. - if (range.isEmpty()) { return; } + let dedentDelta = 0; + let line = this.buffer.lineForRow(row); + let rowStartingColumn = Math.max(line.search(/\S/), 0); - // Now that we've enlarged the range, we might have more existing injection - // markers to consider. But check for containment rather than intersection - // so that we don't have to enlarge it again. - existingInjectionMarkers = this.languageMode.injectionsMarkerLayer - .findMarkers({ startsInRange: range, endsInRange: range }) - .filter(marker => marker.parentLanguageLayer === this); + if (!options.skipDedentCheck) { + scopeResolver.reset(); - const markersToUpdate = new Map(); + // The controlling layer on the previous line gets to decide what our + // starting indent is on the current line. But it might not extend to the + // current line, so we should determine which layer is in charge of the + // second phase. + // + // The comparison point we use is that of the first character on the + // line. If we start earlier than that, we might not pick up on the + // presence of an injection layer. + let rowStart = new Point(row, rowStartingColumn); + let dedentControllingLayer = languageMode.controllingLayerAtPoint( + rowStart, + (layer) => { + if (!layer.queries.indentsQuery) return false; + // We're inverting the logic from above: now we want to allow layers + // that _begin_ at the cursor and exclude layers that _end_ at the + // cursor. Because we'll be analyzing content that comes _after_ the + // cursor to understand whether to dedent! + // + // So first we test for containment exclusive of endpoints… + if (layer.containsPoint(rowStart, true)) { + return true; + } - // Query for all the nodes that could possibly prompt the creation of - // injection points. - const nodes = this.tree.rootNode.descendantsOfType( - Object.keys(this.grammar.injectionPointsByType), - range.start, - range.end - ); + // …but we'll still accept layers that have a content range which + // _starts_ at the cursor position. + return layer.getCurrentRanges()?.some(r => { + return r.start.compare(rowStart) === 0; + }); + } + ); - let existingInjectionMarkerIndex = 0; - let newLanguageLayers = 0; - for (const node of nodes) { - // A given node can be the basis for an arbitrary number of injection - // points, but first it has to pass our gauntlet of tests: - for (const injectionPoint of this.grammar.injectionPointsByType[node.type]) { - // Does it give us a language string? - const languageName = injectionPoint.language(node); - if (!languageName) { continue; } + if (dedentControllingLayer && dedentControllingLayer !== controllingLayer) { + // If this layer is different from the one we used above, then we + // should run this layer's indents query against its own tree. (If _no_ + // layers qualify at this position, we won't hit this code path, so + // we'll reluctantly still use the original layer and tree.) + indentsQuery = dedentControllingLayer.queries.indentsQuery; + indentTree = dedentControllingLayer.getOrParseTree(); + } - // Does that string match up with a grammar that we recognize? - const grammar = this.languageMode.grammarForLanguageString( - languageName); - if (!grammar) { continue; } + // The second phase covers any captures on the current line that can + // cause the current line to be indented or dedented. + let dedentCaptures = indentsQuery.captures( + indentTree.rootNode, + { row: row - 1, column: Infinity }, + { row: row + 1, column: 0 } + ); - // Does it offer us a node, or array of nodes, which a new injection - // layer should use for its content? - const contentNodes = injectionPoint.content(node, this.buffer); - if (!contentNodes) { continue; } + let currentRowText = this.buffer.lineForRow(row); + currentRowText = currentRowText.trim(); + positionSet.clear(); - const injectionNodes = [].concat(contentNodes); - if (!injectionNodes.length) continue; + for (let capture of dedentCaptures) { + let { name, node } = capture; + let { text } = node; - const injectionRange = node.range; + let force = this.getProperty(capture, 'force', 'boolean', false); + let allowEmpty = this.getProperty(capture, 'allowEmpty', 'boolean', false); - let marker; + // Ignore “phantom” nodes that aren't present in the buffer. + if (text === '' && !allowEmpty) { continue; } - // It's surprisingly hard to match up the injection point that we now - // know we need… with the one that may already exist that was created - // or updated based on the state of the tree from the last keystroke. - // There is no continuity between the previous tree and the new tree - // that we can rely on. Unless the marker and the base node of the - // injection point agree on an exact range, we can't be sure enough to - // re-use an existing layer. + // Ignore anything that isn't actually on the row. + if (node.endPosition.row < row) { continue; } + if (node.startPosition.row > row) { continue; } + + // Ignore anything that fails a scope test. + if (!scopeResolver.store(capture)) { continue; } + + // Imagine you've got: // - // This isn't a huge deal because (a) markers are good at adapting to - // changes, so those two things will agree more often than you think; - // (b) even when they don't agree, it's not very costly to destroy and - // recreate another `LanguageLayer`. + // { ^foo, bar } = something // - // Since both `existingInjectionMarkers` and `nodes` are guaranteed to - // be sorted in buffer order, we can take shortcuts in how we pair them - // up. + // and the caret represents the cursor. Pressing Enter will move + // everything after the cursor to a new line and _should_ indent the + // line, even though there's a closing brace on the new line that would + // otherwise mark a dedent. // - for ( - let i = existingInjectionMarkerIndex, - n = existingInjectionMarkers.length; - i < n; - i++ - ) { - const existingMarker = existingInjectionMarkers[i]; - const comparison = existingMarker.getRange().compare(injectionRange); - if (comparison > 0) { - // This marker seems to occur after the range we want to inject - // into, meaning there's a good chance it's not ours. And it means - // that none of the remaining markers will likely be our candidate, - // either; so we should give up and create a new one. - break; - } else if (comparison === 0) { - // Luckily, the range matches up exactly, so this is almost - // certainly a previous version of the same intended injection. It - // also means that any markers before this point in the list have - // either already matched with candidate injection points or cannot - // possibly match up; thus we can ignore them for the rest of the - // matching process. - existingInjectionMarkerIndex = i; - if (existingMarker.languageLayer.grammar === grammar) { - marker = existingMarker; - break; - } - } else { - // This marker occurs before our range. Since all injection - // candidates from this point forward are guaranteed to be of an - // equal or later range, there's no chance of this marker matching - // any candidates from this point forward. We can ignore it, and - // anything before it, in subsequent trips through the loop. - existingInjectionMarkerIndex = i; - } - } - - if (!marker) { - // If we didn't match up with an existing marker/layer, we'll have to - // create them. - marker = this.languageMode.injectionsMarkerLayer.markRange( - injectionRange); - - marker.languageLayer = new LanguageLayer( - marker, - this.languageMode, - grammar, - this.depth + 1, - injectionPoint - ); + // Thus we don't want to honor a `@dedent` or `@match` capture unless + // it's the first non-whitespace content in the line. We'll use similar + // logic for `suggestedIndentForEditedBufferRow`. + // + // If a capture is confident it knows what it's doing, it can opt out + // of this behavior with `(#set! indent.force true)`. + if (!force && !currentRowText.startsWith(text)) { continue; } - marker.parentLanguageLayer = this; - // eslint-disable-next-line no-unused-vars - newLanguageLayers++; + // The '@match' capture short-circuits a lot of this logic by pointing + // us to a different node and asking us to match the indentation of + // whatever row that node starts on. + if (name === 'match') { + let matchIndentLevel = this.resolveMatch( + capture, { row, comparisonRow, tabLength, indentationLevels: options.indentationLevels }); + if (typeof matchIndentLevel === 'number') { + scopeResolver.reset(); + let finalIndent = Math.max(matchIndentLevel - existingIndent, 0); + this.emitter.emit('did-suggest-indent', { + row, + comparisonRow, + matchIndentLevel, + finalIndent + }); + return finalIndent; + } + } else if (name === 'none') { + scopeResolver.reset(); + return 0; } - markersToUpdate.set( - marker, - new NodeRangeSet( - nodeRangeSet, - injectionNodes, - injectionPoint - ) - ); - } - } - - let staleLanguageLayers = 0; - for (const marker of existingInjectionMarkers) { - // Any markers that didn't get matched up with injection points are now - // stale and should be destroyed. - if (!markersToUpdate.has(marker)) { - this.languageMode.emitRangeUpdate(marker.getRange()); - marker.languageLayer.destroy(); - // eslint-disable-next-line no-unused-vars - staleLanguageLayers++; - } - } - - if (markersToUpdate.size > 0) { - for (const [marker, nodeRangeSet] of markersToUpdate) { - promises.push(marker.languageLayer.update(nodeRangeSet)); - } - } - - return Promise.all(promises); - } - - _treeEditForBufferChange(start, oldEnd, newEnd, oldText, newText) { - let startIndex = this.buffer.characterIndexForPosition(start); - return { - startIndex, - oldEndIndex: startIndex + oldText.length, - newEndIndex: startIndex + newText.length, - startPosition: start, - oldEndPosition: oldEnd, - newEndPosition: newEnd - }; - } -} + // Only `@dedent` or `@match` captures can change this line's + // indentation. We handled `@match` above, so we'll filter out all non- + // `@dedent`s now. + if (name !== 'dedent') { continue; } -// An injection `LanguageLayer` may need to parse and highlight a strange -// subset of its stated range — for instance, all the descendants within a -// parent that are of a particular type. A `NodeRangeSet` is how that strange -// subset is expressed. -class NodeRangeSet { - constructor(previous, nodes, injectionPoint) { - this.previous = previous; - this.newlinesBetween = injectionPoint.newlinesBetween; - this.includeAdjacentWhitespace = injectionPoint.includeAdjacentWhitespace; - this.includeChildren = injectionPoint.includeChildren; + // Only consider a given range once, even if it's marked with multiple + // captures. + let key = `${node.startIndex}/${node.endIndex}`; + if (positionSet.has(key)) { continue; } + positionSet.add(key); + dedentDelta--; + } - // We shouldn't retain references to nodes here because the tree might get - // disposed of layer. Let's compile the information we need now while we're - // sure the tree is fresh. - this.nodeSpecs = []; - for (let node of nodes) { - this.nodeSpecs.push(this.getNodeSpec(node, true)); + // `@indent`/`@dedent` captures, no matter how many there are, can + // dedent the current line by one level at most. To indent more than + // that, one must use a `@match` capture. + dedentDelta = clamp(dedentDelta, -1, 0); } + + scopeResolver.reset(); + let baseline = matchNextResult !== null ? matchNextResult : comparisonRowIndent; + let finalIndent = baseline + indentDelta + dedentDelta; + let resultIndent = Math.max(finalIndent - existingIndent, 0); + this.emitter.emit('did-suggest-indent', { + row, + comparisonRow, + comparisonRowIndent, + indentDelta, + dedentDelta, + finalIndent, + resultIndent + }); + return resultIndent; } - getNodeSpec(node, getChildren) { - let { startIndex, endIndex, startPosition, endPosition, id } = node; - let result = { startIndex, endIndex, startPosition, endPosition, id }; - if (getChildren && node.childCount > 0) { - result.children = []; - for (let child of node.children) { - result.children.push(this.getNodeSpec(child, false)); + // Extended: Register a callback that fires when {IndentResolver} suggests an + // indentation level. + // + // This callback is merely a glimpse into the indentation life-cycle and does + // not offer the callback any opportunity to change the value being + // suggested. Its goal is to report metadata that may make it easier to + // diagnose _why_ a particular indentation level is being suggested without + // having to step through the logic in a debugger. + // + // One indentation “level” consists of either (a) one tab character, or (b) + // one multiple of `editor.tabLength` spaces (if `editor.softTabs` is + // `true`). + // + // - `callback` A {Function} that takes one parameter: + // - `meta` An {Object} that consisting of _some subset_ of the following + // properties: + // - `row` The {Number} of the row whose indentation was suggested. + // (Zero-indexed, so you must add one to match the row number displayed + // in the gutter.) + // - `comparisonRow` The {Number} of the row that was consulted to + // determine the baseline indentation of the target row. This is + // often the row directly above `row`, but can be an earlier row if + // the target row was preceded by whitespace. + // - `comparisonRowIndent` {Number} The indentation level of the + // comparison row. + // - `indentDelta` {Number} The amount of indentation (in increments) + // suggested during the first phase of indent analysis. This phase + // determines the baseline indentation of the target row by querying + // the content on the comparison row. (For instance, if the comparison + // row ends with `(`, `indentDelta` will typically be `1`.) Since + // the first phase can only maintain or increase the indentation level, + // this value will be either `0` or `1`. + // - `dedentDelta` {Number} The amount of indentation (in increments) + // suggested during the second phase of indent analysis. This phase + // determines whether any content on the target line suggests that we + // should dedent the line by one level. (For instance, if the target + // line starts with `)`, `dedentDelta` will often be `-1`.) Since the + // second phase can only maintain or decrease the indentation level, + // this value will be either `0` or `-1`. + // - `matchIndentLevel` {Number} A number representing the ideal amount + // of indentation as determined by a `@match` capture. A `@match` + // capture tries to match the indentation level of a previous line in + // the buffer — one that it has a semantic relationship with — instead + // of determining indentation in relative terms. When it's present, it + // overrides the conventional indentation logic. + // - `finalIndent` {Number} A number representing the final value that + // will shortly be returned from a call to + // `suggestedIndentForBufferRow`. This value accounts for the possible + // presence of the `preserveLeadingWhitespace` option. For instance, + // if `suggestedIndentForBufferRow` would return `5`, but the target + // row already has an indent level of `3`, `finalIndent` will instead + // be `2`. + // - `resultIndent` {Number} A `finalIndent`, but takes existing + // indentation level into account if the `preserveLeadingWhitespace` + // option was enabled. For instance, if `suggestedIndentForBufferRow` + // would return `5`, but the target row already has an indent level of + // `3`, `resultIndent` will instead be `2`. If + // `preserveLeadingWhitespace` is not enabled, `finalIndent` and + // `resultIndent` will be identical. + onDidSuggestIndent(callback) { + return this.emitter.on('did-suggest-indent', callback); + } + + suggestedIndentForBufferRows(startRow, endRow, tabLength, options = {}) { + let { languageMode } = this; + let root = languageMode.rootLanguageLayer; + if (!root || !root.tree) { + let results = new Map(); + for (let row = startRow; row <= endRow; row++) { + results.set(row, null); } + return results; } - return result; - } - getRanges(buffer) { - const previousRanges = this.previous?.getRanges(buffer); - let result = []; + let results = new Map(); + let comparisonRow = null; + let comparisonRowIndent = null; - for (let node of this.nodeSpecs) { - // An injection point isn't given the point at which the buffer ends, so - // it's free to return an `endIndex` of `Infinity` here and rely on us to - // clip it to the boundary of the buffer. - if (node.endIndex === Infinity) { - node = this._clipRange(node, buffer); - } - let position = node.startPosition, index = node.startIndex; + let { isPastedText = false } = options; + let indentDelta; - if (node.children && !this.includeChildren) { - // If `includeChildren` is `false`, we're effectively collecting all - // the disjoint text nodes that are direct descendants of this node. - for (const child of node.children) { - const nextIndex = child.startIndex; - if (nextIndex > index) { - this._pushRange(buffer, previousRanges, result, { - startIndex: index, - endIndex: nextIndex, - startPosition: position, - endPosition: child.startPosition - }); + for (let row = startRow; row <= endRow; row++) { + // If this row were being indented by `suggestedIndentForBufferRow`, it'd + // look at the end of the previous row to find the controlling layer, + // because we start at the previous row to find the suggested indent for + // the current row. + let controllingLayer = languageMode.controllingLayerAtPoint( + this.buffer.clipPosition(new Point(row - 1, Infinity)), + // This query isn't as precise as the one we end up making later, but + // that's OK. This is just a first pass. + (layer) => !!layer.queries.indentsQuery && !!layer.tree + ); + if (isPastedText) { + // In this mode, we're not trying to auto-indent every line; instead, + // we're trying to auto-indent the _first_ line of a region of text + // that's just been pasted, while trying to preserve the relative + // levels of indentation within the pasted region. So if the + // auto-indent of the first line increases its indent by one level, + // all other lines should also be increased by one level — without even + // consulting their own suggested indent levels. + if (row === startRow) { + // The only time we consult the indents query is for the first row, + // so we're not going to insist that the _entire range_ fall under + // the control of a layer with an indents query — just the row we + // need. + if (!controllingLayer) { return null; } + let tree = controllingLayer.getOrParseTree(); + + let firstLineCurrentIndent = this.indentLevelForLine( + this.buffer.lineForRow(row), tabLength); + + let firstLineIdealIndent = this.suggestedIndentForBufferRow( + row, + tabLength, + { + ...options, + controllingLayer, + tree + } + ); + + if (firstLineIdealIndent == null) { + // If we decline to suggest an indent level for the first line, + // then there's no change to be made here. Keep the whole region + // the way it is. + return null; + } else { + indentDelta = firstLineIdealIndent - firstLineCurrentIndent; + if (indentDelta === 0) { + // If the first row doesn't have to be adjusted, neither do any + // others. + return null; + } + results.set(row, firstLineIdealIndent); } - position = child.endPosition; - index = child.endIndex; + continue; } - } - if (node.endIndex > index) { - this._pushRange(buffer, previousRanges, result, { - startIndex: index, - endIndex: node.endIndex, - startPosition: position, - endPosition: node.endPosition - }); + // All rows other than the first are easy — just apply the delta. + let actualIndent = this.indentLevelForLine( + this.buffer.lineForRow(row), tabLength); + + results.set(row, actualIndent + indentDelta); + continue; } - } - let whitespaceRanges = []; - if (this.includeAdjacentWhitespace && result.length > 1) { - // Look at the region between each pair of results. If it's entirely - // whitespace, include it in the range. - for (let i = 1; i < result.length; i++) { - let current = result[i], previous = result[i - 1]; - if (current.startIndex === previous.endIndex) { continue; } - let pseudoRange = { - startPosition: previous.endPosition, - startIndex: previous.endIndex, - endPosition: current.startPosition, - endIndex: current.startIndex + // For line X to know its appropriate indentation level, it needs row X-1, + // if it exists, to be indented properly. That's why `TextEditor` wants to + // indent each line atomically. Instead, we'll determine the right level + // for the first row, then supply the result for the previous row when we + // call `suggestedIndentForBufferRow` for the _next_ row, and so on, so + // that `suggestedIndentForBufferRow` doesn't try to look up the comparison + // row itself and find out we haven't actually fixed any of the previous + // rows' indentations yet. + let indent; + if (controllingLayer) { + let tree = controllingLayer.getOrParseTree(); + let rowOptions = { + ...options, + tree, + comparisonRow: comparisonRow ?? undefined, + comparisonRowIndent: comparisonRowIndent ?? undefined, + indentationLevels: results }; - let rangeText = buffer.getTextInRange(rangeForNode(pseudoRange)); - if (!/\S/.test(rangeText)) { - whitespaceRanges.push(pseudoRange); + indent = this.suggestedIndentForBufferRow(row, tabLength, rowOptions); + if (indent === null) { + // We could not retrieve the correct indentation level for this row + // without re-parsing the tree. We should give up and return what we + // have so that `TextEditor` can finish the job through a less + // efficient means. + return results; } + } else { + // We could not retrieve the correct indentation level for this row + // because it isn't governed by any layer that has an indents query. + return results; } - result.push(...whitespaceRanges); - result = result.sort((a, b) => { - return a.startIndex - b.startIndex || - a.endIndex - b.endIndex; - }); + results.set(row, indent); + comparisonRow = row; + comparisonRowIndent = indent; } - return this._consolidateRanges(result); - } - _clipRange(range, buffer) { - // Convert this range spec to an actual `Range`, clip it, then convert it - // back to a range spec with accurate `startIndex` and `endIndex` values. - let clippedRange = buffer.clipRange(rangeForNode(range)); - return rangeToTreeSitterRangeSpec(clippedRange, buffer); + return results; } - // Combine adjacent ranges to minimize the number of boundaries. - _consolidateRanges(ranges) { - if (ranges.length === 1) { return ranges; } - let consolidated = []; - let candidate; - let lastIndex = ranges.length - 1; - for (let i = 0; i < ranges.length; i++) { - let range = ranges[i]; - if (!candidate) { - candidate = range; - continue; - } - if (candidate.endIndex === range.startIndex) { - // Keep enlarging the last node for as long as subsequent nodes are - // adjacent to it. - candidate = { - startIndex: candidate.startIndex, - startPosition: candidate.startPosition, - endIndex: range.endIndex, - endPosition: range.endPosition - }; - if (i === lastIndex) { - consolidated.push(candidate); - } + suggestedIndentForEditedBufferRow(row, tabLength, options = {}) { + let { languageMode } = this; + const line = this.buffer.lineForRow(row); + const currentRowIndent = this.indentLevelForLine(line, tabLength); + + // If the row is not indented at all, we have nothing to do, because we can + // only dedent a line at this phase. + if (currentRowIndent === 0) { return; } + + // If we're on the first row, we have no preceding line to compare + // ourselves to. We should do nothing. + if (row === 0) { return; } + + // By the time this function runs, we probably know enough to be sure of + // which layer controls the beginning of this row, even if we don't know + // which one owns the position at the cursor. + // + // Use the position of the first text on the line as the reference point. + let rowStartingColumn = Math.max(line.search(/\S/), 0); + let controllingLayer = languageMode.controllingLayerAtPoint( + new Point(row, rowStartingColumn), + (layer) => !!layer.queries.indentsQuery + ); + + if (!controllingLayer) { return undefined; } + + let { queries: { indentsQuery }, scopeResolver } = controllingLayer; + if (!indentsQuery) { return undefined; } + + // TODO: We use `ScopeResolver` here so that we can use its tests. Maybe we + // need a way to share those tests across different kinds of capture + // resolvers. + scopeResolver.reset(); + + // Ideally, we're running when the tree is clean, but if not, we must + // re-parse the tree in order to make an accurate indents query. + let indentTree = options.tree; + if (!indentTree) { + if (!controllingLayer.treeIsDirty || options.forceTreeParse || !this.useAsyncIndent || !this.useAsyncParsing) { + indentTree = controllingLayer.getOrParseTree(); } else { - // We found a disjoint range, so push our candidate into the result set - // and promote a new candidate (unless we're at the end). - consolidated.push(candidate); - if (i === lastIndex) { - consolidated.push(range); - } else { - candidate = range; - } + return this.atTransactionEnd().then(({ changeCount }) => { + if (changeCount > 1) { + // Unlike `suggestedIndentForBufferRow`, we should not return + // `undefined` here and implicitly tell `TextEditor` to handle the + // auto-indent itself. If there were several changes in this + // transaction, we missed our chance to dedent this row, and should + // return `null` to signal that `TextEditor` should do nothing + // about it. + return null; + } + let result = this.suggestedIndentForEditedBufferRow(row, tabLength, { + ...options, + tree: controllingLayer.tree + }); + if (currentRowIndent === result) { + // Return `null` here so that `TextEditor` realizes that no work + // needs to be done. + return null; + } + return result; + }); } } - return consolidated; - } + if (!indentTree) { + console.error(`No indent tree!`, controllingLayer.inspect()); + return undefined; + } - coversRange(candidateRange) { - let ranges = this.getRanges().map(r => rangeForNode(r)); - return ranges.some(range => { - return range.containsRange(candidateRange); + const indents = indentsQuery.captures( + indentTree.rootNode, + { row: row - 1, column: Infinity }, + { row: row + 1, column: 0 } + ); + + let lineText = this.buffer.lineForRow(row).trim(); + + // This is the indent level that is suggested from context — the level we'd + // have if this row were completely blank. We won't alter the indent level + // of the current row — even if it's “wrong” — unless typing triggers a + // dedent. But once a dedent is triggered, we should dedent one level from + // this value, not from the current row indent. + // + // If more than one level of dedent is needed, a `@match` capture must be + // used so that indent level can be expressed in absolute terms. + const originalRowIndent = this.suggestedIndentForBufferRow(row, tabLength, { + skipBlankLines: true, + skipDedentCheck: true, + tree: indentTree }); - } - _pushRange(buffer, previousRanges, newRanges, newRange) { - if (!previousRanges) { - if (this.newlinesBetween) { - const { startIndex, startPosition } = newRange; - this._ensureNewline(buffer, newRanges, startIndex, startPosition); - } - newRanges.push(newRange); - return; - } + let seenDedent = false; + for (let indent of indents) { + let { node } = indent; + // Ignore captures that aren't on this row. + if (node.startPosition.row !== row) { continue; } + // Ignore captures that fail their scope tests. + if (!scopeResolver.store(indent)) { continue; } - for (const previousRange of previousRanges) { - if (previousRange.endIndex <= newRange.startIndex) continue; - if (previousRange.startIndex >= newRange.endIndex) break; - const startIndex = Math.max( - previousRange.startIndex, - newRange.startIndex - ); - const endIndex = Math.min(previousRange.endIndex, newRange.endIndex); - const startPosition = Point.max( - previousRange.startPosition, - newRange.startPosition - ); - const endPosition = Point.min( - previousRange.endPosition, - newRange.endPosition - ); - if (this.newlinesBetween) { - this._ensureNewline(buffer, newRanges, startIndex, startPosition); + let force = this.getProperty(indent, 'force', 'boolean', false); + + // For all captures — even `@match` captures — we get one bite at the + // apple, and it's when the text of the capture is the only + // non-whitespace text on the line. + // + // Otherwise, this capture will assert itself after every keystroke, and + // the user has no way to opt out of the correction. + // + // If the capture is confident it knows what it's doing, and is using + // some other mechanism to ensure the adjustment will happen exactly + // once, it can bypass this behavior with `(#set! indent.force true)`. + // + if (!force && node.text !== lineText) { continue; } + + // `@match` is authoritative; honor the first one we see and ignore other + // captures. + if (indent.name === 'match') { + let matchIndentLevel = this.resolveMatch(indent, row, tabLength); + if (typeof matchIndentLevel === 'number') { + scopeResolver.reset(); + return matchIndentLevel; + } + } else if (indent.name === 'none') { + scopeResolver.reset(); + return 0; } - newRanges.push({ startIndex, endIndex, startPosition, endPosition }); - } - } - // For injection points with `newlinesBetween` enabled, ensure that a - // newline is included between each disjoint range. - _ensureNewline(buffer, newRanges, startIndex, startPosition) { - const lastRange = last(newRanges); - if (lastRange && lastRange.endPosition.row < startPosition.row) { - newRanges.push({ - startPosition: new Point( - startPosition.row - 1, - buffer.lineLengthForRow(startPosition.row - 1) - ), - endPosition: new Point(startPosition.row, 0), - startIndex: startIndex - startPosition.column - 1, - endIndex: startIndex - startPosition.column - }); + if (indent.name !== 'dedent') { continue; } + + // Even after we've seen a `@dedent`, we allow the loop to continue, + // because we'd prefer a `@match` capture over this `@dedent` capture + // even if it happened to come later in the loop. + seenDedent = true; } - } -} -class OpenScopeMap extends Map { - constructor() { - super(); - } + scopeResolver.reset(); - getScopesArray() { - let results = []; - let keys = [...this.keys()]; - keys.sort(comparePoints); - for (let key of keys) { - let value = this.get(key); - results.push(...value); + if (seenDedent) { + return Math.max(0, originalRowIndent - 1); } - return results; + + return currentRowIndent; } - removeLastOccurrenceOf(scopeId) { - let keys = [...this.keys()]; - keys.reverse(); - for (let key of keys) { - let value = this.get(key); - if (value.includes(scopeId)) { - removeLastOccurrenceOf(value, scopeId); - return true; + indentLevelForLine(line, tabLength) { + let indentLength = 0; + for (let i = 0, { length } = line; i < length; i++) { + const char = line[i]; + if (char === '\t') { + indentLength += tabLength - (indentLength % tabLength); + } else if (char === ' ') { + indentLength++; + } else { + break; } } - return false; + return indentLength / tabLength } -} -// Like a map, but expects each key to have multiple values. -class Index extends Map { - constructor() { - super(); - } + resolveMatch(capture, { currentRow, comparisonRow, tabLength, indentationLevels }) { + let { node } = capture; + let meta = { + currentRow, + comparisonRow, + tabLength, + indentationLevels + } - add(key, ...values) { - let existing = this.get(key); - if (!existing) { - existing = []; - this.set(key, existing); + if (!this.applyTests(capture, meta)) { + return undefined; } - existing.push(...values); - } -} + let matchIndentOf = this.getProperty(capture, ['match', 'matchIndentOf'], 'string', null); + let offsetIndent = this.getProperty(capture, ['offset', 'offsetIndent'], 'number', 0); -// A class designed to aggregate and normalize a set of ranges. Each time a -// buffer range is added, it's compared to the existing list; if there are -// intersections with range already in the list, those intersections are -// combined into one larger range. -// -// Assumes all ranges are instances of `Range` rather than tree-sitter range -// specs. -class RangeList { - constructor() { - this.ranges = []; - } + if (!matchIndentOf) return undefined; - clear() { - this.ranges.length = 0; - } + let targetPosition = resolveNodePosition(node, matchIndentOf); + let targetRow = targetPosition?.row; + if (typeof targetRow !== 'number' || targetRow >= currentRow) { + return undefined; + } - add(newRange) { - let intersecting = []; - for (let range of this.ranges) { - if (newRange.intersectsWith(range)) { - intersecting.push(range); - } + let baseIndent; + if (indentationLevels) { + baseIndent = indentationLevels.get(targetRow); } + baseIndent ??= this.languageMode.indentLevelForLine( + this.buffer.lineForRow(targetRow), tabLength); - for (let i = intersecting.length - 1; i >= 0; i--) { - let index = this.ranges.indexOf(intersecting[i]); - this.ranges.splice(index, 1); + let result = baseIndent + offsetIndent; + return Math.max(result, 0); + } + + getProperty(capture, names, coercion = null, fallback = null) { + if (typeof names === 'string') { + names = [names]; } - while (intersecting.length > 0) { - newRange = newRange.union(intersecting.shift()); + for (let name of names) { + let fullName = `indent.${name}`; + let { setProperties: props = {} } = capture; + if (!(fullName in props)) { + continue; + } + return this.coerce(props[fullName], coercion) ?? fallback; } - this.insertOrdered(newRange); + return fallback; } - insertOrdered(newRange) { - let index = this.ranges.findIndex(r => { - return r.start.compare(newRange.start) > 0; - }); - this.ranges.splice(index, 0, newRange); + coerce(value, coercion) { + switch (coercion) { + case 'string': + if (value == null) return ""; + return value; + case 'number': { + let number = Number(value); + if (isNaN(number)) return null; + return number; + } + case 'boolean': + if (value == null) return null; + return true; + default: + return value; + } + } + + applyTests(capture, meta) { + let { + node, + assertedProperties: asserted = {}, + refutedProperties: refuted = {} + } = capture; + for (let [name, test] of Object.entries(IndentResolver.TESTS)) { + let fullName = `indent.${name}` + let passed = true; + if (asserted[fullName]) { + passed = test(node, asserted[fullName], meta); + } else if (refuted[fullName]) { + passed = !test(node, asserted[fullName], meta); + } + if (!passed) return false; + } + return true; } +} - inspect() { - let ranges = this.ranges.map(r => r.toString()); - return `[RangeList: ${ranges.join(', ')}]`; - } +IndentResolver.TESTS = { + // Returns `true` if the position descriptor's row equals that of the current + // row (the row whose indentation level is being suggested). + matchesCurrentRow(node, value, { currentRow }) { + let position = resolveNodePosition(node, value); + if (!position) return null; + return position.row === currentRow; + }, - *[Symbol.iterator]() { - for (let range of this.ranges) { - yield range; - } + // Returns `true` if the position descriptor's row equals that of the + // comparison row (the row used as a reference when determining the + // indentation level of the current row). + matchesComparisonRow(node, value, { comparisonRow }) { + let position = resolveNodePosition(node, value); + if (!position) return null; + return position.row === comparisonRow; } } From 338f68845c2e5298fc382d1326b9fb0977f52104 Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 17 Aug 2024 09:53:55 -0700 Subject: [PATCH 02/28] [language-css] Bump `tree-sitter-css` to `0.21.1` Fixes issue with parsing of selectors in `:has`, `:is`, and other pseudoclasses. --- .../grammars/modern-tree-sitter-css.cson | 2 +- .../grammars/tree-sitter/tree-sitter-css.wasm | Bin 98095 -> 103605 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/language-css/grammars/modern-tree-sitter-css.cson b/packages/language-css/grammars/modern-tree-sitter-css.cson index 2c0f5ff507..101696e18e 100644 --- a/packages/language-css/grammars/modern-tree-sitter-css.cson +++ b/packages/language-css/grammars/modern-tree-sitter-css.cson @@ -8,7 +8,7 @@ fileTypes: [ ] treeSitter: - parserSource: 'github:tree-sitter/tree-sitter-css#98c7b3dceb24f1ee17f1322f3947e55638251c37' + parserSource: 'github:tree-sitter/tree-sitter-css#9af0bdd9d225edee12f489cfa8284e248321959b' grammar: 'tree-sitter/tree-sitter-css.wasm' highlightsQuery: 'tree-sitter/queries/highlights.scm' foldsQuery: 'tree-sitter/queries/folds.scm' diff --git a/packages/language-css/grammars/tree-sitter/tree-sitter-css.wasm b/packages/language-css/grammars/tree-sitter/tree-sitter-css.wasm index 711c7732fad87cd9243d36155a85f6025ed39fe3..6399b8a0b56c8a652030b8b4afa4072b54101386 100755 GIT binary patch literal 103605 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 B@J;{# literal 98095 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 Date: Sat, 17 Aug 2024 10:50:13 -0700 Subject: [PATCH 03/28] Fix bugs in invocations of `resolveMatch` --- src/wasm-tree-sitter-language-mode.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/wasm-tree-sitter-language-mode.js b/src/wasm-tree-sitter-language-mode.js index b7e1615b84..2062014a4b 100644 --- a/src/wasm-tree-sitter-language-mode.js +++ b/src/wasm-tree-sitter-language-mode.js @@ -4394,7 +4394,7 @@ class IndentResolver { dedentNextDelta++; } else if (name === 'match.next') { matchNextResult = this.resolveMatch(capture, { - row, + currentRow: row, comparisonRow, tabLength, indentationLevels: options.indentationLevels @@ -4931,7 +4931,11 @@ class IndentResolver { // `@match` is authoritative; honor the first one we see and ignore other // captures. if (indent.name === 'match') { - let matchIndentLevel = this.resolveMatch(indent, row, tabLength); + let matchIndentLevel = this.resolveMatch(indent, { + // TODO: Pass `comparisonRow`? + currentRow: row, + tabLength + }); if (typeof matchIndentLevel === 'number') { scopeResolver.reset(); return matchIndentLevel; From 6eee25f5ec17c2553cb587b193cd3cce16a7097d Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 17 Aug 2024 15:32:24 -0700 Subject: [PATCH 04/28] Tweaks --- src/wasm-tree-sitter-language-mode.js | 48 +++++++++++++++++++-------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/src/wasm-tree-sitter-language-mode.js b/src/wasm-tree-sitter-language-mode.js index 2062014a4b..6d82092828 100644 --- a/src/wasm-tree-sitter-language-mode.js +++ b/src/wasm-tree-sitter-language-mode.js @@ -4176,17 +4176,7 @@ class IndentResolver { let originalControllingLayer = options.controllingLayer; - let comparisonRow = options.comparisonRow; - if (comparisonRow === undefined) { - comparisonRow = row - 1; - if (options.skipBlankLines) { - // It usually makes no sense to compare to a blank row, so we'll move - // upward until we find a line with text on it. - while (this.buffer.isRowBlank(comparisonRow) && comparisonRow > 0) { - comparisonRow--; - } - } - } + let comparisonRow = options.comparisonRow ?? this.getComparisonRow(row, options); let existingIndent = 0; if (options.preserveLeadingWhitespace) { @@ -4817,6 +4807,7 @@ class IndentResolver { let { languageMode } = this; const line = this.buffer.lineForRow(row); const currentRowIndent = this.indentLevelForLine(line, tabLength); + let comparisonRow = options.comparisonRow ?? this.getComparisonRow(row, options); // If the row is not indented at all, we have nothing to do, because we can // only dedent a line at this phase. @@ -4912,6 +4903,12 @@ class IndentResolver { if (node.startPosition.row !== row) { continue; } // Ignore captures that fail their scope tests. if (!scopeResolver.store(indent)) { continue; } + let passed = this.applyTests(indent, { + currentRow: row, + comparisonRow, + tabLength + }); + if (!passed) return; let force = this.getProperty(indent, 'force', 'boolean', false); @@ -4962,6 +4959,18 @@ class IndentResolver { return currentRowIndent; } + getComparisonRow(row, { skipBlankLines = true } = {}) { + let comparisonRow = row - 1; + if (skipBlankLines) { + // It usually makes no sense to compare to a blank row, so we'll move + // upward until we find a line with text on it. + while (this.buffer.isRowBlank(comparisonRow) && comparisonRow > 0) { + comparisonRow--; + } + } + return comparisonRow; + } + indentLevelForLine(line, tabLength) { let indentLength = 0; for (let i = 0, { length } = line; i < length; i++) { @@ -4990,7 +4999,9 @@ class IndentResolver { return undefined; } + // `indent.match` used to be called `indent.matchIndentOf`. let matchIndentOf = this.getProperty(capture, ['match', 'matchIndentOf'], 'string', null); + // `indent.offset` used to be called `indent.offsetIndent`. let offsetIndent = this.getProperty(capture, ['offset', 'offsetIndent'], 'number', 0); if (!matchIndentOf) return undefined; @@ -5012,6 +5023,13 @@ class IndentResolver { return Math.max(result, 0); } + // Look up an `indent.` capture property applied with a `#set!` directive, + // optionally coercing to a specified type or falling back to a default + // value. + // + // `names` can be an array in cases where the property may have several + // aliases. The first one that exists will be returned. (Omit the leading + // `indent.` when passing property names.) getProperty(capture, names, coercion = null, fallback = null) { if (typeof names === 'string') { names = [names]; @@ -5019,9 +5037,7 @@ class IndentResolver { for (let name of names) { let fullName = `indent.${name}`; let { setProperties: props = {} } = capture; - if (!(fullName in props)) { - continue; - } + if (!(fullName in props)) { continue; } return this.coerce(props[fullName], coercion) ?? fallback; } return fallback; @@ -5029,14 +5045,17 @@ class IndentResolver { coerce(value, coercion) { switch (coercion) { + case String: case 'string': if (value == null) return ""; return value; + case Number: case 'number': { let number = Number(value); if (isNaN(number)) return null; return number; } + case Boolean: case 'boolean': if (value == null) return null; return true; @@ -5065,6 +5084,7 @@ class IndentResolver { } } + IndentResolver.TESTS = { // Returns `true` if the position descriptor's row equals that of the current // row (the row whose indentation level is being suggested). From c5f87a6f3b4f919b36da761c425cf743a6c91277 Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Fri, 23 Aug 2024 14:48:21 -0700 Subject: [PATCH 05/28] Pass `comparisonRow` for `match` capture interpretation --- src/wasm-tree-sitter-language-mode.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wasm-tree-sitter-language-mode.js b/src/wasm-tree-sitter-language-mode.js index 6d82092828..d89d021ee7 100644 --- a/src/wasm-tree-sitter-language-mode.js +++ b/src/wasm-tree-sitter-language-mode.js @@ -4929,8 +4929,8 @@ class IndentResolver { // captures. if (indent.name === 'match') { let matchIndentLevel = this.resolveMatch(indent, { - // TODO: Pass `comparisonRow`? currentRow: row, + comparisonRow, tabLength }); if (typeof matchIndentLevel === 'number') { From 3834c3fa0895bb89d5c88b8c0fd6ce5f155fd82f Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 24 Aug 2024 16:10:25 -0700 Subject: [PATCH 06/28] =?UTF-8?q?Add=20comments=20and=20make=20further=20i?= =?UTF-8?q?ndentation=20tweaks=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …including more consistent firing of the `did-suggest-indent` event. --- src/wasm-tree-sitter-language-mode.js | 314 +++++++++++++++++++------- 1 file changed, 232 insertions(+), 82 deletions(-) diff --git a/src/wasm-tree-sitter-language-mode.js b/src/wasm-tree-sitter-language-mode.js index d89d021ee7..5d2ac136f1 100644 --- a/src/wasm-tree-sitter-language-mode.js +++ b/src/wasm-tree-sitter-language-mode.js @@ -4166,6 +4166,7 @@ class IndentResolver { if (!root || !root.tree || !root.ready) { return null; } let { languageMode } = this; let options = { + skipEvent: false, skipBlankLines: true, skipDedentCheck: false, preserveLeadingWhitespace: false, @@ -4176,6 +4177,13 @@ class IndentResolver { let originalControllingLayer = options.controllingLayer; + // Indentation hinting is a two-phase process. + // + // In phase 1, we determine `row`’s starting indent considering only the + // content of the previous row. + // + // In phase 2, we consider `row`’s own content to see if any of it suggests + // an alteration from the phase 1 value. let comparisonRow = options.comparisonRow ?? this.getComparisonRow(row, options); let existingIndent = 0; @@ -4211,6 +4219,13 @@ class IndentResolver { this.buffer.lineLengthForRow(comparisonRow) ); + // Phase 1 + // ------- + // + // Find the controlling layer and perform an indentation query that starts + // at the beginning of the comparison row and ends at the beginning of the + // current row. + // Find the deepest layer that actually has an indents query. (Layers that // don't define one, such as specialized injection grammars, are telling us // they don't care about indentation. If a grammar wants to _prevent_ a @@ -4335,26 +4350,36 @@ class IndentResolver { } } + // Keep track of the range of each capture so we can filter out duplicates. let positionSet = new Set; - // Capture in two phases. The first phase covers any captures from the - // comparison row that can cause the _following_ row to be indented. + // Perform the Phase 1 capture. let indentCaptures = indentsQuery.captures( indentTree.rootNode, { row: comparisonRow, column: 0 }, { row: row, column: 0 } ); + // Keep track of the first `@indent` capture on the line. When balancing + // `@indent`s and `@dedent`s, any `@dedent`s that occur before the first + // `@indent` should be ignored. let indentCapturePosition = null; + // Three different capture styles can influence the Phase 1 output: + // the `@indent`/`@dedent` balancing… let indentDelta = 0; + // …the `@dedent.next` capture… let dedentNextDelta = 0; + // …and the `@match.next` capture, which acts as a special sort of override + // much like Phase 2’s `@match` capture. let matchNextResult = null; for (let capture of indentCaptures) { let { node, name } = capture; + // Captures that have no content are ignored by default because they + // typically are “phantom” nodes inserted by Tree-sitter as part of error + // recovery, but we'll allow them if the query file explicitly tells us + // to. let allowEmpty = this.getProperty(capture, 'allowEmpty', 'boolean', false); - - // Ignore “phantom” nodes that aren't present in the buffer. if (node.text === '' && !allowEmpty) { continue; } @@ -4363,8 +4388,17 @@ class IndentResolver { if (node.endPosition.row < comparisonRow) { continue; } if (node.startPosition.row > comparisonRow) { continue; } - // Ignore anything that fails a scope test. + // Ignore anything that fails a scope test. This applies all the tests of + // the form `(#is? test.foo)`. if (!scopeResolver.store(capture)) { continue; } + // Apply indentation-specific scope tests and skip this capture if any + // tests fail. + let passed = this.applyTests(capture, { + currentRow: row, + comparisonRow, + tabLength + }); + if (!passed) { continue; } // Only consider a given combination of capture name and buffer range // once, even if it's captured more than once in `indents.scm`. @@ -4383,13 +4417,20 @@ class IndentResolver { // content is. dedentNextDelta++; } else if (name === 'match.next') { + // `@match.next` tells us that the current row’s baseline should match + // that of a given position descriptor. matchNextResult = this.resolveMatch(capture, { currentRow: row, comparisonRow, tabLength, indentationLevels: options.indentationLevels }) ?? null; - if (matchNextResult !== null) { break; } + if (matchNextResult !== null) { + // If we succeed in resolving this value, it’ll supersede any other + // kinds of captures, so we can skip the rest of the capture + // processing. + break; + } } else if (name === 'dedent') { // `dedent` tokens don't count for anything unless they happen // after the first `indent` token. They only tell us whether an indent @@ -4417,6 +4458,8 @@ class IndentResolver { // shouldn't cancel out the indent. continue; } + // Now that we've filtered out all the `@dedent`s we should ignore, we + // can decrement `indentDelta`. indentDelta--; if (indentDelta < 0) { // In the _indent_ phase, the delta won't ever go lower than `0`. @@ -4428,6 +4471,10 @@ class IndentResolver { // So no matter how many `dedent` tokens we see on a particular line… // if the _last_ token we see is an `indent` token, then it hints // that the next line should be indented by one level. + // + // The only ways for Phase 1 to produce a baseline indent that’s + // _less_ than the comparison row’s indent are via `@dedent.next` and + // `@match.next`. indentDelta = 0; } } @@ -4447,42 +4494,45 @@ class IndentResolver { // `@dedent`s. // // If there's a genuine need to dedent the current row based solely on the - // content of the comparison row, then `@dedent.next` can be used. - // - // And if a language needs to indent more than one level from one line to - // the next, then `@match` captures can be used to specify an exact level - // of indentation relative to another specific node. If a `@match` capture - // exists, we'll catch it in the dedent captures phase, and these - // heuristics will be ignored. + // content of the comparison row, then `@dedent.next` or `@match.next` can + // be used. // indentDelta = clamp(indentDelta, 0, 1); - // Process `@dedent.next` captures as a last step; they act as a strong - // hint about the next line's indentation. + // Process `@dedent.next` captures after the `@indent`/`@dedent` balancing; + // they act as a strong hint about the next line's indentation. indentDelta -= clamp(dedentNextDelta, 0, 1); - // If we got a result from a `match.next` capture, that supersedes any - // other results. Set `indentDelta` to `0`; we'll instead use - // `matchNextResult` as the baseline to which we'll add any further deltas. + // On the other hand, if we got a result from a `@match.next` capture, that + // supersedes any other results. Set `indentDelta` to `0`; we'll instead + // use `matchNextResult` as the baseline to which we'll add any further + // deltas. if (matchNextResult !== null) { indentDelta = 0; } + // Phase 2 + // ------- + // + // Find the controlling layer and perform an indentation query that starts + // at the beginning of the current row and ends at the beginning of the + // next row. + let dedentDelta = 0; - let line = this.buffer.lineForRow(row); - let rowStartingColumn = Math.max(line.search(/\S/), 0); + let lineText = this.buffer.lineForRow(row); + let rowStartingColumn = Math.max(lineText.search(/\S/), 0); if (!options.skipDedentCheck) { scopeResolver.reset(); - // The controlling layer on the previous line gets to decide what our - // starting indent is on the current line. But it might not extend to the - // current line, so we should determine which layer is in charge of the - // second phase. + // The controlling layer on the previous line got to decide what our + // starting indent was on the current line. But it might not extend to + // the current line, so we should determine which layer is in charge of + // the second phase. // - // The comparison point we use is that of the first character on the - // line. If we start earlier than that, we might not pick up on the - // presence of an injection layer. + // The comparison point we use is that of the first non-whitespace + // character on the line. If we start earlier than that, we might not + // pick up on the presence of an injection layer. let rowStart = new Point(row, rowStartingColumn); let dedentControllingLayer = languageMode.controllingLayerAtPoint( rowStart, @@ -4515,34 +4565,45 @@ class IndentResolver { indentTree = dedentControllingLayer.getOrParseTree(); } - // The second phase covers any captures on the current line that can - // cause the current line to be indented or dedented. + // Perform the Phase 2 capture. let dedentCaptures = indentsQuery.captures( indentTree.rootNode, { row: row - 1, column: Infinity }, { row: row + 1, column: 0 } ); - let currentRowText = this.buffer.lineForRow(row); - currentRowText = currentRowText.trim(); + let currentRowText = lineText.trim(); + // We can reuse the position set we created for Phase 1. positionSet.clear(); for (let capture of dedentCaptures) { let { name, node } = capture; let { text } = node; - let force = this.getProperty(capture, 'force', 'boolean', false); + // As in Phase 1, we allow captures to opt into being recognized even + // when they're empty. let allowEmpty = this.getProperty(capture, 'allowEmpty', 'boolean', false); - - // Ignore “phantom” nodes that aren't present in the buffer. if (text === '' && !allowEmpty) { continue; } + // `(#set! indent.force)` acts more aggressively, signaling dedent even + // when the capture isn't the first content on the row. This should be + // used with care. + let force = this.getProperty(capture, 'force', 'boolean', false); + // Ignore anything that isn't actually on the row. if (node.endPosition.row < row) { continue; } if (node.startPosition.row > row) { continue; } // Ignore anything that fails a scope test. if (!scopeResolver.store(capture)) { continue; } + // Apply indentation-specific scope tests and skip this capture if any + // tests fail. + let passed = this.applyTests(capture, { + currentRow: row, + comparisonRow, + tabLength + }); + if (!passed) { continue; } // Imagine you've got: // @@ -4561,31 +4622,47 @@ class IndentResolver { // of this behavior with `(#set! indent.force true)`. if (!force && !currentRowText.startsWith(text)) { continue; } - // The '@match' capture short-circuits a lot of this logic by pointing - // us to a different node and asking us to match the indentation of - // whatever row that node starts on. + // The `@match` capture short-circuits nearly all indentation logic by + // pointing us to a different node and asking us to match the + // indentation of whatever row that node starts on. if (name === 'match') { let matchIndentLevel = this.resolveMatch( capture, { row, comparisonRow, tabLength, indentationLevels: options.indentationLevels }); if (typeof matchIndentLevel === 'number') { + // We were able to resolve the `@match` capture, so we’ll be + // returning early. scopeResolver.reset(); let finalIndent = Math.max(matchIndentLevel - existingIndent, 0); - this.emitter.emit('did-suggest-indent', { - row, - comparisonRow, - matchIndentLevel, - finalIndent - }); + if (!options.skipEvent) { + this.emitter.emit('did-suggest-indent', { + currentRow: row, + comparisonRow, + matchIndentLevel, + finalIndent, + captureMode: 'match' + }); + } return finalIndent; } } else if (name === 'none') { + // TODO: `@none` is an experiment for any situation in which the + // current line’s indent should be reset to `0`. This is obviously + // rarely needed and I can’t remember exactly what the envisioned use + // case was, but we’ll leave it in for now. scopeResolver.reset(); + if (!options.skipEvent) { + this.emitter.emit('did-suggest-indent', { + currentRow: row, + comparisonRow, + finalIndent: 0, + captureMode: 'none' + }); + } return 0; } - // Only `@dedent` or `@match` captures can change this line's - // indentation. We handled `@match` above, so we'll filter out all non- - // `@dedent`s now. + // Only the captures handled above and `@dedent` can change this line's + // indentation. So now we’ll filter out all non-`@dedent`s. if (name !== 'dedent') { continue; } // Only consider a given range once, even if it's marked with multiple @@ -4603,19 +4680,41 @@ class IndentResolver { } scopeResolver.reset(); + + // Both phases are complete, so let's put the pieces together. + + // Where are we starting from? Most of the time it's the indentation level + // of the comparison row, but a `@match.next` capture can override this. let baseline = matchNextResult !== null ? matchNextResult : comparisonRowIndent; + + // Now we add the deltas from the two phases. This will nearly always + // produce a difference of either `-1`, `0`, or `1` from `baseline`. + // + // When `@match.next` produces a baseline, `indentDelta` will always be `0` + // to signify that other Phase 1 logic was ignored altogether. let finalIndent = baseline + indentDelta + dedentDelta; - let resultIndent = Math.max(finalIndent - existingIndent, 0); - this.emitter.emit('did-suggest-indent', { - row, - comparisonRow, - comparisonRowIndent, - indentDelta, - dedentDelta, - finalIndent, - resultIndent - }); - return resultIndent; + + // Finally, we might have to adjust for the existing leading whitespace + // if `options.preserveLeadingWhitespace` is `true`. + let adjustedIndent = Math.max(finalIndent - existingIndent, 0); + + // Emit an event with all this information. This makes it possible for + // tooling to help a grammar author understand the indentation logic + // without necessarily having to step through it in a debugger. + if (!options.skipEvent) { + this.emitter.emit('did-suggest-indent', { + currentRow: row, + comparisonRow, + comparisonRowIndent, + indentDelta, + dedentDelta, + finalIndent, + adjustedIndent, + captureMode: 'normal' + }); + } + + return adjustedIndent; } // Extended: Register a callback that fires when {IndentResolver} suggests an @@ -4627,6 +4726,9 @@ class IndentResolver { // diagnose _why_ a particular indentation level is being suggested without // having to step through the logic in a debugger. // + // Nearly all exit paths for {::suggestedIndentForBufferRow} and + // {::suggestedIndentForEditedBufferRow} invoke this callback. + // // One indentation “level” consists of either (a) one tab character, or (b) // one multiple of `editor.tabLength` spaces (if `editor.softTabs` is // `true`). @@ -4634,7 +4736,19 @@ class IndentResolver { // - `callback` A {Function} that takes one parameter: // - `meta` An {Object} that consisting of _some subset_ of the following // properties: - // - `row` The {Number} of the row whose indentation was suggested. + // - `captureMode` A {String} describing one of several different modes + // which influence a capture: + // - A value of `normal` means that an indentation level was determined + // through the normal two-phase process. + // - A value of `match` means that an indentation level was determined + // when we encountered a `@match` capture. `@match` captures are + // considered in Phase 2, but use the syntax tree to override earlier + // logic and give a definitive answer on a row’s indentation level. + // - A value of `none` means that a `@none` capture was encountered in + // Phase 2. `@none` is an extremely rare capture that, when used, + // instantly signals a suggested indent level of `0`, overriding all + // other logic. + // - `currentRow` The {Number} of the row whose indentation was suggested. // (Zero-indexed, so you must add one to match the row number displayed // in the gutter.) // - `comparisonRow` The {Number} of the row that was consulted to @@ -4670,13 +4784,14 @@ class IndentResolver { // if `suggestedIndentForBufferRow` would return `5`, but the target // row already has an indent level of `3`, `finalIndent` will instead // be `2`. - // - `resultIndent` {Number} A `finalIndent`, but takes existing + // - `adjustedIndent` {Number} A `finalIndent`, but takes existing // indentation level into account if the `preserveLeadingWhitespace` // option was enabled. For instance, if `suggestedIndentForBufferRow` // would return `5`, but the target row already has an indent level of - // `3`, `resultIndent` will instead be `2`. If - // `preserveLeadingWhitespace` is not enabled, `finalIndent` and - // `resultIndent` will be identical. + // `3`, `adjustedIndent` will instead be `2`. If + // `preserveLeadingWhitespace` is `false`, `finalIndent` and + // `adjustedIndent` will be identical. + // onDidSuggestIndent(callback) { return this.emitter.on('did-suggest-indent', callback); } @@ -4893,6 +5008,7 @@ class IndentResolver { const originalRowIndent = this.suggestedIndentForBufferRow(row, tabLength, { skipBlankLines: true, skipDedentCheck: true, + skipEvent: true, tree: indentTree }); @@ -4903,6 +5019,8 @@ class IndentResolver { if (node.startPosition.row !== row) { continue; } // Ignore captures that fail their scope tests. if (!scopeResolver.store(indent)) { continue; } + // Apply indentation-specific scope tests and skip this capture if any + // tests fail. let passed = this.applyTests(indent, { currentRow: row, comparisonRow, @@ -4935,10 +5053,23 @@ class IndentResolver { }); if (typeof matchIndentLevel === 'number') { scopeResolver.reset(); + this.emitter.emit('did-suggest-indent', { + currentRow: row, + comparisonRow, + matchIndentLevel, + finalIndent: matchIndentLevel, + captureMode: 'match' + }); return matchIndentLevel; } } else if (indent.name === 'none') { scopeResolver.reset(); + this.emitter.emit('did-suggest-indent', { + currentRow: row, + comparisonRow, + finalIndent: 0, + captureMode: 'none' + }); return 0; } @@ -4952,11 +5083,16 @@ class IndentResolver { scopeResolver.reset(); - if (seenDedent) { - return Math.max(0, originalRowIndent - 1); - } + let finalIndent = seenDedent ? Math.max(0, originalRowIndent - 1) : currentRowIndent; + + this.emitter.emit('did-suggest-indent', { + currentRow: row, + comparisonRow, + finalIndent, + captureMode: 'normal' + }); - return currentRowIndent; + return finalIndent; } getComparisonRow(row, { skipBlankLines = true } = {}) { @@ -4986,28 +5122,25 @@ class IndentResolver { return indentLength / tabLength } - resolveMatch(capture, { currentRow, comparisonRow, tabLength, indentationLevels }) { + resolveMatch(capture, { currentRow, tabLength, indentationLevels }) { let { node } = capture; - let meta = { - currentRow, - comparisonRow, - tabLength, - indentationLevels - } - - if (!this.applyTests(capture, meta)) { - return undefined; - } // `indent.match` used to be called `indent.matchIndentOf`. let matchIndentOf = this.getProperty(capture, ['match', 'matchIndentOf'], 'string', null); // `indent.offset` used to be called `indent.offsetIndent`. let offsetIndent = this.getProperty(capture, ['offset', 'offsetIndent'], 'number', 0); + // A `@match` or `@match.next` capture must have an `indent.match` + // predicate. If it’s missing, the capture is invalid and we should pretend + // it wasn’t there at all. if (!matchIndentOf) return undefined; + // Turn an `indent.match` predicate into a node position. let targetPosition = resolveNodePosition(node, matchIndentOf); let targetRow = targetPosition?.row; + // If we fail to resolve the node position, it means the path described + // doesn't exist. We should behave as though this `@match` capture wasn’t + // present at all. if (typeof targetRow !== 'number' || targetRow >= currentRow) { return undefined; } @@ -5020,6 +5153,9 @@ class IndentResolver { this.buffer.lineForRow(targetRow), tabLength); let result = baseIndent + offsetIndent; + + // Because `indent.offset` can be any number, we can wind up with a + // negative number here, which is invalid. return Math.max(result, 0); } @@ -5031,12 +5167,10 @@ class IndentResolver { // aliases. The first one that exists will be returned. (Omit the leading // `indent.` when passing property names.) getProperty(capture, names, coercion = null, fallback = null) { - if (typeof names === 'string') { - names = [names]; - } + let { setProperties: props = {} } = capture; + if (typeof names === 'string') { names = [names]; } for (let name of names) { let fullName = `indent.${name}`; - let { setProperties: props = {} } = capture; if (!(fullName in props)) { continue; } return this.coerce(props[fullName], coercion) ?? fallback; } @@ -5084,10 +5218,19 @@ class IndentResolver { } } - +// Indentation queries have a small number of query tests. These can't be +// implemented as generic scope tests because they expose metadata that only +// makes sense in an indentation context. IndentResolver.TESTS = { // Returns `true` if the position descriptor's row equals that of the current // row (the row whose indentation level is being suggested). + // + // For example: + // + // (#is? indent.matchesCurrentRow startPosition) + // + // in a `@match` capture will pass if the captured node starts on the current + // row. matchesCurrentRow(node, value, { currentRow }) { let position = resolveNodePosition(node, value); if (!position) return null; @@ -5097,6 +5240,13 @@ IndentResolver.TESTS = { // Returns `true` if the position descriptor's row equals that of the // comparison row (the row used as a reference when determining the // indentation level of the current row). + // + // For example: + // + // (#is? indent.matchesComparisonRow endPosition) + // + // in a `@match` capture will pass if the captured node ends on the + // comparison row. matchesComparisonRow(node, value, { comparisonRow }) { let position = resolveNodePosition(node, value); if (!position) return null; From 50dbbd1cb7332941bde567cc047cd831091631cb Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 24 Aug 2024 16:11:10 -0700 Subject: [PATCH 07/28] =?UTF-8?q?Add=20a=20spec=20for=20`@match.next`?= =?UTF-8?q?=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …and fix a bug with the indentation reparse budget. --- spec/wasm-tree-sitter-language-mode-spec.js | 66 ++++++++++++++++----- src/wasm-tree-sitter-language-mode.js | 3 + 2 files changed, 53 insertions(+), 16 deletions(-) diff --git a/spec/wasm-tree-sitter-language-mode-spec.js b/spec/wasm-tree-sitter-language-mode-spec.js index cb1b45a197..c9205dbcfc 100644 --- a/spec/wasm-tree-sitter-language-mode-spec.js +++ b/spec/wasm-tree-sitter-language-mode-spec.js @@ -3988,7 +3988,7 @@ describe('WASMTreeSitterLanguageMode', () => { jasmine.useRealClock(); const grammar = new WASMTreeSitterGrammar(atom.grammars, jsGrammarPath, jsConfig); - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` "{" @indent "}" @dedent `); @@ -4024,7 +4024,7 @@ describe('WASMTreeSitterLanguageMode', () => { // Pretend we're in a universe where lines after comments should be // dedented. - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` (comment) @dedent.next `); @@ -4041,11 +4041,45 @@ describe('WASMTreeSitterLanguageMode', () => { ).toEqual('(1, 0)'); }); + it('allows @match.next to decrease the indent of the next line before any typing takes place', async () => { + const grammar = new WASMTreeSitterGrammar(atom.grammars, jsGrammarPath, jsConfig); + + // When the comparison row contains the end of a lexical declaration, we + // want the next line to match the indentation of whichever line _began_ + // that lexical declaration. (But for this test we'll add an offset of 1 + // so we can be sure we're not just defaulting to column 0 for some other + // reason.) + await grammar.setQueryForTest('indentsQuery', scm` + ((lexical_declaration) @match.next + (#is? indent.matchesComparisonRow endPosition) + (#set! indent.match startPosition) + (#set! indent.offset 1) + ) + `); + + const languageMode = new WASMTreeSitterLanguageMode({ grammar, buffer }); + buffer.setLanguageMode(languageMode); + await languageMode.ready; + + buffer.setText(dedent` + let foo = longMethodWithArguments(1, 2, 3, 4, 5, + 6, 7, 8); + `); + + await languageMode.atTransactionEnd(); + + editor.setCursorBufferPosition([1, 21]); + editor.insertText('\n', { autoIndentNewline: true }); + expect( + editor.getLastCursor().getBufferPosition().toString() + ).toEqual('(2, 2)'); + }); + it('resolves @match captures', async () => { jasmine.useRealClock(); const grammar = new WASMTreeSitterGrammar(atom.grammars, jsGrammarPath, jsConfig); - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` (template_string "\`" @match (#is? test.last true) @@ -4081,11 +4115,11 @@ describe('WASMTreeSitterLanguageMode', () => { jasmine.useRealClock(); const grammar = new WASMTreeSitterGrammar(atom.grammars, jsGrammarPath, jsConfig); - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` (template_string "\`" @dedent @match (#is? test.last true) - (#set! indent.matchIndentOf parent.firstChild.startPosition)) + (#set! indent.match parent.firstChild.startPosition)) `); buffer.setText(dedent` @@ -4119,7 +4153,7 @@ describe('WASMTreeSitterLanguageMode', () => { expect(editor.getUndoGroupingInterval()).toBe(300); - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` ["{"] @indent ["}"] @dedent `); @@ -4175,7 +4209,7 @@ describe('WASMTreeSitterLanguageMode', () => { expect(editor.getUndoGroupingInterval()).toBe(300); - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` ["{"] @indent ["}"] @dedent `); @@ -4232,7 +4266,7 @@ describe('WASMTreeSitterLanguageMode', () => { expect(editor.getUndoGroupingInterval()).toBe(300); - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` ["{"] @indent ["}"] @dedent `); @@ -4286,7 +4320,7 @@ describe('WASMTreeSitterLanguageMode', () => { expect(editor.getUndoGroupingInterval()).toBe(300); - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` ["{"] @indent ["}"] @dedent `); @@ -4340,7 +4374,7 @@ describe('WASMTreeSitterLanguageMode', () => { // Pretend we're in a universe where a line comment should cause the next // line to be indented, but only in a class body. - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` ["{"] @indent ["}"] @dedent ((comment) @indent @@ -4417,7 +4451,7 @@ describe('WASMTreeSitterLanguageMode', () => { // Pretend we're in a universe where a line comment should cause the next // line to be indented, but only in a class body. - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` ["{"] @indent ["}"] @dedent ((comment) @indent @@ -4464,7 +4498,7 @@ describe('WASMTreeSitterLanguageMode', () => { jasmine.useRealClock(); editor.updateAutoIndent(true); const grammar = new WASMTreeSitterGrammar(atom.grammars, jsGrammarPath, jsConfig); - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` ["{"] @indent ["}"] @dedent `); @@ -4503,7 +4537,7 @@ describe('WASMTreeSitterLanguageMode', () => { atom.config.set('whitespace.removeTrailingWhitespace', true); const grammar = new WASMTreeSitterGrammar(atom.grammars, jsGrammarPath, jsConfig); - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` ["{"] @indent ["}"] @dedent `); @@ -4549,7 +4583,7 @@ describe('WASMTreeSitterLanguageMode', () => { expect(editor.getUndoGroupingInterval()).toBe(300); - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` ["{"] @indent ["}"] @dedent `); @@ -4595,7 +4629,7 @@ describe('WASMTreeSitterLanguageMode', () => { atom.config.set('whitespace.removeTrailingWhitespace', false); const grammar = new WASMTreeSitterGrammar(atom.grammars, jsGrammarPath, jsConfig); - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` ["{"] @indent ["}"] @dedent `); @@ -4641,7 +4675,7 @@ describe('WASMTreeSitterLanguageMode', () => { expect(editor.getUndoGroupingInterval()).toBe(300); - await grammar.setQueryForTest('indentsQuery', ` + await grammar.setQueryForTest('indentsQuery', scm` ["{"] @indent ["}"] @dedent `); diff --git a/src/wasm-tree-sitter-language-mode.js b/src/wasm-tree-sitter-language-mode.js index 5d2ac136f1..9dc583a00d 100644 --- a/src/wasm-tree-sitter-language-mode.js +++ b/src/wasm-tree-sitter-language-mode.js @@ -1270,6 +1270,9 @@ class WASMTreeSitterLanguageMode { shouldUseAsyncIndent() { let result = true; if (!this.useAsyncParsing || !this.useAsyncIndent) result = false; + // If `currentTransactionReparseBudgetMs` somehow isn’t initialized yet, we + // can initialize it here for this transaction. + this.currentTransactionReparseBudgetMs ??= this.transactionReparseBudgetMs; if (this.currentTransactionReparseBudgetMs > 0) { result = false; } From 738536f686d08f30eab9af313e5abd6403fcf29d Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Mon, 26 Aug 2024 20:20:38 -0700 Subject: [PATCH 08/28] =?UTF-8?q?[language-php]=20Handle=20case-insensitiv?= =?UTF-8?q?e=20constants=20like=20`TRUE`/`FALSE`=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …as booleans. Handle `NULL` in a similar way. --- .../tree-sitter/queries/highlights.scm | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/language-php/grammars/tree-sitter/queries/highlights.scm b/packages/language-php/grammars/tree-sitter/queries/highlights.scm index 9a2584db85..b04b4db097 100644 --- a/packages/language-php/grammars/tree-sitter/queries/highlights.scm +++ b/packages/language-php/grammars/tree-sitter/queries/highlights.scm @@ -408,7 +408,11 @@ (const_declaration (const_element) @variable.other.constant.php) ((name) @constant.language.php - (#match? @constant.language.php "^__[A-Z][A-Z\d_]+__$")) + (#match? @constant.language.php "\\b(__(FILE|DIR|FUNCTION|CLASS|METHOD|LINE|NAMESPACE)__|ON|OFF|YES|NO|NL|BR|TAB)\\b") + (#set! capture.final)) + +((name) @constant.language.php + (#match? @constant.language.php "^__[A-Z][A-Z\d_]+__$")) (argument name: (_) @variable.other.named-argument.php @@ -489,8 +493,34 @@ ; ========= (boolean) @constant.language.boolean._TEXT_.php + +; In PHP, `true` is technically no different from `TRUE` or `True`; they appear +; to be implemented as case-insensitive language constants. `tree-sitter-php` +; treats `true` as a `boolean` node, but `TRUE` and `True` as `name` nodes. +; +; This is silly — but, as usual, the origin of the silliness is PHP. +; +; `#match?` is case-sensitive and there's no way to opt out of that. At some +; point in the future, we might be able to fix that by defining a custom +; predicate for case-insensitive `#match?`; for now we'll just write a silly +; regex. + +((name) @constant.language.boolean.true.php + (#match? @constant.language.boolean.true.php "^[Tt][Rr][Uu][Ee]$") + (#set! capture.final)) + +((name) @constant.language.boolean.false.php + (#match? @constant.language.boolean.false.php "^[Ff][Aa][Ll][Ss][Ee]$") + (#set! capture.final)) + (null) @constant.language.null.php +; Likewise, `null` is a case-insensitive constant. `NULL` and `null` are common; +; others are less common, but we might as well cover them. +((name) @constant.language.null.php + (#match? @constant.language.null.php "^[Nn][Uu][Ll][Ll]") + (#set! capture.final)) + (integer) @constant.numeric.decimal.integer.php (float) @constant.numeric.decimal.float.php From 02f1563bd9e02b889e6f648faa0053622195e374 Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Mon, 26 Aug 2024 20:21:15 -0700 Subject: [PATCH 09/28] Fail `(starts|ends)OnSameRowAs` when the node position descriptor fails --- src/scope-resolver.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/scope-resolver.js b/src/scope-resolver.js index 8e8df72fae..3bbc56095d 100644 --- a/src/scope-resolver.js +++ b/src/scope-resolver.js @@ -803,6 +803,7 @@ ScopeResolver.TESTS = { // position. Accepts a node position descriptor. startsOnSameRowAs(node, descriptor) { let otherNodePosition = resolveNodePosition(node, descriptor); + if (!otherNodePosition) return false return otherNodePosition.row === node.startPosition.row; }, @@ -810,6 +811,7 @@ ScopeResolver.TESTS = { // position. Accepts a node position descriptor. endsOnSameRowAs(node, descriptor) { let otherNodePosition = resolveNodePosition(node, descriptor); + if (!otherNodePosition) return false return otherNodePosition.row === node.endPosition.row; }, From 9db65c036942dc01c03f775ad5633faf12271621 Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Mon, 26 Aug 2024 20:23:47 -0700 Subject: [PATCH 10/28] [language-java] Fix the scope on `foo` in `foo.bar()` --- .../language-java/grammars/tree-sitter-java/highlights.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/language-java/grammars/tree-sitter-java/highlights.scm b/packages/language-java/grammars/tree-sitter-java/highlights.scm index 86a06a56a2..e1a61d011e 100644 --- a/packages/language-java/grammars/tree-sitter-java/highlights.scm +++ b/packages/language-java/grammars/tree-sitter-java/highlights.scm @@ -177,7 +177,10 @@ (throws "throws" @storage.modifier.throws.java) -(method_invocation (identifier) +(method_invocation object: (identifier) + @support.other.object.java) + +(method_invocation name: (identifier) @support.other.function.java) (field_access (identifier) @constant.other.java From 26be87490cbabd1aacbfcd1ae64c7a7b7c6f0dca Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Wed, 4 Sep 2024 16:44:00 -0700 Subject: [PATCH 11/28] [language-typescript] Scope `!` in variable declarators --- packages/language-typescript/grammars/common/highlights.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/language-typescript/grammars/common/highlights.scm b/packages/language-typescript/grammars/common/highlights.scm index f0e72d1d69..a3276670b8 100644 --- a/packages/language-typescript/grammars/common/highlights.scm +++ b/packages/language-typescript/grammars/common/highlights.scm @@ -845,6 +845,7 @@ ["&" "|" "<<" ">>" ">>>" "~" "^"] @keyword.operator.bitwise.js (non_null_expression "!" @keyword.operator.non-null._LANG_) +(variable_declarator "!" @keyword.operator.non-null._LANG_) (unary_expression "!" @keyword.operator.unary._LANG_) [ From 87a9322415bcf6e62df5967efcbb56afca15c642 Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 7 Sep 2024 16:48:03 -0700 Subject: [PATCH 12/28] =?UTF-8?q?Upgrade=20`web-tree-sitter`=20to=200.23.0?= =?UTF-8?q?=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …and update our API usages. Tree-sitter harmonized the API differences between `web-tree-sitter` and `node-tree-sitter` in version 0.22.0. This is the first time we’ve had to deal with that. Luckily, the changes were mostly palatable. The biggest API difference is in `Query#captures`; two positional arguments for defining the extent of the query have been moved to keyword arguments. We’ve updated our internal usages, but any community packages that relied on the old function signature would break if we didn’t do anything about it. So we’ve wrapped the `Query#captures` method in one of our own; it detects usages that expect the old signature and rearranges their arguments, issuing a deprecation warning in the process. Hopefully this generates enough noise that any such packages understand what’s going on and can update. Other API changes are more obscure — which is good, because we can’t wrap them the way we wrapped `Query#captures`. They involve conversion of functions to getters (`node.hasErrors` instead of `node.hasErrors()`), and there’s no good way to make both usages work… short of wrapping nodes in `Proxy` objects, and that’s not on the table. Since lots has changed in `tree-sitter` since we last upgraded `web-tree-sitter`, I updated our documentation about building a custom version of `web-tree-sitter`. --- .../lib/tree-sitter-provider.js | 3 +- spec/scope-resolver-spec.js | 6 +- src/scope-resolver.js | 2 +- src/wasm-tree-sitter-grammar.js | 67 + src/wasm-tree-sitter-language-mode.js | 89 +- vendor/web-tree-sitter/README.md | 57 +- vendor/web-tree-sitter/tree-sitter.js | 6484 +++++++++-------- vendor/web-tree-sitter/tree-sitter.wasm | Bin 191204 -> 190087 bytes 8 files changed, 3430 insertions(+), 3278 deletions(-) diff --git a/packages/symbol-provider-tree-sitter/lib/tree-sitter-provider.js b/packages/symbol-provider-tree-sitter/lib/tree-sitter-provider.js index eba6d9d58f..b3cf51db84 100644 --- a/packages/symbol-provider-tree-sitter/lib/tree-sitter-provider.js +++ b/packages/symbol-provider-tree-sitter/lib/tree-sitter-provider.js @@ -77,8 +77,7 @@ class TreeSitterProvider { let tagsQuery = layer.queries?.tagsQuery ?? layer.tagsQuery; let captures = tagsQuery.captures( layer.tree.rootNode, - extent.start, - extent.end + { startPosition: extent.start, endPosition: extent.end } ); results.push( diff --git a/spec/scope-resolver-spec.js b/spec/scope-resolver-spec.js index 0aee61c607..fdacce042e 100644 --- a/spec/scope-resolver-spec.js +++ b/spec/scope-resolver-spec.js @@ -38,7 +38,7 @@ async function getAllCapturesWithScopeResolver(grammar, languageMode, scopeResol let { start, end } = languageMode.buffer.getRange(); let { tree } = layer; return { - captures: query.captures(tree.rootNode, start, end), + captures: query.captures(tree.rootNode, { startPosition: start, endPosition: end }), scopeResolver }; } @@ -142,7 +142,7 @@ describe('ScopeResolver', () => { let tokens = []; const original = grammar.idForScope.bind(grammar); - grammar.idForScope = function(scope, text) { + grammar.idForScope = function (scope, text) { if (text) { tokens.push(text); } @@ -972,7 +972,7 @@ describe('ScopeResolver', () => { expect(matched.length).toBe(1); expect(matched.every(cap => { - return cap.name === 'messed-up-statement-block' && cap.node.hasError(); + return cap.name === 'messed-up-statement-block' && cap.node.hasError; })).toBe(true); }); diff --git a/src/scope-resolver.js b/src/scope-resolver.js index 3bbc56095d..8f6eb8c379 100644 --- a/src/scope-resolver.js +++ b/src/scope-resolver.js @@ -641,7 +641,7 @@ ScopeResolver.TESTS = { // Passes only if the node contains any descendant ERROR nodes. hasError(node) { - return node.hasError(); + return node.hasError; }, // Passes when the node's tree belongs to an injection layer, rather than the diff --git a/src/wasm-tree-sitter-grammar.js b/src/wasm-tree-sitter-grammar.js index 55bbb22cb2..7753fdf4f1 100644 --- a/src/wasm-tree-sitter-grammar.js +++ b/src/wasm-tree-sitter-grammar.js @@ -1,5 +1,7 @@ const fs = require('fs'); const path = require('path'); +const Grim = require('grim'); +const dedent = require('dedent'); const Parser = require('./web-tree-sitter'); const { CompositeDisposable, Emitter } = require('event-kit'); const { File } = require('pathwatcher'); @@ -7,6 +9,62 @@ const { normalizeDelimiters } = require('./comment-utils.js'); const parserInitPromise = Parser.init(); +function isPosition(obj) { + return ('row' in obj && 'column' in obj); +} + +const ZERO_POINT = Object.freeze({ row: 0, column: 0 }); + +const QUERY_CAPTURES_DEPRECATION_EXPLANATION = dedent`\ + The \`captures\` method available on Tree-sitter query objects uses a new + function signature; the old signature is deprecated. The new signature is + \`(node, options)\`. If you want to limit a query to a specific range, + specify \`startPosition\` and \`endPosition\` properties within \`options\`. +`; + +let didWrapQueryCaptures = false; + +// When `web-tree-sitter` harmonized its API with that of `node-tree-sitter`, +// some function signatures changed. The most impactful one for us is probably +// `Query#captures`, since two crucial positional arguments were moved into a +// trailing options argument. +// +// We've changed all of our usages, but it's possible some community packages +// won't have been able to update yet. We should emit a deprecation message in +// those cases and restructure the arguments on the fly. +function wrapQueryCaptures(query) { + didWrapQueryCaptures = true; + let QueryPrototype = Object.getPrototypeOf(query); + let originalCaptures = QueryPrototype.captures; + // We put `node` into its own argument so that this new function’s `length` + // property matches that of the old function. (Both are inaccurate, but they + // should nonetheless agree.) + QueryPrototype.captures = function captures(node, ...args) { + // When do we think a consumer is using the old signature? + if ( + // If there are too many arguments and either the second or third + // argument looks like a position… + args.length >= 2 && (isPosition(args[0]) || isPosition(args[1])) || + // …or if the second argument looks like a position instead of an options + // object. + isPosition(args[0]) + ) { + Grim.deprecate(QUERY_CAPTURES_DEPRECATION_EXPLANATION); + let startPosition = isPosition(args[0]) ? args[0] : ZERO_POINT; + let endPosition = isPosition(args[1]) ? args[1] : args[0]; + let originalOptions = args[2] ?? {}; + let newOptions = { + ...originalOptions, + startPosition, + endPosition + }; + return originalCaptures.call(this, node, newOptions); + } else { + return originalCaptures.call(this, node, ...args); + } + }; +} + // Extended: This class holds an instance of a Tree-sitter grammar. module.exports = class WASMTreeSitterGrammar { constructor(registry, grammarPath, params) { @@ -274,6 +332,15 @@ module.exports = class WASMTreeSitterGrammar { // if (inDevMode) { console.time(timeTag); } query = language.query(this[queryType]); + // We want to augment the `Query` class to add backward compatibility + // for the `captures` method. But since `web-tree-sitter` doesn’t + // export references to these inner Tree-sitter classes, we have to + // wait until we’re holding an instance of a `Query` and grab its + // prototype. Luckily, we still only have to do this once. + if (!didWrapQueryCaptures) { + wrapQueryCaptures(query); + } + // if (inDevMode) { console.timeEnd(timeTag); } this.queryCache.set(queryType, query); resolve(query); diff --git a/src/wasm-tree-sitter-language-mode.js b/src/wasm-tree-sitter-language-mode.js index 9dc583a00d..23fd98cb7f 100644 --- a/src/wasm-tree-sitter-language-mode.js +++ b/src/wasm-tree-sitter-language-mode.js @@ -12,6 +12,8 @@ const { commentStringsFromDelimiters, getDelimitersForScope } = require('./comme const createTree = require('./rb-tree'); +const ONE_CHAR_FORWARD_TRAVERSAL = Object.freeze(Point(0, 1)); + const FEATURE_ASYNC_INDENT = true; const FEATURE_ASYNC_PARSE = true; @@ -83,7 +85,7 @@ function resolveNodePosition(node, descriptor) { return result[lastPart]; } -// Patch tree-sitter syntax nodes the same way `TreeSitterLanguageMode` did so +// Patch Tree-sitter syntax nodes the same way `TreeSitterLanguageMode` did so // that we don't break anything that relied on `range` being present. function ensureNodeIsPatched(node) { let done = node.range && node.range instanceof Range; @@ -108,7 +110,7 @@ function ensureNodeIsPatched(node) { }); } -// Compares “informal” points like the ones in a tree-sitter tree; saves us +// Compares “informal” points like the ones in a Tree-sitter tree; saves us // from having to convert them to actual `Point`s. function comparePoints(a, b) { const rows = a.row - b.row; @@ -429,7 +431,7 @@ class WASMTreeSitterLanguageMode { return true; } - // Resolves the next time that all tree-sitter trees are clean — or + // Resolves the next time that all Tree-sitter trees are clean — or // immediately, if they're clean at the time of invocation. // // Resolves with metadata about the previous transaction that may be useful @@ -461,7 +463,7 @@ class WASMTreeSitterLanguageMode { } // Alias for `atTransactionEnd` for packages that used the implementation - // details of the legacy tree-sitter system. + // details of the legacy Tree-sitter system. parseCompletePromise() { return this.atTransactionEnd(); } @@ -535,7 +537,7 @@ class WASMTreeSitterLanguageMode { } // Behaves like `scopeDescriptorForPosition`, but returns a list of - // tree-sitter node names. Useful for understanding tree-sitter parsing or + // Tree-sitter node names. Useful for understanding Tree-sitter parsing or // for writing syntax highlighting query files. syntaxTreeScopeDescriptorForPosition(point) { point = this.normalizePointForPositionQuery(point); @@ -573,7 +575,7 @@ class WASMTreeSitterLanguageMode { ); let scopes = matches.map(({ node }) => ( - node.isNamed() ? node.type : `"${node.type}"` + node.isNamed ? node.type : `"${node.type}"` )); scopes.unshift(this.grammar.scopeName); @@ -1689,7 +1691,10 @@ class FoldResolver { // boundary ends at the same point that another one starts, the ending // boundary will be visited first. let boundaries = createTree(compareBoundaries); - let captures = this.layer.queries.foldsQuery.captures(rootNode, start, end); + let captures = this.layer.queries.foldsQuery.captures( + rootNode, + { startPosition: start, endPosition: end } + ); for (let capture of captures) { // NOTE: Currently, the first fold to match for a given starting position @@ -2021,7 +2026,7 @@ class HighlightIterator { // let [result, openScopes] = iterator.seek(start, endRow); - if (rootLanguageLayer?.tree?.rootNode.hasChanges()) { + if (rootLanguageLayer?.tree?.rootNode.hasChanges) { // The tree is dirty. We should keep going — if we stop now, then the // user will see a flash of unhighlighted text over this whole range. But // we should also schedule a re-highlight at the end of the transaction, @@ -2655,7 +2660,7 @@ class LanguageLayer { isDirty() { if (!this.tree) { return false; } - return this.tree.rootNode.hasChanges(); + return this.tree.rootNode.hasChanges; } inspect() { @@ -2667,7 +2672,7 @@ class LanguageLayer { if (this.destroyed) { return; } this.destroyed = true; - // Clean up all tree-sitter trees. + // Clean up all Tree-sitter trees. let temporaryTrees = this.temporaryTrees ?? []; let trees = new Set([this.tree, this.lastSyntaxTree, ...temporaryTrees]); trees = [...trees]; @@ -2751,7 +2756,10 @@ class LanguageLayer { let boundaries = createTree(compareBoundaries); let extent = this.getExtent(); - let captures = this.queries.highlightsQuery?.captures(this.tree.rootNode, from, to) ?? []; + let captures = this.queries.highlightsQuery?.captures( + this.tree.rootNode, + { startPosition: from, endPosition: to } + ) ?? []; this.scopeResolver.reset(); for (let capture of captures) { @@ -3003,7 +3011,7 @@ class LanguageLayer { if (!this.languageMode.useAsyncParsing) { // Practically speaking, updates that affect _only this layer_ will happen // synchronously, because we've made sure not to call this method until the - // root grammar's tree-sitter parser has been loaded. But we can't load any + // root grammar's Tree-sitter parser has been loaded. But we can't load any // potential injection layers' languages because we don't know which ones // we'll need _until_ we parse this layer's tree for the first time. // @@ -3029,7 +3037,7 @@ class LanguageLayer { await this.currentParsePromise; } while ( !this.destroyed && - (!this.tree || this.tree.rootNode.hasChanges()) + (!this.tree || this.tree.rootNode.hasChanges) ); this.currentParsePromise = null; @@ -3046,8 +3054,10 @@ class LanguageLayer { if (!this.queries.localsQuery) { return []; } let captures = this.queries.localsQuery.captures( this.tree.rootNode, - point, - point + 1 + { + startPosition: point, + endPosition: point.translate(ONE_CHAR_FORWARD_TRAVERSAL) + } ); captures = captures.filter(cap => { @@ -3074,11 +3084,11 @@ class LanguageLayer { let globalScope = this.tree.rootNode; if (!captures) { + let { startPosition, endPosition } = globalScope; captures = this.groupLocalsCaptures( this.queries.localsQuery.captures( globalScope, - globalScope.startPosition, - globalScope.endPosition + { startPosition, endPosition } ) ); } @@ -3382,7 +3392,7 @@ class LanguageLayer { // transaction's tree later on. this.lastSyntaxTree = tree; - // Like legacy tree-sitter, we're patching syntax nodes so that they have + // Like legacy Tree-sitter, we're patching syntax nodes so that they have // a `range` property that returns a `Range`. We're doing this for // compatibility, but we can't get a reference to the node class itself; // we have to wait until we have an instance and grab the prototype from @@ -3568,8 +3578,10 @@ class LanguageLayer { // the character in column X. let captures = this.queries.highlightsQuery?.captures( this.tree.rootNode, - point, - { row: point.row, column: point.column + 1 } + { + startPosition: point, + endPosition: point.translate(ONE_CHAR_FORWARD_TRAVERSAL) + } ) ?? []; let results = []; @@ -4063,16 +4075,19 @@ class OpenScopeMap extends Map { } removeLastOccurrenceOf(scopeId) { - let keys = [...this.keys()]; - keys.reverse(); - for (let key of keys) { + let candidateKey; + // Of the keys whose values include this scope, find the one that occurs + // latest in the document. + for (let key of this.keys()) { let value = this.get(key); - if (value.includes(scopeId)) { - removeLastOccurrenceOf(value, scopeId); - return true; + if (!value.includes(scopeId)) continue; + if (!candidateKey || comparePoints(key, candidateKey) === 1) { + candidateKey = key; } } - return false; + if (!candidateKey) return false; + removeLastOccurrenceOf(this.get(candidateKey), scopeId); + return true; } } @@ -4098,7 +4113,7 @@ class Index extends Map { // intersections with range already in the list, those intersections are // combined into one larger range. // -// Assumes all ranges are instances of `Range` rather than tree-sitter range +// Assumes all ranges are instances of `Range` rather than Tree-sitter range // specs. class RangeList { constructor() { @@ -4359,8 +4374,10 @@ class IndentResolver { // Perform the Phase 1 capture. let indentCaptures = indentsQuery.captures( indentTree.rootNode, - { row: comparisonRow, column: 0 }, - { row: row, column: 0 } + { + startPosition: { row: comparisonRow, column: 0 }, + endPosition: { row: row, column: 0 } + } ); // Keep track of the first `@indent` capture on the line. When balancing @@ -4571,8 +4588,10 @@ class IndentResolver { // Perform the Phase 2 capture. let dedentCaptures = indentsQuery.captures( indentTree.rootNode, - { row: row - 1, column: Infinity }, - { row: row + 1, column: 0 } + { + startPosition: { row: row - 1, column: Infinity }, + endPosition: { row: row + 1, column: 0 } + } ); let currentRowText = lineText.trim(); @@ -4994,8 +5013,10 @@ class IndentResolver { const indents = indentsQuery.captures( indentTree.rootNode, - { row: row - 1, column: Infinity }, - { row: row + 1, column: 0 } + { + startPosition: { row: row - 1, column: Infinity }, + endPosition: { row: row + 1, column: 0 } + } ); let lineText = this.buffer.lineForRow(row).trim(); diff --git a/vendor/web-tree-sitter/README.md b/vendor/web-tree-sitter/README.md index 93ad77292d..03b0a54cea 100644 --- a/vendor/web-tree-sitter/README.md +++ b/vendor/web-tree-sitter/README.md @@ -1,64 +1,57 @@ # Building a custom web-tree-sitter -Tree-sitter parsers often use external C scanners, and those scanners sometimes use functions in the C standard library. For this to work in a WASM environment, web-tree-sitter needs to have anticipated which stdlib functions will need to be available. If a tree-sitter parser uses stdlib function X, but X is not included in [this list of exports](https://github.com/tree-sitter/tree-sitter/blob/master/lib/binding_web/exports.json), the parser will fail to work and will throw an error whenever it hits a code path that uses the rogue function. +Tree-sitter parsers often use external C scanners, and those scanners sometimes use functions in the C standard library. For this to work in a WASM environment, `web-tree-sitter` needs to have anticipated which stdlib functions will need to be available. If a Tree-sitter parser uses stdlib function X, but X is not included in [this list of symbols](https://github.com/tree-sitter/tree-sitter/blob/master/lib/src/wasm/stdlib-symbols.txt), the parser will fail to work and will throw an error whenever it hits a code path that uses the rogue function. -For this reason, Pulsar builds a custom web-tree-sitter. Every time someone tries to integrate a new tree-sitter parser into a Pulsar grammar, they might find that the parser relies on some stdlib function we haven’t included yet — in which case they can let us know and we’ll be able to update our web-tree-sitter build so that it can export that function. +For this reason, Pulsar builds a custom `web-tree-sitter`. Every time someone tries to integrate a new tree-sitter parser into a Pulsar grammar, they might find that the parser relies on some stdlib function we haven’t included yet — in which case they can let us know and we’ll be able to update our `web-tree-sitter` build so that it can export that function. -Pulsar will need to do this until [tree-sitter#949](https://github.com/tree-sitter/tree-sitter/issues/949) is addressed in some way. +The need to do this will decrease over time as C++ scanners are deprecated and as parsers are increasingly encouraged to use a fixed subset of possible stdlib exports, but it’s still necessary right now. + +We also take advantage of the custom build by adding a check for a common failure scenario — a parser trying to use a stdlib function that _hasn’t_ been exported — so that we can log a helpful error message to the console when it happens. ## Check out the modified branch for the version we’re targeting -At time of writing, Pulsar was targeting web-tree-sitter version 0.20.7, so a branch exists [on our fork](https://github.com/pulsar-edit/tree-sitter/tree/v0-20-7-modified) called `v0-20-7-modified`. That branch contains a modified `exports.json` file and a modified script for building web-tree-sitter. +At time of writing, Pulsar was targeting `web-tree-sitter` version **0.23.0**, so a branch exists [on our fork](https://github.com/pulsar-edit/tree-sitter/tree/v0-23-0-modified) called `v0-23-0-modified`. That branch contains a modified `stdlib-symbols.txt` file and a modified script for building `web-tree-sitter`. -When we target a newer version of web-tree-sitter, a similar branch should be created against the corresponding upstream tag. The commits that were applied on the previous modified branch should be able to be cherry-picked onto the new one rather easily. +When we target a newer version of `web-tree-sitter`, a similar branch should be created against the corresponding upstream tag. The commits that were applied on the previous modified branch should be able to be cherry-picked onto the new one rather easily. -## Add whatever methods are needed to `exports.json` +## Add whatever methods are needed to `stdlib-symbols.txt` -For instance, tree-sitter-ruby introduced a new dependency on the C stdlib function `iswupper` a while back, and web-tree-sitter doesn’t export that one by default. So we can add the line +For instance, one of the parsers we use depends on the C stdlib function `isalnum`, and `web-tree-sitter` doesn’t export that one by default. So we can add the line ``` - "_iswupper", + "isalnum", ``` -in an appropriate place in `exports.json`, then rebuild web-tree-sitter so that the WASM-built version of the tree-sitter-ruby parser has that function available to it. +in an appropriate place in `stdlib-symbols.txt`, then rebuild `web-tree-sitter` so that the WASM-built version of that parser has that function available to it. -If a third-party tree-sitter grammar needs something more esoteric, our default position should be to add it to the build. If the export results in a major change in file size or — somehow — performance, then the change can be discussed. +If a third-party tree-sitter grammar needs something more esoteric, we should encourage them to follow current best practices for Tree-sitter parsers. But we may still want to add that dependency to the build. ## Run `script/build-wasm` from the root -To build web-tree-sitter for a particular version, make sure you’re using the appropriate version of Emscripten. [This document](https://github.com/sogaiu/ts-questions/blob/master/questions/which-version-of-emscripten-should-be-used-for-the-playground/README.md) is useful at matching up tree-sitter versions with Emscripten versions. - -The default `build-wasm` script performs minification with terser. That’s easy enough to turn off — and we do — but even without minifcation, emscripten generates a JS file that doesn’t have line breaks or indentation. We fix this by running `js-beautify` as a final step. +To build `web-tree-sitter` for a particular version, make sure you’re using the appropriate version of Emscripten. [This document](https://github.com/sogaiu/ts-questions/blob/master/questions/which-version-of-emscripten-should-be-used-for-the-playground/README.md) is useful at matching up tree-sitter versions with Emscripten versions. -Pulsar, as a desktop app, doesn’t gain a _lot_ from minification, and ultimately it’s better to have a source file that the user can more easily debug if necessary. And it makes the next change a bit easier: +The default `build-wasm` script now skips minification, so we no longer have to un-minify the JavaScript output. ## Add a warning message -When a parser tries to use a stdlib function that isn’t exported by web-tree-sitter, the error that’s thrown is not very useful. So we try to detect when that scenario is going to happen and insert a warning in the console to help users that might otherwise be befuddled. +When a parser tries to use a stdlib function that isn’t exported by `web-tree-sitter`, the error that’s thrown is not very useful. So we try to detect when that scenario is going to happen and insert a warning in the console to help users that might otherwise be befuddled. This may be automated in the future, but for now you can modify `tree-sitter.js` to include the `checkForAsmVersion` function: ```js -var Module = typeof Module !== "undefined" ? Module : {}; -var TreeSitter = function() { +var Module = typeof Module != "undefined" ? Module : {}; - function checkForAsmVersion(prop) { - if (!(prop in Module['asm'])) { - console.warn(`Warning: parser wants to call function ${prop}, but it is not defined. If parsing fails, this is probably the reason why. Please report this to the Pulsar team so that this parser can be supported properly.`); - } +function checkForAsmVersion(prop) { + if (!(prop in Module['asm'])) { + console.warn(`Warning: parser wants to call function ${prop}, but it is not defined. If parsing fails, this is probably the reason why. Please report this to the Pulsar team so that this parser can be supported properly.`); } - - var initPromise; - var document = typeof window == "object" ? { - currentScript: window.document.currentScript - } : null; - +} ``` You can then search for this line ```js -if (!resolved) resolved = resolveSymbol(prop, true); +resolved ||= resolveSymbol(prop); ``` and add the following line right below it: @@ -67,8 +60,14 @@ and add the following line right below it: checkForAsmVersion(prop); ``` -The line in question is [generated by emscripten](https://github.com/emscripten-core/emscripten/blob/67ebee3261629f7e3c2bd24b61098af0c730d8d9/src/library_dylink.js#L699), so if it changes in the future, you should be able to look up its equivalent in the correct version of emscripten. +The line in question is [generated by emscripten](https://github.com/emscripten-core/emscripten/blob/127fb03dad7288a71f51bd46be49f1da8bdb0fa8/src/library_dylink.js#L716), so if it changes in the future, you should be able to look up its equivalent in the correct version of emscripten. ## Copy it to `vendor` Under `lib/binding_web` you’ll find the built files `tree-sitter.js` and `tree-sitter.wasm`. Copy both to Pulsar’s `vendor/tree-sitter` directory. Relaunch Pulsar and do a smoke test with a couple of existing grammars to make sure you didn’t break anything. + +## Commit it + +Be sure to mention the version you’re upgrading to **in the commit message** so grammar authors have some way of discerning the version of `web-tree-sitter` they should target. + +(It’s a stretch goal to include this information in a more structured format so that it can be inspected at runtime.) diff --git a/vendor/web-tree-sitter/tree-sitter.js b/vendor/web-tree-sitter/tree-sitter.js index 5758ed51a3..f9181ba1b1 100644 --- a/vendor/web-tree-sitter/tree-sitter.js +++ b/vendor/web-tree-sitter/tree-sitter.js @@ -1,3223 +1,3289 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. var Module = typeof Module != "undefined" ? Module : {}; -var TreeSitter = function() { - function checkForAsmVersion(prop) { - if (!(prop in Module['asm'])) { - console.warn(`Warning: parser wants to call function ${prop}, but it is not defined. If parsing fails, this is probably the reason why. Please report this to the Pulsar team so that this parser can be supported properly.`); - } - } - var initPromise; - var document = typeof window == "object" ? { - currentScript: window.document.currentScript - } : null; - class Parser { - constructor() { - this.initialize() - } - initialize() { - throw new Error("cannot construct a Parser before calling `init()`") - } - static init(moduleOptions) { - if (initPromise) return initPromise; - Module = Object.assign({}, Module, moduleOptions); - return initPromise = new Promise(resolveInitPromise => { - var moduleOverrides = Object.assign({}, Module); - var arguments_ = []; - var thisProgram = "./this.program"; - var quit_ = (status, toThrow) => { - throw toThrow - }; - var ENVIRONMENT_IS_WEB = typeof window == "object"; - var ENVIRONMENT_IS_WORKER = typeof importScripts == "function"; - var ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string"; - var scriptDirectory = ""; - - function locateFile(path) { - if (Module["locateFile"]) { - return Module["locateFile"](path, scriptDirectory) - } - return scriptDirectory + path - } - var read_, readAsync, readBinary, setWindowTitle; - if (ENVIRONMENT_IS_NODE) { - var fs = require("fs"); - var nodePath = require("path"); - if (ENVIRONMENT_IS_WORKER) { - scriptDirectory = nodePath.dirname(scriptDirectory) + "/" - } else { - scriptDirectory = __dirname + "/" - } - read_ = (filename, binary) => { - filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); - return fs.readFileSync(filename, binary ? undefined : "utf8") - }; - readBinary = filename => { - var ret = read_(filename, true); - if (!ret.buffer) { - ret = new Uint8Array(ret) - } - return ret - }; - readAsync = (filename, onload, onerror, binary = true) => { - filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); - fs.readFile(filename, binary ? undefined : "utf8", (err, data) => { - if (err) onerror(err); - else onload(binary ? data.buffer : data) - }) - }; - if (!Module["thisProgram"] && process.argv.length > 1) { - thisProgram = process.argv[1].replace(/\\/g, "/") - } - arguments_ = process.argv.slice(2); - if (typeof module != "undefined") { - module["exports"] = Module - } - quit_ = (status, toThrow) => { - process.exitCode = status; - throw toThrow - }; - Module["inspect"] = () => "[Emscripten Module object]" - } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - if (ENVIRONMENT_IS_WORKER) { - scriptDirectory = self.location.href - } else if (typeof document != "undefined" && document.currentScript) { - scriptDirectory = document.currentScript.src - } - if (scriptDirectory.indexOf("blob:") !== 0) { - scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1) - } else { - scriptDirectory = "" - } { - read_ = url => { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - xhr.send(null); - return xhr.responseText - }; - if (ENVIRONMENT_IS_WORKER) { - readBinary = url => { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - xhr.responseType = "arraybuffer"; - xhr.send(null); - return new Uint8Array(xhr.response) - } - } - readAsync = (url, onload, onerror) => { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, true); - xhr.responseType = "arraybuffer"; - xhr.onload = () => { - if (xhr.status == 200 || xhr.status == 0 && xhr.response) { - onload(xhr.response); - return - } - onerror() - }; - xhr.onerror = onerror; - xhr.send(null) - } - } - setWindowTitle = title => document.title = title - } else {} - var out = Module["print"] || console.log.bind(console); - var err = Module["printErr"] || console.warn.bind(console); - Object.assign(Module, moduleOverrides); - moduleOverrides = null; - if (Module["arguments"]) arguments_ = Module["arguments"]; - if (Module["thisProgram"]) thisProgram = Module["thisProgram"]; - if (Module["quit"]) quit_ = Module["quit"]; - var dynamicLibraries = Module["dynamicLibraries"] || []; - var wasmBinary; - if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; - var noExitRuntime = Module["noExitRuntime"] || true; - if (typeof WebAssembly != "object") { - abort("no native wasm support detected") - } - var wasmMemory; - var ABORT = false; - var EXITSTATUS; - - function assert(condition, text) { - if (!condition) { - abort(text) - } - } - var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; - - function updateMemoryViews() { - var b = wasmMemory.buffer; - Module["HEAP8"] = HEAP8 = new Int8Array(b); - Module["HEAP16"] = HEAP16 = new Int16Array(b); - Module["HEAP32"] = HEAP32 = new Int32Array(b); - Module["HEAPU8"] = HEAPU8 = new Uint8Array(b); - Module["HEAPU16"] = HEAPU16 = new Uint16Array(b); - Module["HEAPU32"] = HEAPU32 = new Uint32Array(b); - Module["HEAPF32"] = HEAPF32 = new Float32Array(b); - Module["HEAPF64"] = HEAPF64 = new Float64Array(b) - } - var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 33554432; - assert(INITIAL_MEMORY >= 65536, "INITIAL_MEMORY should be larger than STACK_SIZE, was " + INITIAL_MEMORY + "! (STACK_SIZE=" + 65536 + ")"); - if (Module["wasmMemory"]) { - wasmMemory = Module["wasmMemory"] - } else { - wasmMemory = new WebAssembly.Memory({ - "initial": INITIAL_MEMORY / 65536, - "maximum": 2147483648 / 65536 - }) - } - updateMemoryViews(); - INITIAL_MEMORY = wasmMemory.buffer.byteLength; - var wasmTable = new WebAssembly.Table({ - "initial": 25, - "element": "anyfunc" - }); - var __ATPRERUN__ = []; - var __ATINIT__ = []; - var __ATMAIN__ = []; - var __ATPOSTRUN__ = []; - var __RELOC_FUNCS__ = []; - var runtimeInitialized = false; - var runtimeKeepaliveCounter = 0; - - function keepRuntimeAlive() { - return noExitRuntime || runtimeKeepaliveCounter > 0 - } - - function preRun() { - if (Module["preRun"]) { - if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]]; - while (Module["preRun"].length) { - addOnPreRun(Module["preRun"].shift()) - } - } - callRuntimeCallbacks(__ATPRERUN__) - } - - function initRuntime() { - runtimeInitialized = true; - callRuntimeCallbacks(__RELOC_FUNCS__); - callRuntimeCallbacks(__ATINIT__) - } - - function preMain() { - callRuntimeCallbacks(__ATMAIN__) - } - - function postRun() { - if (Module["postRun"]) { - if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]]; - while (Module["postRun"].length) { - addOnPostRun(Module["postRun"].shift()) - } - } - callRuntimeCallbacks(__ATPOSTRUN__) - } - - function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb) - } - - function addOnInit(cb) { - __ATINIT__.unshift(cb) - } - - function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb) - } - var runDependencies = 0; - var runDependencyWatcher = null; - var dependenciesFulfilled = null; - - function getUniqueRunDependency(id) { - return id - } - - function addRunDependency(id) { - runDependencies++; - if (Module["monitorRunDependencies"]) { - Module["monitorRunDependencies"](runDependencies) - } - } - - function removeRunDependency(id) { - runDependencies--; - if (Module["monitorRunDependencies"]) { - Module["monitorRunDependencies"](runDependencies) - } - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback() - } - } - } - - function abort(what) { - if (Module["onAbort"]) { - Module["onAbort"](what) - } - what = "Aborted(" + what + ")"; - err(what); - ABORT = true; - EXITSTATUS = 1; - what += ". Build with -sASSERTIONS for more info."; - var e = new WebAssembly.RuntimeError(what); - throw e - } - var dataURIPrefix = "data:application/octet-stream;base64,"; - - function isDataURI(filename) { - return filename.startsWith(dataURIPrefix) - } - - function isFileURI(filename) { - return filename.startsWith("file://") - } - var wasmBinaryFile; - wasmBinaryFile = "tree-sitter.wasm"; - if (!isDataURI(wasmBinaryFile)) { - wasmBinaryFile = locateFile(wasmBinaryFile) - } - - function getBinary(file) { - try { - if (file == wasmBinaryFile && wasmBinary) { - return new Uint8Array(wasmBinary) - } - if (readBinary) { - return readBinary(file) - } - throw "both async and sync fetching of the wasm failed" - } catch (err) { - abort(err) - } - } - - function getBinaryPromise(binaryFile) { - if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { - if (typeof fetch == "function" && !isFileURI(binaryFile)) { - return fetch(binaryFile, { - credentials: "same-origin" - }).then(response => { - if (!response["ok"]) { - throw "failed to load wasm binary file at '" + binaryFile + "'" - } - return response["arrayBuffer"]() - }).catch(() => getBinary(binaryFile)) - } else { - if (readAsync) { - return new Promise((resolve, reject) => { - readAsync(binaryFile, response => resolve(new Uint8Array(response)), reject) - }) - } - } - } - return Promise.resolve().then(() => getBinary(binaryFile)) - } - - function instantiateArrayBuffer(binaryFile, imports, receiver) { - return getBinaryPromise(binaryFile).then(binary => { - return WebAssembly.instantiate(binary, imports) - }).then(instance => { - return instance - }).then(receiver, reason => { - err("failed to asynchronously prepare wasm: " + reason); - abort(reason) - }) - } - - function instantiateAsync(binary, binaryFile, imports, callback) { - if (!binary && typeof WebAssembly.instantiateStreaming == "function" && !isDataURI(binaryFile) && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE && typeof fetch == "function") { - return fetch(binaryFile, { - credentials: "same-origin" - }).then(response => { - var result = WebAssembly.instantiateStreaming(response, imports); - return result.then(callback, function(reason) { - err("wasm streaming compile failed: " + reason); - err("falling back to ArrayBuffer instantiation"); - return instantiateArrayBuffer(binaryFile, imports, callback) - }) - }) - } else { - return instantiateArrayBuffer(binaryFile, imports, callback) - } - } - - function createWasm() { - var info = { - "env": wasmImports, - "wasi_snapshot_preview1": wasmImports, - "GOT.mem": new Proxy(wasmImports, GOTHandler), - "GOT.func": new Proxy(wasmImports, GOTHandler) - }; - - function receiveInstance(instance, module) { - var exports = instance.exports; - exports = relocateExports(exports, 1024); - var metadata = getDylinkMetadata(module); - if (metadata.neededDynlibs) { - dynamicLibraries = metadata.neededDynlibs.concat(dynamicLibraries) - } - mergeLibSymbols(exports, "main"); - Module["asm"] = exports; - addOnInit(Module["asm"]["__wasm_call_ctors"]); - __RELOC_FUNCS__.push(Module["asm"]["__wasm_apply_data_relocs"]); - removeRunDependency("wasm-instantiate"); - return exports - } - addRunDependency("wasm-instantiate"); - - function receiveInstantiationResult(result) { - receiveInstance(result["instance"], result["module"]) - } - if (Module["instantiateWasm"]) { - try { - return Module["instantiateWasm"](info, receiveInstance) - } catch (e) { - err("Module.instantiateWasm callback failed with error: " + e); - return false - } - } - instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult); - return {} - } - var tempDouble; - var tempI64; - var ASM_CONSTS = {}; - - function ExitStatus(status) { - this.name = "ExitStatus"; - this.message = "Program terminated with exit(" + status + ")"; - this.status = status - } - var GOT = {}; - var currentModuleWeakSymbols = new Set([]); - var GOTHandler = { - get: function(obj, symName) { - var rtn = GOT[symName]; - if (!rtn) { - rtn = GOT[symName] = new WebAssembly.Global({ - "value": "i32", - "mutable": true - }) - } - if (!currentModuleWeakSymbols.has(symName)) { - rtn.required = true - } - return rtn - } - }; - - function callRuntimeCallbacks(callbacks) { - while (callbacks.length > 0) { - callbacks.shift()(Module) - } - } - var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : undefined; - - function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) { - var endIdx = idx + maxBytesToRead; - var endPtr = idx; - while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; - if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { - return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)) - } - var str = ""; - while (idx < endPtr) { - var u0 = heapOrArray[idx++]; - if (!(u0 & 128)) { - str += String.fromCharCode(u0); - continue - } - var u1 = heapOrArray[idx++] & 63; - if ((u0 & 224) == 192) { - str += String.fromCharCode((u0 & 31) << 6 | u1); - continue - } - var u2 = heapOrArray[idx++] & 63; - if ((u0 & 240) == 224) { - u0 = (u0 & 15) << 12 | u1 << 6 | u2 - } else { - u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63 - } - if (u0 < 65536) { - str += String.fromCharCode(u0) - } else { - var ch = u0 - 65536; - str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023) - } - } - return str - } - - function getDylinkMetadata(binary) { - var offset = 0; - var end = 0; - - function getU8() { - return binary[offset++] - } - - function getLEB() { - var ret = 0; - var mul = 1; - while (1) { - var byte = binary[offset++]; - ret += (byte & 127) * mul; - mul *= 128; - if (!(byte & 128)) break - } - return ret - } - - function getString() { - var len = getLEB(); - offset += len; - return UTF8ArrayToString(binary, offset - len, len) - } - - function failIf(condition, message) { - if (condition) throw new Error(message) - } - var name = "dylink.0"; - if (binary instanceof WebAssembly.Module) { - var dylinkSection = WebAssembly.Module.customSections(binary, name); - if (dylinkSection.length === 0) { - name = "dylink"; - dylinkSection = WebAssembly.Module.customSections(binary, name) - } - failIf(dylinkSection.length === 0, "need dylink section"); - binary = new Uint8Array(dylinkSection[0]); - end = binary.length - } else { - var int32View = new Uint32Array(new Uint8Array(binary.subarray(0, 24)).buffer); - var magicNumberFound = int32View[0] == 1836278016; - failIf(!magicNumberFound, "need to see wasm magic number"); - failIf(binary[8] !== 0, "need the dylink section to be first"); - offset = 9; - var section_size = getLEB(); - end = offset + section_size; - name = getString() - } - var customSection = { - neededDynlibs: [], - tlsExports: new Set, - weakImports: new Set - }; - if (name == "dylink") { - customSection.memorySize = getLEB(); - customSection.memoryAlign = getLEB(); - customSection.tableSize = getLEB(); - customSection.tableAlign = getLEB(); - var neededDynlibsCount = getLEB(); - for (var i = 0; i < neededDynlibsCount; ++i) { - var libname = getString(); - customSection.neededDynlibs.push(libname) - } - } else { - failIf(name !== "dylink.0"); - var WASM_DYLINK_MEM_INFO = 1; - var WASM_DYLINK_NEEDED = 2; - var WASM_DYLINK_EXPORT_INFO = 3; - var WASM_DYLINK_IMPORT_INFO = 4; - var WASM_SYMBOL_TLS = 256; - var WASM_SYMBOL_BINDING_MASK = 3; - var WASM_SYMBOL_BINDING_WEAK = 1; - while (offset < end) { - var subsectionType = getU8(); - var subsectionSize = getLEB(); - if (subsectionType === WASM_DYLINK_MEM_INFO) { - customSection.memorySize = getLEB(); - customSection.memoryAlign = getLEB(); - customSection.tableSize = getLEB(); - customSection.tableAlign = getLEB() - } else if (subsectionType === WASM_DYLINK_NEEDED) { - var neededDynlibsCount = getLEB(); - for (var i = 0; i < neededDynlibsCount; ++i) { - libname = getString(); - customSection.neededDynlibs.push(libname) - } - } else if (subsectionType === WASM_DYLINK_EXPORT_INFO) { - var count = getLEB(); - while (count--) { - var symname = getString(); - var flags = getLEB(); - if (flags & WASM_SYMBOL_TLS) { - customSection.tlsExports.add(symname) - } - } - } else if (subsectionType === WASM_DYLINK_IMPORT_INFO) { - var count = getLEB(); - while (count--) { - var modname = getString(); - var symname = getString(); - var flags = getLEB(); - if ((flags & WASM_SYMBOL_BINDING_MASK) == WASM_SYMBOL_BINDING_WEAK) { - customSection.weakImports.add(symname) - } - } - } else { - offset += subsectionSize - } - } - } - return customSection - } - - function getValue(ptr, type = "i8") { - if (type.endsWith("*")) type = "*"; - switch (type) { - case "i1": - return HEAP8[ptr >> 0]; - case "i8": - return HEAP8[ptr >> 0]; - case "i16": - return HEAP16[ptr >> 1]; - case "i32": - return HEAP32[ptr >> 2]; - case "i64": - return HEAP32[ptr >> 2]; - case "float": - return HEAPF32[ptr >> 2]; - case "double": - return HEAPF64[ptr >> 3]; - case "*": - return HEAPU32[ptr >> 2]; - default: - abort("invalid type for getValue: " + type) - } - } - - function newDSO(name, handle, syms) { - var dso = { - refcount: Infinity, - name: name, - exports: syms, - global: true - }; - LDSO.loadedLibsByName[name] = dso; - if (handle != undefined) { - LDSO.loadedLibsByHandle[handle] = dso - } - return dso - } - var LDSO = { - loadedLibsByName: {}, - loadedLibsByHandle: {}, - init: () => newDSO("__main__", 0, wasmImports) - }; - var ___heap_base = 78160; - - function zeroMemory(address, size) { - HEAPU8.fill(0, address, address + size); - return address - } - - function getMemory(size) { - if (runtimeInitialized) { - return zeroMemory(_malloc(size), size) - } - var ret = ___heap_base; - var end = ret + size + 15 & -16; - ___heap_base = end; - GOT["__heap_base"].value = end; - return ret - } - - function isInternalSym(symName) { - return ["__cpp_exception", "__c_longjmp", "__wasm_apply_data_relocs", "__dso_handle", "__tls_size", "__tls_align", "__set_stack_limits", "_emscripten_tls_init", "__wasm_init_tls", "__wasm_call_ctors", "__start_em_asm", "__stop_em_asm"].includes(symName) - } - - function uleb128Encode(n, target) { - if (n < 128) { - target.push(n) - } else { - target.push(n % 128 | 128, n >> 7) - } - } - - function sigToWasmTypes(sig) { - var typeNames = { - "i": "i32", - "j": "i32", - "f": "f32", - "d": "f64", - "p": "i32" - }; - var type = { - parameters: [], - results: sig[0] == "v" ? [] : [typeNames[sig[0]]] - }; - for (var i = 1; i < sig.length; ++i) { - type.parameters.push(typeNames[sig[i]]); - if (sig[i] === "j") { - type.parameters.push("i32") - } - } - return type - } - - function generateFuncType(sig, target) { - var sigRet = sig.slice(0, 1); - var sigParam = sig.slice(1); - var typeCodes = { - "i": 127, - "p": 127, - "j": 126, - "f": 125, - "d": 124 - }; - target.push(96); - uleb128Encode(sigParam.length, target); - for (var i = 0; i < sigParam.length; ++i) { - target.push(typeCodes[sigParam[i]]) - } - if (sigRet == "v") { - target.push(0) - } else { - target.push(1, typeCodes[sigRet]) - } - } - - function convertJsFunctionToWasm(func, sig) { - if (typeof WebAssembly.Function == "function") { - return new WebAssembly.Function(sigToWasmTypes(sig), func) - } - var typeSectionBody = [1]; - generateFuncType(sig, typeSectionBody); - var bytes = [0, 97, 115, 109, 1, 0, 0, 0, 1]; - uleb128Encode(typeSectionBody.length, bytes); - bytes.push.apply(bytes, typeSectionBody); - bytes.push(2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0); - var module = new WebAssembly.Module(new Uint8Array(bytes)); - var instance = new WebAssembly.Instance(module, { - "e": { - "f": func - } - }); - var wrappedFunc = instance.exports["f"]; - return wrappedFunc - } - var wasmTableMirror = []; - - function getWasmTableEntry(funcPtr) { - var func = wasmTableMirror[funcPtr]; - if (!func) { - if (funcPtr >= wasmTableMirror.length) wasmTableMirror.length = funcPtr + 1; - wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr) - } - return func - } - - function updateTableMap(offset, count) { - if (functionsInTableMap) { - for (var i = offset; i < offset + count; i++) { - var item = getWasmTableEntry(i); - if (item) { - functionsInTableMap.set(item, i) - } - } - } - } - var functionsInTableMap = undefined; - - function getFunctionAddress(func) { - if (!functionsInTableMap) { - functionsInTableMap = new WeakMap; - updateTableMap(0, wasmTable.length) - } - return functionsInTableMap.get(func) || 0 - } - var freeTableIndexes = []; - - function getEmptyTableSlot() { - if (freeTableIndexes.length) { - return freeTableIndexes.pop() - } - try { - wasmTable.grow(1) - } catch (err) { - if (!(err instanceof RangeError)) { - throw err - } - throw "Unable to grow wasm table. Set ALLOW_TABLE_GROWTH." - } - return wasmTable.length - 1 - } - - function setWasmTableEntry(idx, func) { - wasmTable.set(idx, func); - wasmTableMirror[idx] = wasmTable.get(idx) - } - - function addFunction(func, sig) { - var rtn = getFunctionAddress(func); - if (rtn) { - return rtn - } - var ret = getEmptyTableSlot(); - try { - setWasmTableEntry(ret, func) - } catch (err) { - if (!(err instanceof TypeError)) { - throw err - } - var wrapped = convertJsFunctionToWasm(func, sig); - setWasmTableEntry(ret, wrapped) - } - functionsInTableMap.set(func, ret); - return ret - } - - function updateGOT(exports, replace) { - for (var symName in exports) { - if (isInternalSym(symName)) { - continue - } - var value = exports[symName]; - if (symName.startsWith("orig$")) { - symName = symName.split("$")[1]; - replace = true - } - if (!GOT[symName]) { - GOT[symName] = new WebAssembly.Global({ - "value": "i32", - "mutable": true - }) - } - if (replace || GOT[symName].value == 0) { - if (typeof value == "function") { - GOT[symName].value = addFunction(value) - } else if (typeof value == "number") { - GOT[symName].value = value - } else { - err("unhandled export type for `" + symName + "`: " + typeof value) - } - } - } - } - - function relocateExports(exports, memoryBase, replace) { - var relocated = {}; - for (var e in exports) { - var value = exports[e]; - if (typeof value == "object") { - value = value.value - } - if (typeof value == "number") { - value += memoryBase - } - relocated[e] = value - } - updateGOT(relocated, replace); - return relocated - } - - function isSymbolDefined(symName) { - var existing = wasmImports[symName]; - if (!existing || existing.stub) { - return false - } - return true - } - - function resolveGlobalSymbol(symName, direct = false) { - var sym; - if (direct && "orig$" + symName in wasmImports) { - symName = "orig$" + symName - } - if (isSymbolDefined(symName)) { - sym = wasmImports[symName] - } else if (symName.startsWith("invoke_")) { - sym = wasmImports[symName] = createInvokeFunction(symName.split("_")[1]) - } - return { - sym: sym, - name: symName - } - } - - function alignMemory(size, alignment) { - return Math.ceil(size / alignment) * alignment - } - - function dynCallLegacy(sig, ptr, args) { - var f = Module["dynCall_" + sig]; - return args && args.length ? f.apply(null, [ptr].concat(args)) : f.call(null, ptr) - } - - function dynCall(sig, ptr, args) { - if (sig.includes("j")) { - return dynCallLegacy(sig, ptr, args) - } - var rtn = getWasmTableEntry(ptr).apply(null, args); - return rtn - } - - function createInvokeFunction(sig) { - return function() { - var sp = stackSave(); - try { - return dynCall(sig, arguments[0], Array.prototype.slice.call(arguments, 1)) - } catch (e) { - stackRestore(sp); - if (e !== e + 0) throw e; - _setThrew(1, 0) - } - } - } - - function UTF8ToString(ptr, maxBytesToRead) { - return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "" - } - - function loadWebAssemblyModule(binary, flags, localScope, handle) { - var metadata = getDylinkMetadata(binary); - currentModuleWeakSymbols = metadata.weakImports; - - function loadModule() { - var firstLoad = !handle || !HEAP8[handle + 8 >> 0]; - if (firstLoad) { - var memAlign = Math.pow(2, metadata.memoryAlign); - memAlign = Math.max(memAlign, 16); - var memoryBase = metadata.memorySize ? alignMemory(getMemory(metadata.memorySize + memAlign), memAlign) : 0; - var tableBase = metadata.tableSize ? wasmTable.length : 0; - if (handle) { - HEAP8[handle + 8 >> 0] = 1; - HEAPU32[handle + 12 >> 2] = memoryBase; - HEAP32[handle + 16 >> 2] = metadata.memorySize; - HEAPU32[handle + 20 >> 2] = tableBase; - HEAP32[handle + 24 >> 2] = metadata.tableSize - } - } else { - memoryBase = HEAPU32[handle + 12 >> 2]; - tableBase = HEAPU32[handle + 20 >> 2] - } - var tableGrowthNeeded = tableBase + metadata.tableSize - wasmTable.length; - if (tableGrowthNeeded > 0) { - wasmTable.grow(tableGrowthNeeded) - } - var moduleExports; - - function resolveSymbol(sym) { - var resolved = resolveGlobalSymbol(sym).sym; - if (!resolved && localScope) { - resolved = localScope[sym] - } - if (!resolved) { - resolved = moduleExports[sym] - } - return resolved - } - var proxyHandler = { - "get": function(stubs, prop) { - switch (prop) { - case "__memory_base": - return memoryBase; - case "__table_base": - return tableBase - } - if (prop in wasmImports && !wasmImports[prop].stub) { - return wasmImports[prop] - } - if (!(prop in stubs)) { - var resolved; - stubs[prop] = function() { - if (!resolved) resolved = resolveSymbol(prop); - checkForAsmVersion(prop); - return resolved.apply(null, arguments) - } - } - return stubs[prop] - } - }; - var proxy = new Proxy({}, proxyHandler); - var info = { - "GOT.mem": new Proxy({}, GOTHandler), - "GOT.func": new Proxy({}, GOTHandler), - "env": proxy, - wasi_snapshot_preview1: proxy - }; - - function postInstantiation(instance) { - updateTableMap(tableBase, metadata.tableSize); - moduleExports = relocateExports(instance.exports, memoryBase); - if (!flags.allowUndefined) { - reportUndefinedSymbols() - } - - function addEmAsm(addr, body) { - var args = []; - var arity = 0; - for (; arity < 16; arity++) { - if (body.indexOf("$" + arity) != -1) { - args.push("$" + arity) - } else { - break - } - } - args = args.join(","); - var func = "(" + args + " ) => { " + body + "};"; - ASM_CONSTS[start] = eval(func) - } - if ("__start_em_asm" in moduleExports) { - var start = moduleExports["__start_em_asm"]; - var stop = moduleExports["__stop_em_asm"]; - while (start < stop) { - var jsString = UTF8ToString(start); - addEmAsm(start, jsString); - start = HEAPU8.indexOf(0, start) + 1 - } - } - var applyRelocs = moduleExports["__wasm_apply_data_relocs"]; - if (applyRelocs) { - if (runtimeInitialized) { - applyRelocs() - } else { - __RELOC_FUNCS__.push(applyRelocs) - } - } - var init = moduleExports["__wasm_call_ctors"]; - if (init) { - if (runtimeInitialized) { - init() - } else { - __ATINIT__.push(init) - } - } - return moduleExports - } - if (flags.loadAsync) { - if (binary instanceof WebAssembly.Module) { - var instance = new WebAssembly.Instance(binary, info); - return Promise.resolve(postInstantiation(instance)) - } - return WebAssembly.instantiate(binary, info).then(result => postInstantiation(result.instance)) - } - var module = binary instanceof WebAssembly.Module ? binary : new WebAssembly.Module(binary); - var instance = new WebAssembly.Instance(module, info); - return postInstantiation(instance) - } - if (flags.loadAsync) { - return metadata.neededDynlibs.reduce((chain, dynNeeded) => { - return chain.then(() => { - return loadDynamicLibrary(dynNeeded, flags) - }) - }, Promise.resolve()).then(loadModule) - } - metadata.neededDynlibs.forEach(needed => loadDynamicLibrary(needed, flags, localScope)); - return loadModule() - } - - function mergeLibSymbols(exports, libName) { - for (var sym in exports) { - if (!exports.hasOwnProperty(sym)) { - continue - } - const setImport = target => { - if (!isSymbolDefined(target)) { - wasmImports[target] = exports[sym] - } - }; - setImport(sym); - const main_alias = "__main_argc_argv"; - if (sym == "main") { - setImport(main_alias) - } - if (sym == main_alias) { - setImport("main") - } - if (sym.startsWith("dynCall_") && !Module.hasOwnProperty(sym)) { - Module[sym] = exports[sym] - } - } - } - - function asyncLoad(url, onload, onerror, noRunDep) { - var dep = !noRunDep ? getUniqueRunDependency("al " + url) : ""; - readAsync(url, arrayBuffer => { - assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); - onload(new Uint8Array(arrayBuffer)); - if (dep) removeRunDependency(dep) - }, event => { - if (onerror) { - onerror() - } else { - throw 'Loading data file "' + url + '" failed.' - } - }); - if (dep) addRunDependency(dep) - } - - function loadDynamicLibrary(libName, flags = { - global: true, - nodelete: true - }, localScope, handle) { - var dso = LDSO.loadedLibsByName[libName]; - if (dso) { - if (flags.global && !dso.global) { - dso.global = true; - if (dso.exports !== "loading") { - mergeLibSymbols(dso.exports, libName) - } - } - if (flags.nodelete && dso.refcount !== Infinity) { - dso.refcount = Infinity - } - dso.refcount++; - if (handle) { - LDSO.loadedLibsByHandle[handle] = dso - } - return flags.loadAsync ? Promise.resolve(true) : true - } - dso = newDSO(libName, handle, "loading"); - dso.refcount = flags.nodelete ? Infinity : 1; - dso.global = flags.global; - - function loadLibData() { - if (flags.fs && flags.fs.findObject(libName)) { - var libData = flags.fs.readFile(libName, { - encoding: "binary" - }); - if (!(libData instanceof Uint8Array)) { - libData = new Uint8Array(libData) - } - return flags.loadAsync ? Promise.resolve(libData) : libData - } - var libFile = locateFile(libName); - if (flags.loadAsync) { - return new Promise(function(resolve, reject) { - asyncLoad(libFile, data => resolve(data), reject) - }) - } - if (!readBinary) { - throw new Error(libFile + ": file not found, and synchronous loading of external files is not available") - } - return readBinary(libFile) - } - - function getExports() { - if (typeof preloadedWasm != "undefined" && preloadedWasm[libName]) { - var libModule = preloadedWasm[libName]; - return flags.loadAsync ? Promise.resolve(libModule) : libModule - } - if (flags.loadAsync) { - return loadLibData().then(libData => loadWebAssemblyModule(libData, flags, localScope, handle)) - } - return loadWebAssemblyModule(loadLibData(), flags, localScope, handle) - } - - function moduleLoaded(exports) { - if (dso.global) { - mergeLibSymbols(exports, libName) - } else if (localScope) { - Object.assign(localScope, exports) - } - dso.exports = exports - } - if (flags.loadAsync) { - return getExports().then(exports => { - moduleLoaded(exports); - return true - }) - } - moduleLoaded(getExports()); - return true - } - - function reportUndefinedSymbols() { - for (var symName in GOT) { - if (GOT[symName].value == 0) { - var value = resolveGlobalSymbol(symName, true).sym; - if (!value && !GOT[symName].required) { - continue - } - if (typeof value == "function") { - GOT[symName].value = addFunction(value, value.sig) - } else if (typeof value == "number") { - GOT[symName].value = value - } else { - throw new Error("bad export type for `" + symName + "`: " + typeof value) - } - } - } - } - - function loadDylibs() { - if (!dynamicLibraries.length) { - reportUndefinedSymbols(); - return - } - addRunDependency("loadDylibs"); - dynamicLibraries.reduce((chain, lib) => { - return chain.then(() => { - return loadDynamicLibrary(lib, { - loadAsync: true, - global: true, - nodelete: true, - allowUndefined: true - }) - }) - }, Promise.resolve()).then(() => { - reportUndefinedSymbols(); - removeRunDependency("loadDylibs") - }) - } - - function setValue(ptr, value, type = "i8") { - if (type.endsWith("*")) type = "*"; - switch (type) { - case "i1": - HEAP8[ptr >> 0] = value; - break; - case "i8": - HEAP8[ptr >> 0] = value; - break; - case "i16": - HEAP16[ptr >> 1] = value; - break; - case "i32": - HEAP32[ptr >> 2] = value; - break; - case "i64": - tempI64 = [value >>> 0, (tempDouble = value, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[ptr >> 2] = tempI64[0], HEAP32[ptr + 4 >> 2] = tempI64[1]; - break; - case "float": - HEAPF32[ptr >> 2] = value; - break; - case "double": - HEAPF64[ptr >> 3] = value; - break; - case "*": - HEAPU32[ptr >> 2] = value; - break; - default: - abort("invalid type for setValue: " + type) - } - } - var ___memory_base = new WebAssembly.Global({ - "value": "i32", - "mutable": false - }, 1024); - var ___stack_pointer = new WebAssembly.Global({ - "value": "i32", - "mutable": true - }, 78160); - var ___table_base = new WebAssembly.Global({ - "value": "i32", - "mutable": false - }, 1); - var nowIsMonotonic = true; - - function __emscripten_get_now_is_monotonic() { - return nowIsMonotonic - } - __emscripten_get_now_is_monotonic.sig = "i"; - - function _abort() { - abort("") - } - Module["_abort"] = _abort; - _abort.sig = "v"; - - function _emscripten_date_now() { - return Date.now() - } - _emscripten_date_now.sig = "d"; - var _emscripten_get_now; - if (ENVIRONMENT_IS_NODE) { - _emscripten_get_now = () => { - var t = process.hrtime(); - return t[0] * 1e3 + t[1] / 1e6 - } - } else _emscripten_get_now = () => performance.now(); - _emscripten_get_now.sig = "d"; - - function _emscripten_memcpy_big(dest, src, num) { - HEAPU8.copyWithin(dest, src, src + num) - } - _emscripten_memcpy_big.sig = "vppp"; - - function getHeapMax() { - return 2147483648 - } - - function emscripten_realloc_buffer(size) { - var b = wasmMemory.buffer; - try { - wasmMemory.grow(size - b.byteLength + 65535 >>> 16); - updateMemoryViews(); - return 1 - } catch (e) {} - } - - function _emscripten_resize_heap(requestedSize) { - var oldSize = HEAPU8.length; - requestedSize = requestedSize >>> 0; - var maxHeapSize = getHeapMax(); - if (requestedSize > maxHeapSize) { - return false - } - let alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple; - for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { - var overGrownHeapSize = oldSize * (1 + .2 / cutDown); - overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); - var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); - var replacement = emscripten_realloc_buffer(newSize); - if (replacement) { - return true - } - } - return false - } - _emscripten_resize_heap.sig = "ip"; - var SYSCALLS = { - DEFAULT_POLLMASK: 5, - calculateAt: function(dirfd, path, allowEmpty) { - if (PATH.isAbs(path)) { - return path - } - var dir; - if (dirfd === -100) { - dir = FS.cwd() - } else { - var dirstream = SYSCALLS.getStreamFromFD(dirfd); - dir = dirstream.path - } - if (path.length == 0) { - if (!allowEmpty) { - throw new FS.ErrnoError(44) - } - return dir - } - return PATH.join2(dir, path) - }, - doStat: function(func, path, buf) { - try { - var stat = func(path) - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54 - } - throw e - } - HEAP32[buf >> 2] = stat.dev; - HEAP32[buf + 8 >> 2] = stat.ino; - HEAP32[buf + 12 >> 2] = stat.mode; - HEAPU32[buf + 16 >> 2] = stat.nlink; - HEAP32[buf + 20 >> 2] = stat.uid; - HEAP32[buf + 24 >> 2] = stat.gid; - HEAP32[buf + 28 >> 2] = stat.rdev; - tempI64 = [stat.size >>> 0, (tempDouble = stat.size, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1]; - HEAP32[buf + 48 >> 2] = 4096; - HEAP32[buf + 52 >> 2] = stat.blocks; - var atime = stat.atime.getTime(); - var mtime = stat.mtime.getTime(); - var ctime = stat.ctime.getTime(); - tempI64 = [Math.floor(atime / 1e3) >>> 0, (tempDouble = Math.floor(atime / 1e3), +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 56 >> 2] = tempI64[0], HEAP32[buf + 60 >> 2] = tempI64[1]; - HEAPU32[buf + 64 >> 2] = atime % 1e3 * 1e3; - tempI64 = [Math.floor(mtime / 1e3) >>> 0, (tempDouble = Math.floor(mtime / 1e3), +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 72 >> 2] = tempI64[0], HEAP32[buf + 76 >> 2] = tempI64[1]; - HEAPU32[buf + 80 >> 2] = mtime % 1e3 * 1e3; - tempI64 = [Math.floor(ctime / 1e3) >>> 0, (tempDouble = Math.floor(ctime / 1e3), +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 88 >> 2] = tempI64[0], HEAP32[buf + 92 >> 2] = tempI64[1]; - HEAPU32[buf + 96 >> 2] = ctime % 1e3 * 1e3; - tempI64 = [stat.ino >>> 0, (tempDouble = stat.ino, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 104 >> 2] = tempI64[0], HEAP32[buf + 108 >> 2] = tempI64[1]; - return 0 - }, - doMsync: function(addr, stream, len, flags, offset) { - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - if (flags & 2) { - return 0 - } - var buffer = HEAPU8.slice(addr, addr + len); - FS.msync(stream, buffer, offset, len, flags) - }, - varargs: undefined, - get: function() { - SYSCALLS.varargs += 4; - var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; - return ret - }, - getStr: function(ptr) { - var ret = UTF8ToString(ptr); - return ret - }, - getStreamFromFD: function(fd) { - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - return stream - } - }; - - function _fd_close(fd) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - FS.close(stream); - return 0 - } catch (e) { - if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; - return e.errno - } - } - _fd_close.sig = "ii"; - - function convertI32PairToI53Checked(lo, hi) { - return hi + 2097152 >>> 0 < 4194305 - !!lo ? (lo >>> 0) + hi * 4294967296 : NaN - } - - function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { - try { - var offset = convertI32PairToI53Checked(offset_low, offset_high); - if (isNaN(offset)) return 61; - var stream = SYSCALLS.getStreamFromFD(fd); - FS.llseek(stream, offset, whence); - tempI64 = [stream.position >>> 0, (tempDouble = stream.position, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1]; - if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; - return 0 - } catch (e) { - if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; - return e.errno - } - } - _fd_seek.sig = "iijip"; - - function doWritev(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAPU32[iov >> 2]; - var len = HEAPU32[iov + 4 >> 2]; - iov += 8; - var curr = FS.write(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - if (typeof offset !== "undefined") { - offset += curr - } - } - return ret - } - - function _fd_write(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = doWritev(stream, iov, iovcnt); - HEAPU32[pnum >> 2] = num; - return 0 - } catch (e) { - if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; - return e.errno - } - } - _fd_write.sig = "iippp"; - - function _tree_sitter_log_callback(isLexMessage, messageAddress) { - if (currentLogCallback) { - const message = UTF8ToString(messageAddress); - currentLogCallback(message, isLexMessage !== 0) - } - } - - function _tree_sitter_parse_callback(inputBufferAddress, index, row, column, lengthAddress) { - var INPUT_BUFFER_SIZE = 10 * 1024; - var string = currentParseCallback(index, { - row: row, - column: column - }); - if (typeof string === "string") { - setValue(lengthAddress, string.length, "i32"); - stringToUTF16(string, inputBufferAddress, INPUT_BUFFER_SIZE) - } else { - setValue(lengthAddress, 0, "i32") - } - } - - function _proc_exit(code) { - EXITSTATUS = code; - if (!keepRuntimeAlive()) { - if (Module["onExit"]) Module["onExit"](code); - ABORT = true - } - quit_(code, new ExitStatus(code)) - } - _proc_exit.sig = "vi"; - - function exitJS(status, implicit) { - EXITSTATUS = status; - _proc_exit(status) - } - - function handleException(e) { - if (e instanceof ExitStatus || e == "unwind") { - return EXITSTATUS - } - quit_(1, e) - } - - function lengthBytesUTF8(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - var c = str.charCodeAt(i); - if (c <= 127) { - len++ - } else if (c <= 2047) { - len += 2 - } else if (c >= 55296 && c <= 57343) { - len += 4; - ++i - } else { - len += 3 - } - } - return len - } - - function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { - if (!(maxBytesToWrite > 0)) return 0; - var startIdx = outIdx; - var endIdx = outIdx + maxBytesToWrite - 1; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) { - var u1 = str.charCodeAt(++i); - u = 65536 + ((u & 1023) << 10) | u1 & 1023 - } - if (u <= 127) { - if (outIdx >= endIdx) break; - heap[outIdx++] = u - } else if (u <= 2047) { - if (outIdx + 1 >= endIdx) break; - heap[outIdx++] = 192 | u >> 6; - heap[outIdx++] = 128 | u & 63 - } else if (u <= 65535) { - if (outIdx + 2 >= endIdx) break; - heap[outIdx++] = 224 | u >> 12; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63 - } else { - if (outIdx + 3 >= endIdx) break; - heap[outIdx++] = 240 | u >> 18; - heap[outIdx++] = 128 | u >> 12 & 63; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63 - } - } - heap[outIdx] = 0; - return outIdx - startIdx - } - - function stringToUTF8(str, outPtr, maxBytesToWrite) { - return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite) - } - - function stringToUTF8OnStack(str) { - var size = lengthBytesUTF8(str) + 1; - var ret = stackAlloc(size); - stringToUTF8(str, ret, size); - return ret - } - - function stringToUTF16(str, outPtr, maxBytesToWrite) { - if (maxBytesToWrite === undefined) { - maxBytesToWrite = 2147483647 - } - if (maxBytesToWrite < 2) return 0; - maxBytesToWrite -= 2; - var startPtr = outPtr; - var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length; - for (var i = 0; i < numCharsToWrite; ++i) { - var codeUnit = str.charCodeAt(i); - HEAP16[outPtr >> 1] = codeUnit; - outPtr += 2 - } - HEAP16[outPtr >> 1] = 0; - return outPtr - startPtr - } - - function AsciiToString(ptr) { - var str = ""; - while (1) { - var ch = HEAPU8[ptr++ >> 0]; - if (!ch) return str; - str += String.fromCharCode(ch) - } - } - var wasmImports = { - "__heap_base": ___heap_base, - "__indirect_function_table": wasmTable, - "__memory_base": ___memory_base, - "__stack_pointer": ___stack_pointer, - "__table_base": ___table_base, - "_emscripten_get_now_is_monotonic": __emscripten_get_now_is_monotonic, - "abort": _abort, - "emscripten_get_now": _emscripten_get_now, - "emscripten_memcpy_big": _emscripten_memcpy_big, - "emscripten_resize_heap": _emscripten_resize_heap, - "fd_close": _fd_close, - "fd_seek": _fd_seek, - "fd_write": _fd_write, - "memory": wasmMemory, - "tree_sitter_log_callback": _tree_sitter_log_callback, - "tree_sitter_parse_callback": _tree_sitter_parse_callback - }; - var asm = createWasm(); - var ___wasm_call_ctors = function() { - return (___wasm_call_ctors = Module["asm"]["__wasm_call_ctors"]).apply(null, arguments) - }; - var ___wasm_apply_data_relocs = Module["___wasm_apply_data_relocs"] = function() { - return (___wasm_apply_data_relocs = Module["___wasm_apply_data_relocs"] = Module["asm"]["__wasm_apply_data_relocs"]).apply(null, arguments) - }; - var _malloc = Module["_malloc"] = function() { - return (_malloc = Module["_malloc"] = Module["asm"]["malloc"]).apply(null, arguments) - }; - var _calloc = Module["_calloc"] = function() { - return (_calloc = Module["_calloc"] = Module["asm"]["calloc"]).apply(null, arguments) - }; - var _realloc = Module["_realloc"] = function() { - return (_realloc = Module["_realloc"] = Module["asm"]["realloc"]).apply(null, arguments) - }; - var _free = Module["_free"] = function() { - return (_free = Module["_free"] = Module["asm"]["free"]).apply(null, arguments) - }; - var _ts_language_symbol_count = Module["_ts_language_symbol_count"] = function() { - return (_ts_language_symbol_count = Module["_ts_language_symbol_count"] = Module["asm"]["ts_language_symbol_count"]).apply(null, arguments) - }; - var _ts_language_state_count = Module["_ts_language_state_count"] = function() { - return (_ts_language_state_count = Module["_ts_language_state_count"] = Module["asm"]["ts_language_state_count"]).apply(null, arguments) - }; - var _ts_language_version = Module["_ts_language_version"] = function() { - return (_ts_language_version = Module["_ts_language_version"] = Module["asm"]["ts_language_version"]).apply(null, arguments) - }; - var _ts_language_field_count = Module["_ts_language_field_count"] = function() { - return (_ts_language_field_count = Module["_ts_language_field_count"] = Module["asm"]["ts_language_field_count"]).apply(null, arguments) - }; - var _ts_language_next_state = Module["_ts_language_next_state"] = function() { - return (_ts_language_next_state = Module["_ts_language_next_state"] = Module["asm"]["ts_language_next_state"]).apply(null, arguments) - }; - var _ts_language_symbol_name = Module["_ts_language_symbol_name"] = function() { - return (_ts_language_symbol_name = Module["_ts_language_symbol_name"] = Module["asm"]["ts_language_symbol_name"]).apply(null, arguments) - }; - var _ts_language_symbol_for_name = Module["_ts_language_symbol_for_name"] = function() { - return (_ts_language_symbol_for_name = Module["_ts_language_symbol_for_name"] = Module["asm"]["ts_language_symbol_for_name"]).apply(null, arguments) - }; - var _strncmp = Module["_strncmp"] = function() { - return (_strncmp = Module["_strncmp"] = Module["asm"]["strncmp"]).apply(null, arguments) - }; - var _ts_language_symbol_type = Module["_ts_language_symbol_type"] = function() { - return (_ts_language_symbol_type = Module["_ts_language_symbol_type"] = Module["asm"]["ts_language_symbol_type"]).apply(null, arguments) - }; - var _ts_language_field_name_for_id = Module["_ts_language_field_name_for_id"] = function() { - return (_ts_language_field_name_for_id = Module["_ts_language_field_name_for_id"] = Module["asm"]["ts_language_field_name_for_id"]).apply(null, arguments) - }; - var _ts_lookahead_iterator_new = Module["_ts_lookahead_iterator_new"] = function() { - return (_ts_lookahead_iterator_new = Module["_ts_lookahead_iterator_new"] = Module["asm"]["ts_lookahead_iterator_new"]).apply(null, arguments) - }; - var _ts_lookahead_iterator_delete = Module["_ts_lookahead_iterator_delete"] = function() { - return (_ts_lookahead_iterator_delete = Module["_ts_lookahead_iterator_delete"] = Module["asm"]["ts_lookahead_iterator_delete"]).apply(null, arguments) - }; - var _ts_lookahead_iterator_reset_state = Module["_ts_lookahead_iterator_reset_state"] = function() { - return (_ts_lookahead_iterator_reset_state = Module["_ts_lookahead_iterator_reset_state"] = Module["asm"]["ts_lookahead_iterator_reset_state"]).apply(null, arguments) - }; - var _ts_lookahead_iterator_reset = Module["_ts_lookahead_iterator_reset"] = function() { - return (_ts_lookahead_iterator_reset = Module["_ts_lookahead_iterator_reset"] = Module["asm"]["ts_lookahead_iterator_reset"]).apply(null, arguments) - }; - var _ts_lookahead_iterator_next = Module["_ts_lookahead_iterator_next"] = function() { - return (_ts_lookahead_iterator_next = Module["_ts_lookahead_iterator_next"] = Module["asm"]["ts_lookahead_iterator_next"]).apply(null, arguments) - }; - var _ts_lookahead_iterator_current_symbol = Module["_ts_lookahead_iterator_current_symbol"] = function() { - return (_ts_lookahead_iterator_current_symbol = Module["_ts_lookahead_iterator_current_symbol"] = Module["asm"]["ts_lookahead_iterator_current_symbol"]).apply(null, arguments) - }; - var _memset = Module["_memset"] = function() { - return (_memset = Module["_memset"] = Module["asm"]["memset"]).apply(null, arguments) - }; - var _memcpy = Module["_memcpy"] = function() { - return (_memcpy = Module["_memcpy"] = Module["asm"]["memcpy"]).apply(null, arguments) - }; - var _ts_parser_delete = Module["_ts_parser_delete"] = function() { - return (_ts_parser_delete = Module["_ts_parser_delete"] = Module["asm"]["ts_parser_delete"]).apply(null, arguments) - }; - var _ts_parser_reset = Module["_ts_parser_reset"] = function() { - return (_ts_parser_reset = Module["_ts_parser_reset"] = Module["asm"]["ts_parser_reset"]).apply(null, arguments) - }; - var _ts_parser_set_language = Module["_ts_parser_set_language"] = function() { - return (_ts_parser_set_language = Module["_ts_parser_set_language"] = Module["asm"]["ts_parser_set_language"]).apply(null, arguments) - }; - var _ts_parser_timeout_micros = Module["_ts_parser_timeout_micros"] = function() { - return (_ts_parser_timeout_micros = Module["_ts_parser_timeout_micros"] = Module["asm"]["ts_parser_timeout_micros"]).apply(null, arguments) - }; - var _ts_parser_set_timeout_micros = Module["_ts_parser_set_timeout_micros"] = function() { - return (_ts_parser_set_timeout_micros = Module["_ts_parser_set_timeout_micros"] = Module["asm"]["ts_parser_set_timeout_micros"]).apply(null, arguments) - }; - var _memmove = Module["_memmove"] = function() { - return (_memmove = Module["_memmove"] = Module["asm"]["memmove"]).apply(null, arguments) - }; - var _memcmp = Module["_memcmp"] = function() { - return (_memcmp = Module["_memcmp"] = Module["asm"]["memcmp"]).apply(null, arguments) - }; - var _ts_query_new = Module["_ts_query_new"] = function() { - return (_ts_query_new = Module["_ts_query_new"] = Module["asm"]["ts_query_new"]).apply(null, arguments) - }; - var _ts_query_delete = Module["_ts_query_delete"] = function() { - return (_ts_query_delete = Module["_ts_query_delete"] = Module["asm"]["ts_query_delete"]).apply(null, arguments) - }; - var _iswspace = Module["_iswspace"] = function() { - return (_iswspace = Module["_iswspace"] = Module["asm"]["iswspace"]).apply(null, arguments) - }; - var _iswalnum = Module["_iswalnum"] = function() { - return (_iswalnum = Module["_iswalnum"] = Module["asm"]["iswalnum"]).apply(null, arguments) - }; - var _ts_query_pattern_count = Module["_ts_query_pattern_count"] = function() { - return (_ts_query_pattern_count = Module["_ts_query_pattern_count"] = Module["asm"]["ts_query_pattern_count"]).apply(null, arguments) - }; - var _ts_query_capture_count = Module["_ts_query_capture_count"] = function() { - return (_ts_query_capture_count = Module["_ts_query_capture_count"] = Module["asm"]["ts_query_capture_count"]).apply(null, arguments) - }; - var _ts_query_string_count = Module["_ts_query_string_count"] = function() { - return (_ts_query_string_count = Module["_ts_query_string_count"] = Module["asm"]["ts_query_string_count"]).apply(null, arguments) - }; - var _ts_query_capture_name_for_id = Module["_ts_query_capture_name_for_id"] = function() { - return (_ts_query_capture_name_for_id = Module["_ts_query_capture_name_for_id"] = Module["asm"]["ts_query_capture_name_for_id"]).apply(null, arguments) - }; - var _ts_query_string_value_for_id = Module["_ts_query_string_value_for_id"] = function() { - return (_ts_query_string_value_for_id = Module["_ts_query_string_value_for_id"] = Module["asm"]["ts_query_string_value_for_id"]).apply(null, arguments) - }; - var _ts_query_predicates_for_pattern = Module["_ts_query_predicates_for_pattern"] = function() { - return (_ts_query_predicates_for_pattern = Module["_ts_query_predicates_for_pattern"] = Module["asm"]["ts_query_predicates_for_pattern"]).apply(null, arguments) - }; - var _ts_tree_copy = Module["_ts_tree_copy"] = function() { - return (_ts_tree_copy = Module["_ts_tree_copy"] = Module["asm"]["ts_tree_copy"]).apply(null, arguments) - }; - var _ts_tree_delete = Module["_ts_tree_delete"] = function() { - return (_ts_tree_delete = Module["_ts_tree_delete"] = Module["asm"]["ts_tree_delete"]).apply(null, arguments) - }; - var _ts_init = Module["_ts_init"] = function() { - return (_ts_init = Module["_ts_init"] = Module["asm"]["ts_init"]).apply(null, arguments) - }; - var _ts_parser_new_wasm = Module["_ts_parser_new_wasm"] = function() { - return (_ts_parser_new_wasm = Module["_ts_parser_new_wasm"] = Module["asm"]["ts_parser_new_wasm"]).apply(null, arguments) - }; - var _ts_parser_enable_logger_wasm = Module["_ts_parser_enable_logger_wasm"] = function() { - return (_ts_parser_enable_logger_wasm = Module["_ts_parser_enable_logger_wasm"] = Module["asm"]["ts_parser_enable_logger_wasm"]).apply(null, arguments) - }; - var _ts_parser_parse_wasm = Module["_ts_parser_parse_wasm"] = function() { - return (_ts_parser_parse_wasm = Module["_ts_parser_parse_wasm"] = Module["asm"]["ts_parser_parse_wasm"]).apply(null, arguments) - }; - var _ts_language_type_is_named_wasm = Module["_ts_language_type_is_named_wasm"] = function() { - return (_ts_language_type_is_named_wasm = Module["_ts_language_type_is_named_wasm"] = Module["asm"]["ts_language_type_is_named_wasm"]).apply(null, arguments) - }; - var _ts_language_type_is_visible_wasm = Module["_ts_language_type_is_visible_wasm"] = function() { - return (_ts_language_type_is_visible_wasm = Module["_ts_language_type_is_visible_wasm"] = Module["asm"]["ts_language_type_is_visible_wasm"]).apply(null, arguments) - }; - var _ts_tree_root_node_wasm = Module["_ts_tree_root_node_wasm"] = function() { - return (_ts_tree_root_node_wasm = Module["_ts_tree_root_node_wasm"] = Module["asm"]["ts_tree_root_node_wasm"]).apply(null, arguments) - }; - var _ts_tree_edit_wasm = Module["_ts_tree_edit_wasm"] = function() { - return (_ts_tree_edit_wasm = Module["_ts_tree_edit_wasm"] = Module["asm"]["ts_tree_edit_wasm"]).apply(null, arguments) - }; - var _ts_tree_get_changed_ranges_wasm = Module["_ts_tree_get_changed_ranges_wasm"] = function() { - return (_ts_tree_get_changed_ranges_wasm = Module["_ts_tree_get_changed_ranges_wasm"] = Module["asm"]["ts_tree_get_changed_ranges_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_new_wasm = Module["_ts_tree_cursor_new_wasm"] = function() { - return (_ts_tree_cursor_new_wasm = Module["_ts_tree_cursor_new_wasm"] = Module["asm"]["ts_tree_cursor_new_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_delete_wasm = Module["_ts_tree_cursor_delete_wasm"] = function() { - return (_ts_tree_cursor_delete_wasm = Module["_ts_tree_cursor_delete_wasm"] = Module["asm"]["ts_tree_cursor_delete_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_reset_wasm = Module["_ts_tree_cursor_reset_wasm"] = function() { - return (_ts_tree_cursor_reset_wasm = Module["_ts_tree_cursor_reset_wasm"] = Module["asm"]["ts_tree_cursor_reset_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_reset_to_wasm = Module["_ts_tree_cursor_reset_to_wasm"] = function() { - return (_ts_tree_cursor_reset_to_wasm = Module["_ts_tree_cursor_reset_to_wasm"] = Module["asm"]["ts_tree_cursor_reset_to_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_goto_first_child_wasm = Module["_ts_tree_cursor_goto_first_child_wasm"] = function() { - return (_ts_tree_cursor_goto_first_child_wasm = Module["_ts_tree_cursor_goto_first_child_wasm"] = Module["asm"]["ts_tree_cursor_goto_first_child_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_goto_last_child_wasm = Module["_ts_tree_cursor_goto_last_child_wasm"] = function() { - return (_ts_tree_cursor_goto_last_child_wasm = Module["_ts_tree_cursor_goto_last_child_wasm"] = Module["asm"]["ts_tree_cursor_goto_last_child_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_goto_next_sibling_wasm = Module["_ts_tree_cursor_goto_next_sibling_wasm"] = function() { - return (_ts_tree_cursor_goto_next_sibling_wasm = Module["_ts_tree_cursor_goto_next_sibling_wasm"] = Module["asm"]["ts_tree_cursor_goto_next_sibling_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_goto_previous_sibling_wasm = Module["_ts_tree_cursor_goto_previous_sibling_wasm"] = function() { - return (_ts_tree_cursor_goto_previous_sibling_wasm = Module["_ts_tree_cursor_goto_previous_sibling_wasm"] = Module["asm"]["ts_tree_cursor_goto_previous_sibling_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_goto_parent_wasm = Module["_ts_tree_cursor_goto_parent_wasm"] = function() { - return (_ts_tree_cursor_goto_parent_wasm = Module["_ts_tree_cursor_goto_parent_wasm"] = Module["asm"]["ts_tree_cursor_goto_parent_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_current_node_type_id_wasm = Module["_ts_tree_cursor_current_node_type_id_wasm"] = function() { - return (_ts_tree_cursor_current_node_type_id_wasm = Module["_ts_tree_cursor_current_node_type_id_wasm"] = Module["asm"]["ts_tree_cursor_current_node_type_id_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_current_node_state_id_wasm = Module["_ts_tree_cursor_current_node_state_id_wasm"] = function() { - return (_ts_tree_cursor_current_node_state_id_wasm = Module["_ts_tree_cursor_current_node_state_id_wasm"] = Module["asm"]["ts_tree_cursor_current_node_state_id_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_current_node_is_named_wasm = Module["_ts_tree_cursor_current_node_is_named_wasm"] = function() { - return (_ts_tree_cursor_current_node_is_named_wasm = Module["_ts_tree_cursor_current_node_is_named_wasm"] = Module["asm"]["ts_tree_cursor_current_node_is_named_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_current_node_is_missing_wasm = Module["_ts_tree_cursor_current_node_is_missing_wasm"] = function() { - return (_ts_tree_cursor_current_node_is_missing_wasm = Module["_ts_tree_cursor_current_node_is_missing_wasm"] = Module["asm"]["ts_tree_cursor_current_node_is_missing_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_current_node_id_wasm = Module["_ts_tree_cursor_current_node_id_wasm"] = function() { - return (_ts_tree_cursor_current_node_id_wasm = Module["_ts_tree_cursor_current_node_id_wasm"] = Module["asm"]["ts_tree_cursor_current_node_id_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_start_position_wasm = Module["_ts_tree_cursor_start_position_wasm"] = function() { - return (_ts_tree_cursor_start_position_wasm = Module["_ts_tree_cursor_start_position_wasm"] = Module["asm"]["ts_tree_cursor_start_position_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_end_position_wasm = Module["_ts_tree_cursor_end_position_wasm"] = function() { - return (_ts_tree_cursor_end_position_wasm = Module["_ts_tree_cursor_end_position_wasm"] = Module["asm"]["ts_tree_cursor_end_position_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_start_index_wasm = Module["_ts_tree_cursor_start_index_wasm"] = function() { - return (_ts_tree_cursor_start_index_wasm = Module["_ts_tree_cursor_start_index_wasm"] = Module["asm"]["ts_tree_cursor_start_index_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_end_index_wasm = Module["_ts_tree_cursor_end_index_wasm"] = function() { - return (_ts_tree_cursor_end_index_wasm = Module["_ts_tree_cursor_end_index_wasm"] = Module["asm"]["ts_tree_cursor_end_index_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_current_field_id_wasm = Module["_ts_tree_cursor_current_field_id_wasm"] = function() { - return (_ts_tree_cursor_current_field_id_wasm = Module["_ts_tree_cursor_current_field_id_wasm"] = Module["asm"]["ts_tree_cursor_current_field_id_wasm"]).apply(null, arguments) - }; - var _ts_tree_cursor_current_node_wasm = Module["_ts_tree_cursor_current_node_wasm"] = function() { - return (_ts_tree_cursor_current_node_wasm = Module["_ts_tree_cursor_current_node_wasm"] = Module["asm"]["ts_tree_cursor_current_node_wasm"]).apply(null, arguments) - }; - var _ts_node_symbol_wasm = Module["_ts_node_symbol_wasm"] = function() { - return (_ts_node_symbol_wasm = Module["_ts_node_symbol_wasm"] = Module["asm"]["ts_node_symbol_wasm"]).apply(null, arguments) - }; - var _ts_node_field_name_for_child_wasm = Module["_ts_node_field_name_for_child_wasm"] = function() { - return (_ts_node_field_name_for_child_wasm = Module["_ts_node_field_name_for_child_wasm"] = Module["asm"]["ts_node_field_name_for_child_wasm"]).apply(null, arguments) - }; - var _ts_node_grammar_symbol_wasm = Module["_ts_node_grammar_symbol_wasm"] = function() { - return (_ts_node_grammar_symbol_wasm = Module["_ts_node_grammar_symbol_wasm"] = Module["asm"]["ts_node_grammar_symbol_wasm"]).apply(null, arguments) - }; - var _ts_node_child_count_wasm = Module["_ts_node_child_count_wasm"] = function() { - return (_ts_node_child_count_wasm = Module["_ts_node_child_count_wasm"] = Module["asm"]["ts_node_child_count_wasm"]).apply(null, arguments) - }; - var _ts_node_named_child_count_wasm = Module["_ts_node_named_child_count_wasm"] = function() { - return (_ts_node_named_child_count_wasm = Module["_ts_node_named_child_count_wasm"] = Module["asm"]["ts_node_named_child_count_wasm"]).apply(null, arguments) - }; - var _ts_node_child_wasm = Module["_ts_node_child_wasm"] = function() { - return (_ts_node_child_wasm = Module["_ts_node_child_wasm"] = Module["asm"]["ts_node_child_wasm"]).apply(null, arguments) - }; - var _ts_node_named_child_wasm = Module["_ts_node_named_child_wasm"] = function() { - return (_ts_node_named_child_wasm = Module["_ts_node_named_child_wasm"] = Module["asm"]["ts_node_named_child_wasm"]).apply(null, arguments) - }; - var _ts_node_child_by_field_id_wasm = Module["_ts_node_child_by_field_id_wasm"] = function() { - return (_ts_node_child_by_field_id_wasm = Module["_ts_node_child_by_field_id_wasm"] = Module["asm"]["ts_node_child_by_field_id_wasm"]).apply(null, arguments) - }; - var _ts_node_next_sibling_wasm = Module["_ts_node_next_sibling_wasm"] = function() { - return (_ts_node_next_sibling_wasm = Module["_ts_node_next_sibling_wasm"] = Module["asm"]["ts_node_next_sibling_wasm"]).apply(null, arguments) - }; - var _ts_node_prev_sibling_wasm = Module["_ts_node_prev_sibling_wasm"] = function() { - return (_ts_node_prev_sibling_wasm = Module["_ts_node_prev_sibling_wasm"] = Module["asm"]["ts_node_prev_sibling_wasm"]).apply(null, arguments) - }; - var _ts_node_next_named_sibling_wasm = Module["_ts_node_next_named_sibling_wasm"] = function() { - return (_ts_node_next_named_sibling_wasm = Module["_ts_node_next_named_sibling_wasm"] = Module["asm"]["ts_node_next_named_sibling_wasm"]).apply(null, arguments) - }; - var _ts_node_prev_named_sibling_wasm = Module["_ts_node_prev_named_sibling_wasm"] = function() { - return (_ts_node_prev_named_sibling_wasm = Module["_ts_node_prev_named_sibling_wasm"] = Module["asm"]["ts_node_prev_named_sibling_wasm"]).apply(null, arguments) - }; - var _ts_node_parent_wasm = Module["_ts_node_parent_wasm"] = function() { - return (_ts_node_parent_wasm = Module["_ts_node_parent_wasm"] = Module["asm"]["ts_node_parent_wasm"]).apply(null, arguments) - }; - var _ts_node_descendant_for_index_wasm = Module["_ts_node_descendant_for_index_wasm"] = function() { - return (_ts_node_descendant_for_index_wasm = Module["_ts_node_descendant_for_index_wasm"] = Module["asm"]["ts_node_descendant_for_index_wasm"]).apply(null, arguments) - }; - var _ts_node_named_descendant_for_index_wasm = Module["_ts_node_named_descendant_for_index_wasm"] = function() { - return (_ts_node_named_descendant_for_index_wasm = Module["_ts_node_named_descendant_for_index_wasm"] = Module["asm"]["ts_node_named_descendant_for_index_wasm"]).apply(null, arguments) - }; - var _ts_node_descendant_for_position_wasm = Module["_ts_node_descendant_for_position_wasm"] = function() { - return (_ts_node_descendant_for_position_wasm = Module["_ts_node_descendant_for_position_wasm"] = Module["asm"]["ts_node_descendant_for_position_wasm"]).apply(null, arguments) - }; - var _ts_node_named_descendant_for_position_wasm = Module["_ts_node_named_descendant_for_position_wasm"] = function() { - return (_ts_node_named_descendant_for_position_wasm = Module["_ts_node_named_descendant_for_position_wasm"] = Module["asm"]["ts_node_named_descendant_for_position_wasm"]).apply(null, arguments) - }; - var _ts_node_start_point_wasm = Module["_ts_node_start_point_wasm"] = function() { - return (_ts_node_start_point_wasm = Module["_ts_node_start_point_wasm"] = Module["asm"]["ts_node_start_point_wasm"]).apply(null, arguments) - }; - var _ts_node_end_point_wasm = Module["_ts_node_end_point_wasm"] = function() { - return (_ts_node_end_point_wasm = Module["_ts_node_end_point_wasm"] = Module["asm"]["ts_node_end_point_wasm"]).apply(null, arguments) - }; - var _ts_node_start_index_wasm = Module["_ts_node_start_index_wasm"] = function() { - return (_ts_node_start_index_wasm = Module["_ts_node_start_index_wasm"] = Module["asm"]["ts_node_start_index_wasm"]).apply(null, arguments) - }; - var _ts_node_end_index_wasm = Module["_ts_node_end_index_wasm"] = function() { - return (_ts_node_end_index_wasm = Module["_ts_node_end_index_wasm"] = Module["asm"]["ts_node_end_index_wasm"]).apply(null, arguments) - }; - var _ts_node_to_string_wasm = Module["_ts_node_to_string_wasm"] = function() { - return (_ts_node_to_string_wasm = Module["_ts_node_to_string_wasm"] = Module["asm"]["ts_node_to_string_wasm"]).apply(null, arguments) - }; - var _ts_node_children_wasm = Module["_ts_node_children_wasm"] = function() { - return (_ts_node_children_wasm = Module["_ts_node_children_wasm"] = Module["asm"]["ts_node_children_wasm"]).apply(null, arguments) - }; - var _ts_node_named_children_wasm = Module["_ts_node_named_children_wasm"] = function() { - return (_ts_node_named_children_wasm = Module["_ts_node_named_children_wasm"] = Module["asm"]["ts_node_named_children_wasm"]).apply(null, arguments) - }; - var _ts_node_descendants_of_type_wasm = Module["_ts_node_descendants_of_type_wasm"] = function() { - return (_ts_node_descendants_of_type_wasm = Module["_ts_node_descendants_of_type_wasm"] = Module["asm"]["ts_node_descendants_of_type_wasm"]).apply(null, arguments) - }; - var _ts_node_is_named_wasm = Module["_ts_node_is_named_wasm"] = function() { - return (_ts_node_is_named_wasm = Module["_ts_node_is_named_wasm"] = Module["asm"]["ts_node_is_named_wasm"]).apply(null, arguments) - }; - var _ts_node_has_changes_wasm = Module["_ts_node_has_changes_wasm"] = function() { - return (_ts_node_has_changes_wasm = Module["_ts_node_has_changes_wasm"] = Module["asm"]["ts_node_has_changes_wasm"]).apply(null, arguments) - }; - var _ts_node_has_error_wasm = Module["_ts_node_has_error_wasm"] = function() { - return (_ts_node_has_error_wasm = Module["_ts_node_has_error_wasm"] = Module["asm"]["ts_node_has_error_wasm"]).apply(null, arguments) - }; - var _ts_node_is_error_wasm = Module["_ts_node_is_error_wasm"] = function() { - return (_ts_node_is_error_wasm = Module["_ts_node_is_error_wasm"] = Module["asm"]["ts_node_is_error_wasm"]).apply(null, arguments) - }; - var _ts_node_is_missing_wasm = Module["_ts_node_is_missing_wasm"] = function() { - return (_ts_node_is_missing_wasm = Module["_ts_node_is_missing_wasm"] = Module["asm"]["ts_node_is_missing_wasm"]).apply(null, arguments) - }; - var _ts_node_parse_state_wasm = Module["_ts_node_parse_state_wasm"] = function() { - return (_ts_node_parse_state_wasm = Module["_ts_node_parse_state_wasm"] = Module["asm"]["ts_node_parse_state_wasm"]).apply(null, arguments) - }; - var _ts_node_next_parse_state_wasm = Module["_ts_node_next_parse_state_wasm"] = function() { - return (_ts_node_next_parse_state_wasm = Module["_ts_node_next_parse_state_wasm"] = Module["asm"]["ts_node_next_parse_state_wasm"]).apply(null, arguments) - }; - var _ts_query_matches_wasm = Module["_ts_query_matches_wasm"] = function() { - return (_ts_query_matches_wasm = Module["_ts_query_matches_wasm"] = Module["asm"]["ts_query_matches_wasm"]).apply(null, arguments) - }; - var _ts_query_captures_wasm = Module["_ts_query_captures_wasm"] = function() { - return (_ts_query_captures_wasm = Module["_ts_query_captures_wasm"] = Module["asm"]["ts_query_captures_wasm"]).apply(null, arguments) - }; - var ___cxa_atexit = Module["___cxa_atexit"] = function() { - return (___cxa_atexit = Module["___cxa_atexit"] = Module["asm"]["__cxa_atexit"]).apply(null, arguments) - }; - var ___errno_location = function() { - return (___errno_location = Module["asm"]["__errno_location"]).apply(null, arguments) - }; - var _isalnum = Module["_isalnum"] = function() { - return (_isalnum = Module["_isalnum"] = Module["asm"]["isalnum"]).apply(null, arguments) - }; - var _isalpha = Module["_isalpha"] = function() { - return (_isalpha = Module["_isalpha"] = Module["asm"]["isalpha"]).apply(null, arguments) - }; - var _isspace = Module["_isspace"] = function() { - return (_isspace = Module["_isspace"] = Module["asm"]["isspace"]).apply(null, arguments) - }; - var _iswdigit = Module["_iswdigit"] = function() { - return (_iswdigit = Module["_iswdigit"] = Module["asm"]["iswdigit"]).apply(null, arguments) - }; - var _iswalpha = Module["_iswalpha"] = function() { - return (_iswalpha = Module["_iswalpha"] = Module["asm"]["iswalpha"]).apply(null, arguments) - }; - var _iswblank = Module["_iswblank"] = function() { - return (_iswblank = Module["_iswblank"] = Module["asm"]["iswblank"]).apply(null, arguments) - }; - var _iswlower = Module["_iswlower"] = function() { - return (_iswlower = Module["_iswlower"] = Module["asm"]["iswlower"]).apply(null, arguments) - }; - var _iswupper = Module["_iswupper"] = function() { - return (_iswupper = Module["_iswupper"] = Module["asm"]["iswupper"]).apply(null, arguments) - }; - var _iswxdigit = Module["_iswxdigit"] = function() { - return (_iswxdigit = Module["_iswxdigit"] = Module["asm"]["iswxdigit"]).apply(null, arguments) - }; - var _isxdigit = Module["_isxdigit"] = function() { - return (_isxdigit = Module["_isxdigit"] = Module["asm"]["isxdigit"]).apply(null, arguments) - }; - var _memchr = Module["_memchr"] = function() { - return (_memchr = Module["_memchr"] = Module["asm"]["memchr"]).apply(null, arguments) - }; - var _strlen = Module["_strlen"] = function() { - return (_strlen = Module["_strlen"] = Module["asm"]["strlen"]).apply(null, arguments) - }; - var _strcmp = Module["_strcmp"] = function() { - return (_strcmp = Module["_strcmp"] = Module["asm"]["strcmp"]).apply(null, arguments) - }; - var _strncpy = Module["_strncpy"] = function() { - return (_strncpy = Module["_strncpy"] = Module["asm"]["strncpy"]).apply(null, arguments) - }; - var _tolower = Module["_tolower"] = function() { - return (_tolower = Module["_tolower"] = Module["asm"]["tolower"]).apply(null, arguments) - }; - var _towlower = Module["_towlower"] = function() { - return (_towlower = Module["_towlower"] = Module["asm"]["towlower"]).apply(null, arguments) - }; - var _towupper = Module["_towupper"] = function() { - return (_towupper = Module["_towupper"] = Module["asm"]["towupper"]).apply(null, arguments) - }; - var _setThrew = function() { - return (_setThrew = Module["asm"]["setThrew"]).apply(null, arguments) - }; - var stackSave = function() { - return (stackSave = Module["asm"]["stackSave"]).apply(null, arguments) - }; - var stackRestore = function() { - return (stackRestore = Module["asm"]["stackRestore"]).apply(null, arguments) - }; - var stackAlloc = function() { - return (stackAlloc = Module["asm"]["stackAlloc"]).apply(null, arguments) - }; - var __Znwm = Module["__Znwm"] = function() { - return (__Znwm = Module["__Znwm"] = Module["asm"]["_Znwm"]).apply(null, arguments) - }; - var __ZdlPv = Module["__ZdlPv"] = function() { - return (__ZdlPv = Module["__ZdlPv"] = Module["asm"]["_ZdlPv"]).apply(null, arguments) - }; - var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev"] = function() { - return (__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev"] = Module["asm"]["_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev"]).apply(null, arguments) - }; - var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm"] = function() { - return (__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm"] = Module["asm"]["_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm"]).apply(null, arguments) - }; - var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm"] = function() { - return (__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm"] = Module["asm"]["_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm"]).apply(null, arguments) - }; - var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm"] = function() { - return (__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm"] = Module["asm"]["_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm"]).apply(null, arguments) - }; - var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm"] = function() { - return (__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm"] = Module["asm"]["_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm"]).apply(null, arguments) - }; - var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm = Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm"] = function() { - return (__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm = Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm"] = Module["asm"]["_ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm"]).apply(null, arguments) - }; - var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm"] = function() { - return (__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm"] = Module["asm"]["_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm"]).apply(null, arguments) - }; - var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc"] = function() { - return (__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc = Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc"] = Module["asm"]["_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc"]).apply(null, arguments) - }; - var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev = Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev"] = function() { - return (__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev = Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev"] = Module["asm"]["_ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev"]).apply(null, arguments) - }; - var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw = Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw"] = function() { - return (__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw = Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw"] = Module["asm"]["_ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw"]).apply(null, arguments) - }; - var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw = Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw"] = function() { - return (__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw = Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw"] = Module["asm"]["_ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw"]).apply(null, arguments) - }; - var dynCall_jiji = Module["dynCall_jiji"] = function() { - return (dynCall_jiji = Module["dynCall_jiji"] = Module["asm"]["dynCall_jiji"]).apply(null, arguments) - }; - var _orig$ts_parser_timeout_micros = Module["_orig$ts_parser_timeout_micros"] = function() { - return (_orig$ts_parser_timeout_micros = Module["_orig$ts_parser_timeout_micros"] = Module["asm"]["orig$ts_parser_timeout_micros"]).apply(null, arguments) - }; - var _orig$ts_parser_set_timeout_micros = Module["_orig$ts_parser_set_timeout_micros"] = function() { - return (_orig$ts_parser_set_timeout_micros = Module["_orig$ts_parser_set_timeout_micros"] = Module["asm"]["orig$ts_parser_set_timeout_micros"]).apply(null, arguments) - }; - var _stderr = Module["_stderr"] = 11824; - Module["AsciiToString"] = AsciiToString; - Module["stringToUTF16"] = stringToUTF16; - var calledRun; - dependenciesFulfilled = function runCaller() { - if (!calledRun) run(); - if (!calledRun) dependenciesFulfilled = runCaller - }; - - function callMain(args = []) { - var entryFunction = resolveGlobalSymbol("main").sym; - if (!entryFunction) return; - args.unshift(thisProgram); - var argc = args.length; - var argv = stackAlloc((argc + 1) * 4); - var argv_ptr = argv >> 2; - args.forEach(arg => { - HEAP32[argv_ptr++] = stringToUTF8OnStack(arg) - }); - HEAP32[argv_ptr] = 0; - try { - var ret = entryFunction(argc, argv); - exitJS(ret, true); - return ret - } catch (e) { - return handleException(e) - } - } - var dylibsLoaded = false; - LDSO.init(); - - function run(args = arguments_) { - if (runDependencies > 0) { - return - } - if (!dylibsLoaded) { - loadDylibs(); - dylibsLoaded = true; - if (runDependencies > 0) { - return - } - } - preRun(); - if (runDependencies > 0) { - return - } - - function doRun() { - if (calledRun) return; - calledRun = true; - Module["calledRun"] = true; - if (ABORT) return; - initRuntime(); - preMain(); - if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"](); - if (shouldRunNow) callMain(args); - postRun() - } - if (Module["setStatus"]) { - Module["setStatus"]("Running..."); - setTimeout(function() { - setTimeout(function() { - Module["setStatus"]("") - }, 1); - doRun() - }, 1) - } else { - doRun() - } - } - if (Module["preInit"]) { - if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]]; - while (Module["preInit"].length > 0) { - Module["preInit"].pop()() - } - } - var shouldRunNow = true; - if (Module["noInitialRun"]) shouldRunNow = false; - run(); - const C = Module; - const INTERNAL = {}; - const SIZE_OF_INT = 4; - const SIZE_OF_CURSOR = 3 * SIZE_OF_INT; - const SIZE_OF_NODE = 5 * SIZE_OF_INT; - const SIZE_OF_POINT = 2 * SIZE_OF_INT; - const SIZE_OF_RANGE = 2 * SIZE_OF_INT + 2 * SIZE_OF_POINT; - const ZERO_POINT = { - row: 0, - column: 0 - }; - const QUERY_WORD_REGEX = /[\w-.]*/g; - const PREDICATE_STEP_TYPE_CAPTURE = 1; - const PREDICATE_STEP_TYPE_STRING = 2; - const LANGUAGE_FUNCTION_REGEX = /^_?tree_sitter_\w+/; - var VERSION; - var MIN_COMPATIBLE_VERSION; - var TRANSFER_BUFFER; - var currentParseCallback; - var currentLogCallback; - class ParserImpl { - static init() { - TRANSFER_BUFFER = C._ts_init(); - VERSION = getValue(TRANSFER_BUFFER, "i32"); - MIN_COMPATIBLE_VERSION = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32") - } - initialize() { - C._ts_parser_new_wasm(); - this[0] = getValue(TRANSFER_BUFFER, "i32"); - this[1] = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32") - } - delete() { - C._ts_parser_delete(this[0]); - C._free(this[1]); - this[0] = 0; - this[1] = 0 - } - setLanguage(language) { - let address; - if (!language) { - address = 0; - language = null - } else if (language.constructor === Language) { - address = language[0]; - const version = C._ts_language_version(address); - if (version < MIN_COMPATIBLE_VERSION || VERSION < version) { - throw new Error(`Incompatible language version ${version}. ` + `Compatibility range ${MIN_COMPATIBLE_VERSION} through ${VERSION}.`) - } - } else { - throw new Error("Argument must be a Language") - } - this.language = language; - C._ts_parser_set_language(this[0], address); - return this - } - getLanguage() { - return this.language - } - parse(callback, oldTree, options) { - if (typeof callback === "string") { - currentParseCallback = (index, _, endIndex) => callback.slice(index, endIndex) - } else if (typeof callback === "function") { - currentParseCallback = callback - } else { - throw new Error("Argument must be a string or a function") - } - if (this.logCallback) { - currentLogCallback = this.logCallback; - C._ts_parser_enable_logger_wasm(this[0], 1) - } else { - currentLogCallback = null; - C._ts_parser_enable_logger_wasm(this[0], 0) - } - let rangeCount = 0; - let rangeAddress = 0; - if (options && options.includedRanges) { - rangeCount = options.includedRanges.length; - rangeAddress = C._calloc(rangeCount, SIZE_OF_RANGE); - let address = rangeAddress; - for (let i = 0; i < rangeCount; i++) { - marshalRange(address, options.includedRanges[i]); - address += SIZE_OF_RANGE - } - } - const treeAddress = C._ts_parser_parse_wasm(this[0], this[1], oldTree ? oldTree[0] : 0, rangeAddress, rangeCount); - if (!treeAddress) { - currentParseCallback = null; - currentLogCallback = null; - throw new Error("Parsing failed") - } - const result = new Tree(INTERNAL, treeAddress, this.language, currentParseCallback); - currentParseCallback = null; - currentLogCallback = null; - return result - } - reset() { - C._ts_parser_reset(this[0]) - } - setTimeoutMicros(timeout) { - C._ts_parser_set_timeout_micros(this[0], timeout) - } - getTimeoutMicros() { - return C._ts_parser_timeout_micros(this[0]) - } - setLogger(callback) { - if (!callback) { - callback = null - } else if (typeof callback !== "function") { - throw new Error("Logger callback must be a function") - } - this.logCallback = callback; - return this - } - getLogger() { - return this.logCallback - } - } - class Tree { - constructor(internal, address, language, textCallback) { - assertInternal(internal); - this[0] = address; - this.language = language; - this.textCallback = textCallback - } - copy() { - const address = C._ts_tree_copy(this[0]); - return new Tree(INTERNAL, address, this.language, this.textCallback) - } - delete() { - C._ts_tree_delete(this[0]); - this[0] = 0 - } - edit(edit) { - marshalEdit(edit); - C._ts_tree_edit_wasm(this[0]) - } - get rootNode() { - C._ts_tree_root_node_wasm(this[0]); - return unmarshalNode(this) - } - getLanguage() { - return this.language - } - walk() { - return this.rootNode.walk() - } - getChangedRanges(other) { - if (other.constructor !== Tree) { - throw new TypeError("Argument must be a Tree") - } - C._ts_tree_get_changed_ranges_wasm(this[0], other[0]); - const count = getValue(TRANSFER_BUFFER, "i32"); - const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); - const result = new Array(count); - if (count > 0) { - let address = buffer; - for (let i = 0; i < count; i++) { - result[i] = unmarshalRange(address); - address += SIZE_OF_RANGE - } - C._free(buffer) - } - return result - } - } - class Node { - constructor(internal, tree) { - assertInternal(internal); - this.tree = tree - } - get typeId() { - marshalNode(this); - return C._ts_node_symbol_wasm(this.tree[0]) - } - get grammarId() { - marshalNode(this); - return C._ts_node_grammar_symbol_wasm(this.tree[0]) - } - get type() { - return this.tree.language.types[this.typeId] || "ERROR" - } - get grammarType() { - return this.tree.language.types[this.grammarId] || "ERROR" - } - get endPosition() { - marshalNode(this); - C._ts_node_end_point_wasm(this.tree[0]); - return unmarshalPoint(TRANSFER_BUFFER) - } - get endIndex() { - marshalNode(this); - return C._ts_node_end_index_wasm(this.tree[0]) - } - get text() { - return getText(this.tree, this.startIndex, this.endIndex) - } - get parseState() { - marshalNode(this); - return C._ts_node_parse_state_wasm(this.tree[0]) - } - get nextParseState() { - marshalNode(this); - return C._ts_node_next_parse_state_wasm(this.tree[0]) - } - isNamed() { - marshalNode(this); - return C._ts_node_is_named_wasm(this.tree[0]) === 1 - } - hasError() { - marshalNode(this); - return C._ts_node_has_error_wasm(this.tree[0]) === 1 - } - hasChanges() { - marshalNode(this); - return C._ts_node_has_changes_wasm(this.tree[0]) === 1 - } - isError() { - marshalNode(this); - return C._ts_node_is_error_wasm(this.tree[0]) === 1 - } - isMissing() { - marshalNode(this); - return C._ts_node_is_missing_wasm(this.tree[0]) === 1 - } - equals(other) { - return this.id === other.id - } - child(index) { - marshalNode(this); - C._ts_node_child_wasm(this.tree[0], index); - return unmarshalNode(this.tree) - } - fieldNameForChild(index) { - marshalNode(this); - const address = C._ts_node_field_name_for_child_wasm(this.tree[0], index); - if (!address) { - return null - } - const result = AsciiToString(address); - return result - } - namedChild(index) { - marshalNode(this); - C._ts_node_named_child_wasm(this.tree[0], index); - return unmarshalNode(this.tree) - } - childForFieldId(fieldId) { - marshalNode(this); - C._ts_node_child_by_field_id_wasm(this.tree[0], fieldId); - return unmarshalNode(this.tree) - } - childForFieldName(fieldName) { - const fieldId = this.tree.language.fields.indexOf(fieldName); - if (fieldId !== -1) return this.childForFieldId(fieldId) - } - get childCount() { - marshalNode(this); - return C._ts_node_child_count_wasm(this.tree[0]) - } - get namedChildCount() { - marshalNode(this); - return C._ts_node_named_child_count_wasm(this.tree[0]) - } - get firstChild() { - return this.child(0) - } - get firstNamedChild() { - return this.namedChild(0) - } - get lastChild() { - return this.child(this.childCount - 1) - } - get lastNamedChild() { - return this.namedChild(this.namedChildCount - 1) - } - get children() { - if (!this._children) { - marshalNode(this); - C._ts_node_children_wasm(this.tree[0]); - const count = getValue(TRANSFER_BUFFER, "i32"); - const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); - this._children = new Array(count); - if (count > 0) { - let address = buffer; - for (let i = 0; i < count; i++) { - this._children[i] = unmarshalNode(this.tree, address); - address += SIZE_OF_NODE - } - C._free(buffer) - } - } - return this._children - } - get namedChildren() { - if (!this._namedChildren) { - marshalNode(this); - C._ts_node_named_children_wasm(this.tree[0]); - const count = getValue(TRANSFER_BUFFER, "i32"); - const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); - this._namedChildren = new Array(count); - if (count > 0) { - let address = buffer; - for (let i = 0; i < count; i++) { - this._namedChildren[i] = unmarshalNode(this.tree, address); - address += SIZE_OF_NODE - } - C._free(buffer) - } - } - return this._namedChildren - } - descendantsOfType(types, startPosition, endPosition) { - if (!Array.isArray(types)) types = [types]; - if (!startPosition) startPosition = ZERO_POINT; - if (!endPosition) endPosition = ZERO_POINT; - const symbols = []; - const typesBySymbol = this.tree.language.types; - for (let i = 0, n = typesBySymbol.length; i < n; i++) { - if (types.includes(typesBySymbol[i])) { - symbols.push(i) - } - } - const symbolsAddress = C._malloc(SIZE_OF_INT * symbols.length); - for (let i = 0, n = symbols.length; i < n; i++) { - setValue(symbolsAddress + i * SIZE_OF_INT, symbols[i], "i32") - } - marshalNode(this); - C._ts_node_descendants_of_type_wasm(this.tree[0], symbolsAddress, symbols.length, startPosition.row, startPosition.column, endPosition.row, endPosition.column); - const descendantCount = getValue(TRANSFER_BUFFER, "i32"); - const descendantAddress = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); - const result = new Array(descendantCount); - if (descendantCount > 0) { - let address = descendantAddress; - for (let i = 0; i < descendantCount; i++) { - result[i] = unmarshalNode(this.tree, address); - address += SIZE_OF_NODE - } - } - C._free(descendantAddress); - C._free(symbolsAddress); - return result - } - get nextSibling() { - marshalNode(this); - C._ts_node_next_sibling_wasm(this.tree[0]); - return unmarshalNode(this.tree) - } - get previousSibling() { - marshalNode(this); - C._ts_node_prev_sibling_wasm(this.tree[0]); - return unmarshalNode(this.tree) - } - get nextNamedSibling() { - marshalNode(this); - C._ts_node_next_named_sibling_wasm(this.tree[0]); - return unmarshalNode(this.tree) - } - get previousNamedSibling() { - marshalNode(this); - C._ts_node_prev_named_sibling_wasm(this.tree[0]); - return unmarshalNode(this.tree) - } - get parent() { - marshalNode(this); - C._ts_node_parent_wasm(this.tree[0]); - return unmarshalNode(this.tree) - } - descendantForIndex(start, end = start) { - if (typeof start !== "number" || typeof end !== "number") { - throw new Error("Arguments must be numbers") - } - marshalNode(this); - let address = TRANSFER_BUFFER + SIZE_OF_NODE; - setValue(address, start, "i32"); - setValue(address + SIZE_OF_INT, end, "i32"); - C._ts_node_descendant_for_index_wasm(this.tree[0]); - return unmarshalNode(this.tree) - } - namedDescendantForIndex(start, end = start) { - if (typeof start !== "number" || typeof end !== "number") { - throw new Error("Arguments must be numbers") - } - marshalNode(this); - let address = TRANSFER_BUFFER + SIZE_OF_NODE; - setValue(address, start, "i32"); - setValue(address + SIZE_OF_INT, end, "i32"); - C._ts_node_named_descendant_for_index_wasm(this.tree[0]); - return unmarshalNode(this.tree) - } - descendantForPosition(start, end = start) { - if (!isPoint(start) || !isPoint(end)) { - throw new Error("Arguments must be {row, column} objects") - } - marshalNode(this); - let address = TRANSFER_BUFFER + SIZE_OF_NODE; - marshalPoint(address, start); - marshalPoint(address + SIZE_OF_POINT, end); - C._ts_node_descendant_for_position_wasm(this.tree[0]); - return unmarshalNode(this.tree) - } - namedDescendantForPosition(start, end = start) { - if (!isPoint(start) || !isPoint(end)) { - throw new Error("Arguments must be {row, column} objects") - } - marshalNode(this); - let address = TRANSFER_BUFFER + SIZE_OF_NODE; - marshalPoint(address, start); - marshalPoint(address + SIZE_OF_POINT, end); - C._ts_node_named_descendant_for_position_wasm(this.tree[0]); - return unmarshalNode(this.tree) - } - walk() { - marshalNode(this); - C._ts_tree_cursor_new_wasm(this.tree[0]); - return new TreeCursor(INTERNAL, this.tree) - } - toString() { - marshalNode(this); - const address = C._ts_node_to_string_wasm(this.tree[0]); - const result = AsciiToString(address); - C._free(address); - return result - } - } - class TreeCursor { - constructor(internal, tree) { - assertInternal(internal); - this.tree = tree; - unmarshalTreeCursor(this) - } - delete() { - marshalTreeCursor(this); - C._ts_tree_cursor_delete_wasm(this.tree[0]); - this[0] = this[1] = this[2] = 0 - } - reset(node) { - marshalNode(node); - marshalTreeCursor(this, TRANSFER_BUFFER + SIZE_OF_NODE); - C._ts_tree_cursor_reset_wasm(this.tree[0]); - unmarshalTreeCursor(this) - } - resetTo(cursor) { - marshalTreeCursor(this, TRANSFER_BUFFER); - marshalTreeCursor(cursor, TRANSFER_BUFFER + SIZE_OF_CURSOR); - C._ts_tree_cursor_reset_to_wasm(this.tree[0], cursor.tree[0]); - unmarshalTreeCursor(this) - } - get nodeType() { - return this.tree.language.types[this.nodeTypeId] || "ERROR" - } - get nodeTypeId() { - marshalTreeCursor(this); - return C._ts_tree_cursor_current_node_type_id_wasm(this.tree[0]) - } - get nodeStateId() { - marshalTreeCursor(this); - return C._ts_tree_cursor_current_node_state_id_wasm(this.tree[0]) - } - get nodeId() { - marshalTreeCursor(this); - return C._ts_tree_cursor_current_node_id_wasm(this.tree[0]) - } - get nodeIsNamed() { - marshalTreeCursor(this); - return C._ts_tree_cursor_current_node_is_named_wasm(this.tree[0]) === 1 - } - get nodeIsMissing() { - marshalTreeCursor(this); - return C._ts_tree_cursor_current_node_is_missing_wasm(this.tree[0]) === 1 - } - get nodeText() { - marshalTreeCursor(this); - const startIndex = C._ts_tree_cursor_start_index_wasm(this.tree[0]); - const endIndex = C._ts_tree_cursor_end_index_wasm(this.tree[0]); - return getText(this.tree, startIndex, endIndex) - } - get startPosition() { - marshalTreeCursor(this); - C._ts_tree_cursor_start_position_wasm(this.tree[0]); - return unmarshalPoint(TRANSFER_BUFFER) - } - get endPosition() { - marshalTreeCursor(this); - C._ts_tree_cursor_end_position_wasm(this.tree[0]); - return unmarshalPoint(TRANSFER_BUFFER) - } - get startIndex() { - marshalTreeCursor(this); - return C._ts_tree_cursor_start_index_wasm(this.tree[0]) - } - get endIndex() { - marshalTreeCursor(this); - return C._ts_tree_cursor_end_index_wasm(this.tree[0]) - } - currentNode() { - marshalTreeCursor(this); - C._ts_tree_cursor_current_node_wasm(this.tree[0]); - return unmarshalNode(this.tree) - } - currentFieldId() { - marshalTreeCursor(this); - return C._ts_tree_cursor_current_field_id_wasm(this.tree[0]) - } - currentFieldName() { - return this.tree.language.fields[this.currentFieldId()] - } - gotoFirstChild() { - marshalTreeCursor(this); - const result = C._ts_tree_cursor_goto_first_child_wasm(this.tree[0]); - unmarshalTreeCursor(this); - return result === 1 - } - gotoLastChild() { - marshalTreeCursor(this); - const result = C._ts_tree_cursor_goto_last_child_wasm(this.tree[0]); - unmarshalTreeCursor(this); - return result === 1 - } - gotoNextSibling() { - marshalTreeCursor(this); - const result = C._ts_tree_cursor_goto_next_sibling_wasm(this.tree[0]); - unmarshalTreeCursor(this); - return result === 1 - } - gotoPreviousSibling() { - marshalTreeCursor(this); - const result = C._ts_tree_cursor_goto_previous_sibling_wasm(this.tree[0]); - unmarshalTreeCursor(this); - return result === 1 - } - gotoParent() { - marshalTreeCursor(this); - const result = C._ts_tree_cursor_goto_parent_wasm(this.tree[0]); - unmarshalTreeCursor(this); - return result === 1 - } - } - class Language { - constructor(internal, address) { - assertInternal(internal); - this[0] = address; - this.types = new Array(C._ts_language_symbol_count(this[0])); - for (let i = 0, n = this.types.length; i < n; i++) { - if (C._ts_language_symbol_type(this[0], i) < 2) { - this.types[i] = UTF8ToString(C._ts_language_symbol_name(this[0], i)) - } - } - this.fields = new Array(C._ts_language_field_count(this[0]) + 1); - for (let i = 0, n = this.fields.length; i < n; i++) { - const fieldName = C._ts_language_field_name_for_id(this[0], i); - if (fieldName !== 0) { - this.fields[i] = UTF8ToString(fieldName) - } else { - this.fields[i] = null - } - } - } - get version() { - return C._ts_language_version(this[0]) - } - get fieldCount() { - return this.fields.length - 1 - } - get stateCount() { - return C._ts_language_state_count(this[0]) - } - fieldIdForName(fieldName) { - const result = this.fields.indexOf(fieldName); - if (result !== -1) { - return result - } else { - return null - } - } - fieldNameForId(fieldId) { - return this.fields[fieldId] || null - } - idForNodeType(type, named) { - const typeLength = lengthBytesUTF8(type); - const typeAddress = C._malloc(typeLength + 1); - stringToUTF8(type, typeAddress, typeLength + 1); - const result = C._ts_language_symbol_for_name(this[0], typeAddress, typeLength, named); - C._free(typeAddress); - return result || null - } - get nodeTypeCount() { - return C._ts_language_symbol_count(this[0]) - } - nodeTypeForId(typeId) { - const name = C._ts_language_symbol_name(this[0], typeId); - return name ? UTF8ToString(name) : null - } - nodeTypeIsNamed(typeId) { - return C._ts_language_type_is_named_wasm(this[0], typeId) ? true : false - } - nodeTypeIsVisible(typeId) { - return C._ts_language_type_is_visible_wasm(this[0], typeId) ? true : false - } - nextState(stateId, typeId) { - return C._ts_language_next_state(this[0], stateId, typeId) - } - lookaheadIterator(stateId) { - const address = C._ts_lookahead_iterator_new(this[0], stateId); - if (address) return new LookaheadIterable(INTERNAL, address, this) - } - query(source) { - const sourceLength = lengthBytesUTF8(source); - const sourceAddress = C._malloc(sourceLength + 1); - stringToUTF8(source, sourceAddress, sourceLength + 1); - const address = C._ts_query_new(this[0], sourceAddress, sourceLength, TRANSFER_BUFFER, TRANSFER_BUFFER + SIZE_OF_INT); - if (!address) { - const errorId = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); - const errorByte = getValue(TRANSFER_BUFFER, "i32"); - const errorIndex = UTF8ToString(sourceAddress, errorByte).length; - const suffix = source.substr(errorIndex, 100).split("\n")[0]; - let word = suffix.match(QUERY_WORD_REGEX)[0]; - let error; - switch (errorId) { - case 2: - error = new RangeError(`Bad node name '${word}'`); - break; - case 3: - error = new RangeError(`Bad field name '${word}'`); - break; - case 4: - error = new RangeError(`Bad capture name @${word}`); - break; - case 5: - error = new TypeError(`Bad pattern structure at offset ${errorIndex}: '${suffix}'...`); - word = ""; - break; - default: - error = new SyntaxError(`Bad syntax at offset ${errorIndex}: '${suffix}'...`); - word = ""; - break - } - error.index = errorIndex; - error.length = word.length; - C._free(sourceAddress); - throw error - } - const stringCount = C._ts_query_string_count(address); - const captureCount = C._ts_query_capture_count(address); - const patternCount = C._ts_query_pattern_count(address); - const captureNames = new Array(captureCount); - const stringValues = new Array(stringCount); - for (let i = 0; i < captureCount; i++) { - const nameAddress = C._ts_query_capture_name_for_id(address, i, TRANSFER_BUFFER); - const nameLength = getValue(TRANSFER_BUFFER, "i32"); - captureNames[i] = UTF8ToString(nameAddress, nameLength) - } - for (let i = 0; i < stringCount; i++) { - const valueAddress = C._ts_query_string_value_for_id(address, i, TRANSFER_BUFFER); - const nameLength = getValue(TRANSFER_BUFFER, "i32"); - stringValues[i] = UTF8ToString(valueAddress, nameLength) - } - const setProperties = new Array(patternCount); - const assertedProperties = new Array(patternCount); - const refutedProperties = new Array(patternCount); - const predicates = new Array(patternCount); - const textPredicates = new Array(patternCount); - for (let i = 0; i < patternCount; i++) { - const predicatesAddress = C._ts_query_predicates_for_pattern(address, i, TRANSFER_BUFFER); - const stepCount = getValue(TRANSFER_BUFFER, "i32"); - predicates[i] = []; - textPredicates[i] = []; - const steps = []; - let stepAddress = predicatesAddress; - for (let j = 0; j < stepCount; j++) { - const stepType = getValue(stepAddress, "i32"); - stepAddress += SIZE_OF_INT; - const stepValueId = getValue(stepAddress, "i32"); - stepAddress += SIZE_OF_INT; - if (stepType === PREDICATE_STEP_TYPE_CAPTURE) { - steps.push({ - type: "capture", - name: captureNames[stepValueId] - }) - } else if (stepType === PREDICATE_STEP_TYPE_STRING) { - steps.push({ - type: "string", - value: stringValues[stepValueId] - }) - } else if (steps.length > 0) { - if (steps[0].type !== "string") { - throw new Error("Predicates must begin with a literal value") - } - const operator = steps[0].value; - let isPositive = true; - let matchAll = true; - let captureName; - switch (operator) { - case "any-not-eq?": - case "not-eq?": - isPositive = false; - case "any-eq?": - case "eq?": - if (steps.length !== 3) throw new Error(`Wrong number of arguments to \`#${operator}\` predicate. Expected 2, got ${steps.length-1}`); - if (steps[1].type !== "capture") throw new Error(`First argument of \`#${operator}\` predicate must be a capture. Got "${steps[1].value}"`); - matchAll = !operator.startsWith("any-"); - if (steps[2].type === "capture") { - const captureName1 = steps[1].name; - const captureName2 = steps[2].name; - textPredicates[i].push(function(captures) { - let nodes_1 = []; - let nodes_2 = []; - for (const c of captures) { - if (c.name === captureName1) nodes_1.push(c.node); - if (c.name === captureName2) nodes_2.push(c.node) - } - let compare = (n1, n2, positive) => { - return positive ? n1.text === n2.text : n1.text !== n2.text - }; - return matchAll ? nodes_1.every(n1 => nodes_2.some(n2 => compare(n1, n2, isPositive))) : nodes_1.some(n1 => nodes_2.some(n2 => compare(n1, n2, isPositive))) - }) - } else { - captureName = steps[1].name; - const stringValue = steps[2].value; - let matches = n => n.text === stringValue; - let doesNotMatch = n => n.text !== stringValue; - textPredicates[i].push(function(captures) { - let nodes = []; - for (const c of captures) { - if (c.name === captureName) nodes.push(c.node) - } - let test = isPositive ? matches : doesNotMatch; - return matchAll ? nodes.every(test) : nodes.some(test) - }) - } - break; - case "any-not-match?": - case "not-match?": - isPositive = false; - case "any-match?": - case "match?": - if (steps.length !== 3) throw new Error(`Wrong number of arguments to \`#${operator}\` predicate. Expected 2, got ${steps.length-1}.`); - if (steps[1].type !== "capture") throw new Error(`First argument of \`#${operator}\` predicate must be a capture. Got "${steps[1].value}".`); - if (steps[2].type !== "string") throw new Error(`Second argument of \`#${operator}\` predicate must be a string. Got @${steps[2].value}.`); - captureName = steps[1].name; - const regex = new RegExp(steps[2].value); - matchAll = !operator.startsWith("any-"); - textPredicates[i].push(function(captures) { - const nodes = []; - for (const c of captures) { - if (c.name === captureName) nodes.push(c.node.text) - } - let test = (text, positive) => { - return positive ? regex.test(text) : !regex.test(text) - }; - if (nodes.length === 0) return !isPositive; - return matchAll ? nodes.every(text => test(text, isPositive)) : nodes.some(text => test(text, isPositive)) - }); - break; - case "set!": - if (steps.length < 2 || steps.length > 3) throw new Error(`Wrong number of arguments to \`#set!\` predicate. Expected 1 or 2. Got ${steps.length-1}.`); - if (steps.some(s => s.type !== "string")) throw new Error(`Arguments to \`#set!\` predicate must be a strings.".`); - if (!setProperties[i]) setProperties[i] = {}; - setProperties[i][steps[1].value] = steps[2] ? steps[2].value : null; - break; - case "is?": - case "is-not?": - if (steps.length < 2 || steps.length > 3) throw new Error(`Wrong number of arguments to \`#${operator}\` predicate. Expected 1 or 2. Got ${steps.length-1}.`); - if (steps.some(s => s.type !== "string")) throw new Error(`Arguments to \`#${operator}\` predicate must be a strings.".`); - const properties = operator === "is?" ? assertedProperties : refutedProperties; - if (!properties[i]) properties[i] = {}; - properties[i][steps[1].value] = steps[2] ? steps[2].value : null; - break; - case "not-any-of?": - isPositive = false; - case "any-of?": - if (steps.length < 2) throw new Error(`Wrong number of arguments to \`#${operator}\` predicate. Expected at least 1. Got ${steps.length-1}.`); - if (steps[1].type !== "capture") throw new Error(`First argument of \`#${operator}\` predicate must be a capture. Got "${steps[1].value}".`); - for (let i = 2; i < steps.length; i++) { - if (steps[i].type !== "string") throw new Error(`Arguments to \`#${operator}\` predicate must be a strings.".`) - } - captureName = steps[1].name; - const values = steps.slice(2).map(s => s.value); - textPredicates[i].push(function(captures) { - const nodes = []; - for (const c of captures) { - if (c.name === captureName) nodes.push(c.node.text) - } - if (nodes.length === 0) return !isPositive; - return nodes.every(text => values.includes(text)) === isPositive - }); - break; - default: - predicates[i].push({ - operator: operator, - operands: steps.slice(1) - }) - } - steps.length = 0 - } - } - Object.freeze(setProperties[i]); - Object.freeze(assertedProperties[i]); - Object.freeze(refutedProperties[i]) - } - C._free(sourceAddress); - return new Query(INTERNAL, address, captureNames, textPredicates, predicates, Object.freeze(setProperties), Object.freeze(assertedProperties), Object.freeze(refutedProperties)) - } - static load(input) { - let bytes; - if (input instanceof Uint8Array) { - bytes = Promise.resolve(input) - } else { - const url = input; - if (typeof process !== "undefined" && process.versions && process.versions.node) { - const fs = require("fs"); - bytes = Promise.resolve(fs.readFileSync(url)) - } else { - bytes = fetch(url).then(response => response.arrayBuffer().then(buffer => { - if (response.ok) { - return new Uint8Array(buffer) - } else { - const body = new TextDecoder("utf-8").decode(buffer); - throw new Error(`Language.load failed with status ${response.status}.\n\n${body}`) - } - })) - } - } - return bytes.then(bytes => loadWebAssemblyModule(bytes, { - loadAsync: true - })).then(mod => { - const symbolNames = Object.keys(mod); - const functionName = symbolNames.find(key => LANGUAGE_FUNCTION_REGEX.test(key) && !key.includes("external_scanner_")); - if (!functionName) { - console.log(`Couldn't find language function in WASM file. Symbols:\n${JSON.stringify(symbolNames,null,2)}`) - } - const languageAddress = mod[functionName](); - return new Language(INTERNAL, languageAddress) - }) - } - } - class LookaheadIterable { - constructor(internal, address, language) { - assertInternal(internal); - this[0] = address; - this.language = language - } - get currentTypeId() { - return C._ts_lookahead_iterator_current_symbol(this[0]) - } - get currentType() { - return this.language.types[this.currentTypeId] || "ERROR" - } - delete() { - C._ts_lookahead_iterator_delete(this[0]); - this[0] = 0 - } - resetState(stateId) { - return C._ts_lookahead_iterator_reset_state(this[0], stateId) - } - reset(language, stateId) { - if (C._ts_lookahead_iterator_reset(this[0], language[0], stateId)) { - this.language = language; - return true - } - return false - } [Symbol.iterator]() { - const self = this; - return { - next() { - if (C._ts_lookahead_iterator_next(self[0])) { - return { - done: false, - value: self.currentType - } - } - return { - done: true, - value: "" - } - } - } - } - } - class Query { - constructor(internal, address, captureNames, textPredicates, predicates, setProperties, assertedProperties, refutedProperties) { - assertInternal(internal); - this[0] = address; - this.captureNames = captureNames; - this.textPredicates = textPredicates; - this.predicates = predicates; - this.setProperties = setProperties; - this.assertedProperties = assertedProperties; - this.refutedProperties = refutedProperties; - this.exceededMatchLimit = false - } - delete() { - C._ts_query_delete(this[0]); - this[0] = 0 - } - matches(node, startPosition, endPosition, options) { - if (!startPosition) startPosition = ZERO_POINT; - if (!endPosition) endPosition = ZERO_POINT; - if (!options) options = {}; - let matchLimit = options.matchLimit; - if (typeof matchLimit === "undefined") { - matchLimit = 0 - } else if (typeof matchLimit !== "number") { - throw new Error("Arguments must be numbers") - } - marshalNode(node); - C._ts_query_matches_wasm(this[0], node.tree[0], startPosition.row, startPosition.column, endPosition.row, endPosition.column, matchLimit); - const rawCount = getValue(TRANSFER_BUFFER, "i32"); - const startAddress = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); - const didExceedMatchLimit = getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, "i32"); - const result = new Array(rawCount); - this.exceededMatchLimit = !!didExceedMatchLimit; - let filteredCount = 0; - let address = startAddress; - for (let i = 0; i < rawCount; i++) { - const pattern = getValue(address, "i32"); - address += SIZE_OF_INT; - const captureCount = getValue(address, "i32"); - address += SIZE_OF_INT; - const captures = new Array(captureCount); - address = unmarshalCaptures(this, node.tree, address, captures); - if (this.textPredicates[pattern].every(p => p(captures))) { - result[filteredCount++] = { - pattern: pattern, - captures: captures - }; - const setProperties = this.setProperties[pattern]; - if (setProperties) result[i].setProperties = setProperties; - const assertedProperties = this.assertedProperties[pattern]; - if (assertedProperties) result[i].assertedProperties = assertedProperties; - const refutedProperties = this.refutedProperties[pattern]; - if (refutedProperties) result[i].refutedProperties = refutedProperties - } - } - result.length = filteredCount; - C._free(startAddress); - return result - } - captures(node, startPosition, endPosition, options) { - if (!startPosition) startPosition = ZERO_POINT; - if (!endPosition) endPosition = ZERO_POINT; - if (!options) options = {}; - let matchLimit = options.matchLimit; - if (typeof matchLimit === "undefined") { - matchLimit = 0 - } else if (typeof matchLimit !== "number") { - throw new Error("Arguments must be numbers") - } - marshalNode(node); - C._ts_query_captures_wasm(this[0], node.tree[0], startPosition.row, startPosition.column, endPosition.row, endPosition.column, matchLimit); - const count = getValue(TRANSFER_BUFFER, "i32"); - const startAddress = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); - const didExceedMatchLimit = getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, "i32"); - const result = []; - this.exceededMatchLimit = !!didExceedMatchLimit; - const captures = []; - let address = startAddress; - for (let i = 0; i < count; i++) { - const pattern = getValue(address, "i32"); - address += SIZE_OF_INT; - const captureCount = getValue(address, "i32"); - address += SIZE_OF_INT; - const captureIndex = getValue(address, "i32"); - address += SIZE_OF_INT; - captures.length = captureCount; - address = unmarshalCaptures(this, node.tree, address, captures); - if (this.textPredicates[pattern].every(p => p(captures))) { - const capture = captures[captureIndex]; - const setProperties = this.setProperties[pattern]; - if (setProperties) capture.setProperties = setProperties; - const assertedProperties = this.assertedProperties[pattern]; - if (assertedProperties) capture.assertedProperties = assertedProperties; - const refutedProperties = this.refutedProperties[pattern]; - if (refutedProperties) capture.refutedProperties = refutedProperties; - result.push(capture) - } - } - C._free(startAddress); - return result - } - predicatesForPattern(patternIndex) { - return this.predicates[patternIndex] - } - didExceedMatchLimit() { - return this.exceededMatchLimit - } - } - - function getText(tree, startIndex, endIndex) { - const length = endIndex - startIndex; - let result = tree.textCallback(startIndex, null, endIndex); - startIndex += result.length; - while (startIndex < endIndex) { - const string = tree.textCallback(startIndex, null, endIndex); - if (string && string.length > 0) { - startIndex += string.length; - result += string - } else { - break - } - } - if (startIndex > endIndex) { - result = result.slice(0, length) - } - return result - } - - function unmarshalCaptures(query, tree, address, result) { - for (let i = 0, n = result.length; i < n; i++) { - const captureIndex = getValue(address, "i32"); - address += SIZE_OF_INT; - const node = unmarshalNode(tree, address); - address += SIZE_OF_NODE; - result[i] = { - name: query.captureNames[captureIndex], - node: node - } - } - return address - } - function assertInternal(x) { - if (x !== INTERNAL) throw new Error("Illegal constructor") - } - - function isPoint(point) { - return point && typeof point.row === "number" && typeof point.column === "number" - } - - function marshalNode(node) { - let address = TRANSFER_BUFFER; - setValue(address, node.id, "i32"); - address += SIZE_OF_INT; - setValue(address, node.startIndex, "i32"); - address += SIZE_OF_INT; - setValue(address, node.startPosition.row, "i32"); - address += SIZE_OF_INT; - setValue(address, node.startPosition.column, "i32"); - address += SIZE_OF_INT; - setValue(address, node[0], "i32") - } - - function unmarshalNode(tree, address = TRANSFER_BUFFER) { - const id = getValue(address, "i32"); - address += SIZE_OF_INT; - if (id === 0) return null; - const index = getValue(address, "i32"); - address += SIZE_OF_INT; - const row = getValue(address, "i32"); - address += SIZE_OF_INT; - const column = getValue(address, "i32"); - address += SIZE_OF_INT; - const other = getValue(address, "i32"); - const result = new Node(INTERNAL, tree); - result.id = id; - result.startIndex = index; - result.startPosition = { - row: row, - column: column - }; - result[0] = other; - return result - } - - function marshalTreeCursor(cursor, address = TRANSFER_BUFFER) { - setValue(address + 0 * SIZE_OF_INT, cursor[0], "i32"), setValue(address + 1 * SIZE_OF_INT, cursor[1], "i32"), setValue(address + 2 * SIZE_OF_INT, cursor[2], "i32") - } +function checkForAsmVersion(prop) { + if (!(prop in Module['asm'])) { + console.warn(`Warning: parser wants to call function ${prop}, but it is not defined. If parsing fails, this is probably the reason why. Please report this to the Pulsar team so that this parser can be supported properly.`); + } +} - function unmarshalTreeCursor(cursor) { - cursor[0] = getValue(TRANSFER_BUFFER + 0 * SIZE_OF_INT, "i32"), cursor[1] = getValue(TRANSFER_BUFFER + 1 * SIZE_OF_INT, "i32"), cursor[2] = getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, "i32") - } +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == "object"; - function marshalPoint(address, point) { - setValue(address, point.row, "i32"); - setValue(address + SIZE_OF_INT, point.column, "i32") - } +var ENVIRONMENT_IS_WORKER = typeof importScripts == "function"; - function unmarshalPoint(address) { - return { - row: getValue(address, "i32"), - column: getValue(address + SIZE_OF_INT, "i32") - } - } +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string"; - function marshalRange(address, range) { - marshalPoint(address, range.startPosition); - address += SIZE_OF_POINT; - marshalPoint(address, range.endPosition); - address += SIZE_OF_POINT; - setValue(address, range.startIndex, "i32"); - address += SIZE_OF_INT; - setValue(address, range.endIndex, "i32"); - address += SIZE_OF_INT - } +if (ENVIRONMENT_IS_NODE) {} - function unmarshalRange(address) { - const result = {}; - result.startPosition = unmarshalPoint(address); - address += SIZE_OF_POINT; - result.endPosition = unmarshalPoint(address); - address += SIZE_OF_POINT; - result.startIndex = getValue(address, "i32"); - address += SIZE_OF_INT; - result.endIndex = getValue(address, "i32"); - return result +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) +// include: /Users/andrew/Code/tree-sitter/tree-sitter/lib/binding_web/prefix.js +var TreeSitter = function() { + var initPromise; + var document = typeof window == "object" ? { + currentScript: window.document.currentScript + } : null; + class Parser { + constructor() { + this.initialize(); + } + initialize() { + throw new Error("cannot construct a Parser before calling `init()`"); + } + static init(moduleOptions) { + if (initPromise) return initPromise; + Module = Object.assign({}, Module, moduleOptions); + return initPromise = new Promise(resolveInitPromise => { + // end include: /Users/andrew/Code/tree-sitter/tree-sitter/lib/binding_web/prefix.js + // Sometimes an existing Module object exists with properties + // meant to overwrite the default module functionality. Here + // we collect those properties and reapply _after_ we configure + // the current environment's defaults to avoid having to be so + // defensive during initialization. + var moduleOverrides = Object.assign({}, Module); + var arguments_ = []; + var thisProgram = "./this.program"; + var quit_ = (status, toThrow) => { + throw toThrow; + }; + // `/` should be present at the end if `scriptDirectory` is not empty + var scriptDirectory = ""; + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory); + } + return scriptDirectory + path; + } + // Hooks that are implemented differently in different runtime environments. + var readAsync, readBinary; + if (ENVIRONMENT_IS_NODE) { + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require("fs"); + var nodePath = require("path"); + scriptDirectory = __dirname + "/"; + // include: node_shell_read.js + readBinary = filename => { + // We need to re-wrap `file://` strings to URLs. Normalizing isn't + // necessary in that case, the path should already be absolute. + filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); + var ret = fs.readFileSync(filename); + return ret; + }; + readAsync = (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); + return new Promise((resolve, reject) => { + fs.readFile(filename, binary ? undefined : "utf8", (err, data) => { + if (err) reject(err); else resolve(binary ? data.buffer : data); + }); + }); + }; + // end include: node_shell_read.js + if (!Module["thisProgram"] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, "/"); + } + arguments_ = process.argv.slice(2); + if (typeof module != "undefined") { + module["exports"] = Module; + } + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + } else // Note that this includes Node.js workers when relevant (pthreads is enabled). + // Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and + // ENVIRONMENT_IS_NODE. + if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { + // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != "undefined" && document.currentScript) { + // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith("blob:")) { + scriptDirectory = ""; + } else { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1); + } + { + // include: web_or_worker_shell_read.js + if (ENVIRONMENT_IS_WORKER) { + readBinary = url => { + var xhr = new XMLHttpRequest; + xhr.open("GET", url, false); + xhr.responseType = "arraybuffer"; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */ (xhr.response)); + }; + } + readAsync = url => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((reject, resolve) => { + var xhr = new XMLHttpRequest; + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { + // file URLs can return 0 + resolve(xhr.response); + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + return fetch(url, { + credentials: "same-origin" + }).then(response => { + if (response.ok) { + return response.arrayBuffer(); + } + return Promise.reject(new Error(response.status + " : " + response.url)); + }); + }; + } + } else // end include: web_or_worker_shell_read.js + {} + var out = Module["print"] || console.log.bind(console); + var err = Module["printErr"] || console.error.bind(console); + // Merge back in the overrides + Object.assign(Module, moduleOverrides); + // Free the object hierarchy contained in the overrides, this lets the GC + // reclaim data used. + moduleOverrides = null; + // Emit code to handle expected values on the Module object. This applies Module.x + // to the proper local x. This has two benefits: first, we only emit it if it is + // expected to arrive, and second, by using a local everywhere else that can be + // minified. + if (Module["arguments"]) arguments_ = Module["arguments"]; + if (Module["thisProgram"]) thisProgram = Module["thisProgram"]; + if (Module["quit"]) quit_ = Module["quit"]; + // perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message + // end include: shell.js + // include: preamble.js + // === Preamble library stuff === + // Documentation for the public APIs defined in this file must be updated in: + // site/source/docs/api_reference/preamble.js.rst + // A prebuilt local version of the documentation is available at: + // site/build/text/docs/api_reference/preamble.js.txt + // You can also build docs locally as HTML or other formats in site/ + // An online HTML version (which may be of a different version of Emscripten) + // is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + var dynamicLibraries = Module["dynamicLibraries"] || []; + var wasmBinary; + if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; + // Wasm globals + var wasmMemory; + //======================================== + // Runtime essentials + //======================================== + // whether we are quitting the application. no code should run after this. + // set in exit() and abort() + var ABORT = false; + // set by exit() and abort(). Passed to 'onExit' handler. + // NOTE: This is also used as the process return code code in shell environments + // but only when noExitRuntime is false. + var EXITSTATUS; + // Memory management + var /** @type {!Int8Array} */ HEAP8, /** @type {!Uint8Array} */ HEAPU8, /** @type {!Int16Array} */ HEAP16, /** @type {!Uint16Array} */ HEAPU16, /** @type {!Int32Array} */ HEAP32, /** @type {!Uint32Array} */ HEAPU32, /** @type {!Float32Array} */ HEAPF32, /** @type {!Float64Array} */ HEAPF64; + var HEAP_DATA_VIEW; + // include: runtime_shared.js + function updateMemoryViews() { + var b = wasmMemory.buffer; + Module["HEAP_DATA_VIEW"] = HEAP_DATA_VIEW = new DataView(b); + Module["HEAP8"] = HEAP8 = new Int8Array(b); + Module["HEAP16"] = HEAP16 = new Int16Array(b); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(b); + Module["HEAPU16"] = HEAPU16 = new Uint16Array(b); + Module["HEAP32"] = HEAP32 = new Int32Array(b); + Module["HEAPU32"] = HEAPU32 = new Uint32Array(b); + Module["HEAPF32"] = HEAPF32 = new Float32Array(b); + Module["HEAPF64"] = HEAPF64 = new Float64Array(b); + } + // end include: runtime_shared.js + // In non-standalone/normal mode, we create the memory here. + // include: runtime_init_memory.js + // Create the wasm memory. (Note: this only applies if IMPORTED_MEMORY is defined) + // check for full engine support (use string 'subarray' to avoid closure compiler confusion) + if (Module["wasmMemory"]) { + wasmMemory = Module["wasmMemory"]; + } else { + var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 33554432; + wasmMemory = new WebAssembly.Memory({ + "initial": INITIAL_MEMORY / 65536, + // In theory we should not need to emit the maximum if we want "unlimited" + // or 4GB of memory, but VMs error on that atm, see + // https://github.com/emscripten-core/emscripten/issues/14130 + // And in the pthreads case we definitely need to emit a maximum. So + // always emit one. + "maximum": 2147483648 / 65536 + }); + } + updateMemoryViews(); + // end include: runtime_init_memory.js + // include: runtime_stack_check.js + // end include: runtime_stack_check.js + // include: runtime_assertions.js + // end include: runtime_assertions.js + var __ATPRERUN__ = []; + // functions called before the runtime is initialized + var __ATINIT__ = []; + // functions called during startup + var __ATMAIN__ = []; + // functions called during shutdown + var __ATPOSTRUN__ = []; + // functions called after the main() is called + var __RELOC_FUNCS__ = []; + var runtimeInitialized = false; + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") Module["preRun"] = [ Module["preRun"] ]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); + } + function initRuntime() { + runtimeInitialized = true; + callRuntimeCallbacks(__RELOC_FUNCS__); + callRuntimeCallbacks(__ATINIT__); + } + function preMain() { + callRuntimeCallbacks(__ATMAIN__); + } + function postRun() { + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") Module["postRun"] = [ Module["postRun"] ]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); + } + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); + } + function addOnInit(cb) { + __ATINIT__.unshift(cb); + } + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); + } + // include: runtime_math.js + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc + // end include: runtime_math.js + // A counter of dependencies for calling run(). If we need to + // do asynchronous work before running, increment this and + // decrement it. Incrementing must happen in a place like + // Module.preRun (used by emcc to add file preloading). + // Note that you can add dependencies in preRun, even though + // it happens right before run - run will be postponed until + // the dependencies are met. + var runDependencies = 0; + var runDependencyWatcher = null; + var dependenciesFulfilled = null; + // overridden to take different actions when all run dependencies are fulfilled + function getUniqueRunDependency(id) { + return id; + } + function addRunDependency(id) { + runDependencies++; + Module["monitorRunDependencies"]?.(runDependencies); + } + function removeRunDependency(id) { + runDependencies--; + Module["monitorRunDependencies"]?.(runDependencies); + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } + } + /** @param {string|number=} what */ function abort(what) { + Module["onAbort"]?.(what); + what = "Aborted(" + what + ")"; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + ABORT = true; + EXITSTATUS = 1; + what += ". Build with -sASSERTIONS for more info."; + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ var e = new WebAssembly.RuntimeError(what); + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; + } + // include: memoryprofiler.js + // end include: memoryprofiler.js + // include: URIUtils.js + // Prefix of data URIs emitted by SINGLE_FILE and related options. + var dataURIPrefix = "data:application/octet-stream;base64,"; + /** + * Indicates whether filename is a base64 data URI. + * @noinline + */ var isDataURI = filename => filename.startsWith(dataURIPrefix); + /** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ var isFileURI = filename => filename.startsWith("file://"); + // end include: URIUtils.js + // include: runtime_exceptions.js + // end include: runtime_exceptions.js + function findWasmBinary() { + var f = "tree-sitter.wasm"; + if (!isDataURI(f)) { + return locateFile(f); + } + return f; + } + var wasmBinaryFile; + function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw "both async and sync fetching of the wasm failed"; + } + function getBinaryPromise(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + return readAsync(binaryFile).then(response => new Uint8Array(/** @type{!ArrayBuffer} */ (response)), // Fall back to getBinarySync if readAsync fails + () => getBinarySync(binaryFile)); + } + // Otherwise, getBinarySync should be able to get it synchronously + return Promise.resolve().then(() => getBinarySync(binaryFile)); + } + function instantiateArrayBuffer(binaryFile, imports, receiver) { + return getBinaryPromise(binaryFile).then(binary => WebAssembly.instantiate(binary, imports)).then(receiver, reason => { + err(`failed to asynchronously prepare wasm: ${reason}`); + abort(reason); + }); + } + function instantiateAsync(binary, binaryFile, imports, callback) { + if (!binary && typeof WebAssembly.instantiateStreaming == "function" && !isDataURI(binaryFile) && // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + !isFileURI(binaryFile) && // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + !ENVIRONMENT_IS_NODE && typeof fetch == "function") { + return fetch(binaryFile, { + credentials: "same-origin" + }).then(response => { + // Suppress closure warning here since the upstream definition for + // instantiateStreaming only allows Promise rather than + // an actual Response. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure is fixed. + /** @suppress {checkTypes} */ var result = WebAssembly.instantiateStreaming(response, imports); + return result.then(callback, function(reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err("falling back to ArrayBuffer instantiation"); + return instantiateArrayBuffer(binaryFile, imports, callback); + }); + }); + } + return instantiateArrayBuffer(binaryFile, imports, callback); + } + function getWasmImports() { + // prepare imports + return { + "env": wasmImports, + "wasi_snapshot_preview1": wasmImports, + "GOT.mem": new Proxy(wasmImports, GOTHandler), + "GOT.func": new Proxy(wasmImports, GOTHandler) + }; + } + // Create the wasm instance. + // Receives the wasm imports, returns the exports. + function createWasm() { + var info = getWasmImports(); + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ function receiveInstance(instance, module) { + wasmExports = instance.exports; + wasmExports = relocateExports(wasmExports, 1024); + var metadata = getDylinkMetadata(module); + if (metadata.neededDynlibs) { + dynamicLibraries = metadata.neededDynlibs.concat(dynamicLibraries); + } + mergeLibSymbols(wasmExports, "main"); + LDSO.init(); + loadDylibs(); + addOnInit(wasmExports["__wasm_call_ctors"]); + __RELOC_FUNCS__.push(wasmExports["__wasm_apply_data_relocs"]); + removeRunDependency("wasm-instantiate"); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency("wasm-instantiate"); + // Prefer streaming instantiation if available. + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + receiveInstance(result["instance"], result["module"]); + } + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module["instantiateWasm"]) { + try { + return Module["instantiateWasm"](info, receiveInstance); + } catch (e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + return false; + } + } + if (!wasmBinaryFile) wasmBinaryFile = findWasmBinary(); + instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult); + return {}; + } + // include: runtime_debug.js + // end include: runtime_debug.js + // === Body === + var ASM_CONSTS = {}; + // end include: preamble.js + /** @constructor */ function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + var GOT = {}; + var currentModuleWeakSymbols = new Set([]); + var GOTHandler = { + get(obj, symName) { + var rtn = GOT[symName]; + if (!rtn) { + rtn = GOT[symName] = new WebAssembly.Global({ + "value": "i32", + "mutable": true + }); + } + if (!currentModuleWeakSymbols.has(symName)) { + // Any non-weak reference to a symbol marks it as `required`, which + // enabled `reportUndefinedSymbols` to report undefeind symbol errors + // correctly. + rtn.required = true; + } + return rtn; + } + }; + var LE_HEAP_LOAD_F32 = byteOffset => HEAP_DATA_VIEW.getFloat32(byteOffset, true); + var LE_HEAP_LOAD_F64 = byteOffset => HEAP_DATA_VIEW.getFloat64(byteOffset, true); + var LE_HEAP_LOAD_I16 = byteOffset => HEAP_DATA_VIEW.getInt16(byteOffset, true); + var LE_HEAP_LOAD_I32 = byteOffset => HEAP_DATA_VIEW.getInt32(byteOffset, true); + var LE_HEAP_LOAD_U32 = byteOffset => HEAP_DATA_VIEW.getUint32(byteOffset, true); + var LE_HEAP_STORE_F32 = (byteOffset, value) => HEAP_DATA_VIEW.setFloat32(byteOffset, value, true); + var LE_HEAP_STORE_F64 = (byteOffset, value) => HEAP_DATA_VIEW.setFloat64(byteOffset, value, true); + var LE_HEAP_STORE_I16 = (byteOffset, value) => HEAP_DATA_VIEW.setInt16(byteOffset, value, true); + var LE_HEAP_STORE_I32 = (byteOffset, value) => HEAP_DATA_VIEW.setInt32(byteOffset, value, true); + var LE_HEAP_STORE_U32 = (byteOffset, value) => HEAP_DATA_VIEW.setUint32(byteOffset, value, true); + var callRuntimeCallbacks = callbacks => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder : undefined; + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number} idx + * @param {number=} maxBytesToRead + * @return {string} + */ var UTF8ArrayToString = (heapOrArray, idx, maxBytesToRead) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ""; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 128)) { + str += String.fromCharCode(u0); + continue; + } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 224) == 192) { + str += String.fromCharCode(((u0 & 31) << 6) | u1); + continue; + } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 240) == 224) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + if (u0 < 65536) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 65536; + str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023)); + } + } + return str; + }; + var getDylinkMetadata = binary => { + var offset = 0; + var end = 0; + function getU8() { + return binary[offset++]; + } + function getLEB() { + var ret = 0; + var mul = 1; + while (1) { + var byte = binary[offset++]; + ret += ((byte & 127) * mul); + mul *= 128; + if (!(byte & 128)) break; + } + return ret; + } + function getString() { + var len = getLEB(); + offset += len; + return UTF8ArrayToString(binary, offset - len, len); + } + /** @param {string=} message */ function failIf(condition, message) { + if (condition) throw new Error(message); + } + var name = "dylink.0"; + if (binary instanceof WebAssembly.Module) { + var dylinkSection = WebAssembly.Module.customSections(binary, name); + if (dylinkSection.length === 0) { + name = "dylink"; + dylinkSection = WebAssembly.Module.customSections(binary, name); + } + failIf(dylinkSection.length === 0, "need dylink section"); + binary = new Uint8Array(dylinkSection[0]); + end = binary.length; + } else { + var int32View = new Uint32Array(new Uint8Array(binary.subarray(0, 24)).buffer); + var magicNumberFound = int32View[0] == 1836278016 || int32View[0] == 6386541; + failIf(!magicNumberFound, "need to see wasm magic number"); + // \0asm + // we should see the dylink custom section right after the magic number and wasm version + failIf(binary[8] !== 0, "need the dylink section to be first"); + offset = 9; + var section_size = getLEB(); + //section size + end = offset + section_size; + name = getString(); + } + var customSection = { + neededDynlibs: [], + tlsExports: new Set, + weakImports: new Set + }; + if (name == "dylink") { + customSection.memorySize = getLEB(); + customSection.memoryAlign = getLEB(); + customSection.tableSize = getLEB(); + customSection.tableAlign = getLEB(); + // shared libraries this module needs. We need to load them first, so that + // current module could resolve its imports. (see tools/shared.py + // WebAssembly.make_shared_library() for "dylink" section extension format) + var neededDynlibsCount = getLEB(); + for (var i = 0; i < neededDynlibsCount; ++i) { + var libname = getString(); + customSection.neededDynlibs.push(libname); + } + } else { + failIf(name !== "dylink.0"); + var WASM_DYLINK_MEM_INFO = 1; + var WASM_DYLINK_NEEDED = 2; + var WASM_DYLINK_EXPORT_INFO = 3; + var WASM_DYLINK_IMPORT_INFO = 4; + var WASM_SYMBOL_TLS = 256; + var WASM_SYMBOL_BINDING_MASK = 3; + var WASM_SYMBOL_BINDING_WEAK = 1; + while (offset < end) { + var subsectionType = getU8(); + var subsectionSize = getLEB(); + if (subsectionType === WASM_DYLINK_MEM_INFO) { + customSection.memorySize = getLEB(); + customSection.memoryAlign = getLEB(); + customSection.tableSize = getLEB(); + customSection.tableAlign = getLEB(); + } else if (subsectionType === WASM_DYLINK_NEEDED) { + var neededDynlibsCount = getLEB(); + for (var i = 0; i < neededDynlibsCount; ++i) { + libname = getString(); + customSection.neededDynlibs.push(libname); + } + } else if (subsectionType === WASM_DYLINK_EXPORT_INFO) { + var count = getLEB(); + while (count--) { + var symname = getString(); + var flags = getLEB(); + if (flags & WASM_SYMBOL_TLS) { + customSection.tlsExports.add(symname); + } + } + } else if (subsectionType === WASM_DYLINK_IMPORT_INFO) { + var count = getLEB(); + while (count--) { + var modname = getString(); + var symname = getString(); + var flags = getLEB(); + if ((flags & WASM_SYMBOL_BINDING_MASK) == WASM_SYMBOL_BINDING_WEAK) { + customSection.weakImports.add(symname); + } + } + } else { + // unknown subsection + offset += subsectionSize; + } + } + } + return customSection; + }; + /** + * @param {number} ptr + * @param {string} type + */ function getValue(ptr, type = "i8") { + if (type.endsWith("*")) type = "*"; + switch (type) { + case "i1": + return HEAP8[ptr]; + + case "i8": + return HEAP8[ptr]; + + case "i16": + return LE_HEAP_LOAD_I16(((ptr) >> 1) * 2); + + case "i32": + return LE_HEAP_LOAD_I32(((ptr) >> 2) * 4); + + case "i64": + abort("to do getValue(i64) use WASM_BIGINT"); + + case "float": + return LE_HEAP_LOAD_F32(((ptr) >> 2) * 4); + + case "double": + return LE_HEAP_LOAD_F64(((ptr) >> 3) * 8); + + case "*": + return LE_HEAP_LOAD_U32(((ptr) >> 2) * 4); + + default: + abort(`invalid type for getValue: ${type}`); + } + } + var newDSO = (name, handle, syms) => { + var dso = { + refcount: Infinity, + name: name, + exports: syms, + global: true + }; + LDSO.loadedLibsByName[name] = dso; + if (handle != undefined) { + LDSO.loadedLibsByHandle[handle] = dso; + } + return dso; + }; + var LDSO = { + loadedLibsByName: {}, + loadedLibsByHandle: {}, + init() { + newDSO("__main__", 0, wasmImports); + } + }; + var ___heap_base = 78112; + var zeroMemory = (address, size) => { + HEAPU8.fill(0, address, address + size); + return address; + }; + var alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment; + var getMemory = size => { + // After the runtime is initialized, we must only use sbrk() normally. + if (runtimeInitialized) { + // Currently we don't support freeing of static data when modules are + // unloaded via dlclose. This function is tagged as `noleakcheck` to + // avoid having this reported as leak. + return zeroMemory(_malloc(size), size); + } + var ret = ___heap_base; + // Keep __heap_base stack aligned. + var end = ret + alignMemory(size, 16); + ___heap_base = end; + GOT["__heap_base"].value = end; + return ret; + }; + var isInternalSym = symName => [ "__cpp_exception", "__c_longjmp", "__wasm_apply_data_relocs", "__dso_handle", "__tls_size", "__tls_align", "__set_stack_limits", "_emscripten_tls_init", "__wasm_init_tls", "__wasm_call_ctors", "__start_em_asm", "__stop_em_asm", "__start_em_js", "__stop_em_js" ].includes(symName) || symName.startsWith("__em_js__"); + var uleb128Encode = (n, target) => { + if (n < 128) { + target.push(n); + } else { + target.push((n % 128) | 128, n >> 7); + } + }; + var sigToWasmTypes = sig => { + var typeNames = { + "i": "i32", + "j": "i64", + "f": "f32", + "d": "f64", + "e": "externref", + "p": "i32" + }; + var type = { + parameters: [], + results: sig[0] == "v" ? [] : [ typeNames[sig[0]] ] + }; + for (var i = 1; i < sig.length; ++i) { + type.parameters.push(typeNames[sig[i]]); + } + return type; + }; + var generateFuncType = (sig, target) => { + var sigRet = sig.slice(0, 1); + var sigParam = sig.slice(1); + var typeCodes = { + "i": 127, + // i32 + "p": 127, + // i32 + "j": 126, + // i64 + "f": 125, + // f32 + "d": 124, + // f64 + "e": 111 + }; + // Parameters, length + signatures + target.push(96); + /* form: func */ uleb128Encode(sigParam.length, target); + for (var i = 0; i < sigParam.length; ++i) { + target.push(typeCodes[sigParam[i]]); + } + // Return values, length + signatures + // With no multi-return in MVP, either 0 (void) or 1 (anything else) + if (sigRet == "v") { + target.push(0); + } else { + target.push(1, typeCodes[sigRet]); + } + }; + var convertJsFunctionToWasm = (func, sig) => { + // If the type reflection proposal is available, use the new + // "WebAssembly.Function" constructor. + // Otherwise, construct a minimal wasm module importing the JS function and + // re-exporting it. + if (typeof WebAssembly.Function == "function") { + return new WebAssembly.Function(sigToWasmTypes(sig), func); + } + // The module is static, with the exception of the type section, which is + // generated based on the signature passed in. + var typeSectionBody = [ 1 ]; + // count: 1 + generateFuncType(sig, typeSectionBody); + // Rest of the module is static + var bytes = [ 0, 97, 115, 109, // magic ("\0asm") + 1, 0, 0, 0, // version: 1 + 1 ]; + // Write the overall length of the type section followed by the body + uleb128Encode(typeSectionBody.length, bytes); + bytes.push(...typeSectionBody); + // The rest of the module is static + bytes.push(2, 7, // import section + // (import "e" "f" (func 0 (type 0))) + 1, 1, 101, 1, 102, 0, 0, 7, 5, // export section + // (export "f" (func 0 (type 0))) + 1, 1, 102, 0, 0); + // We can compile this wasm module synchronously because it is very small. + // This accepts an import (at "e.f"), that it reroutes to an export (at "f") + var module = new WebAssembly.Module(new Uint8Array(bytes)); + var instance = new WebAssembly.Instance(module, { + "e": { + "f": func + } + }); + var wrappedFunc = instance.exports["f"]; + return wrappedFunc; + }; + var wasmTableMirror = []; + /** @type {WebAssembly.Table} */ var wasmTable = new WebAssembly.Table({ + "initial": 28, + "element": "anyfunc" + }); + var getWasmTableEntry = funcPtr => { + var func = wasmTableMirror[funcPtr]; + if (!func) { + if (funcPtr >= wasmTableMirror.length) wasmTableMirror.length = funcPtr + 1; + wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr); + } + return func; + }; + var updateTableMap = (offset, count) => { + if (functionsInTableMap) { + for (var i = offset; i < offset + count; i++) { + var item = getWasmTableEntry(i); + // Ignore null values. + if (item) { + functionsInTableMap.set(item, i); + } + } + } + }; + var functionsInTableMap; + var getFunctionAddress = func => { + // First, create the map if this is the first use. + if (!functionsInTableMap) { + functionsInTableMap = new WeakMap; + updateTableMap(0, wasmTable.length); + } + return functionsInTableMap.get(func) || 0; + }; + var freeTableIndexes = []; + var getEmptyTableSlot = () => { + // Reuse a free index if there is one, otherwise grow. + if (freeTableIndexes.length) { + return freeTableIndexes.pop(); + } + // Grow the table + try { + wasmTable.grow(1); + } catch (err) { + if (!(err instanceof RangeError)) { + throw err; + } + throw "Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."; + } + return wasmTable.length - 1; + }; + var setWasmTableEntry = (idx, func) => { + wasmTable.set(idx, func); + // With ABORT_ON_WASM_EXCEPTIONS wasmTable.get is overridden to return wrapped + // functions so we need to call it here to retrieve the potential wrapper correctly + // instead of just storing 'func' directly into wasmTableMirror + wasmTableMirror[idx] = wasmTable.get(idx); + }; + /** @param {string=} sig */ var addFunction = (func, sig) => { + // Check if the function is already in the table, to ensure each function + // gets a unique index. + var rtn = getFunctionAddress(func); + if (rtn) { + return rtn; + } + // It's not in the table, add it now. + var ret = getEmptyTableSlot(); + // Set the new value. + try { + // Attempting to call this with JS function will cause of table.set() to fail + setWasmTableEntry(ret, func); + } catch (err) { + if (!(err instanceof TypeError)) { + throw err; + } + var wrapped = convertJsFunctionToWasm(func, sig); + setWasmTableEntry(ret, wrapped); + } + functionsInTableMap.set(func, ret); + return ret; + }; + var updateGOT = (exports, replace) => { + for (var symName in exports) { + if (isInternalSym(symName)) { + continue; + } + var value = exports[symName]; + if (symName.startsWith("orig$")) { + symName = symName.split("$")[1]; + replace = true; + } + GOT[symName] ||= new WebAssembly.Global({ + "value": "i32", + "mutable": true + }); + if (replace || GOT[symName].value == 0) { + if (typeof value == "function") { + GOT[symName].value = addFunction(value); + } else if (typeof value == "number") { + GOT[symName].value = value; + } else { + err(`unhandled export type for '${symName}': ${typeof value}`); + } + } + } + }; + /** @param {boolean=} replace */ var relocateExports = (exports, memoryBase, replace) => { + var relocated = {}; + for (var e in exports) { + var value = exports[e]; + if (typeof value == "object") { + // a breaking change in the wasm spec, globals are now objects + // https://github.com/WebAssembly/mutable-global/issues/1 + value = value.value; + } + if (typeof value == "number") { + value += memoryBase; + } + relocated[e] = value; + } + updateGOT(relocated, replace); + return relocated; + }; + var isSymbolDefined = symName => { + // Ignore 'stub' symbols that are auto-generated as part of the original + // `wasmImports` used to instantiate the main module. + var existing = wasmImports[symName]; + if (!existing || existing.stub) { + return false; + } + return true; + }; + var dynCallLegacy = (sig, ptr, args) => { + sig = sig.replace(/p/g, "i"); + var f = Module["dynCall_" + sig]; + return f(ptr, ...args); + }; + var dynCall = (sig, ptr, args = []) => { + // Without WASM_BIGINT support we cannot directly call function with i64 as + // part of their signature, so we rely on the dynCall functions generated by + // wasm-emscripten-finalize + if (sig.includes("j")) { + return dynCallLegacy(sig, ptr, args); + } + var rtn = getWasmTableEntry(ptr)(...args); + return rtn; + }; + var stackSave = () => _emscripten_stack_get_current(); + var stackRestore = val => __emscripten_stack_restore(val); + var createInvokeFunction = sig => (ptr, ...args) => { + var sp = stackSave(); + try { + return dynCall(sig, ptr, args); + } catch (e) { + stackRestore(sp); + // Create a try-catch guard that rethrows the Emscripten EH exception. + // Exceptions thrown from C++ will be a pointer (number) and longjmp + // will throw the number Infinity. Use the compact and fast "e !== e+0" + // test to check if e was not a Number. + if (e !== e + 0) throw e; + _setThrew(1, 0); + } + }; + var resolveGlobalSymbol = (symName, direct = false) => { + var sym; + // First look for the orig$ symbol which is the symbol without i64 + // legalization performed. + if (direct && ("orig$" + symName in wasmImports)) { + symName = "orig$" + symName; + } + if (isSymbolDefined(symName)) { + sym = wasmImports[symName]; + } else // Asm.js-style exception handling: invoke wrapper generation + if (symName.startsWith("invoke_")) { + // Create (and cache) new invoke_ functions on demand. + sym = wasmImports[symName] = createInvokeFunction(symName.split("_")[1]); + } + return { + sym: sym, + name: symName + }; + }; + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ var UTF8ToString = (ptr, maxBytesToRead) => ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""; + /** + * @param {string=} libName + * @param {Object=} localScope + * @param {number=} handle + */ var loadWebAssemblyModule = (binary, flags, libName, localScope, handle) => { + var metadata = getDylinkMetadata(binary); + currentModuleWeakSymbols = metadata.weakImports; + // loadModule loads the wasm module after all its dependencies have been loaded. + // can be called both sync/async. + function loadModule() { + // The first thread to load a given module needs to allocate the static + // table and memory regions. Later threads re-use the same table region + // and can ignore the memory region (since memory is shared between + // threads already). + // If `handle` is specified than it is assumed that the calling thread has + // exclusive access to it for the duration of this function. See the + // locking in `dynlink.c`. + var firstLoad = !handle || !HEAP8[(handle) + (8)]; + if (firstLoad) { + // alignments are powers of 2 + var memAlign = Math.pow(2, metadata.memoryAlign); + // prepare memory + var memoryBase = metadata.memorySize ? alignMemory(getMemory(metadata.memorySize + memAlign), memAlign) : 0; + // TODO: add to cleanups + var tableBase = metadata.tableSize ? wasmTable.length : 0; + if (handle) { + HEAP8[(handle) + (8)] = 1; + LE_HEAP_STORE_U32((((handle) + (12)) >> 2) * 4, memoryBase); + LE_HEAP_STORE_I32((((handle) + (16)) >> 2) * 4, metadata.memorySize); + LE_HEAP_STORE_U32((((handle) + (20)) >> 2) * 4, tableBase); + LE_HEAP_STORE_I32((((handle) + (24)) >> 2) * 4, metadata.tableSize); + } + } else { + memoryBase = LE_HEAP_LOAD_U32((((handle) + (12)) >> 2) * 4); + tableBase = LE_HEAP_LOAD_U32((((handle) + (20)) >> 2) * 4); + } + var tableGrowthNeeded = tableBase + metadata.tableSize - wasmTable.length; + if (tableGrowthNeeded > 0) { + wasmTable.grow(tableGrowthNeeded); + } + // This is the export map that we ultimately return. We declare it here + // so it can be used within resolveSymbol. We resolve symbols against + // this local symbol map in the case there they are not present on the + // global Module object. We need this fallback because Modules sometime + // need to import their own symbols + var moduleExports; + function resolveSymbol(sym) { + var resolved = resolveGlobalSymbol(sym).sym; + if (!resolved && localScope) { + resolved = localScope[sym]; + } + if (!resolved) { + resolved = moduleExports[sym]; + } + return resolved; + } + // TODO kill ↓↓↓ (except "symbols local to this module", it will likely be + // not needed if we require that if A wants symbols from B it has to link + // to B explicitly: similarly to -Wl,--no-undefined) + // wasm dynamic libraries are pure wasm, so they cannot assist in + // their own loading. When side module A wants to import something + // provided by a side module B that is loaded later, we need to + // add a layer of indirection, but worse, we can't even tell what + // to add the indirection for, without inspecting what A's imports + // are. To do that here, we use a JS proxy (another option would + // be to inspect the binary directly). + var proxyHandler = { + get(stubs, prop) { + // symbols that should be local to this module + switch (prop) { + case "__memory_base": + return memoryBase; + + case "__table_base": + return tableBase; + } + if (prop in wasmImports && !wasmImports[prop].stub) { + // No stub needed, symbol already exists in symbol table + return wasmImports[prop]; + } + // Return a stub function that will resolve the symbol + // when first called. + if (!(prop in stubs)) { + var resolved; + stubs[prop] = (...args) => { + resolved ||= resolveSymbol(prop); + checkForAsmVersion(prop); + return resolved(...args); + }; + } + return stubs[prop]; + } + }; + var proxy = new Proxy({}, proxyHandler); + var info = { + "GOT.mem": new Proxy({}, GOTHandler), + "GOT.func": new Proxy({}, GOTHandler), + "env": proxy, + "wasi_snapshot_preview1": proxy + }; + function postInstantiation(module, instance) { + // add new entries to functionsInTableMap + updateTableMap(tableBase, metadata.tableSize); + moduleExports = relocateExports(instance.exports, memoryBase); + if (!flags.allowUndefined) { + reportUndefinedSymbols(); + } + function addEmAsm(addr, body) { + var args = []; + var arity = 0; + for (;arity < 16; arity++) { + if (body.indexOf("$" + arity) != -1) { + args.push("$" + arity); + } else { + break; + } + } + args = args.join(","); + var func = `(${args}) => { ${body} };`; + ASM_CONSTS[start] = eval(func); + } + // Add any EM_ASM function that exist in the side module + if ("__start_em_asm" in moduleExports) { + var start = moduleExports["__start_em_asm"]; + var stop = moduleExports["__stop_em_asm"]; + while (start < stop) { + var jsString = UTF8ToString(start); + addEmAsm(start, jsString); + start = HEAPU8.indexOf(0, start) + 1; + } + } + function addEmJs(name, cSig, body) { + // The signature here is a C signature (e.g. "(int foo, char* bar)"). + // See `create_em_js` in emcc.py` for the build-time version of this + // code. + var jsArgs = []; + cSig = cSig.slice(1, -1); + if (cSig != "void") { + cSig = cSig.split(","); + for (var i in cSig) { + var jsArg = cSig[i].split(" ").pop(); + jsArgs.push(jsArg.replace("*", "")); + } + } + var func = `(${jsArgs}) => ${body};`; + moduleExports[name] = eval(func); + } + for (var name in moduleExports) { + if (name.startsWith("__em_js__")) { + var start = moduleExports[name]; + var jsString = UTF8ToString(start); + // EM_JS strings are stored in the data section in the form + // SIG<::>BODY. + var parts = jsString.split("<::>"); + addEmJs(name.replace("__em_js__", ""), parts[0], parts[1]); + delete moduleExports[name]; + } + } + // initialize the module + var applyRelocs = moduleExports["__wasm_apply_data_relocs"]; + if (applyRelocs) { + if (runtimeInitialized) { + applyRelocs(); + } else { + __RELOC_FUNCS__.push(applyRelocs); } + } + var init = moduleExports["__wasm_call_ctors"]; + if (init) { + if (runtimeInitialized) { + init(); + } else { + // we aren't ready to run compiled code yet + __ATINIT__.push(init); + } + } + return moduleExports; + } + if (flags.loadAsync) { + if (binary instanceof WebAssembly.Module) { + var instance = new WebAssembly.Instance(binary, info); + return Promise.resolve(postInstantiation(binary, instance)); + } + return WebAssembly.instantiate(binary, info).then(result => postInstantiation(result.module, result.instance)); + } + var module = binary instanceof WebAssembly.Module ? binary : new WebAssembly.Module(binary); + var instance = new WebAssembly.Instance(module, info); + return postInstantiation(module, instance); + } + // now load needed libraries and the module itself. + if (flags.loadAsync) { + return metadata.neededDynlibs.reduce((chain, dynNeeded) => chain.then(() => loadDynamicLibrary(dynNeeded, flags, localScope)), Promise.resolve()).then(loadModule); + } + metadata.neededDynlibs.forEach(needed => loadDynamicLibrary(needed, flags, localScope)); + return loadModule(); + }; + var mergeLibSymbols = (exports, libName) => { + // add symbols into global namespace TODO: weak linking etc. + for (var [sym, exp] of Object.entries(exports)) { + // When RTLD_GLOBAL is enabled, the symbols defined by this shared object + // will be made available for symbol resolution of subsequently loaded + // shared objects. + // We should copy the symbols (which include methods and variables) from + // SIDE_MODULE to MAIN_MODULE. + const setImport = target => { + if (!isSymbolDefined(target)) { + wasmImports[target] = exp; + } + }; + setImport(sym); + // Special case for handling of main symbol: If a side module exports + // `main` that also acts a definition for `__main_argc_argv` and vice + // versa. + const main_alias = "__main_argc_argv"; + if (sym == "main") { + setImport(main_alias); + } + if (sym == main_alias) { + setImport("main"); + } + if (sym.startsWith("dynCall_") && !Module.hasOwnProperty(sym)) { + Module[sym] = exp; + } + } + }; + /** @param {boolean=} noRunDep */ var asyncLoad = (url, onload, onerror, noRunDep) => { + var dep = !noRunDep ? getUniqueRunDependency(`al ${url}`) : ""; + readAsync(url).then(arrayBuffer => { + onload(new Uint8Array(arrayBuffer)); + if (dep) removeRunDependency(dep); + }, err => { + if (onerror) { + onerror(); + } else { + throw `Loading data file "${url}" failed.`; + } + }); + if (dep) addRunDependency(dep); + }; + /** + * @param {number=} handle + * @param {Object=} localScope + */ function loadDynamicLibrary(libName, flags = { + global: true, + nodelete: true + }, localScope, handle) { + // when loadDynamicLibrary did not have flags, libraries were loaded + // globally & permanently + var dso = LDSO.loadedLibsByName[libName]; + if (dso) { + // the library is being loaded or has been loaded already. + if (!flags.global) { + if (localScope) { + Object.assign(localScope, dso.exports); + } + } else if (!dso.global) { + // The library was previously loaded only locally but not + // we have a request with global=true. + dso.global = true; + mergeLibSymbols(dso.exports, libName); + } + // same for "nodelete" + if (flags.nodelete && dso.refcount !== Infinity) { + dso.refcount = Infinity; + } + dso.refcount++; + if (handle) { + LDSO.loadedLibsByHandle[handle] = dso; + } + return flags.loadAsync ? Promise.resolve(true) : true; + } + // allocate new DSO + dso = newDSO(libName, handle, "loading"); + dso.refcount = flags.nodelete ? Infinity : 1; + dso.global = flags.global; + // libName -> libData + function loadLibData() { + // for wasm, we can use fetch for async, but for fs mode we can only imitate it + if (handle) { + var data = LE_HEAP_LOAD_U32((((handle) + (28)) >> 2) * 4); + var dataSize = LE_HEAP_LOAD_U32((((handle) + (32)) >> 2) * 4); + if (data && dataSize) { + var libData = HEAP8.slice(data, data + dataSize); + return flags.loadAsync ? Promise.resolve(libData) : libData; + } + } + var libFile = locateFile(libName); + if (flags.loadAsync) { + return new Promise(function(resolve, reject) { + asyncLoad(libFile, resolve, reject); + }); + } + // load the binary synchronously + if (!readBinary) { + throw new Error(`${libFile}: file not found, and synchronous loading of external files is not available`); + } + return readBinary(libFile); + } + // libName -> exports + function getExports() { + // module not preloaded - load lib data and create new module from it + if (flags.loadAsync) { + return loadLibData().then(libData => loadWebAssemblyModule(libData, flags, libName, localScope, handle)); + } + return loadWebAssemblyModule(loadLibData(), flags, libName, localScope, handle); + } + // module for lib is loaded - update the dso & global namespace + function moduleLoaded(exports) { + if (dso.global) { + mergeLibSymbols(exports, libName); + } else if (localScope) { + Object.assign(localScope, exports); + } + dso.exports = exports; + } + if (flags.loadAsync) { + return getExports().then(exports => { + moduleLoaded(exports); + return true; + }); + } + moduleLoaded(getExports()); + return true; + } + var reportUndefinedSymbols = () => { + for (var [symName, entry] of Object.entries(GOT)) { + if (entry.value == 0) { + var value = resolveGlobalSymbol(symName, true).sym; + if (!value && !entry.required) { + // Ignore undefined symbols that are imported as weak. + continue; + } + if (typeof value == "function") { + /** @suppress {checkTypes} */ entry.value = addFunction(value, value.sig); + } else if (typeof value == "number") { + entry.value = value; + } else { + throw new Error(`bad export type for '${symName}': ${typeof value}`); + } + } + } + }; + var loadDylibs = () => { + if (!dynamicLibraries.length) { + reportUndefinedSymbols(); + return; + } + // Load binaries asynchronously + addRunDependency("loadDylibs"); + dynamicLibraries.reduce((chain, lib) => chain.then(() => loadDynamicLibrary(lib, { + loadAsync: true, + global: true, + nodelete: true, + allowUndefined: true + })), Promise.resolve()).then(() => { + // we got them all, wonderful + reportUndefinedSymbols(); + removeRunDependency("loadDylibs"); + }); + }; + var noExitRuntime = Module["noExitRuntime"] || true; + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ function setValue(ptr, value, type = "i8") { + if (type.endsWith("*")) type = "*"; + switch (type) { + case "i1": + HEAP8[ptr] = value; + break; + + case "i8": + HEAP8[ptr] = value; + break; + + case "i16": + LE_HEAP_STORE_I16(((ptr) >> 1) * 2, value); + break; + + case "i32": + LE_HEAP_STORE_I32(((ptr) >> 2) * 4, value); + break; + + case "i64": + abort("to do setValue(i64) use WASM_BIGINT"); + + case "float": + LE_HEAP_STORE_F32(((ptr) >> 2) * 4, value); + break; + + case "double": + LE_HEAP_STORE_F64(((ptr) >> 3) * 8, value); + break; + + case "*": + LE_HEAP_STORE_U32(((ptr) >> 2) * 4, value); + break; + + default: + abort(`invalid type for setValue: ${type}`); + } + } + var ___memory_base = new WebAssembly.Global({ + "value": "i32", + "mutable": false + }, 1024); + var ___stack_pointer = new WebAssembly.Global({ + "value": "i32", + "mutable": true + }, 78112); + var ___table_base = new WebAssembly.Global({ + "value": "i32", + "mutable": false + }, 1); + var __abort_js = () => { + abort(""); + }; + __abort_js.sig = "v"; + var nowIsMonotonic = 1; + var __emscripten_get_now_is_monotonic = () => nowIsMonotonic; + __emscripten_get_now_is_monotonic.sig = "i"; + var __emscripten_memcpy_js = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num); + __emscripten_memcpy_js.sig = "vppp"; + var _emscripten_date_now = () => Date.now(); + _emscripten_date_now.sig = "d"; + var _emscripten_get_now; + // Modern environment where performance.now() is supported: + // N.B. a shorter form "_emscripten_get_now = performance.now;" is + // unfortunately not allowed even in current browsers (e.g. FF Nightly 75). + _emscripten_get_now = () => performance.now(); + _emscripten_get_now.sig = "d"; + var getHeapMax = () => // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate + // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side + // for any code that deals with heap sizes, which would require special + // casing all heap size related code to treat 0 specially. + 2147483648; + var growMemory = size => { + var b = wasmMemory.buffer; + var pages = (size - b.byteLength + 65535) / 65536; + try { + // round size grow request up to wasm page size (fixed 64KB per spec) + wasmMemory.grow(pages); + // .grow() takes a delta compared to the previous size + updateMemoryViews(); + return 1; + } /*success*/ catch (e) {} + }; + // implicit 0 return to save code size (caller will cast "undefined" into 0 + // anyhow) + var _emscripten_resize_heap = requestedSize => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + // With multithreaded builds, races can happen (another thread might increase the size + // in between), so return a failure, and let the caller retry. + // Memory resize rules: + // 1. Always increase heap size to at least the requested size, rounded up + // to next page multiple. + // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap + // geometrically: increase the heap size according to + // MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), At most + // overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB). + // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap + // linearly: increase the heap size by at least + // MEMORY_GROWTH_LINEAR_STEP bytes. + // 3. Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by + // MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest + // 4. If we were unable to allocate as much memory, it may be due to + // over-eager decision to excessively reserve due to (3) above. + // Hence if an allocation fails, cut down on the amount of excess + // growth, in an attempt to succeed to perform a smaller allocation. + // A limit is set for how much we can grow. We should not exceed that + // (the wasm binary specifies it, so if we tried, we'd fail anyhow). + var maxHeapSize = getHeapMax(); + if (requestedSize > maxHeapSize) { + return false; + } + var alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple; + // Loop through potential heap size increases. If we attempt a too eager + // reservation that fails, cut down on the attempted size and reserve a + // smaller bump instead. (max 3 times, chosen somewhat arbitrarily) + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + .2 / cutDown); + // ensure geometric growth + // but limit overreserving (default to capping at +96MB overgrowth at most) + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); + var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); + var replacement = growMemory(newSize); + if (replacement) { + return true; + } + } + return false; + }; + _emscripten_resize_heap.sig = "ip"; + var _fd_close = fd => 52; + _fd_close.sig = "ii"; + var convertI32PairToI53Checked = (lo, hi) => ((hi + 2097152) >>> 0 < 4194305 - !!lo) ? (lo >>> 0) + hi * 4294967296 : NaN; + function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { + var offset = convertI32PairToI53Checked(offset_low, offset_high); + return 70; + } + _fd_seek.sig = "iiiiip"; + var printCharBuffers = [ null, [], [] ]; + var printChar = (stream, curr) => { + var buffer = printCharBuffers[stream]; + if (curr === 0 || curr === 10) { + (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0)); + buffer.length = 0; + } else { + buffer.push(curr); + } + }; + var _fd_write = (fd, iov, iovcnt, pnum) => { + // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0 + var num = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = LE_HEAP_LOAD_U32(((iov) >> 2) * 4); + var len = LE_HEAP_LOAD_U32((((iov) + (4)) >> 2) * 4); + iov += 8; + for (var j = 0; j < len; j++) { + printChar(fd, HEAPU8[ptr + j]); + } + num += len; + } + LE_HEAP_STORE_U32(((pnum) >> 2) * 4, num); + return 0; + }; + _fd_write.sig = "iippp"; + function _tree_sitter_log_callback(isLexMessage, messageAddress) { + if (currentLogCallback) { + const message = UTF8ToString(messageAddress); + currentLogCallback(message, isLexMessage !== 0); + } + } + function _tree_sitter_parse_callback(inputBufferAddress, index, row, column, lengthAddress) { + const INPUT_BUFFER_SIZE = 10 * 1024; + const string = currentParseCallback(index, { + row: row, + column: column + }); + if (typeof string === "string") { + setValue(lengthAddress, string.length, "i32"); + stringToUTF16(string, inputBufferAddress, INPUT_BUFFER_SIZE); + } else { + setValue(lengthAddress, 0, "i32"); + } + } + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = code => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module["onExit"]?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + _proc_exit.sig = "vi"; + /** @param {boolean|number=} implicit */ var exitJS = (status, implicit) => { + EXITSTATUS = status; + _proc_exit(status); + }; + var handleException = e => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == "unwind") { + return EXITSTATUS; + } + quit_(1, e); + }; + var lengthBytesUTF8 = str => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); + // possibly a lead surrogate + if (c <= 127) { + len++; + } else if (c <= 2047) { + len += 2; + } else if (c >= 55296 && c <= 57343) { + len += 4; + ++i; + } else { + len += 3; + } + } + return len; + }; + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); + // possibly a lead surrogate + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | (u1 & 1023); + } + if (u <= 127) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 192 | (u >> 6); + heap[outIdx++] = 128 | (u & 63); + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 224 | (u >> 12); + heap[outIdx++] = 128 | ((u >> 6) & 63); + heap[outIdx++] = 128 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + heap[outIdx++] = 240 | (u >> 18); + heap[outIdx++] = 128 | ((u >> 12) & 63); + heap[outIdx++] = 128 | ((u >> 6) & 63); + heap[outIdx++] = 128 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + var stackAlloc = sz => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = str => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + var stringToUTF16 = (str, outPtr, maxBytesToWrite) => { + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + maxBytesToWrite ??= 2147483647; + if (maxBytesToWrite < 2) return 0; + maxBytesToWrite -= 2; + // Null terminator. + var startPtr = outPtr; + var numCharsToWrite = (maxBytesToWrite < str.length * 2) ? (maxBytesToWrite / 2) : str.length; + for (var i = 0; i < numCharsToWrite; ++i) { + // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. + var codeUnit = str.charCodeAt(i); + // possibly a lead surrogate + LE_HEAP_STORE_I16(((outPtr) >> 1) * 2, codeUnit); + outPtr += 2; + } + // Null-terminate the pointer to the HEAP. + LE_HEAP_STORE_I16(((outPtr) >> 1) * 2, 0); + return outPtr - startPtr; + }; + var AsciiToString = ptr => { + var str = ""; + while (1) { + var ch = HEAPU8[ptr++]; + if (!ch) return str; + str += String.fromCharCode(ch); + } + }; + var wasmImports = { + /** @export */ __heap_base: ___heap_base, + /** @export */ __indirect_function_table: wasmTable, + /** @export */ __memory_base: ___memory_base, + /** @export */ __stack_pointer: ___stack_pointer, + /** @export */ __table_base: ___table_base, + /** @export */ _abort_js: __abort_js, + /** @export */ _emscripten_get_now_is_monotonic: __emscripten_get_now_is_monotonic, + /** @export */ _emscripten_memcpy_js: __emscripten_memcpy_js, + /** @export */ emscripten_get_now: _emscripten_get_now, + /** @export */ emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ fd_close: _fd_close, + /** @export */ fd_seek: _fd_seek, + /** @export */ fd_write: _fd_write, + /** @export */ memory: wasmMemory, + /** @export */ tree_sitter_log_callback: _tree_sitter_log_callback, + /** @export */ tree_sitter_parse_callback: _tree_sitter_parse_callback + }; + var wasmExports = createWasm(); + var ___wasm_call_ctors = () => (___wasm_call_ctors = wasmExports["__wasm_call_ctors"])(); + var ___wasm_apply_data_relocs = () => (___wasm_apply_data_relocs = wasmExports["__wasm_apply_data_relocs"])(); + var _malloc = Module["_malloc"] = a0 => (_malloc = Module["_malloc"] = wasmExports["malloc"])(a0); + var _calloc = Module["_calloc"] = (a0, a1) => (_calloc = Module["_calloc"] = wasmExports["calloc"])(a0, a1); + var _realloc = Module["_realloc"] = (a0, a1) => (_realloc = Module["_realloc"] = wasmExports["realloc"])(a0, a1); + var _free = Module["_free"] = a0 => (_free = Module["_free"] = wasmExports["free"])(a0); + var _ts_language_symbol_count = Module["_ts_language_symbol_count"] = a0 => (_ts_language_symbol_count = Module["_ts_language_symbol_count"] = wasmExports["ts_language_symbol_count"])(a0); + var _ts_language_state_count = Module["_ts_language_state_count"] = a0 => (_ts_language_state_count = Module["_ts_language_state_count"] = wasmExports["ts_language_state_count"])(a0); + var _ts_language_version = Module["_ts_language_version"] = a0 => (_ts_language_version = Module["_ts_language_version"] = wasmExports["ts_language_version"])(a0); + var _ts_language_field_count = Module["_ts_language_field_count"] = a0 => (_ts_language_field_count = Module["_ts_language_field_count"] = wasmExports["ts_language_field_count"])(a0); + var _ts_language_next_state = Module["_ts_language_next_state"] = (a0, a1, a2) => (_ts_language_next_state = Module["_ts_language_next_state"] = wasmExports["ts_language_next_state"])(a0, a1, a2); + var _ts_language_symbol_name = Module["_ts_language_symbol_name"] = (a0, a1) => (_ts_language_symbol_name = Module["_ts_language_symbol_name"] = wasmExports["ts_language_symbol_name"])(a0, a1); + var _ts_language_symbol_for_name = Module["_ts_language_symbol_for_name"] = (a0, a1, a2, a3) => (_ts_language_symbol_for_name = Module["_ts_language_symbol_for_name"] = wasmExports["ts_language_symbol_for_name"])(a0, a1, a2, a3); + var _strncmp = Module["_strncmp"] = (a0, a1, a2) => (_strncmp = Module["_strncmp"] = wasmExports["strncmp"])(a0, a1, a2); + var _ts_language_symbol_type = Module["_ts_language_symbol_type"] = (a0, a1) => (_ts_language_symbol_type = Module["_ts_language_symbol_type"] = wasmExports["ts_language_symbol_type"])(a0, a1); + var _ts_language_field_name_for_id = Module["_ts_language_field_name_for_id"] = (a0, a1) => (_ts_language_field_name_for_id = Module["_ts_language_field_name_for_id"] = wasmExports["ts_language_field_name_for_id"])(a0, a1); + var _ts_lookahead_iterator_new = Module["_ts_lookahead_iterator_new"] = (a0, a1) => (_ts_lookahead_iterator_new = Module["_ts_lookahead_iterator_new"] = wasmExports["ts_lookahead_iterator_new"])(a0, a1); + var _ts_lookahead_iterator_delete = Module["_ts_lookahead_iterator_delete"] = a0 => (_ts_lookahead_iterator_delete = Module["_ts_lookahead_iterator_delete"] = wasmExports["ts_lookahead_iterator_delete"])(a0); + var _ts_lookahead_iterator_reset_state = Module["_ts_lookahead_iterator_reset_state"] = (a0, a1) => (_ts_lookahead_iterator_reset_state = Module["_ts_lookahead_iterator_reset_state"] = wasmExports["ts_lookahead_iterator_reset_state"])(a0, a1); + var _ts_lookahead_iterator_reset = Module["_ts_lookahead_iterator_reset"] = (a0, a1, a2) => (_ts_lookahead_iterator_reset = Module["_ts_lookahead_iterator_reset"] = wasmExports["ts_lookahead_iterator_reset"])(a0, a1, a2); + var _ts_lookahead_iterator_next = Module["_ts_lookahead_iterator_next"] = a0 => (_ts_lookahead_iterator_next = Module["_ts_lookahead_iterator_next"] = wasmExports["ts_lookahead_iterator_next"])(a0); + var _ts_lookahead_iterator_current_symbol = Module["_ts_lookahead_iterator_current_symbol"] = a0 => (_ts_lookahead_iterator_current_symbol = Module["_ts_lookahead_iterator_current_symbol"] = wasmExports["ts_lookahead_iterator_current_symbol"])(a0); + var _memset = Module["_memset"] = (a0, a1, a2) => (_memset = Module["_memset"] = wasmExports["memset"])(a0, a1, a2); + var _memcpy = Module["_memcpy"] = (a0, a1, a2) => (_memcpy = Module["_memcpy"] = wasmExports["memcpy"])(a0, a1, a2); + var _ts_parser_delete = Module["_ts_parser_delete"] = a0 => (_ts_parser_delete = Module["_ts_parser_delete"] = wasmExports["ts_parser_delete"])(a0); + var _ts_parser_reset = Module["_ts_parser_reset"] = a0 => (_ts_parser_reset = Module["_ts_parser_reset"] = wasmExports["ts_parser_reset"])(a0); + var _ts_parser_set_language = Module["_ts_parser_set_language"] = (a0, a1) => (_ts_parser_set_language = Module["_ts_parser_set_language"] = wasmExports["ts_parser_set_language"])(a0, a1); + var _ts_parser_timeout_micros = Module["_ts_parser_timeout_micros"] = a0 => (_ts_parser_timeout_micros = Module["_ts_parser_timeout_micros"] = wasmExports["ts_parser_timeout_micros"])(a0); + var _ts_parser_set_timeout_micros = Module["_ts_parser_set_timeout_micros"] = (a0, a1, a2) => (_ts_parser_set_timeout_micros = Module["_ts_parser_set_timeout_micros"] = wasmExports["ts_parser_set_timeout_micros"])(a0, a1, a2); + var _ts_parser_set_included_ranges = Module["_ts_parser_set_included_ranges"] = (a0, a1, a2) => (_ts_parser_set_included_ranges = Module["_ts_parser_set_included_ranges"] = wasmExports["ts_parser_set_included_ranges"])(a0, a1, a2); + var _memmove = Module["_memmove"] = (a0, a1, a2) => (_memmove = Module["_memmove"] = wasmExports["memmove"])(a0, a1, a2); + var _memcmp = Module["_memcmp"] = (a0, a1, a2) => (_memcmp = Module["_memcmp"] = wasmExports["memcmp"])(a0, a1, a2); + var _ts_query_new = Module["_ts_query_new"] = (a0, a1, a2, a3, a4) => (_ts_query_new = Module["_ts_query_new"] = wasmExports["ts_query_new"])(a0, a1, a2, a3, a4); + var _ts_query_delete = Module["_ts_query_delete"] = a0 => (_ts_query_delete = Module["_ts_query_delete"] = wasmExports["ts_query_delete"])(a0); + var _iswspace = Module["_iswspace"] = a0 => (_iswspace = Module["_iswspace"] = wasmExports["iswspace"])(a0); + var _iswalnum = Module["_iswalnum"] = a0 => (_iswalnum = Module["_iswalnum"] = wasmExports["iswalnum"])(a0); + var _ts_query_pattern_count = Module["_ts_query_pattern_count"] = a0 => (_ts_query_pattern_count = Module["_ts_query_pattern_count"] = wasmExports["ts_query_pattern_count"])(a0); + var _ts_query_capture_count = Module["_ts_query_capture_count"] = a0 => (_ts_query_capture_count = Module["_ts_query_capture_count"] = wasmExports["ts_query_capture_count"])(a0); + var _ts_query_string_count = Module["_ts_query_string_count"] = a0 => (_ts_query_string_count = Module["_ts_query_string_count"] = wasmExports["ts_query_string_count"])(a0); + var _ts_query_capture_name_for_id = Module["_ts_query_capture_name_for_id"] = (a0, a1, a2) => (_ts_query_capture_name_for_id = Module["_ts_query_capture_name_for_id"] = wasmExports["ts_query_capture_name_for_id"])(a0, a1, a2); + var _ts_query_string_value_for_id = Module["_ts_query_string_value_for_id"] = (a0, a1, a2) => (_ts_query_string_value_for_id = Module["_ts_query_string_value_for_id"] = wasmExports["ts_query_string_value_for_id"])(a0, a1, a2); + var _ts_query_predicates_for_pattern = Module["_ts_query_predicates_for_pattern"] = (a0, a1, a2) => (_ts_query_predicates_for_pattern = Module["_ts_query_predicates_for_pattern"] = wasmExports["ts_query_predicates_for_pattern"])(a0, a1, a2); + var _ts_query_disable_capture = Module["_ts_query_disable_capture"] = (a0, a1, a2) => (_ts_query_disable_capture = Module["_ts_query_disable_capture"] = wasmExports["ts_query_disable_capture"])(a0, a1, a2); + var _ts_tree_copy = Module["_ts_tree_copy"] = a0 => (_ts_tree_copy = Module["_ts_tree_copy"] = wasmExports["ts_tree_copy"])(a0); + var _ts_tree_delete = Module["_ts_tree_delete"] = a0 => (_ts_tree_delete = Module["_ts_tree_delete"] = wasmExports["ts_tree_delete"])(a0); + var _ts_init = Module["_ts_init"] = () => (_ts_init = Module["_ts_init"] = wasmExports["ts_init"])(); + var _ts_parser_new_wasm = Module["_ts_parser_new_wasm"] = () => (_ts_parser_new_wasm = Module["_ts_parser_new_wasm"] = wasmExports["ts_parser_new_wasm"])(); + var _ts_parser_enable_logger_wasm = Module["_ts_parser_enable_logger_wasm"] = (a0, a1) => (_ts_parser_enable_logger_wasm = Module["_ts_parser_enable_logger_wasm"] = wasmExports["ts_parser_enable_logger_wasm"])(a0, a1); + var _ts_parser_parse_wasm = Module["_ts_parser_parse_wasm"] = (a0, a1, a2, a3, a4) => (_ts_parser_parse_wasm = Module["_ts_parser_parse_wasm"] = wasmExports["ts_parser_parse_wasm"])(a0, a1, a2, a3, a4); + var _ts_parser_included_ranges_wasm = Module["_ts_parser_included_ranges_wasm"] = a0 => (_ts_parser_included_ranges_wasm = Module["_ts_parser_included_ranges_wasm"] = wasmExports["ts_parser_included_ranges_wasm"])(a0); + var _ts_language_type_is_named_wasm = Module["_ts_language_type_is_named_wasm"] = (a0, a1) => (_ts_language_type_is_named_wasm = Module["_ts_language_type_is_named_wasm"] = wasmExports["ts_language_type_is_named_wasm"])(a0, a1); + var _ts_language_type_is_visible_wasm = Module["_ts_language_type_is_visible_wasm"] = (a0, a1) => (_ts_language_type_is_visible_wasm = Module["_ts_language_type_is_visible_wasm"] = wasmExports["ts_language_type_is_visible_wasm"])(a0, a1); + var _ts_tree_root_node_wasm = Module["_ts_tree_root_node_wasm"] = a0 => (_ts_tree_root_node_wasm = Module["_ts_tree_root_node_wasm"] = wasmExports["ts_tree_root_node_wasm"])(a0); + var _ts_tree_root_node_with_offset_wasm = Module["_ts_tree_root_node_with_offset_wasm"] = a0 => (_ts_tree_root_node_with_offset_wasm = Module["_ts_tree_root_node_with_offset_wasm"] = wasmExports["ts_tree_root_node_with_offset_wasm"])(a0); + var _ts_tree_edit_wasm = Module["_ts_tree_edit_wasm"] = a0 => (_ts_tree_edit_wasm = Module["_ts_tree_edit_wasm"] = wasmExports["ts_tree_edit_wasm"])(a0); + var _ts_tree_included_ranges_wasm = Module["_ts_tree_included_ranges_wasm"] = a0 => (_ts_tree_included_ranges_wasm = Module["_ts_tree_included_ranges_wasm"] = wasmExports["ts_tree_included_ranges_wasm"])(a0); + var _ts_tree_get_changed_ranges_wasm = Module["_ts_tree_get_changed_ranges_wasm"] = (a0, a1) => (_ts_tree_get_changed_ranges_wasm = Module["_ts_tree_get_changed_ranges_wasm"] = wasmExports["ts_tree_get_changed_ranges_wasm"])(a0, a1); + var _ts_tree_cursor_new_wasm = Module["_ts_tree_cursor_new_wasm"] = a0 => (_ts_tree_cursor_new_wasm = Module["_ts_tree_cursor_new_wasm"] = wasmExports["ts_tree_cursor_new_wasm"])(a0); + var _ts_tree_cursor_delete_wasm = Module["_ts_tree_cursor_delete_wasm"] = a0 => (_ts_tree_cursor_delete_wasm = Module["_ts_tree_cursor_delete_wasm"] = wasmExports["ts_tree_cursor_delete_wasm"])(a0); + var _ts_tree_cursor_reset_wasm = Module["_ts_tree_cursor_reset_wasm"] = a0 => (_ts_tree_cursor_reset_wasm = Module["_ts_tree_cursor_reset_wasm"] = wasmExports["ts_tree_cursor_reset_wasm"])(a0); + var _ts_tree_cursor_reset_to_wasm = Module["_ts_tree_cursor_reset_to_wasm"] = (a0, a1) => (_ts_tree_cursor_reset_to_wasm = Module["_ts_tree_cursor_reset_to_wasm"] = wasmExports["ts_tree_cursor_reset_to_wasm"])(a0, a1); + var _ts_tree_cursor_goto_first_child_wasm = Module["_ts_tree_cursor_goto_first_child_wasm"] = a0 => (_ts_tree_cursor_goto_first_child_wasm = Module["_ts_tree_cursor_goto_first_child_wasm"] = wasmExports["ts_tree_cursor_goto_first_child_wasm"])(a0); + var _ts_tree_cursor_goto_last_child_wasm = Module["_ts_tree_cursor_goto_last_child_wasm"] = a0 => (_ts_tree_cursor_goto_last_child_wasm = Module["_ts_tree_cursor_goto_last_child_wasm"] = wasmExports["ts_tree_cursor_goto_last_child_wasm"])(a0); + var _ts_tree_cursor_goto_first_child_for_index_wasm = Module["_ts_tree_cursor_goto_first_child_for_index_wasm"] = a0 => (_ts_tree_cursor_goto_first_child_for_index_wasm = Module["_ts_tree_cursor_goto_first_child_for_index_wasm"] = wasmExports["ts_tree_cursor_goto_first_child_for_index_wasm"])(a0); + var _ts_tree_cursor_goto_first_child_for_position_wasm = Module["_ts_tree_cursor_goto_first_child_for_position_wasm"] = a0 => (_ts_tree_cursor_goto_first_child_for_position_wasm = Module["_ts_tree_cursor_goto_first_child_for_position_wasm"] = wasmExports["ts_tree_cursor_goto_first_child_for_position_wasm"])(a0); + var _ts_tree_cursor_goto_next_sibling_wasm = Module["_ts_tree_cursor_goto_next_sibling_wasm"] = a0 => (_ts_tree_cursor_goto_next_sibling_wasm = Module["_ts_tree_cursor_goto_next_sibling_wasm"] = wasmExports["ts_tree_cursor_goto_next_sibling_wasm"])(a0); + var _ts_tree_cursor_goto_previous_sibling_wasm = Module["_ts_tree_cursor_goto_previous_sibling_wasm"] = a0 => (_ts_tree_cursor_goto_previous_sibling_wasm = Module["_ts_tree_cursor_goto_previous_sibling_wasm"] = wasmExports["ts_tree_cursor_goto_previous_sibling_wasm"])(a0); + var _ts_tree_cursor_goto_descendant_wasm = Module["_ts_tree_cursor_goto_descendant_wasm"] = (a0, a1) => (_ts_tree_cursor_goto_descendant_wasm = Module["_ts_tree_cursor_goto_descendant_wasm"] = wasmExports["ts_tree_cursor_goto_descendant_wasm"])(a0, a1); + var _ts_tree_cursor_goto_parent_wasm = Module["_ts_tree_cursor_goto_parent_wasm"] = a0 => (_ts_tree_cursor_goto_parent_wasm = Module["_ts_tree_cursor_goto_parent_wasm"] = wasmExports["ts_tree_cursor_goto_parent_wasm"])(a0); + var _ts_tree_cursor_current_node_type_id_wasm = Module["_ts_tree_cursor_current_node_type_id_wasm"] = a0 => (_ts_tree_cursor_current_node_type_id_wasm = Module["_ts_tree_cursor_current_node_type_id_wasm"] = wasmExports["ts_tree_cursor_current_node_type_id_wasm"])(a0); + var _ts_tree_cursor_current_node_state_id_wasm = Module["_ts_tree_cursor_current_node_state_id_wasm"] = a0 => (_ts_tree_cursor_current_node_state_id_wasm = Module["_ts_tree_cursor_current_node_state_id_wasm"] = wasmExports["ts_tree_cursor_current_node_state_id_wasm"])(a0); + var _ts_tree_cursor_current_node_is_named_wasm = Module["_ts_tree_cursor_current_node_is_named_wasm"] = a0 => (_ts_tree_cursor_current_node_is_named_wasm = Module["_ts_tree_cursor_current_node_is_named_wasm"] = wasmExports["ts_tree_cursor_current_node_is_named_wasm"])(a0); + var _ts_tree_cursor_current_node_is_missing_wasm = Module["_ts_tree_cursor_current_node_is_missing_wasm"] = a0 => (_ts_tree_cursor_current_node_is_missing_wasm = Module["_ts_tree_cursor_current_node_is_missing_wasm"] = wasmExports["ts_tree_cursor_current_node_is_missing_wasm"])(a0); + var _ts_tree_cursor_current_node_id_wasm = Module["_ts_tree_cursor_current_node_id_wasm"] = a0 => (_ts_tree_cursor_current_node_id_wasm = Module["_ts_tree_cursor_current_node_id_wasm"] = wasmExports["ts_tree_cursor_current_node_id_wasm"])(a0); + var _ts_tree_cursor_start_position_wasm = Module["_ts_tree_cursor_start_position_wasm"] = a0 => (_ts_tree_cursor_start_position_wasm = Module["_ts_tree_cursor_start_position_wasm"] = wasmExports["ts_tree_cursor_start_position_wasm"])(a0); + var _ts_tree_cursor_end_position_wasm = Module["_ts_tree_cursor_end_position_wasm"] = a0 => (_ts_tree_cursor_end_position_wasm = Module["_ts_tree_cursor_end_position_wasm"] = wasmExports["ts_tree_cursor_end_position_wasm"])(a0); + var _ts_tree_cursor_start_index_wasm = Module["_ts_tree_cursor_start_index_wasm"] = a0 => (_ts_tree_cursor_start_index_wasm = Module["_ts_tree_cursor_start_index_wasm"] = wasmExports["ts_tree_cursor_start_index_wasm"])(a0); + var _ts_tree_cursor_end_index_wasm = Module["_ts_tree_cursor_end_index_wasm"] = a0 => (_ts_tree_cursor_end_index_wasm = Module["_ts_tree_cursor_end_index_wasm"] = wasmExports["ts_tree_cursor_end_index_wasm"])(a0); + var _ts_tree_cursor_current_field_id_wasm = Module["_ts_tree_cursor_current_field_id_wasm"] = a0 => (_ts_tree_cursor_current_field_id_wasm = Module["_ts_tree_cursor_current_field_id_wasm"] = wasmExports["ts_tree_cursor_current_field_id_wasm"])(a0); + var _ts_tree_cursor_current_depth_wasm = Module["_ts_tree_cursor_current_depth_wasm"] = a0 => (_ts_tree_cursor_current_depth_wasm = Module["_ts_tree_cursor_current_depth_wasm"] = wasmExports["ts_tree_cursor_current_depth_wasm"])(a0); + var _ts_tree_cursor_current_descendant_index_wasm = Module["_ts_tree_cursor_current_descendant_index_wasm"] = a0 => (_ts_tree_cursor_current_descendant_index_wasm = Module["_ts_tree_cursor_current_descendant_index_wasm"] = wasmExports["ts_tree_cursor_current_descendant_index_wasm"])(a0); + var _ts_tree_cursor_current_node_wasm = Module["_ts_tree_cursor_current_node_wasm"] = a0 => (_ts_tree_cursor_current_node_wasm = Module["_ts_tree_cursor_current_node_wasm"] = wasmExports["ts_tree_cursor_current_node_wasm"])(a0); + var _ts_node_symbol_wasm = Module["_ts_node_symbol_wasm"] = a0 => (_ts_node_symbol_wasm = Module["_ts_node_symbol_wasm"] = wasmExports["ts_node_symbol_wasm"])(a0); + var _ts_node_field_name_for_child_wasm = Module["_ts_node_field_name_for_child_wasm"] = (a0, a1) => (_ts_node_field_name_for_child_wasm = Module["_ts_node_field_name_for_child_wasm"] = wasmExports["ts_node_field_name_for_child_wasm"])(a0, a1); + var _ts_node_children_by_field_id_wasm = Module["_ts_node_children_by_field_id_wasm"] = (a0, a1) => (_ts_node_children_by_field_id_wasm = Module["_ts_node_children_by_field_id_wasm"] = wasmExports["ts_node_children_by_field_id_wasm"])(a0, a1); + var _ts_node_first_child_for_byte_wasm = Module["_ts_node_first_child_for_byte_wasm"] = a0 => (_ts_node_first_child_for_byte_wasm = Module["_ts_node_first_child_for_byte_wasm"] = wasmExports["ts_node_first_child_for_byte_wasm"])(a0); + var _ts_node_first_named_child_for_byte_wasm = Module["_ts_node_first_named_child_for_byte_wasm"] = a0 => (_ts_node_first_named_child_for_byte_wasm = Module["_ts_node_first_named_child_for_byte_wasm"] = wasmExports["ts_node_first_named_child_for_byte_wasm"])(a0); + var _ts_node_grammar_symbol_wasm = Module["_ts_node_grammar_symbol_wasm"] = a0 => (_ts_node_grammar_symbol_wasm = Module["_ts_node_grammar_symbol_wasm"] = wasmExports["ts_node_grammar_symbol_wasm"])(a0); + var _ts_node_child_count_wasm = Module["_ts_node_child_count_wasm"] = a0 => (_ts_node_child_count_wasm = Module["_ts_node_child_count_wasm"] = wasmExports["ts_node_child_count_wasm"])(a0); + var _ts_node_named_child_count_wasm = Module["_ts_node_named_child_count_wasm"] = a0 => (_ts_node_named_child_count_wasm = Module["_ts_node_named_child_count_wasm"] = wasmExports["ts_node_named_child_count_wasm"])(a0); + var _ts_node_child_wasm = Module["_ts_node_child_wasm"] = (a0, a1) => (_ts_node_child_wasm = Module["_ts_node_child_wasm"] = wasmExports["ts_node_child_wasm"])(a0, a1); + var _ts_node_named_child_wasm = Module["_ts_node_named_child_wasm"] = (a0, a1) => (_ts_node_named_child_wasm = Module["_ts_node_named_child_wasm"] = wasmExports["ts_node_named_child_wasm"])(a0, a1); + var _ts_node_child_by_field_id_wasm = Module["_ts_node_child_by_field_id_wasm"] = (a0, a1) => (_ts_node_child_by_field_id_wasm = Module["_ts_node_child_by_field_id_wasm"] = wasmExports["ts_node_child_by_field_id_wasm"])(a0, a1); + var _ts_node_next_sibling_wasm = Module["_ts_node_next_sibling_wasm"] = a0 => (_ts_node_next_sibling_wasm = Module["_ts_node_next_sibling_wasm"] = wasmExports["ts_node_next_sibling_wasm"])(a0); + var _ts_node_prev_sibling_wasm = Module["_ts_node_prev_sibling_wasm"] = a0 => (_ts_node_prev_sibling_wasm = Module["_ts_node_prev_sibling_wasm"] = wasmExports["ts_node_prev_sibling_wasm"])(a0); + var _ts_node_next_named_sibling_wasm = Module["_ts_node_next_named_sibling_wasm"] = a0 => (_ts_node_next_named_sibling_wasm = Module["_ts_node_next_named_sibling_wasm"] = wasmExports["ts_node_next_named_sibling_wasm"])(a0); + var _ts_node_prev_named_sibling_wasm = Module["_ts_node_prev_named_sibling_wasm"] = a0 => (_ts_node_prev_named_sibling_wasm = Module["_ts_node_prev_named_sibling_wasm"] = wasmExports["ts_node_prev_named_sibling_wasm"])(a0); + var _ts_node_descendant_count_wasm = Module["_ts_node_descendant_count_wasm"] = a0 => (_ts_node_descendant_count_wasm = Module["_ts_node_descendant_count_wasm"] = wasmExports["ts_node_descendant_count_wasm"])(a0); + var _ts_node_parent_wasm = Module["_ts_node_parent_wasm"] = a0 => (_ts_node_parent_wasm = Module["_ts_node_parent_wasm"] = wasmExports["ts_node_parent_wasm"])(a0); + var _ts_node_descendant_for_index_wasm = Module["_ts_node_descendant_for_index_wasm"] = a0 => (_ts_node_descendant_for_index_wasm = Module["_ts_node_descendant_for_index_wasm"] = wasmExports["ts_node_descendant_for_index_wasm"])(a0); + var _ts_node_named_descendant_for_index_wasm = Module["_ts_node_named_descendant_for_index_wasm"] = a0 => (_ts_node_named_descendant_for_index_wasm = Module["_ts_node_named_descendant_for_index_wasm"] = wasmExports["ts_node_named_descendant_for_index_wasm"])(a0); + var _ts_node_descendant_for_position_wasm = Module["_ts_node_descendant_for_position_wasm"] = a0 => (_ts_node_descendant_for_position_wasm = Module["_ts_node_descendant_for_position_wasm"] = wasmExports["ts_node_descendant_for_position_wasm"])(a0); + var _ts_node_named_descendant_for_position_wasm = Module["_ts_node_named_descendant_for_position_wasm"] = a0 => (_ts_node_named_descendant_for_position_wasm = Module["_ts_node_named_descendant_for_position_wasm"] = wasmExports["ts_node_named_descendant_for_position_wasm"])(a0); + var _ts_node_start_point_wasm = Module["_ts_node_start_point_wasm"] = a0 => (_ts_node_start_point_wasm = Module["_ts_node_start_point_wasm"] = wasmExports["ts_node_start_point_wasm"])(a0); + var _ts_node_end_point_wasm = Module["_ts_node_end_point_wasm"] = a0 => (_ts_node_end_point_wasm = Module["_ts_node_end_point_wasm"] = wasmExports["ts_node_end_point_wasm"])(a0); + var _ts_node_start_index_wasm = Module["_ts_node_start_index_wasm"] = a0 => (_ts_node_start_index_wasm = Module["_ts_node_start_index_wasm"] = wasmExports["ts_node_start_index_wasm"])(a0); + var _ts_node_end_index_wasm = Module["_ts_node_end_index_wasm"] = a0 => (_ts_node_end_index_wasm = Module["_ts_node_end_index_wasm"] = wasmExports["ts_node_end_index_wasm"])(a0); + var _ts_node_to_string_wasm = Module["_ts_node_to_string_wasm"] = a0 => (_ts_node_to_string_wasm = Module["_ts_node_to_string_wasm"] = wasmExports["ts_node_to_string_wasm"])(a0); + var _ts_node_children_wasm = Module["_ts_node_children_wasm"] = a0 => (_ts_node_children_wasm = Module["_ts_node_children_wasm"] = wasmExports["ts_node_children_wasm"])(a0); + var _ts_node_named_children_wasm = Module["_ts_node_named_children_wasm"] = a0 => (_ts_node_named_children_wasm = Module["_ts_node_named_children_wasm"] = wasmExports["ts_node_named_children_wasm"])(a0); + var _ts_node_descendants_of_type_wasm = Module["_ts_node_descendants_of_type_wasm"] = (a0, a1, a2, a3, a4, a5, a6) => (_ts_node_descendants_of_type_wasm = Module["_ts_node_descendants_of_type_wasm"] = wasmExports["ts_node_descendants_of_type_wasm"])(a0, a1, a2, a3, a4, a5, a6); + var _ts_node_is_named_wasm = Module["_ts_node_is_named_wasm"] = a0 => (_ts_node_is_named_wasm = Module["_ts_node_is_named_wasm"] = wasmExports["ts_node_is_named_wasm"])(a0); + var _ts_node_has_changes_wasm = Module["_ts_node_has_changes_wasm"] = a0 => (_ts_node_has_changes_wasm = Module["_ts_node_has_changes_wasm"] = wasmExports["ts_node_has_changes_wasm"])(a0); + var _ts_node_has_error_wasm = Module["_ts_node_has_error_wasm"] = a0 => (_ts_node_has_error_wasm = Module["_ts_node_has_error_wasm"] = wasmExports["ts_node_has_error_wasm"])(a0); + var _ts_node_is_error_wasm = Module["_ts_node_is_error_wasm"] = a0 => (_ts_node_is_error_wasm = Module["_ts_node_is_error_wasm"] = wasmExports["ts_node_is_error_wasm"])(a0); + var _ts_node_is_missing_wasm = Module["_ts_node_is_missing_wasm"] = a0 => (_ts_node_is_missing_wasm = Module["_ts_node_is_missing_wasm"] = wasmExports["ts_node_is_missing_wasm"])(a0); + var _ts_node_is_extra_wasm = Module["_ts_node_is_extra_wasm"] = a0 => (_ts_node_is_extra_wasm = Module["_ts_node_is_extra_wasm"] = wasmExports["ts_node_is_extra_wasm"])(a0); + var _ts_node_parse_state_wasm = Module["_ts_node_parse_state_wasm"] = a0 => (_ts_node_parse_state_wasm = Module["_ts_node_parse_state_wasm"] = wasmExports["ts_node_parse_state_wasm"])(a0); + var _ts_node_next_parse_state_wasm = Module["_ts_node_next_parse_state_wasm"] = a0 => (_ts_node_next_parse_state_wasm = Module["_ts_node_next_parse_state_wasm"] = wasmExports["ts_node_next_parse_state_wasm"])(a0); + var _ts_query_matches_wasm = Module["_ts_query_matches_wasm"] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) => (_ts_query_matches_wasm = Module["_ts_query_matches_wasm"] = wasmExports["ts_query_matches_wasm"])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); + var _ts_query_captures_wasm = Module["_ts_query_captures_wasm"] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) => (_ts_query_captures_wasm = Module["_ts_query_captures_wasm"] = wasmExports["ts_query_captures_wasm"])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); + var _isalnum = Module["_isalnum"] = a0 => (_isalnum = Module["_isalnum"] = wasmExports["isalnum"])(a0); + var _iswalpha = Module["_iswalpha"] = a0 => (_iswalpha = Module["_iswalpha"] = wasmExports["iswalpha"])(a0); + var _iswblank = Module["_iswblank"] = a0 => (_iswblank = Module["_iswblank"] = wasmExports["iswblank"])(a0); + var _iswdigit = Module["_iswdigit"] = a0 => (_iswdigit = Module["_iswdigit"] = wasmExports["iswdigit"])(a0); + var _iswlower = Module["_iswlower"] = a0 => (_iswlower = Module["_iswlower"] = wasmExports["iswlower"])(a0); + var _iswupper = Module["_iswupper"] = a0 => (_iswupper = Module["_iswupper"] = wasmExports["iswupper"])(a0); + var _iswxdigit = Module["_iswxdigit"] = a0 => (_iswxdigit = Module["_iswxdigit"] = wasmExports["iswxdigit"])(a0); + var _isxdigit = Module["_isxdigit"] = a0 => (_isxdigit = Module["_isxdigit"] = wasmExports["isxdigit"])(a0); + var _memchr = Module["_memchr"] = (a0, a1, a2) => (_memchr = Module["_memchr"] = wasmExports["memchr"])(a0, a1, a2); + var _strlen = Module["_strlen"] = a0 => (_strlen = Module["_strlen"] = wasmExports["strlen"])(a0); + var _strcmp = Module["_strcmp"] = (a0, a1) => (_strcmp = Module["_strcmp"] = wasmExports["strcmp"])(a0, a1); + var _strncat = Module["_strncat"] = (a0, a1, a2) => (_strncat = Module["_strncat"] = wasmExports["strncat"])(a0, a1, a2); + var _strncpy = Module["_strncpy"] = (a0, a1, a2) => (_strncpy = Module["_strncpy"] = wasmExports["strncpy"])(a0, a1, a2); + var _towlower = Module["_towlower"] = a0 => (_towlower = Module["_towlower"] = wasmExports["towlower"])(a0); + var _towupper = Module["_towupper"] = a0 => (_towupper = Module["_towupper"] = wasmExports["towupper"])(a0); + var _setThrew = (a0, a1) => (_setThrew = wasmExports["setThrew"])(a0, a1); + var __emscripten_stack_restore = a0 => (__emscripten_stack_restore = wasmExports["_emscripten_stack_restore"])(a0); + var __emscripten_stack_alloc = a0 => (__emscripten_stack_alloc = wasmExports["_emscripten_stack_alloc"])(a0); + var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports["emscripten_stack_get_current"])(); + var dynCall_jiji = Module["dynCall_jiji"] = (a0, a1, a2, a3, a4) => (dynCall_jiji = Module["dynCall_jiji"] = wasmExports["dynCall_jiji"])(a0, a1, a2, a3, a4); + var _orig$ts_parser_timeout_micros = Module["_orig$ts_parser_timeout_micros"] = a0 => (_orig$ts_parser_timeout_micros = Module["_orig$ts_parser_timeout_micros"] = wasmExports["orig$ts_parser_timeout_micros"])(a0); + var _orig$ts_parser_set_timeout_micros = Module["_orig$ts_parser_set_timeout_micros"] = (a0, a1) => (_orig$ts_parser_set_timeout_micros = Module["_orig$ts_parser_set_timeout_micros"] = wasmExports["orig$ts_parser_set_timeout_micros"])(a0, a1); + // include: postamble.js + // === Auto-generated postamble setup entry stuff === + Module["AsciiToString"] = AsciiToString; + Module["stringToUTF16"] = stringToUTF16; + var calledRun; + dependenciesFulfilled = function runCaller() { + // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) + if (!calledRun) run(); + if (!calledRun) dependenciesFulfilled = runCaller; + }; + // try this again later, after new deps are fulfilled + function callMain(args = []) { + var entryFunction = resolveGlobalSymbol("main").sym; + // Main modules can't tell if they have main() at compile time, since it may + // arrive from a dynamic library. + if (!entryFunction) return; + args.unshift(thisProgram); + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach(arg => { + LE_HEAP_STORE_U32(((argv_ptr) >> 2) * 4, stringToUTF8OnStack(arg)); + argv_ptr += 4; + }); + LE_HEAP_STORE_U32(((argv_ptr) >> 2) * 4, 0); + try { + var ret = entryFunction(argc, argv); + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } + } + function run(args = arguments_) { + if (runDependencies > 0) { + return; + } + preRun(); + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + return; + } + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + if (calledRun) return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) return; + initRuntime(); + preMain(); + Module["onRuntimeInitialized"]?.(); + if (shouldRunNow) callMain(args); + postRun(); + } + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function() { + setTimeout(function() { + Module["setStatus"](""); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } + } + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") Module["preInit"] = [ Module["preInit"] ]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()(); + } + } + // shouldRunNow refers to calling main(), not run(). + var shouldRunNow = true; + if (Module["noInitialRun"]) shouldRunNow = false; + run(); + // end include: postamble.js + // include: /Users/andrew/Code/tree-sitter/tree-sitter/lib/binding_web/binding.js + /* eslint-disable-next-line spaced-comment */ /// + /* eslint-disable-next-line spaced-comment */ /// + const C = Module; + const INTERNAL = {}; + const SIZE_OF_INT = 4; + const SIZE_OF_CURSOR = 4 * SIZE_OF_INT; + const SIZE_OF_NODE = 5 * SIZE_OF_INT; + const SIZE_OF_POINT = 2 * SIZE_OF_INT; + const SIZE_OF_RANGE = 2 * SIZE_OF_INT + 2 * SIZE_OF_POINT; + const ZERO_POINT = { + row: 0, + column: 0 + }; + const QUERY_WORD_REGEX = /[\w-.]*/g; + const PREDICATE_STEP_TYPE_CAPTURE = 1; + const PREDICATE_STEP_TYPE_STRING = 2; + const LANGUAGE_FUNCTION_REGEX = /^_?tree_sitter_\w+/; + let VERSION; + let MIN_COMPATIBLE_VERSION; + let TRANSFER_BUFFER; + let currentParseCallback; + // eslint-disable-next-line no-unused-vars + let currentLogCallback; + // eslint-disable-next-line no-unused-vars + class ParserImpl { + static init() { + TRANSFER_BUFFER = C._ts_init(); + VERSION = getValue(TRANSFER_BUFFER, "i32"); + console.log('Version???????', VERSION); + MIN_COMPATIBLE_VERSION = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + console.log('MIN COMPAT:', MIN_COMPATIBLE_VERSION); + } + initialize() { + C._ts_parser_new_wasm(); + this[0] = getValue(TRANSFER_BUFFER, "i32"); + this[1] = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + } + delete() { + C._ts_parser_delete(this[0]); + C._free(this[1]); + this[0] = 0; + this[1] = 0; + } + setLanguage(language) { + let address; + if (!language) { + address = 0; + language = null; + } else if (language.constructor === Language) { + address = language[0]; + const version = C._ts_language_version(address); + if (version < MIN_COMPATIBLE_VERSION || VERSION < version) { + throw new Error(`Incompatible language version ${version}. ` + `Compatibility range ${MIN_COMPATIBLE_VERSION} through ${VERSION}.`); + } + } else { + throw new Error("Argument must be a Language"); + } + this.language = language; + C._ts_parser_set_language(this[0], address); + return this; + } + getLanguage() { + return this.language; + } + parse(callback, oldTree, options) { + if (typeof callback === "string") { + currentParseCallback = (index, _) => callback.slice(index); + } else if (typeof callback === "function") { + currentParseCallback = callback; + } else { + throw new Error("Argument must be a string or a function"); + } + if (this.logCallback) { + currentLogCallback = this.logCallback; + C._ts_parser_enable_logger_wasm(this[0], 1); + } else { + currentLogCallback = null; + C._ts_parser_enable_logger_wasm(this[0], 0); + } + let rangeCount = 0; + let rangeAddress = 0; + if (options?.includedRanges) { + rangeCount = options.includedRanges.length; + rangeAddress = C._calloc(rangeCount, SIZE_OF_RANGE); + let address = rangeAddress; + for (let i = 0; i < rangeCount; i++) { + marshalRange(address, options.includedRanges[i]); + address += SIZE_OF_RANGE; + } + } + const treeAddress = C._ts_parser_parse_wasm(this[0], this[1], oldTree ? oldTree[0] : 0, rangeAddress, rangeCount); + if (!treeAddress) { + currentParseCallback = null; + currentLogCallback = null; + throw new Error("Parsing failed"); + } + const result = new Tree(INTERNAL, treeAddress, this.language, currentParseCallback); + currentParseCallback = null; + currentLogCallback = null; + return result; + } + reset() { + C._ts_parser_reset(this[0]); + } + getIncludedRanges() { + C._ts_parser_included_ranges_wasm(this[0]); + const count = getValue(TRANSFER_BUFFER, "i32"); + const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const result = new Array(count); + if (count > 0) { + let address = buffer; + for (let i = 0; i < count; i++) { + result[i] = unmarshalRange(address); + address += SIZE_OF_RANGE; + } + C._free(buffer); + } + return result; + } + getTimeoutMicros() { + return C._ts_parser_timeout_micros(this[0]); + } + setTimeoutMicros(timeout) { + C._ts_parser_set_timeout_micros(this[0], timeout); + } + setLogger(callback) { + if (!callback) { + callback = null; + } else if (typeof callback !== "function") { + throw new Error("Logger callback must be a function"); + } + this.logCallback = callback; + return this; + } + getLogger() { + return this.logCallback; + } + } + class Tree { + constructor(internal, address, language, textCallback) { + assertInternal(internal); + this[0] = address; + this.language = language; + this.textCallback = textCallback; + } + copy() { + const address = C._ts_tree_copy(this[0]); + return new Tree(INTERNAL, address, this.language, this.textCallback); + } + delete() { + C._ts_tree_delete(this[0]); + this[0] = 0; + } + edit(edit) { + marshalEdit(edit); + C._ts_tree_edit_wasm(this[0]); + } + get rootNode() { + C._ts_tree_root_node_wasm(this[0]); + return unmarshalNode(this); + } + rootNodeWithOffset(offsetBytes, offsetExtent) { + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + setValue(address, offsetBytes, "i32"); + marshalPoint(address + SIZE_OF_INT, offsetExtent); + C._ts_tree_root_node_with_offset_wasm(this[0]); + return unmarshalNode(this); + } + getLanguage() { + return this.language; + } + walk() { + return this.rootNode.walk(); + } + getChangedRanges(other) { + if (other.constructor !== Tree) { + throw new TypeError("Argument must be a Tree"); + } + C._ts_tree_get_changed_ranges_wasm(this[0], other[0]); + const count = getValue(TRANSFER_BUFFER, "i32"); + const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const result = new Array(count); + if (count > 0) { + let address = buffer; + for (let i = 0; i < count; i++) { + result[i] = unmarshalRange(address); + address += SIZE_OF_RANGE; + } + C._free(buffer); + } + return result; + } + getIncludedRanges() { + C._ts_tree_included_ranges_wasm(this[0]); + const count = getValue(TRANSFER_BUFFER, "i32"); + const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const result = new Array(count); + if (count > 0) { + let address = buffer; + for (let i = 0; i < count; i++) { + result[i] = unmarshalRange(address); + address += SIZE_OF_RANGE; + } + C._free(buffer); + } + return result; + } + } + class Node { + constructor(internal, tree) { + assertInternal(internal); + this.tree = tree; + } + get typeId() { + marshalNode(this); + return C._ts_node_symbol_wasm(this.tree[0]); + } + get grammarId() { + marshalNode(this); + return C._ts_node_grammar_symbol_wasm(this.tree[0]); + } + get type() { + return this.tree.language.types[this.typeId] || "ERROR"; + } + get grammarType() { + return this.tree.language.types[this.grammarId] || "ERROR"; + } + get endPosition() { + marshalNode(this); + C._ts_node_end_point_wasm(this.tree[0]); + return unmarshalPoint(TRANSFER_BUFFER); + } + get endIndex() { + marshalNode(this); + return C._ts_node_end_index_wasm(this.tree[0]); + } + get text() { + return getText(this.tree, this.startIndex, this.endIndex); + } + get parseState() { + marshalNode(this); + return C._ts_node_parse_state_wasm(this.tree[0]); + } + get nextParseState() { + marshalNode(this); + return C._ts_node_next_parse_state_wasm(this.tree[0]); + } + get isNamed() { + marshalNode(this); + return C._ts_node_is_named_wasm(this.tree[0]) === 1; + } + get hasError() { + marshalNode(this); + return C._ts_node_has_error_wasm(this.tree[0]) === 1; + } + get hasChanges() { + marshalNode(this); + return C._ts_node_has_changes_wasm(this.tree[0]) === 1; + } + get isError() { + marshalNode(this); + return C._ts_node_is_error_wasm(this.tree[0]) === 1; + } + get isMissing() { + marshalNode(this); + return C._ts_node_is_missing_wasm(this.tree[0]) === 1; + } + get isExtra() { + marshalNode(this); + return C._ts_node_is_extra_wasm(this.tree[0]) === 1; + } + equals(other) { + return this.id === other.id; + } + child(index) { + marshalNode(this); + C._ts_node_child_wasm(this.tree[0], index); + return unmarshalNode(this.tree); + } + namedChild(index) { + marshalNode(this); + C._ts_node_named_child_wasm(this.tree[0], index); + return unmarshalNode(this.tree); + } + childForFieldId(fieldId) { + marshalNode(this); + C._ts_node_child_by_field_id_wasm(this.tree[0], fieldId); + return unmarshalNode(this.tree); + } + childForFieldName(fieldName) { + const fieldId = this.tree.language.fields.indexOf(fieldName); + if (fieldId !== -1) return this.childForFieldId(fieldId); + return null; + } + fieldNameForChild(index) { + marshalNode(this); + const address = C._ts_node_field_name_for_child_wasm(this.tree[0], index); + if (!address) { + return null; + } + const result = AsciiToString(address); + // must not free, the string memory is owned by the language + return result; + } + childrenForFieldName(fieldName) { + const fieldId = this.tree.language.fields.indexOf(fieldName); + if (fieldId !== -1 && fieldId !== 0) return this.childrenForFieldId(fieldId); + return []; + } + childrenForFieldId(fieldId) { + marshalNode(this); + C._ts_node_children_by_field_id_wasm(this.tree[0], fieldId); + const count = getValue(TRANSFER_BUFFER, "i32"); + const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const result = new Array(count); + if (count > 0) { + let address = buffer; + for (let i = 0; i < count; i++) { + result[i] = unmarshalNode(this.tree, address); + address += SIZE_OF_NODE; + } + C._free(buffer); + } + return result; + } + firstChildForIndex(index) { + marshalNode(this); + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + setValue(address, index, "i32"); + C._ts_node_first_child_for_byte_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + firstNamedChildForIndex(index) { + marshalNode(this); + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + setValue(address, index, "i32"); + C._ts_node_first_named_child_for_byte_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + get childCount() { + marshalNode(this); + return C._ts_node_child_count_wasm(this.tree[0]); + } + get namedChildCount() { + marshalNode(this); + return C._ts_node_named_child_count_wasm(this.tree[0]); + } + get firstChild() { + return this.child(0); + } + get firstNamedChild() { + return this.namedChild(0); + } + get lastChild() { + return this.child(this.childCount - 1); + } + get lastNamedChild() { + return this.namedChild(this.namedChildCount - 1); + } + get children() { + if (!this._children) { + marshalNode(this); + C._ts_node_children_wasm(this.tree[0]); + const count = getValue(TRANSFER_BUFFER, "i32"); + const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + this._children = new Array(count); + if (count > 0) { + let address = buffer; + for (let i = 0; i < count; i++) { + this._children[i] = unmarshalNode(this.tree, address); + address += SIZE_OF_NODE; + } + C._free(buffer); + } + } + return this._children; + } + get namedChildren() { + if (!this._namedChildren) { + marshalNode(this); + C._ts_node_named_children_wasm(this.tree[0]); + const count = getValue(TRANSFER_BUFFER, "i32"); + const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + this._namedChildren = new Array(count); + if (count > 0) { + let address = buffer; + for (let i = 0; i < count; i++) { + this._namedChildren[i] = unmarshalNode(this.tree, address); + address += SIZE_OF_NODE; + } + C._free(buffer); + } + } + return this._namedChildren; + } + descendantsOfType(types, startPosition, endPosition) { + if (!Array.isArray(types)) types = [ types ]; + if (!startPosition) startPosition = ZERO_POINT; + if (!endPosition) endPosition = ZERO_POINT; + // Convert the type strings to numeric type symbols. + const symbols = []; + const typesBySymbol = this.tree.language.types; + for (let i = 0, n = typesBySymbol.length; i < n; i++) { + if (types.includes(typesBySymbol[i])) { + symbols.push(i); + } + } + // Copy the array of symbols to the WASM heap. + const symbolsAddress = C._malloc(SIZE_OF_INT * symbols.length); + for (let i = 0, n = symbols.length; i < n; i++) { + setValue(symbolsAddress + i * SIZE_OF_INT, symbols[i], "i32"); + } + // Call the C API to compute the descendants. + marshalNode(this); + C._ts_node_descendants_of_type_wasm(this.tree[0], symbolsAddress, symbols.length, startPosition.row, startPosition.column, endPosition.row, endPosition.column); + // Instantiate the nodes based on the data returned. + const descendantCount = getValue(TRANSFER_BUFFER, "i32"); + const descendantAddress = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const result = new Array(descendantCount); + if (descendantCount > 0) { + let address = descendantAddress; + for (let i = 0; i < descendantCount; i++) { + result[i] = unmarshalNode(this.tree, address); + address += SIZE_OF_NODE; + } + } + // Free the intermediate buffers + C._free(descendantAddress); + C._free(symbolsAddress); + return result; + } + get nextSibling() { + marshalNode(this); + C._ts_node_next_sibling_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + get previousSibling() { + marshalNode(this); + C._ts_node_prev_sibling_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + get nextNamedSibling() { + marshalNode(this); + C._ts_node_next_named_sibling_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + get previousNamedSibling() { + marshalNode(this); + C._ts_node_prev_named_sibling_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + get descendantCount() { + marshalNode(this); + return C._ts_node_descendant_count_wasm(this.tree[0]); + } + get parent() { + marshalNode(this); + C._ts_node_parent_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + descendantForIndex(start, end = start) { + if (typeof start !== "number" || typeof end !== "number") { + throw new Error("Arguments must be numbers"); + } + marshalNode(this); + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + setValue(address, start, "i32"); + setValue(address + SIZE_OF_INT, end, "i32"); + C._ts_node_descendant_for_index_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + namedDescendantForIndex(start, end = start) { + if (typeof start !== "number" || typeof end !== "number") { + throw new Error("Arguments must be numbers"); + } + marshalNode(this); + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + setValue(address, start, "i32"); + setValue(address + SIZE_OF_INT, end, "i32"); + C._ts_node_named_descendant_for_index_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + descendantForPosition(start, end = start) { + if (!isPoint(start) || !isPoint(end)) { + throw new Error("Arguments must be {row, column} objects"); + } + marshalNode(this); + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + marshalPoint(address, start); + marshalPoint(address + SIZE_OF_POINT, end); + C._ts_node_descendant_for_position_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + namedDescendantForPosition(start, end = start) { + if (!isPoint(start) || !isPoint(end)) { + throw new Error("Arguments must be {row, column} objects"); + } + marshalNode(this); + const address = TRANSFER_BUFFER + SIZE_OF_NODE; + marshalPoint(address, start); + marshalPoint(address + SIZE_OF_POINT, end); + C._ts_node_named_descendant_for_position_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + walk() { + marshalNode(this); + C._ts_tree_cursor_new_wasm(this.tree[0]); + return new TreeCursor(INTERNAL, this.tree); + } + toString() { + marshalNode(this); + const address = C._ts_node_to_string_wasm(this.tree[0]); + const result = AsciiToString(address); + C._free(address); + return result; + } + } + class TreeCursor { + constructor(internal, tree) { + assertInternal(internal); + this.tree = tree; + unmarshalTreeCursor(this); + } + delete() { + marshalTreeCursor(this); + C._ts_tree_cursor_delete_wasm(this.tree[0]); + this[0] = this[1] = this[2] = 0; + } + reset(node) { + marshalNode(node); + marshalTreeCursor(this, TRANSFER_BUFFER + SIZE_OF_NODE); + C._ts_tree_cursor_reset_wasm(this.tree[0]); + unmarshalTreeCursor(this); + } + resetTo(cursor) { + marshalTreeCursor(this, TRANSFER_BUFFER); + marshalTreeCursor(cursor, TRANSFER_BUFFER + SIZE_OF_CURSOR); + C._ts_tree_cursor_reset_to_wasm(this.tree[0], cursor.tree[0]); + unmarshalTreeCursor(this); + } + get nodeType() { + return this.tree.language.types[this.nodeTypeId] || "ERROR"; + } + get nodeTypeId() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_node_type_id_wasm(this.tree[0]); + } + get nodeStateId() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_node_state_id_wasm(this.tree[0]); + } + get nodeId() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_node_id_wasm(this.tree[0]); + } + get nodeIsNamed() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_node_is_named_wasm(this.tree[0]) === 1; + } + get nodeIsMissing() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_node_is_missing_wasm(this.tree[0]) === 1; + } + get nodeText() { + marshalTreeCursor(this); + const startIndex = C._ts_tree_cursor_start_index_wasm(this.tree[0]); + const endIndex = C._ts_tree_cursor_end_index_wasm(this.tree[0]); + return getText(this.tree, startIndex, endIndex); + } + get startPosition() { + marshalTreeCursor(this); + C._ts_tree_cursor_start_position_wasm(this.tree[0]); + return unmarshalPoint(TRANSFER_BUFFER); + } + get endPosition() { + marshalTreeCursor(this); + C._ts_tree_cursor_end_position_wasm(this.tree[0]); + return unmarshalPoint(TRANSFER_BUFFER); + } + get startIndex() { + marshalTreeCursor(this); + return C._ts_tree_cursor_start_index_wasm(this.tree[0]); + } + get endIndex() { + marshalTreeCursor(this); + return C._ts_tree_cursor_end_index_wasm(this.tree[0]); + } + get currentNode() { + marshalTreeCursor(this); + C._ts_tree_cursor_current_node_wasm(this.tree[0]); + return unmarshalNode(this.tree); + } + get currentFieldId() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_field_id_wasm(this.tree[0]); + } + get currentFieldName() { + return this.tree.language.fields[this.currentFieldId]; + } + get currentDepth() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_depth_wasm(this.tree[0]); + } + get currentDescendantIndex() { + marshalTreeCursor(this); + return C._ts_tree_cursor_current_descendant_index_wasm(this.tree[0]); + } + gotoFirstChild() { + marshalTreeCursor(this); + const result = C._ts_tree_cursor_goto_first_child_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + gotoLastChild() { + marshalTreeCursor(this); + const result = C._ts_tree_cursor_goto_last_child_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + gotoFirstChildForIndex(goalIndex) { + marshalTreeCursor(this); + setValue(TRANSFER_BUFFER + SIZE_OF_CURSOR, goalIndex, "i32"); + const result = C._ts_tree_cursor_goto_first_child_for_index_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + gotoFirstChildForPosition(goalPosition) { + marshalTreeCursor(this); + marshalPoint(TRANSFER_BUFFER + SIZE_OF_CURSOR, goalPosition); + const result = C._ts_tree_cursor_goto_first_child_for_position_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + gotoNextSibling() { + marshalTreeCursor(this); + const result = C._ts_tree_cursor_goto_next_sibling_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + gotoPreviousSibling() { + marshalTreeCursor(this); + const result = C._ts_tree_cursor_goto_previous_sibling_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + gotoDescendant(goalDescendantindex) { + marshalTreeCursor(this); + C._ts_tree_cursor_goto_descendant_wasm(this.tree[0], goalDescendantindex); + unmarshalTreeCursor(this); + } + gotoParent() { + marshalTreeCursor(this); + const result = C._ts_tree_cursor_goto_parent_wasm(this.tree[0]); + unmarshalTreeCursor(this); + return result === 1; + } + } + class Language { + constructor(internal, address) { + assertInternal(internal); + this[0] = address; + this.types = new Array(C._ts_language_symbol_count(this[0])); + for (let i = 0, n = this.types.length; i < n; i++) { + if (C._ts_language_symbol_type(this[0], i) < 2) { + this.types[i] = UTF8ToString(C._ts_language_symbol_name(this[0], i)); + } + } + this.fields = new Array(C._ts_language_field_count(this[0]) + 1); + for (let i = 0, n = this.fields.length; i < n; i++) { + const fieldName = C._ts_language_field_name_for_id(this[0], i); + if (fieldName !== 0) { + this.fields[i] = UTF8ToString(fieldName); + } else { + this.fields[i] = null; + } + } + } + get version() { + return C._ts_language_version(this[0]); + } + get fieldCount() { + return this.fields.length - 1; + } + get stateCount() { + return C._ts_language_state_count(this[0]); + } + fieldIdForName(fieldName) { + const result = this.fields.indexOf(fieldName); + if (result !== -1) { + return result; + } else { + return null; + } + } + fieldNameForId(fieldId) { + return this.fields[fieldId] || null; + } + idForNodeType(type, named) { + const typeLength = lengthBytesUTF8(type); + const typeAddress = C._malloc(typeLength + 1); + stringToUTF8(type, typeAddress, typeLength + 1); + const result = C._ts_language_symbol_for_name(this[0], typeAddress, typeLength, named); + C._free(typeAddress); + return result || null; + } + get nodeTypeCount() { + return C._ts_language_symbol_count(this[0]); + } + nodeTypeForId(typeId) { + const name = C._ts_language_symbol_name(this[0], typeId); + return name ? UTF8ToString(name) : null; + } + nodeTypeIsNamed(typeId) { + return C._ts_language_type_is_named_wasm(this[0], typeId) ? true : false; + } + nodeTypeIsVisible(typeId) { + return C._ts_language_type_is_visible_wasm(this[0], typeId) ? true : false; + } + nextState(stateId, typeId) { + return C._ts_language_next_state(this[0], stateId, typeId); + } + lookaheadIterator(stateId) { + const address = C._ts_lookahead_iterator_new(this[0], stateId); + if (address) return new LookaheadIterable(INTERNAL, address, this); + return null; + } + query(source) { + const sourceLength = lengthBytesUTF8(source); + const sourceAddress = C._malloc(sourceLength + 1); + stringToUTF8(source, sourceAddress, sourceLength + 1); + const address = C._ts_query_new(this[0], sourceAddress, sourceLength, TRANSFER_BUFFER, TRANSFER_BUFFER + SIZE_OF_INT); + if (!address) { + const errorId = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const errorByte = getValue(TRANSFER_BUFFER, "i32"); + const errorIndex = UTF8ToString(sourceAddress, errorByte).length; + const suffix = source.substr(errorIndex, 100).split("\n")[0]; + let word = suffix.match(QUERY_WORD_REGEX)[0]; + let error; + switch (errorId) { + case 2: + error = new RangeError(`Bad node name '${word}'`); + break; + + case 3: + error = new RangeError(`Bad field name '${word}'`); + break; + + case 4: + error = new RangeError(`Bad capture name @${word}`); + break; + + case 5: + error = new TypeError(`Bad pattern structure at offset ${errorIndex}: '${suffix}'...`); + word = ""; + break; + + default: + error = new SyntaxError(`Bad syntax at offset ${errorIndex}: '${suffix}'...`); + word = ""; + break; + } + error.index = errorIndex; + error.length = word.length; + C._free(sourceAddress); + throw error; + } + const stringCount = C._ts_query_string_count(address); + const captureCount = C._ts_query_capture_count(address); + const patternCount = C._ts_query_pattern_count(address); + const captureNames = new Array(captureCount); + const stringValues = new Array(stringCount); + for (let i = 0; i < captureCount; i++) { + const nameAddress = C._ts_query_capture_name_for_id(address, i, TRANSFER_BUFFER); + const nameLength = getValue(TRANSFER_BUFFER, "i32"); + captureNames[i] = UTF8ToString(nameAddress, nameLength); + } + for (let i = 0; i < stringCount; i++) { + const valueAddress = C._ts_query_string_value_for_id(address, i, TRANSFER_BUFFER); + const nameLength = getValue(TRANSFER_BUFFER, "i32"); + stringValues[i] = UTF8ToString(valueAddress, nameLength); + } + const setProperties = new Array(patternCount); + const assertedProperties = new Array(patternCount); + const refutedProperties = new Array(patternCount); + const predicates = new Array(patternCount); + const textPredicates = new Array(patternCount); + for (let i = 0; i < patternCount; i++) { + const predicatesAddress = C._ts_query_predicates_for_pattern(address, i, TRANSFER_BUFFER); + const stepCount = getValue(TRANSFER_BUFFER, "i32"); + predicates[i] = []; + textPredicates[i] = []; + const steps = []; + let stepAddress = predicatesAddress; + for (let j = 0; j < stepCount; j++) { + const stepType = getValue(stepAddress, "i32"); + stepAddress += SIZE_OF_INT; + const stepValueId = getValue(stepAddress, "i32"); + stepAddress += SIZE_OF_INT; + if (stepType === PREDICATE_STEP_TYPE_CAPTURE) { + steps.push({ + type: "capture", + name: captureNames[stepValueId] + }); + } else if (stepType === PREDICATE_STEP_TYPE_STRING) { + steps.push({ + type: "string", + value: stringValues[stepValueId] + }); + } else if (steps.length > 0) { + if (steps[0].type !== "string") { + throw new Error("Predicates must begin with a literal value"); + } + const operator = steps[0].value; + let isPositive = true; + let matchAll = true; + let captureName; + switch (operator) { + case "any-not-eq?": + case "not-eq?": + isPositive = false; + + case "any-eq?": + case "eq?": + if (steps.length !== 3) { + throw new Error(`Wrong number of arguments to \`#${operator}\` predicate. Expected 2, got ${steps.length - 1}`); + } + if (steps[1].type !== "capture") { + throw new Error(`First argument of \`#${operator}\` predicate must be a capture. Got "${steps[1].value}"`); + } + matchAll = !operator.startsWith("any-"); + if (steps[2].type === "capture") { + const captureName1 = steps[1].name; + const captureName2 = steps[2].name; + textPredicates[i].push(captures => { + const nodes1 = []; + const nodes2 = []; + for (const c of captures) { + if (c.name === captureName1) nodes1.push(c.node); + if (c.name === captureName2) nodes2.push(c.node); + } + const compare = (n1, n2, positive) => positive ? n1.text === n2.text : n1.text !== n2.text; + return matchAll ? nodes1.every(n1 => nodes2.some(n2 => compare(n1, n2, isPositive))) : nodes1.some(n1 => nodes2.some(n2 => compare(n1, n2, isPositive))); + }); + } else { + captureName = steps[1].name; + const stringValue = steps[2].value; + const matches = n => n.text === stringValue; + const doesNotMatch = n => n.text !== stringValue; + textPredicates[i].push(captures => { + const nodes = []; + for (const c of captures) { + if (c.name === captureName) nodes.push(c.node); + } + const test = isPositive ? matches : doesNotMatch; + return matchAll ? nodes.every(test) : nodes.some(test); + }); + } + break; + + case "any-not-match?": + case "not-match?": + isPositive = false; + + case "any-match?": + case "match?": + if (steps.length !== 3) { + throw new Error(`Wrong number of arguments to \`#${operator}\` predicate. Expected 2, got ${steps.length - 1}.`); + } + if (steps[1].type !== "capture") { + throw new Error(`First argument of \`#${operator}\` predicate must be a capture. Got "${steps[1].value}".`); + } + if (steps[2].type !== "string") { + throw new Error(`Second argument of \`#${operator}\` predicate must be a string. Got @${steps[2].value}.`); + } + captureName = steps[1].name; + const regex = new RegExp(steps[2].value); + matchAll = !operator.startsWith("any-"); + textPredicates[i].push(captures => { + const nodes = []; + for (const c of captures) { + if (c.name === captureName) nodes.push(c.node.text); + } + const test = (text, positive) => positive ? regex.test(text) : !regex.test(text); + if (nodes.length === 0) return !isPositive; + return matchAll ? nodes.every(text => test(text, isPositive)) : nodes.some(text => test(text, isPositive)); + }); + break; + + case "set!": + if (steps.length < 2 || steps.length > 3) { + throw new Error(`Wrong number of arguments to \`#set!\` predicate. Expected 1 or 2. Got ${steps.length - 1}.`); + } + if (steps.some(s => s.type !== "string")) { + throw new Error(`Arguments to \`#set!\` predicate must be a strings.".`); + } + if (!setProperties[i]) setProperties[i] = {}; + setProperties[i][steps[1].value] = steps[2] ? steps[2].value : null; + break; + + case "is?": + case "is-not?": + if (steps.length < 2 || steps.length > 3) { + throw new Error(`Wrong number of arguments to \`#${operator}\` predicate. Expected 1 or 2. Got ${steps.length - 1}.`); + } + if (steps.some(s => s.type !== "string")) { + throw new Error(`Arguments to \`#${operator}\` predicate must be a strings.".`); + } + const properties = operator === "is?" ? assertedProperties : refutedProperties; + if (!properties[i]) properties[i] = {}; + properties[i][steps[1].value] = steps[2] ? steps[2].value : null; + break; + + case "not-any-of?": + isPositive = false; + + case "any-of?": + if (steps.length < 2) { + throw new Error(`Wrong number of arguments to \`#${operator}\` predicate. Expected at least 1. Got ${steps.length - 1}.`); + } + if (steps[1].type !== "capture") { + throw new Error(`First argument of \`#${operator}\` predicate must be a capture. Got "${steps[1].value}".`); + } + for (let i = 2; i < steps.length; i++) { + if (steps[i].type !== "string") { + throw new Error(`Arguments to \`#${operator}\` predicate must be a strings.".`); + } + } + captureName = steps[1].name; + const values = steps.slice(2).map(s => s.value); + textPredicates[i].push(captures => { + const nodes = []; + for (const c of captures) { + if (c.name === captureName) nodes.push(c.node.text); + } + if (nodes.length === 0) return !isPositive; + return nodes.every(text => values.includes(text)) === isPositive; + }); + break; - function marshalEdit(edit) { - let address = TRANSFER_BUFFER; - marshalPoint(address, edit.startPosition); - address += SIZE_OF_POINT; - marshalPoint(address, edit.oldEndPosition); - address += SIZE_OF_POINT; - marshalPoint(address, edit.newEndPosition); - address += SIZE_OF_POINT; - setValue(address, edit.startIndex, "i32"); - address += SIZE_OF_INT; - setValue(address, edit.oldEndIndex, "i32"); - address += SIZE_OF_INT; - setValue(address, edit.newEndIndex, "i32"); - address += SIZE_OF_INT - } - for (const name of Object.getOwnPropertyNames(ParserImpl.prototype)) { - Object.defineProperty(Parser.prototype, name, { - value: ParserImpl.prototype[name], - enumerable: false, - writable: false - }) - } - Parser.Language = Language; - Module.onRuntimeInitialized = () => { - ParserImpl.init(); - resolveInitPromise() - } - }) + default: + predicates[i].push({ + operator: operator, + operands: steps.slice(1) + }); + } + steps.length = 0; + } + } + Object.freeze(setProperties[i]); + Object.freeze(assertedProperties[i]); + Object.freeze(refutedProperties[i]); + } + C._free(sourceAddress); + return new Query(INTERNAL, address, captureNames, textPredicates, predicates, Object.freeze(setProperties), Object.freeze(assertedProperties), Object.freeze(refutedProperties)); + } + static load(input) { + let bytes; + if (input instanceof Uint8Array) { + bytes = Promise.resolve(input); + } else { + const url = input; + if (typeof process !== "undefined" && process.versions && process.versions.node) { + const fs = require("fs"); + bytes = Promise.resolve(fs.readFileSync(url)); + } else { + bytes = fetch(url).then(response => response.arrayBuffer().then(buffer => { + if (response.ok) { + return new Uint8Array(buffer); + } else { + const body = new TextDecoder("utf-8").decode(buffer); + throw new Error(`Language.load failed with status ${response.status}.\n\n${body}`); + } + })); + } + } + return bytes.then(bytes => loadWebAssemblyModule(bytes, { + loadAsync: true + })).then(mod => { + const symbolNames = Object.keys(mod); + const functionName = symbolNames.find(key => LANGUAGE_FUNCTION_REGEX.test(key) && !key.includes("external_scanner_")); + if (!functionName) { + console.log(`Couldn't find language function in WASM file. Symbols:\n${JSON.stringify(symbolNames, null, 2)}`); + } + const languageAddress = mod[functionName](); + return new Language(INTERNAL, languageAddress); + }); + } + } + class LookaheadIterable { + constructor(internal, address, language) { + assertInternal(internal); + this[0] = address; + this.language = language; + } + get currentTypeId() { + return C._ts_lookahead_iterator_current_symbol(this[0]); + } + get currentType() { + return this.language.types[this.currentTypeId] || "ERROR"; + } + delete() { + C._ts_lookahead_iterator_delete(this[0]); + this[0] = 0; + } + resetState(stateId) { + return C._ts_lookahead_iterator_reset_state(this[0], stateId); + } + reset(language, stateId) { + if (C._ts_lookahead_iterator_reset(this[0], language[0], stateId)) { + this.language = language; + return true; + } + return false; + } + [Symbol.iterator]() { + const self = this; + return { + next() { + if (C._ts_lookahead_iterator_next(self[0])) { + return { + done: false, + value: self.currentType + }; + } + return { + done: true, + value: "" + }; + } + }; + } } + class Query { + constructor(internal, address, captureNames, textPredicates, predicates, setProperties, assertedProperties, refutedProperties) { + assertInternal(internal); + this[0] = address; + this.captureNames = captureNames; + this.textPredicates = textPredicates; + this.predicates = predicates; + this.setProperties = setProperties; + this.assertedProperties = assertedProperties; + this.refutedProperties = refutedProperties; + this.exceededMatchLimit = false; + } + delete() { + C._ts_query_delete(this[0]); + this[0] = 0; + } + matches(node, {startPosition: startPosition = ZERO_POINT, endPosition: endPosition = ZERO_POINT, startIndex: startIndex = 0, endIndex: endIndex = 0, matchLimit: matchLimit = 4294967295, maxStartDepth: maxStartDepth = 4294967295} = {}) { + if (typeof matchLimit !== "number") { + throw new Error("Arguments must be numbers"); + } + marshalNode(node); + C._ts_query_matches_wasm(this[0], node.tree[0], startPosition.row, startPosition.column, endPosition.row, endPosition.column, startIndex, endIndex, matchLimit, maxStartDepth); + const rawCount = getValue(TRANSFER_BUFFER, "i32"); + const startAddress = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const didExceedMatchLimit = getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, "i32"); + const result = new Array(rawCount); + this.exceededMatchLimit = Boolean(didExceedMatchLimit); + let filteredCount = 0; + let address = startAddress; + for (let i = 0; i < rawCount; i++) { + const pattern = getValue(address, "i32"); + address += SIZE_OF_INT; + const captureCount = getValue(address, "i32"); + address += SIZE_OF_INT; + const captures = new Array(captureCount); + address = unmarshalCaptures(this, node.tree, address, captures); + if (this.textPredicates[pattern].every(p => p(captures))) { + result[filteredCount] = { + pattern: pattern, + captures: captures + }; + const setProperties = this.setProperties[pattern]; + if (setProperties) result[filteredCount].setProperties = setProperties; + const assertedProperties = this.assertedProperties[pattern]; + if (assertedProperties) result[filteredCount].assertedProperties = assertedProperties; + const refutedProperties = this.refutedProperties[pattern]; + if (refutedProperties) result[filteredCount].refutedProperties = refutedProperties; + filteredCount++; + } + } + result.length = filteredCount; + C._free(startAddress); + return result; + } + captures(node, {startPosition: startPosition = ZERO_POINT, endPosition: endPosition = ZERO_POINT, startIndex: startIndex = 0, endIndex: endIndex = 0, matchLimit: matchLimit = 4294967295, maxStartDepth: maxStartDepth = 4294967295} = {}) { + if (typeof matchLimit !== "number") { + throw new Error("Arguments must be numbers"); + } + marshalNode(node); + C._ts_query_captures_wasm(this[0], node.tree[0], startPosition.row, startPosition.column, endPosition.row, endPosition.column, startIndex, endIndex, matchLimit, maxStartDepth); + const count = getValue(TRANSFER_BUFFER, "i32"); + const startAddress = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); + const didExceedMatchLimit = getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, "i32"); + const result = []; + this.exceededMatchLimit = Boolean(didExceedMatchLimit); + const captures = []; + let address = startAddress; + for (let i = 0; i < count; i++) { + const pattern = getValue(address, "i32"); + address += SIZE_OF_INT; + const captureCount = getValue(address, "i32"); + address += SIZE_OF_INT; + const captureIndex = getValue(address, "i32"); + address += SIZE_OF_INT; + captures.length = captureCount; + address = unmarshalCaptures(this, node.tree, address, captures); + if (this.textPredicates[pattern].every(p => p(captures))) { + const capture = captures[captureIndex]; + const setProperties = this.setProperties[pattern]; + if (setProperties) capture.setProperties = setProperties; + const assertedProperties = this.assertedProperties[pattern]; + if (assertedProperties) capture.assertedProperties = assertedProperties; + const refutedProperties = this.refutedProperties[pattern]; + if (refutedProperties) capture.refutedProperties = refutedProperties; + result.push(capture); + } + } + C._free(startAddress); + return result; + } + predicatesForPattern(patternIndex) { + return this.predicates[patternIndex]; + } + disableCapture(captureName) { + const captureNameLength = lengthBytesUTF8(captureName); + const captureNameAddress = C._malloc(captureNameLength + 1); + stringToUTF8(captureName, captureNameAddress, captureNameLength + 1); + C._ts_query_disable_capture(this[0], captureNameAddress, captureNameLength); + C._free(captureNameAddress); + } + didExceedMatchLimit() { + return this.exceededMatchLimit; + } + } + function getText(tree, startIndex, endIndex) { + const length = endIndex - startIndex; + let result = tree.textCallback(startIndex, null, endIndex); + startIndex += result.length; + while (startIndex < endIndex) { + const string = tree.textCallback(startIndex, null, endIndex); + if (string && string.length > 0) { + startIndex += string.length; + result += string; + } else { + break; + } + } + if (startIndex > endIndex) { + result = result.slice(0, length); + } + return result; + } + function unmarshalCaptures(query, tree, address, result) { + for (let i = 0, n = result.length; i < n; i++) { + const captureIndex = getValue(address, "i32"); + address += SIZE_OF_INT; + const node = unmarshalNode(tree, address); + address += SIZE_OF_NODE; + result[i] = { + name: query.captureNames[captureIndex], + node: node + }; + } + return address; + } + function assertInternal(x) { + if (x !== INTERNAL) throw new Error("Illegal constructor"); + } + function isPoint(point) { + return (point && typeof point.row === "number" && typeof point.column === "number"); + } + function marshalNode(node) { + let address = TRANSFER_BUFFER; + setValue(address, node.id, "i32"); + address += SIZE_OF_INT; + setValue(address, node.startIndex, "i32"); + address += SIZE_OF_INT; + setValue(address, node.startPosition.row, "i32"); + address += SIZE_OF_INT; + setValue(address, node.startPosition.column, "i32"); + address += SIZE_OF_INT; + setValue(address, node[0], "i32"); + } + function unmarshalNode(tree, address = TRANSFER_BUFFER) { + const id = getValue(address, "i32"); + address += SIZE_OF_INT; + if (id === 0) return null; + const index = getValue(address, "i32"); + address += SIZE_OF_INT; + const row = getValue(address, "i32"); + address += SIZE_OF_INT; + const column = getValue(address, "i32"); + address += SIZE_OF_INT; + const other = getValue(address, "i32"); + const result = new Node(INTERNAL, tree); + result.id = id; + result.startIndex = index; + result.startPosition = { + row: row, + column: column + }; + result[0] = other; + return result; + } + function marshalTreeCursor(cursor, address = TRANSFER_BUFFER) { + setValue(address + 0 * SIZE_OF_INT, cursor[0], "i32"); + setValue(address + 1 * SIZE_OF_INT, cursor[1], "i32"); + setValue(address + 2 * SIZE_OF_INT, cursor[2], "i32"); + setValue(address + 3 * SIZE_OF_INT, cursor[3], "i32"); + } + function unmarshalTreeCursor(cursor) { + cursor[0] = getValue(TRANSFER_BUFFER + 0 * SIZE_OF_INT, "i32"); + cursor[1] = getValue(TRANSFER_BUFFER + 1 * SIZE_OF_INT, "i32"); + cursor[2] = getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, "i32"); + cursor[3] = getValue(TRANSFER_BUFFER + 3 * SIZE_OF_INT, "i32"); + } + function marshalPoint(address, point) { + setValue(address, point.row, "i32"); + setValue(address + SIZE_OF_INT, point.column, "i32"); + } + function unmarshalPoint(address) { + const result = { + row: getValue(address, "i32") >>> 0, + column: getValue(address + SIZE_OF_INT, "i32") >>> 0 + }; + return result; + } + function marshalRange(address, range) { + marshalPoint(address, range.startPosition); + address += SIZE_OF_POINT; + marshalPoint(address, range.endPosition); + address += SIZE_OF_POINT; + setValue(address, range.startIndex, "i32"); + address += SIZE_OF_INT; + setValue(address, range.endIndex, "i32"); + address += SIZE_OF_INT; + } + function unmarshalRange(address) { + const result = {}; + result.startPosition = unmarshalPoint(address); + address += SIZE_OF_POINT; + result.endPosition = unmarshalPoint(address); + address += SIZE_OF_POINT; + result.startIndex = getValue(address, "i32") >>> 0; + address += SIZE_OF_INT; + result.endIndex = getValue(address, "i32") >>> 0; + return result; + } + function marshalEdit(edit) { + let address = TRANSFER_BUFFER; + marshalPoint(address, edit.startPosition); + address += SIZE_OF_POINT; + marshalPoint(address, edit.oldEndPosition); + address += SIZE_OF_POINT; + marshalPoint(address, edit.newEndPosition); + address += SIZE_OF_POINT; + setValue(address, edit.startIndex, "i32"); + address += SIZE_OF_INT; + setValue(address, edit.oldEndIndex, "i32"); + address += SIZE_OF_INT; + setValue(address, edit.newEndIndex, "i32"); + address += SIZE_OF_INT; + } + // end include: /Users/andrew/Code/tree-sitter/tree-sitter/lib/binding_web/binding.js + // include: /Users/andrew/Code/tree-sitter/tree-sitter/lib/binding_web/suffix.js + for (const name of Object.getOwnPropertyNames(ParserImpl.prototype)) { + Object.defineProperty(Parser.prototype, name, { + value: ParserImpl.prototype[name], + enumerable: false, + writable: false + }); + } + Parser.Language = Language; + Module.onRuntimeInitialized = () => { + ParserImpl.init(); + resolveInitPromise(); + }; + }); } - return Parser + } + return Parser; }(); + if (typeof exports === "object") { - module.exports = TreeSitter + module.exports = TreeSitter; } diff --git a/vendor/web-tree-sitter/tree-sitter.wasm b/vendor/web-tree-sitter/tree-sitter.wasm index d81c219e08d4fc008c3846bb8ae8c0ee4bcbdf85..d5ac84288410da2218205a8c2543467cc848ec6d 100755 GIT binary patch literal 190087 zcmd443zS{gdEa*)_ciz4nYjQ4k36045vGPZ29itDP5 z+sKL1GL0xc_niIs_P4+H{`Nk}=_}8q34aEivmZHs?!x-J zkEYG*f4s4fq(70~@nm`}z4l~wP5-9Xk|*K#Hde2mTmA6&bUt);<-;52Hdm9@ElRX0aby z$|i+ZE?qo#fj07MsUA5a{lW9A^|SV=_dWh@iuG2E zp7_}HTcLKAZZ)>HGPQWe%F4M5XU}b{p4nXa(6blLY@WM#AvBj>N*3}T%zhwiwwjGb zvyo(ZyV>O0Y-fA&q|wRqJW2L8^DIkSNzzFBX-2tL-fcIsH18%!GixSOX`UvXW}4=` zG|Td=pQnxXbi1p%36ERdWZzta`$m)6jYhIRp^t8^TmE#?+vn3PO=&pE_!(+75?=Ol zJyFFOI&aJ-gF%vHQ+kvn(^;0lMOpacE3oqdAew2Y$Wxb1^qfCU3a9#q{<2mlZ%*|n z&`6UsO_Qmq)*tCyORKN_Qqtq{M!5WLxcpYQY<=19UJjR6e$~G|&87Ww@BHC(&&mpH z@Qf#V<;>>AjVsB^*?fF>`qHKIA6Yqjdh;}teg5K^E6ERMt!JQ^i)WJWYKe5XIo#e@ z4R@=J4?$naJ@cDaR?eTk@YJ)XpMu&x^2`S>o?kh0@!1QT$;Z;$x4qjuy$K2W)emL+ zCSP4$-MGS}Cx0s2R^vnGR?kDyuJHreZId-FtUk9X@`Q2!m2Gt*1Q$*}vzq)L>B3~4 z`07I!H&*=mNc+m>#)UJ_TuO@Fn%MlvrPbu2cTBbr08-@@wQ}xk@;|0`sKCXG>!*d0+%7xVrCx0_NxckeqtLImN{J%_xyT3=WAU?wI{#qEs%{{nK@>+Ue_cnx~ zat@Ha1owyni~K9X|`*|6$EaEG3w0 zN=W`xD#D0wHqSk?dhyxKm1oYK*|>Nm`3uI&M6Dg~|NT^0pLl=n!kP2Wo?Sh=vH_v3 zUPfc2<0xFmZ-cC3GPp(<2PqcU)p?jqbA-L)BU45P|&#xNKVt}$33plSY2h3SUx)O zK32SX`uwvaV%kdY95sxBI(zO6^nJyo7GX=S39E5f=dM`f#-5TFgaM26GZ&e^Ph>Oo z?}&gunYDRx?!vjv~_`QpT=Udr3 z$Io}nRVeYTR3&QSSP^SU{|PzhU$y=FX|Y?0tLLtqlU{L|Z+c2R#Epw6@e3Ev#y9^W zEvdcp&AH8|S1x|&L!wL9|G&~bbt#Y=AO3SsimUDl`kS50R}xV>>Q){`B@@Ur*n?Td~RJEb}g$U41Sz{EyS`c{?>OUBm{FN;fqB zd-`3wRSNQ)sTMc6;Qy8$+O41sw~NnS!LXSq{JXo4@$BlAGpiTQo<`8Q&3`nW%Slu~ z%94dH@;m9$j&3RG*QT~Wxe>Gf>rEhTD{J|Uk_Zid?K>CV&JF)d`iH+06fzypUAZ#C z)or+|%}(>ET--Y=Qc7An7<%1H6=Xgav7 zuNWRb-eC_+Fx{_>3;8J&wDQ4^z?`yZ>XH5GxX?~E``|~gmE7GwNdHg`MJN=6X6Q>C zIWGFTO$9^t)W+#&o;kfy8)R`io-{m=qF!XFPEe^>&EIzdfF~(Dkj0{w=e@PB_%wcGmob^tz{wT#d9WVb#D6nxd%OJnneiZ=K7A!B?JHsEKRpIj?^ZW9z_XkCueUWf z@#3ef;0?=8(fc>H*LiMp<8)~3^J5T#sT9PB+i z_s?Fs#QlGmPEr23Q0NSG>s#B|Pj4jWTTJfx)eFfpx{>qrm(t)zo!(4-B;I0vemd=J zUi@(A;8ov;4*rw0gFW{6(;FD+|3P}kWW)mm5pBT8!GBs!el)%P=9j_s{Hy7~iFit= zX4@=i>f}F4`)5CL;a{Wh%G$ZLbIG4i-*Iu{+*5LejOmS)9S+A2ro$ZtWHat4^itZ% z{;PEAJ!x`R)?4`D^oP>FlD?9DD*bcmpG{v*e<1xc*`Llnnf+jP?4|7AOaDyz$@HF& zX5UW#^Yq8l&!zua`eW&Tnsz_>#qJMeH=0>XL8;{;J(46{xB;jx|9vdyh_)~hVJLe<|B=3Ri|iH>1LT1je`FlS>P_O zI*%=sjVj+9=GnC(qmiu0?`qKao;2yFJ$^LxgE)p;ZXCYGLN)b6_11m$uKWKZ;^%Jft*b!B-Im!$JN6VPKPPO%b8`+IXS#^ zJUlhU^me%9qODPf%_3!ZqMfFP2Pv3B8Y4hec2K5_ve)~rG`)6LQVrJ2#-e7FwxAe+ zROExFnA*YGV$%B(0k>-zRKAow%A_XWF9LjEI=w5cUisw&+L(tFzRjQf@~LU#E2+Mn zUWRh1@%{%HKG!)7mY)5S^68pp2R?XDlFat#G9O&lwfbVRR&!1sS}pPgMv*N8LTI?L zyWfC|<9)!kg=ljVNQi%vMj{@C zt@}Cc1zPdXjGq#SViIxU&7`r8n6~84sTQz9t2qRLl)oI{e_$Gl6e!?&O}qqnk;Y;z z2(ii;Ha)2z$jlJy6sw7-%AqR;3mhWSQEQWJW$GS?M@`XFtRE4~G{F+FgNY{9?|5(; z4yDHA4>S?eorJE_LBID;2!{uS8Kh*v-0Gdi$2h}J01;%7WF1>2*7 zQj(3)^C>^CXk;C9mQbMpLnKun{n(40^HOgKphKGLFr?lKdxal2D%Ylhc+MATx=wtZ zRsB&xD*>074+SN5q&mX|K1H&IRb`J6Ja*=r33E8<1a_RfWJ$Upx8Ht*x!W z3&SSOiJw4sS~QR6^WlP#pq$>!Co7y@F2w0iI5VY|wPEbmyLUn6T z8UU-U&5ZzL29T{PdvF^17(yk;h-&NFm9p*0elIPm8~>W9Rzb2{`P53>F z^PAQ4n`(Z;=!cSb@YLk|=9*vB%P{X%*M<;;=NSB=YX(8WPfTxLRNyX)Jiy8b)3u(; zCOw%}w=)xJzmN%0fN*B_(t%!YJ(yfu83nN(7=5JSo}H#T|hP7hb+#2zr_)xBzf|L#stmJQ&ll3_#T zq&sW|FJ+Gx+1=@4(KwGbg{Kjrywm;NDTQSW&95Iyl3|Ox!8+Xr1DQg>Zf{DGLS=z- z5L&W!TQb*wlcnAXyH#+=x~!Tw42+JS4Mg5jc8_Eyyu?t@!-ulI#3i&|b=C%50Kjyr zU(FrQh5AN(-jJgc+_yGuwQK8Hd}CYequ;leyt6)VHsgkz-Ld?oL}nX6Np-0hV!vG<{joMfzY>`ER&R{9DYb4^;hS zI1OQa#Ck#G-h!ex484fRC3KbBwG~KFMbc2jSnebGL4RlHUk!krc>py4M4s1jun-Ci ziuT&DQ}l{~21JedAxKa!Gl6Vp0~+OvG$mFnt(Zay%V>coRp)An4KCZ7i+pID(W?kW z(L$r>(6n@k%jrU0b?Wv2BNj&Wr9E(_2|#Uh*3_mNYZtR?p#s1ce+)s7u@*)@8(a;;-DU(m zV4~Q;wIOOytvA&ADdfRd8y=}=IlD|?6VRnaB828u z_i_;bNxvnDOCN_(R1%a2L}M@vZs&vGr3}JTw1vlqj53b!(5v4{5P3#W4qpzN{iYh$ zoe*Q&x0s?-T?lCE0@Imj#oA(AB0K@;`+CgnfKhZoGW|7*+t$k40I{gwP2>&cj07)rCdDpus9{aZwVV##T37d>#X=1P z{IAcD9D{KH|34&;;yjuT%LB|XmcX8LBTmesf4Xa%dT;rU6=hab3(Nw1CNMN_MFnwQ@iHX0Mo&^09n~!4`=lxc){m;(7?g)2%nUIgx(1 zi(oiQ@B!rrT|tZ(i@gWdhI2?QFf~)`LCeV_V%FM7+=E3=4PCB&|J$~M;cp4Qx$2$g z*Pzqt8#&R0LcyIqnwx!vq~=;sWy6%m`=oo|E^B$lQ+*++mL$;^7o_J-r1xu-)z2r@ zcTYZrVl~Q6M1QO5jHRE-53Zg_A9T&FZvkD0pZ5z2&tf8v@^Cevvgn~z4eIglu?feM zOqK)&yDk>u1Rba@KtUey#wxaZ3YjU<;D*tmcc;t486gkNzEm_$At&^jU(3TJ0zeB1 zq-5J#70Q{%Oc!7n?viBnov_?QTlIP$P3>w^9X~5ZTsH8`95#^lw%I^mfFVx@@VEfE zecB0^GwtQ{jaem!PM3y^WMB`KxTunR3gF9_XFR9%S=g`l4$Lk_qNb0oSKar?Kp0%C zl2cf{z22N5cocUBeOv*COtoJj^X!FSNbnkMy;ioR=FnFJI30ro_9a^ib+?MEX!3y~ zbJSGK|DzLuJNWz65TiYjCWr-1MTXF?{%k4}FOiymMNnd?eo9vq{q=}Fp(@?^Dxyem#{$ydHmjI+dpTGy`+AN@SBu zfVU`|NllLgIJ|)X7gM~FR=lJK^9vTL)IWMd|1fziUFT6EG>Vp9v%##vX~2w$YNDC8 z%)5@RJPYwRnwijS2Dy2%c`T=vsW&!?Jd0WSn=(6s!hB&X)J0F8P z(<0rhKKjPiR^##l@AK+66MW@f@0a#xb9h+9(2uT{GsMuD9BCC_!ZHxjkZ#|ti;Z&$ z5{VJSInxb!Jw$`e3T2}ZI!5OdN>D&fp=#=gKUNZ4dk{0z#sr2NKLdMVRIag3!tbK& zhqZ-11_g#$i@$Bw7PxwCpZ}CfWD9@{qT#%i>@rmRzVFkQ89BQdG~vg+jR#cok;eFX7>XL z5roa*?fG)CmsZQ$^kROk>?hH$}Y=K+4dLTg6cu}&fbmuW3u-t(nRh4 zaE~r>5V%N~A#p0ld??b|wFs|4ygVW3W{*ubG=AqU$$bN%0WmFuX`1VWV$&2=1eJ?! z+Z3>l>nYYh#gi^WVng=(v{ecu3HQ1IC zZ5LfGWw)3Lac`i%Ty`1?J4Kjkf1lByu(vmWLTyKTv*@USDv>4hdf|8l2c(F5|8G9TxxV{XQGtaN@Gc>-Q)IBT#`Uy z7$4!|ZUC<*pllY65Wah-p(%QEr}*a*8W7%~Y{MbT!cN(dGUORdEpadU-DoG1ui$=pTminWJMuUHu6tkdWwwPVQ0P>JNmCE#GIuh_@lXg4jXdFz91eZoA zz_=NdQ{yQqyFoHC+D*+Qf2SrSG7@S) zXhR+#ERJrEM<*c|=8DlxGdnbksRhYdXq9bwRI|+caK1{1oqQP~2P{RW?8&~JJ(3(8 z?h``hnME#hh&e6;Bpe{j<94b=ZY8IQdZ)#_q>unPlJu$SDK`N$sLC&-TQTFxm{NGH ztwY)1cwX>~yN=cve3u;085C%QMvc@0%*o0*ocM zNtEdUaEb2&CMN`x1T=^aBD*7zeMb~q64>Rmk+r6-22sckiot}C6)uZu3UuD8z~HS4 z%$Io1_9Lf@>4`43%kevc9A_Ap%Pymrs1gj;FM@M-J>f|dd79h1p^-ijSVeH4(nKT& znzOLp6BhYVdkto=U2xN>*@=6E-&?Q~Nepkt&;TGw0Vco#qwXcJ6HIO!NbH2n7%`Bv z9V9-ft0eBM1jSQz)S6pE&cvZ%2M*(m;sZTen0#C8bE}f$SZi}qBv8HLhLJ@TH&8eG z&~+tot+ftZ{mgA9`rNq{1%L&(rD zulhyb&Qh@R#GwqgnrC?z4!}^7@|-`f@UhwQAmUG!*?x(^{k-S0x2Nk`xwqI)p8&bn zmCOCITZ=?~VqfgW9TG**%v49UYVZv zD}RTwc?l)oA*gO@1O&45K};Vw2QpCrnqf7FhkcKhD7lv_$fd(PG zg~CFJDFm-&Ie%0zTv~#j?>(tpA?2e~ z_MVR*0P+Tm>^TS_5*EUWMs)0njM%CHxM3>S6VHiR;}=d1$fj9nJQoHXU|H||)$hq> zf`SPK20^y88FY`vVAsisX^$sHjiPrpxuAT{$NuT1 zS+sd@$2Clqa-5ROq?7Z*90YOwRaUhFz}Dw6j!y8m78d z^=rxcOf%s@t{Kt-ZaUbDih-@?i;mcO0G4K}AT}8C@{nY^@E34Xkut>xYlESfDwC6V z4S_Ap7gl%x-3RLrO4{K<47}JgCaj|W!1Q#{uL-R`O+>C3$dYITJIkvzC~cV#Q|ef^ za~RRQkRduE`|c!myJPIa5c2P|_5qR;)g#|cl!cYL#y?F&lc*gH#lKT@Eo-ui;?+~k zJ?;lswy+yjsROGJA_9`oQ~;=@BpV*!VCjMiA{EfAYtsWY!IE7I;)uzCj>!eOxK&=D zxyV+K4d|l8J1pXa9wdYkIM_1&^Rl?ir*Vua^{-A3!}*in*3`>ize1IFU#Ic zlZ~HwLfg|-^Wo`S5isuFH=Uo{`q)b^75vCIUpx6``tg@u#euBfW+y+o%UhVzbyK~4 zH1C2EhmsMQw1y2FodKk*=ExIngp5Y%$F;(}c-loR9rj}7L_j7@8?=yDYOYpPc-LMpb zxugIXXO$Vs8-kGcr*aPEE8R zQbNCZcRB;ow4R7sgF2uUf|3M~;SX|z;3JlLC6|u}a1eL|I!6Qxk47v2|KN`)ea{f_ z?~AGKUjhk(BWTTS_yEgRG@ybQY*Xu;dk6mpI8e91qu0y&!LnkQ*OOcPxpZ7}Tflt) zS!IxazHlPFc``j9CR^t32;FLJOtLa{p-LX!|CY)Zl9loeBzr66E0RSoY$sXu5|rFG4%kbykaKVBV`re@7aL6`~E z3`M`&i%O9+D=Z{vKm27}+bNSV&17kk^>P%|h&a?9K?3nfb9-wtOVolMhvMjXtSIH| zpyQF(Qu1b-LpF`1bV^oBp~4ZNK_Q+=zoRzIjo!sswlAk<#vGePj?Jng(07P*nqIZs z#c~qf1?!{ykc`dN2S;TYl0brWWLkUzTUv5o4?j?D&tgY#6iq~%oD^Bl8QRI#bBL$h z%6eAI1mHiw1+nnBS`NL0B>gAgQ0;n<^TXPe)>SAC0tb7=zx)lkCENvMXPW0unBkmB z*+%da1F-^QSwI6xgSClovsr3p_@9B`Re2!V{4gYGH3o*VNg17uWwZvuGTioos231} znW2F=9bd*@LRh)YJgW*)qICe{3`lAb0p87ukJtPe@$SjkiFek@ihL*DwMQiI=dJdL zh(9CVQ7PN-o*P`&pM-b2%+(DWn&3FBjfkq4;2{1-#DtkMK}_4}=>Iq4>A{YopjuKe zCXMDh@JKDw@$&`;Avg=-0U2+o1~W=)UGqdE!#o)D6d`Q`6>qvl1yIjT=0P?pUXfd z4k80Nm4PgY6|JVbYb8Vn+le$TK2kdfau8p0AF2aUZhixmRwP&l>q1ybwhTRPvpryb za9A52YGgpv$m$R)&;cl9E>_?`w9WtWe#oXKVW!Nh_9MeR`Lbq7j1j?P&2(nQN95@2 z8~sTqnX?hF@$KOO1ORtGS%xvLS1KJyB-qyM-J7)O4`Df z&A7K}Fm>Q9A_mdRFa^x83vyURRA-``8MmUELBu~doTVhMo-YT=>_u+R68;MrvcXJj z7Sj)EIa5PXs5-7m@>n6PH2$vS52lhWUEMgt_EfQF1BZs}PFCyOKuNk?i2JsS!HHBG z{F-D%2Fq_Nm9?vgm;<+A3FcPoAhQKUk7ZjaS5|DE3u9m{M{Ufyl{KyeUYQFXLx5h$ zQje0HpqLm=U4r>mU`W8XCjta*2MEkm&&#VO?X0kq=tczs5$8CWU=cMde-7Sz_5V;~bQ0ctdm7Y>7L zLgLxOE;achx`ue$%=)tV8!31r!BdL7)U3XHede|_(J@v#{$!G*k)mlAZak5WENKxM ziH*b@nFcJG+Im|qF*&r*M}eJI{>{sLZ`(1wg_W-bKvCD*x9YdHuBXRRc>)CBYEM)_ zkz0;5ueP4QTrF(`GxcApJM#w^Xu)L3Nka+j7_4SyS&sdBlow3hjN>pe9vxg6IjE<= z)6~Nx_i1go3&K!)+aw+PG~Q$*jiVGn>8f?INK7A7vEiv*8}3dvT)T~tO2?*>L^gf| zE!?DqZkFFb2@}bu=)&cS%al#!0V?dvXcg8O5-ijWtI)h5M&tM|!_-hQasOWn@zG!m z@v-&dc>4I{?g0WZ!n_WgGvq_2y-p*EaC*V30ifKg?GFk$XINCIc6%qf->8fltj7`JWOBXvb_2Lu{5V7Q`53{AB)1&*W9 zd0hT_%bs@YD@&6cM5`}Csp^X^QL=BR%TUq*!-o7|^g-?G%2LtN2^+d!>}LB$ixj=Z z1Sn)l$XOMQhLx%r=Enghnru?VBD z?z*~k!%kBMqTqQO7(>QwJEUW(OA@~1M^I#%BIGBhl9!EGfb}*CXan4ooC+`H@?$@1 zn(Dek*C2tl9`!p1(1N!MoCF*QHb?06g91=P&i`Z)k;tF8(4q_J2kk7XP_Z|*g6|Wu z*BNuYX=v2q_z_j^BDli;9k?m4ej0%_1*;&tbjwKVJ@=zW%$NXNT9c@FKtQ(+ydoqYk17Vi*Mo{19rM05<{TOs20h!`n|9~Sy2v7jPfy9@U!|RpN zURXdT*MvvqZOWfzbHVj=m;r|Rx$RYQ6rB_UQM)Uy_j$>R;DEAVubVF9WJm~MXX6Gi z^=b#-(?3WH=GQA^U%Jf8DWElF!D{APIpJ_X11^kilYS>I>Vm4csN0kAO{l7t8T9mW z>fn2XmvDSU9it8aN30oX5jU(JOQoTuuBVSOHI5@P04O&KqZyg7T32^?3}c(A0rqjK z(5OG2ej56s4dtW9?C2T8Pnbs|@P;1lv?Lc~LPmR8oSVr614)3!FcY)I*B~b2fBRUC zQn)9r&SK}@uw;>n(v>jGO-vZ3be&XoUpz@5WD0vL3IwMK!yLwhWG}Tn72G&&XlD>a zz&;Hjj*x>`Q;_vK&w61A`7=}Lj27-mMQtG#L1IzeiJt&>aX-((@G@++HE96r7kEm1 zbO@-b3gzm!vw1HD^9aNB;9VWB`qB(?Q}m3E5=mqW_6d1T9VNsmMgCxwDdev{hYcFz z=Ag0zWALyjS!2{eCuFMV2#lS2FFhIUk zwD4o|B3$Oxo)d^LkAYeKuk)dn!oH@~p`64c?d9Q)#3TA(#9^}{;3HE-(xEG%p@P0@ zLddZSxR+*QPZTd)W~qd;nI@=B5$R}kLPFdrMnBum=Cv_dAyJaLz0+b)-i9PD7s9zgOwxjO zdT5F$g-Nn+ZFsu~O)0Eg6jc!!Vw7-c3{g(7)$k5o1|fSqlDSq1;3l|-{r%`(xB)%M zRoi4+(ElCsI#5QB%NkoOTIZSZHC(hF#-Iw9bE26J!|luXmg>*hwCC-!3+40@3`!4T?^bTc$_YF?&%qUq@p*lC&ThE>5>Vt8_$>no`st(~ZO_FwYm*TLxgWK|f-ei1(aM zZ>${%jkZfA#WsiYMa!~EGE}K8vkN>D;&{ttfZb2B@tRQB5YnWBKw1-&v88i_vID!I ztO><6AifqPC-h~Y4<^`C%!4y!;IW~xn3If_Igap?6;O0GK(`Din4XxqWCCJS{Df&& z5O31jcvm4J9@`>8BI%BlSnYxj_DY9iCZ=`9R~KY>#zV4MtRGu*GuwI+xlDmpRZ&&b zvRF6OI#67e7a%Cqn9C+0wJ9lVNdp9hgMm($r1v|A(q7zwZ+EK}_Twvt!#7fl4YEOS!S1e>Vz}>UiTGiM zl)P;ywc>Px53>zB(Gc-ig-_^)-La@?Y-a`w@@PkmaR>)8l$~HD!-B#Hy7Q!uoN7;i z*(p2hXVg}^Y?&}xLQD}7Y_4yBk!17o({CRv?W)@qFeGFROk3j$0J0;Mff^=5DUE@O zALFozwbZGeySxTAhD@CVo)#w=2+#AYWHVX{iBZ}NjiCxH5|cd;;mOtk2+X-`9F}o( z(VW-Fs?lK6Qkx3_p#y^AbJ-C}>ADMAeOd~kdi`}B0LBCfozGon2tz6j(;ValQ5>T6 zVnURGCTUc%1fLq{BicO(hM72TBW!vn8oVQZWuv=pSV@;n$z6wPfJ}mp2GHrpgB-kJ zFR$iMtQ6vaGbLx_cqOn)4yi!-1d4eN_efLd1TOB^ zud@w%&>D5`;Awhwor0a}&QlAV_E%#uqPB#3-v>M?FcS@-`(&tJimM168kX!7e1_^B zSJ@@c)G)9I7kJqqOGY}7Rtts>%`@%|>zX0Dz37NTXbduMaZU=@1Il#UB-;?s9Og*> z@hoEEJPb9;(uwm3h8IR?MH!@a(dJlw4INAKBqNd{5qDjqf}FLZ&2CqmZXWHNZb(&h zANFT@y7?KWJM(mdwIWB@#p$-SIx*eWDsj3SauKu~KNbL%E}15iyE)Al5W$#fHBiWa zNtCUI%N>PDhJzZeEWRT>`n*~h+(fEtOHx;1(vYE#`!qH}f)%y0cF;*|!HFwPD@-<2}P z@LX5{l#|zFeI_Tjt}Efln~H-l*ZZH=eD|vUT6O7i_4<$f@{cvIfQD+TAg>vb1}P=v z3qwgo`?2ZHNUkhppU>@x()s6dz(*LfDDl{|_?(ls_)Nw~Wh6(EpU$CTh*VsozhTfm zcdfdSuMHE;wH_wrl%|KKz%NhbMK=mT6T7sQ$_#jL-PFv>``0YI`D}z zELh%>wog-Yt>PjmKZi+sX-b+YC}qjIYuf+QPg$<<9!Z>7TuQGEX#3F`MS_v&xe43 zzRamYL1+@@M_dU^2qDlI=$NQ8H&I6xyqGW6(Rr4!4ljt82^~VFry0t-jQ>x6qRg-? z+aIQxew%bv%s8jas6(}%;Dw29gCmAp8RsQTNbF$Vxl+uBWJ=wV#xW{IPdq2);h3Z> zd43KEo}e6cFj_A#BbH2tp1_i)8<&?!EKA@*v_KLbvZ? zzcgUXh8RuAy@{$O*ljNqiAL6to8PVm6`Qkxi%JX8_R|RF5UXK*Y!@XGfzc_HC;=x9NbyuI zVbg32^<(a<@`NY>5b=gMhl?pHT*OXH8zMz**CM5bNZ}-jUA!CdqeeqGbDKy3r4}iP zMM~2m1#?|%uPG;LM0Zuzjoejaf#5)-*n_u7X(3WDwk=XP!BHXws4Y?wL<$3?IYwW! zBvMj|6!0pMq7fsk;Vyg?X2e9H_H|$56cTAfR>3BO0^cE4fG+2ElW@8@W_|q0Q-j0c1%vD|1q&23`vmP(-pqDi%*8`9Yc5 zXW&i(X)GrYpkgJSY*Sz|AL~#AR0on3reShSb)1!MP(h}tZXyuD{P@%#pt3Q8SQl#P zazu4%yQaDXszc^Ob!qUaHM{nyv8{;|is~AX>frhs`x0EB0Olz;7BUw&k*%4HmJwkv z0K$AIDV0EM#5YZB%|LASs*xbj8pT5AMabCnt)(yFF4uk=sVVhm8W(Hc|$sx7=D?Tl%yTL;NZX;Y@ODN$N} z6Q$YeqU~KNjpuJcX|heWQ5sfjvV+p(VFW_t&P#$(zCpl|(k4P)t=&Uj%xVmH74{E> z?VCehGR9zAZT2(wTEZ*jC2Ws$ruju|Bl<%q7~NXc(Bbzamu#@b7SeeUC9ic}9qd=6 zcQLEBB=lIMPxY$321jrR_b`F-vWk%xY4l{?OXkU@!ivctLs`(?$Y`jp&FZ%r3XGQa zwo;BB^O^g2-~1UoPM>n~9D9KQuvBO~IoaJRvyfhwIeXP7lElAg*}4r0@) z^#L8TdV+_hCYekhU+W$)hs^YJYZhXr+^sZZR3u67Z^W(aeBhwTT+%>vXb@EZ!g@8! z2olek*REkAY*dL->0ul8OtW+`L&B32lW8Kf?H{jR16xMwa+r)ymLqao@)h<>MS3YV@@iTwQN&AO-oJErCFaFKVR; z(TjY~x7_wBM zH_?y;GA*zv6gI(#67ZWaF=SY12Tw|yT2@xe^(G@|%zPkc)plRtDVx`33ACT|?xJvG z46PkvUKAb(GlejgW;KVX5uNwY>;26})*dCx<%>yXivHA8Fe2#Vn^Us6=~}z-ZCM~V z_fR$P_BS15`>b-dbDn&*t6p_FLsESc2bp7?b>u}Np82d!WYEnwsH5xex^6*LbMGR! zOT(K&7`opni%wU0Qs*jas%6%Ag&fatE*$v6#!aaxryg)#O~Q;BQD?b8^ov}O2}Nj} z{TN#9rS+#3N0UM1U+3`$A12O4_g^FKA!88$&xgxHm3=wHrD8@g;{sMYmYo$>8y;|M zK9JctSdU;#wlRi=dWwYHI1&UC&p1scyg{Fb`BwvWr zdA-Z*`m~Bap80d!q!v|FgIGAa^0gv;?S(RD{a(Y_s0bMoBsowK`ar62f+Jab+2Ffk z7AMF)nnSA$c-*L<)_t5i-2W9_;;g zmUc|>oginBcz~K$Iv^fMtJG>g1JxdQscdi^;tmTWO9_TY91(t_Qq2zgfx_I?C=bD} zI2g?yl2`3}jG+}yfu|WILYU9NtT0^Shdi#_qQxS0GKBcerxYWlg`m935r|{x7*}(c z8OC;@br+v9KLH>Z2cFCDAxoWg+Q2T*3a)rM{cdmp#^X9qU<8*;(l`s+$;*rY7pN81 zm`7WGnt|k0?`Lx83J{qB3y(-nobF-jVQw`nbO{o5ylIagm}P08KaZSQMja`(?*nG_ z9fd$Li9&NyG?)gW1)q$g$cx1d=g#QdtQIB$1~9Up%whgcoH_G0vx)2}SYMePwA`SD zfu@eF2v4x1qw$o;gizQ(1K`jr&97lx15x5^|6=cAsEJ4o0*`Vm*G}xJVcz(w)FG}` zR8q+JSatr>q)AsySafO`h!yRShK;zV7o<9=5c0*ST+ zg)`QWxO7r-gthW2bCDM|t>i8mA?i-xKr5+{u+g3ndZUvF*mi8a1wcX zS*L9>SiVvL+id&%1h$Hy1f3EOBqJ>rSrl7QHc&$Gxt@$KGyumZSE;_(BD8Vj9_+%u zJOI7Oia1s518JU|{dhTemFb%CY5dx<_PkxJ*^hgwf-uuOIkl$9IBT5rAaN19_OzsA zx|2^KZP5F@e%1}P*L5US7vsxPom1O1JV*w0_i7h@9{7M3!c13(@x*q~V}_Q4^szgY zx7p#-E8L-Mlz%m)d*o*<=d=qIl*LN60apqJoiN?-x+HI;xKtYs(xGblsdeYSKea{< zrV8;~?J5ujsDwDfThy119uv5KPTwpbKaU}E!U+RCfN751`6R11l&I227F_OSa`d~^ z8_61Fr-AE5K#Z7%Yc1gfgubQMbAn>Qh#{n2q zG;)-MXijLDP10uklV{ClgK=TR0sBAV)Lo%^^xz*y+(Ry*#LvbDASOKc>+ylKjobLC z@pQ?1sD2}niP;qc$aYmXzr&eGUA~4RsE)PjAQs$pJtu+J7Q+r?0f>_t>D}02^Uzgw=(i;+eOkCh##*ey4uJWo*xeL!}? zcSI>^3;ym&P0^-caUNS{j%6=Pc?yLA>X%c2ovxYr##WlSIN;6%M8&PT;$Jc{w(5$; zEblMHcK@1Rf8D&rSBL_0p(l}b@`#agiCpAG=PVUH*?Zcoz?dFa8th`xvAi7WsC)%8 z**Oqi->-Y|DYkH_-6OtX=i=RIrdv>nyyT4F1t0gTJ>vab)Gt?BUTI(264#{Mdpv&y za{(c;_f>JFLIYZ$;7;>`QCFvsdhp#t6xSA*E+LgMsY<0GUK9Ntd@mJgPal<`UlMFJ zS1Iz+lM2{zD>7i0GjVFuJYn|;6Eg$$sbw+C7#}M5tc|~uF@zCKFuma(TJIDC>0J_( z4%klY9Z86hF=TG!7Yaf538h92h?XP4jy!8?FA|e`r@hT_L{vp24LKZl=cqUbgzep@ z2=9Eah#H#fOONy?r_Wx6_fpj|F-XLp81W{%C84c#*rmFj>R`bi&-efw$WTPR{m69U zY=i4}V}VpJ^DopP?qEvt3nd0H0YQF7--j|^|07amAf0l21t)wI?N|7u${OT#zUp1A zT9+vH#^1wC_RF;@c18q{TiFG|JRLn*g52 zwvNCpL+Fz)=Jg}O1Qml;P5}!^G8gf!2=EduXx^22qlTO>O3Akow>uGlQmT@B4G~u( zd|r+@PXb{AzEe!(Q;k+b`+%Zz{*5GsAMpnDL5!BnH+ohGA8rXNtO!F&u%HS%jF(dp zF|x2}2P;j9CzK&xkD<`0MvJMqd14?frsgne4r!)fkHu6BMwjEPYYM8i?gAS*hS6tZ5iMT0NtTmSsF<)1UCBWq|m?JYSDj7Eqi% zSjp3EI`l*W?0n&bF0Hi!v!P#1o|F32NdewB&Wjn(}rhsqIrF3#g_sr{21q?KBqX zA<&poYaNXQ%|4Q9cN){^oqDTW&E06scGb;+G%P% z>}J}bgI#Hd=Zs}n+PP_lI5al0eVBiVLCrriw_{y3W3slbtZF<6Q_3R%Hp{TGsucn8ynd+D#T5F+G+k0su?; zhj9j4I;KShSa^94jVh{Oa47Jhb z?F^bIqug9{8kQ1rigBfki>5Rh-ez79)AI0JkD54b9JQ1$BgV&lixFe@2?TF24k4xA zYhn$XpP-J`f`&)U8H-!LjLHcYzfGQOKlX#EyTT&&&(=Pu)WyGc6Kp4 zU=ET1=)qwsco!W@k;zP>-i$>$Att8V106=4*jx>hB~?KWn#yR@(136OTi$CrQImzz z#u@}niee{3iL3~gtR&dkJF%3^X6`LM_AAl6TQQDr;ph)Bxn=z);IwXTvE`JrL8x1 zP^Mm$5Yr4yDN-lHl#Zw3m!*b8A?hzqF#y40CCilZieF+V(89^E0%YwqhDb+P=QTLc zUsGqR!`VQ^GO%mK#C{1ulbF8!q+EZ(c(Qw?xcRFv9#@6&6q?jldP(Sdp-=!#oJL4P zlHMRya?n^}Vc*@!=t9IGRMe`^K?%_7Lr4rk`J>v0B}(9bi6zFS0m1Hcy*&PF-14H# zc{S5)rdggeaD1G*u7>a;aGSD|AARwq>o@2RMAye1$9(lzB&`oG-d+SyN3A6F;Vj#W zm}EU9z75Z4MGJ8WhVjN@OM1P}W_&MJ@IHYD5qyResVXV}c6*}=zdbo1OIEaHoIpQ9z#DQ63{hykj224e?_& zkYc1Ett5}mvgAbRl+ujDeld##RZAiON&q4`#$Ej+wx@FL(QgElYAn#MK4MRIj7Wo! zWY&P-I?)CrACL?ym@v6%AUUP&hyh|;LhVw7j47yYzWTk{K_cyUDQOQ!X3+%nChHd> zgpf&q<%6IU?cd??4R2GRy%8c$d`)gzwqvK9RlJq6%0!FP1Q+zQ!PZM^zLM%Rbv+;y ztE3F+w`tToQdWVZz54Vb-!PzzLx7qnfUBoTM=A)>D$3_Lj9}o!Yi5x{tC;K+-pgkb zh70Uoojo-?n45C_>5gLF$M(?SpyZpej9#N@YyYS3`ym3NbsXh)fV?*eB_*kheI~9wW0$k1lkRTRI5gUwaEei-sf}>H)1iKxU5}&TtAs{8qczuii>=qW?I~?&WWmNVcWA7 zKa{*dn?h%I+5zhJ%)xR=HdwW!zL+1q+i9S+AYLDr&p)Dr` z7Uk!G!M_U)0MI8hAh2{APN6Bj&SpPl*oit&ijoV8C~j6?Bx(V1q7C?^T}Mn_J@YE4 zsk|!vKv%L=R8uB;lQg*e$#8ihTv#&EL)Hnz6k5-~>^mPGD%FD{^}a9sS_&6}GEx%y zV0yFSaC9A@PN8>!ITmN`7x4(E3=8Tz@7{~%q5R3?%465v6Ef3%_x^AW2hSeTIUKHW zKl{sc#}{xE!jKQwFq(?}TM!4%Fiv7@x{m(xl;^3^LSRNF^oAolg7_ z$H=HADPIQ)MsxbkS4p|?zNRG!U%*F$tm~_@RvU}_3?4D?OnxDk+29072mu{d)t|-9 z0SS{qMCs2DMz4J@BcaB_>sp3w533ra` z=u5bJ_)&iecR%pv98p*70YH%~KRSGF`!(8~6D{z&U+f=$1sBGCCvpXlv= z0Q!l`R@bI;2#OcjATPof#Y{Ntwfbj>sJzP%q1vvqZ9UjsX&vE^lr6Lxn7dU&&y5;-lVwh|WZx&m_;JNVF}3MzM~oSYM1Y_R zv$)0C6?vf*u>4T+tL@{-vxPcLzS=&P{0Z8J5**HQk>95RT> z39^f4cNDy#t0Y~Brf{{F)mTH5a%xj>I06#v%mhDf`&2EBFuWuL+Xi4s&ZP0FDQD&~ z&jE_Q!y{oI3pQri2?0@AsURJ7%4u_9#gF^LdT_Kt)ZXl`=wruFtkaxEZi`H`Nw;Oj z(NG^KMA?=|8LL}|q9NDh>mYC>N%(q~3>im5gYicMb@cIDjR-(64zMxgr$~Mf3XR^1 zW`j3%DAe5S;l^RK0h`p#FKzXXM;J*oS!7UJzaQvWLV5WV=I%+Vo%G^+Z3iOmhhB*-zz6y|&> zI}ZAM`!ctfTYCBmxA#*}sv9pvk7Sx$LeMHzPA;I*pQ29Lf&m-V8_LaiE1fc( z1Z8q7Rid@82^n&0fg9M31>hoBdq?2>qtw1D}-S*`GE*hB-z%K)$has1=`B*-+JdnUPJ ziJ`*55c8CWDq+Xc$WQPal9*+{qN<|gotES^U`Q_7vO^F}5JK+=FN8GahCsi$MCcQV z#W5v^R3?mo8xlv=99i$MUAgQ0B?c8E{x(lEPBEnD47QV=WMBvc$mz2LtRM%CQfwD_ zP2xK8n%K^~7T8Wc1l3-onpyO2L_u(TBmcQoqXTOc5;3r+sXT->~B+6 z?k`VYhwbhMV)Thbg&utlo_h%3e*vDG#s!WKrEy_PnUN#z;}JZ93n=yzDwfv+-@$a+ z8DKk;Rj8;2)5ts1aF#TVR0l;GrXDDbOgWp(Vj^uk^D1@}&Y)2)i211GGu(;8?I?m| z)V$$ZL|5>dHVZsy(I93ZR((s1q7OVX4NaC5;8q{trAH=Cfs9LUHh}h-B~{kzVXne7 z6yxv+0EMV|bq|9N>yk$qJXw?4Af%9r_O{_I`5T55mnsA?U%W~7*Yvfk4yfr7DiWPd z(xHU8e%EwpaZhQlu41HN!7E2Gl1H?Z8qrenw+)mZ zc#}n>13Li&@WvKV_-LXmBEJ6Vj0dF}5Y!bVc7vDw`5enh2-(FT!uYk5-Ienr&mEIB z@*Ui(MOca181CBbGuiF$XR>hC)jUoV_6I+N7q< zme{{1Q<)V9quoMKTF9PNr<`V=1+B8Er6pPd6fkRN{EZ4XTk9SzCTa9CaGVjK=7+Fw z=wBOQI#xO@mJkp%Xy&25e-c3B*m*^)9Pv~yGcw^+l_820g7@T;Q#G!-)-Hq-$R@); zplv`v2-zr?Numi#Z4%V(I$tP7gh05&$jBTC>&SudMDcVL1QRvk4hZ_6YIjwn9MdJx zX|D+j_W`kxcB>{ii8B&@m%ze;ef2WGnYtt~MdXspIJ=B_t;l6>b9*l$I8s-06o85J zYBI@Z?rQo&kNlG+_1%tZ!-u8mEa?V&ry`X&&wdLEop=TX2TvZj^BcUGtxFRn#US?s zol`yW21ySJJp9}Yt7&6N*)a|hu(i!+k^MLfv1N;`4gBB>@->52i5WnoDt#ommY0Mrl?%yG!=>17`aTva@U1I#J}6C604lQ@-WM03UcjGHTym0PxX0o-%RDI!MVpE3 zQ$CIMwk_@s&yxt@qyNGtU%-|PcRpMms=T5S$ER;Ds8K*Z3t$=;2`o|4C}HjG?FE-2l^sp+&K;bX=GOssDXa2+XAAIt28kPBs^^$I-NI!jSvi2W6f$oRlClGMZ~S}gibZ9x0#BS5mw`23$HgnSoI8=^!MIim|F(IX=$tFQVA+Hy(@ zyDgzW4|t*dBzV9U;vFeQY1DF`h+!A2nrBQlu-Ab*Q{e3<&4B7B+~_HIaLsDTbq z$syaD5Z|2R&P73D=~)KT=LMGrFSw8`tL>=lrdrUk@?6>6$Pn7B4Jj6y7kl(gSXO3_ zW$)+0GRdP{a3vm!S}%6Vw{gfXD%}R_`AYhm9EMW!)D2zEl|7Dc_buu~1<9vSpA%!% z>>Nol4Q*YHG?;#HS}`|4#7U1I-~yvQp;EAeA}W(wm-jD3V7MlTi@L{Dq*A7%QCr41bTe0h)1eBTQ*+F&b`c+6frX~0vdAgMCxAf zk`Sk77KGi9my2cX8ydHwv16MfJ_0w409+aYU5r3=0%PqzEc;mN?c)wh6M^b?r(Yt! zpw0S)v3?+AT0P-_@MKc}z8lLhz+In9MvVsQyC=%qg)rZ!o`T5y9ZH-0174Guco^Dx)KmreOwU=Fx>3WGk7Ta%nMV zTx#Ye?@ZZfT$DD)1?Fur3ZxikdYh&AS^*_kZzT(n-PA$a=t?FFK(pw6IeeH%P^9o9 z&9_UKkZ6{8k${T?YWRF0c|Cz?xxr9^X{W(}EAoW21eI4`U<@rqdaQ(1+`-2)dUK{? z(HF;LvVi;1vd>a16m7)!_H!2haXge0V1t!gt8JspEWlc)^>h7M1wvs`({jSR&v5{BJ<+Xj1Wz+UJJPhqxwKv- z*IV{)!2xXi2ElweE@Z&H{jM~ww+&a(!P+oPqR;QZOKaLnxvT`zzKpgCbJ-#*t^KH6 z&XYEmFp&{;kg_*8Vq}CD*4+smF)8RY}9%zs*>lIeD?`C4^ zbXvQ3L+`;Q1$RmIS}3nd&e$9Q^=SPjdMNJj-{$Ny7{e+R8(Xxmd23{BfulEBK-sHx zu6A~E{v|ITef`dli%zg-IA>n(6*r?=c2ddQNM-i_$)@Z5P=jP(QkF2xY!E9gZd1nG ziB#PXL@SQ7uD~5@g+3q}-{uv40Kj_UUWzWS8#+43z}!-HR{uPyctleDF6*|0PV@wa zMUQk_C`J8g-Mya~=JF^^iyv_)TlC3E@FLO_>5qWQ_Ovi89~!lQEJ_8RpXuq7cn-n2 z%r2<|n%6&1V`-8G?8&4sFBJ8?B&@j5L*$~<3pu?&aF?NY`~kelJq=1b7m-86B}d3!0@~_Q1UY8tX*F`_<8eKJ?TR4w!)oEe3()A>g13{24kQQ(-0OwJ*kgoT zWfZ9rp}~XZB5i6Ik)bwTWV@3gkdVtU!3L5;B12w`c_^lniZ>1@b9u4Us$uXn}=aB-a)D0WfERR7zp_5Z}I%Ke? zES<=v5Od*#hV80cRPQLn#z)$F&1BF@djC4@i^xo9wMs~1?h+FqMNpnubmW*#cqNsTNsmb~PU7HYjoj!rbqN5Bld_j~g#+~kGv`c%sm{CxQmkBSmr+?>j z1;a6@fGT|SmwVt7)%8?!JD6={y>)C&R2&Ed|xY&aJfU{B_?!M_B9T? zLB5<}Pn$dxo+mq>M+_jMMi>AvTpY#A z^$*9GA^xH!63SOUpNyh3@XpUCgK6=Vl$0f!x11_o$RoZdiR1&RLuE_(e9dAMD^%Y* z4x~aXNYDkPA^U69CjxF`Hiju22zDR0U7=28Q=!il7fIKfiC(d+$%R(+=8 zmnMQF0u8aBnKr9?WT@vAo8)km9TAmyLl7FAFeo1AXeETlyd**{Qv;DgCa|cRJ7PZs zzjeo&+fmaKRlI!Rhyo4Pi%>MU zkAcfZfsjxiTUt)`6kfMx7MFMVcwR93S_)E!+}T_b*!ZFkIqg@bmI%bBMCxNFoS2J# zX>epvj#m=AdLa$8`fC|t7#*6oOBJ~Y+bV(5Fe!X7NYVmvDN}Xw6f;pN|4$sZ$=Orq zO*H6DX{CDAW(U!zWz=w=3z&1up%>z}IuonPFj1+l$;04>*`&f4_fh#^1kL4NXyHd@ z3s-`Q$T`{fRVw3FG&q7@3lU`+pl^p0y+DoDnNt2XC(dBgIeTvtdMyEOgI>KT&Z@~m z6Zqj6AFKmXkht9fMjJ~G^4rC*fG*epcH88qo|2bk#iOqs{`yqvV3QTiD zXd(sRA&Z0Zf*}`$mj~q+^~uZ{T=W9zn^%vf>fq&ptPf zp@uJ=%Isv2lRPr|NNCS3BT+?V%t7Q4^)ksL*rY;V;1SR*Gs!$6e-|u=;Eu0Hg(ID= zFu@}u=*=S*nIsbh9zke`M-VsW5!nnn_0Bw^mB;{nJ_-FO1v5Y&d1MTI;E~)s0_O?x z9-N8rHIHx?d4#)h9MJ{DBOqVdRpx`glba6^5qzaca^IKS7tp|z9E>(qQr*WPU-@!) zN}%6s)PzQ6V3jShq(KvhRw`J6jij3QJj}#!)y|kcE(R%x?dsci%1lAlG{VMbI`sgQ zliE@6M=}S)Rf@qeYN+W2{j`HU`>KQbq1`8-`dKY9tm!*OvpYO)I%b28qC+j-gC=|6 zYCuOI@%Bj>QN(1FoXZ5tU7n3jIbbXVuS9zt*r5W{+-$v(U1o>NjEqMT{9&3*=uj>| z@RgF16+_+YyjF1;(HlY`;YdV&=}0CXbhXj*?sRVj)_eeL*f&iA+bOmSix=C<4NApY z%!!hvV01Udo#>7%8eq`EKW!eQPXt}J_YbqQtEFw?_E>kBGWfrtgBwF;-dG+7^_Ir;f z3B9Q!(2al7>%IPc**n8F@z2RdnqWgjjFo7yBnvI7C%Av$&> zdDfy2S$Mma-ZquDjSb{eKO0r(kJCY^CVtCkHcltkdDtf;VPF(RO5%u32eAYIvmcy~ z&iiO7UkJ3lh>hoVasEU&T@^gcVz*D`v>s<=1tRMrVQU%H6<#Hynly|EyM>HW%jk;3 zTo6@@YB}`6DImzGB~_&*lxeUJ#qz;sltl#!w0h4f0wgc!pJXv?{!c2On1*r&+P2(?9KxF`e8{7s9ka`ugMJ;5vSK6uppNL z%0?1>K$VdSk{~mv7z?ges4_&XELM!T7zatwWm-i^u%iS_N^-Fhri!T`B{)(g{J?&7<67&0=dtZ0Y?hF7@OcZg6d9UBQ@BTUW-1GmQ3oTH11~OsH z2BPZ5Xh)hSZ8QS1W-$-dp}e5(`e3ftEq5a3byfEz@CP1k$T8Nisc*UP(!Ypj5+ivx5?l`+2gmvB#iw94tT!khLcM4BDDIFe!r%Po^AZ06 zL`XO{m6!m3+_Ii=T?gxosxSq@7iQ)AByMH#l9%A|W>nX?b8K@Z+f4N8`R3GK$+rxsUAOG z2UBpQu`MDG2$*uT&SV=PwbYii%dbtAVl7^5%=`oEwzi>v0BaMDfxLu*yyDA2AqU4H zI_>l1As9~1&^tq=#D~q++fnK5NQX>p(n|XDhQ9jN~~ zdmI73z@k;cem!6Bay3lkRW5g-q3-h!f848+2j*X>iC6+H_m};E>o4W&FP3x{A_TT3w}C(R7eL%2A@phQo)u7`2!J zkF&4xG^{MT_~_ORj44_e*YM|qT3n!})JIPO28N>`NLFCg15fJZs?XJA`zGLi#ht&9 zO*tpD^HpV`?YxM)`jV?`_VSr@D0t1I#|uO(hjHC74NgHS|# zo!yR*)zH|3juCLz0*&aC`+?RTa*xyn#6+)IkYl9n*OIn70n^u92lIc-Mhd4bwaNy} zm>(@a01G$?6mG>HvQ>*sm%yb}NXRXWY$si;$YUop)h$>R{Oa%rk!j$HLhii#YK4bO zDM;GRFU97RJm#UG3j3W948v=n)_cRAUNE8v^x^uLKlTFF@GlH$%m^}X+=K&}oE`q4 zF$|c$P!b0u7}cmN6PWO=As;@BDKttXyoiR^&^0Z$3`tqodK++vFfI7s981*j(;X@$Tny9KmU1^oZt>-aF!&dD9`e|BH+*dPNCWlpo+MTQ>TDBVE zz?_z$p#&|<&oeEX7cw^vrdM{nNoR=*`bhaEM3`33L?IZfzEjqvN&&Z;M_7Sb@LGQv zhQfL@Lf}<&yMSZR68ih7oxVYDdzvkTJW7gIc$G+6dwQ}aUgmv`GK%fY3r2#Fg53t! z0{m(G#E$MCA5~=hr7wK`3|yjj0Mu%P;PGdo|LO|R9pM=xfr|;s7X9teO(f$SS&q!p zTdO(+joDN9j=fGt^&EQ8adqKMz;3T17mrXbXKVA~_WBN<^@ z*bam(g;C*wC}G~hmI{TaVgU1e1TcXcs2}hNSmjw=Y#j)|*+F4yIwwJZW_)(C3FifE zo*=r0D2l;6)eR=;9-EW+FlA&6jD81+93$EUBYt z-MM9aOT zVpYvyWEhL!2`huN^Bo_=T8Drd`#(eyVyLYFV|7teUY+@iXbW>{vTTQwCn`d?ja>Nk zDxL?LM5cnMkwfd;i`p%KUqqmKmIyR7m!K+*Mp{Kz2{jK4VtlJ{SW$=$p4*!3oxm-v zI}}=|U##Y^yQr4O*0SVgIBsL2E&%#lbHUA!?Jj+Lrsht4Db<3Ng-Z=%+&)1JQbJcT zskHE}%$*+tYpo6 zQ63esE9PPab-r5EW{usVZ7!{xh7f>ApUw-pSDS^LbRI!}t+5%R)RI+0%!D3<0B(>e z7I=e9(dZ3=MWiqYcA4$G6)ZGpHkgAIR`aCDz`6kI%UfD22jSEse=l|eD(wJ*OGtCu zT5K^!Ys!NRal7WNi$xtQ);>Y2yXlTV);ir0z6uJ^0{tU)VEnVejDu-v0gLY>A1ER% z`QXM|$p@3nr^M*`U666)6|KiEZSpGq!z%h5BtEhvuoDimT$)Fw@=*(!YY1uKQn5Mh z->FZ(JUKli8ScmoD@$j&q6)3oBZtkD^HF@qpKY86S~#0iA#x00ata+x%~~^vfzu9Y zg@hmvH(4*^uy} zQt#87$-NWV9r$@U*#jZZ8cd-?4bg^O2Z{XR!o#{L1BtbL1B+_{(&gm2y9!AgvU_AY zJJ$*QNPQf`4!*ki-sI7XK?1T3dXaMV=afrZ8)oRMTyUpdjxkJZ8Pca=)P0_ug-#!_ zVoTxDHta-+Nf=K_CHbFW83s8HbL4XDpk1E64S!soe%(w^zIVI8~*}{9{L}m-%L}m*;2{8*r65lfekLxWNHAqAmY$2~feC!06&Deq+1Jt#g z09V;Z3;lg(XCVzOU!cEOz@@vA3$Y@UHF9$e5Xo5hq(AVou6DLLMMR@03^5R;mOMhP zQuo%C{?%8>ffS;O^r$sAD|QEN9BXd2Cs+z;Kb#E$QW7*v2^HVdZ4k~E7Ccm+TZ zyF=&1SA%my0T^1wp-*D=z@k?Y%({&Un0#=V{)yDMm3Gi`m^lHl@tNjS7T7K$r&}P7 z=+PL(T7ElQ0SJC}T`pK&=pY8|ZgVzlgsZN32gPF**{rux0$LL6mq^`lbH-|zs(7;L zlXEJ4yxXq%xo!W&D>#_M4=*yScdRLC%zG}I#`$m$%>#I6w8>(!#4ab5uC?<@*3VEg z-|b^38&mAuyB6ErZ#F+oSQE8kZA{9em81?hnb9RgckaV-$lluonR@->#SH)jZKJD_ zmguzKa9^Kw%HfKOrL}gDQULOu^nDRIOYB{ZcJSm&#SNY*T05txs{9d3J+=hI=4{2T zQ(ED&1RK+Kzq7)YbFH10}o$Xu^EVa+diAb6#fG1?Y#kRnfLK?(XUG89FOaQF1TiDMGHz? zkS%(%o5)=}ym%-MN0A0GWS-QTRR-~Tf0?b(Q7_T}l<>m56>3D@-<7b((xguyoI7*k zE>1#bphhS=CI-!A`v8bcyLa~a%5-a`W7Q8F*4QTQd%Iqn;6s{lcLoWaw53%^Zrw~v15#}4lBzQ)`DXHoq65jgsPOQi!T-e!gLm7s&SO(%G0cRJ_ z_|r_!T2+-S?+|%@8al;fW#oIBIY4yhT}|@*+uA(o{5ecj&MmytfAxuns_E+f_)}3; zStvaLr^ zvbDyjSPO1XN?DC#M~4y>G5LrF@1Fw1U_;P~+D}XJ-tjmnW_9?#mnCP*qkywU8S9kZ zArStgsyba_!XvvUv+$Zkh_?|39{_y`oJ2ta=4D*DAi8n7OVx*wI^oMQ~g~p{qPtn*~?KqW;h7G6=I?C}wd<3?%Kx`dOCW=A}(@UgM z6j1kC%9|K?w0(uo6}A(0pmwkVs=S^6W`ZGWMsiPcZShRDTSR7LH`B;o@^a1OhxP&* zA-4Vu9VX_Z82(!6hM#{y^lig-8wWKlV3*@@Q`lQRzW!Q7!29bte%5xpcW{h%mu4hux6tJmNQz6J+oc5C(LB}t|{&ONn4gr^6GvMY5E~W}DfUUz{7;q#D z>z=?k$yy`I+TMiVlJN$IRC>=GJJi=1S!b_`0%)z-n8`BBpnV^lW@KqmQCyninKQzYyl+O(J=GOiuNvJ<0LaNc*?1VnS092Py_j!w#jG1v z(AZ8o-#pDNVK>eytR!$v|58OJ5$!q^n~PSvd{9lBCszBBGcYFGAvI7!92+fyEDQ>| ztWHhWW@DOzgX-gJ&4WjN{lkM~9aW(84gsYXK#8t` z`V)wz$o_|&7xRSvz@5NZ(2ETWf8-dhLIO8r@&l6v3v33o9&aEF@kZ+HW^98P;et{^ z2p>yg`0v8!MHLB26I6wGZB$WARj>=J^Lz!$EJTzO^7P`wO%!~Eq{obP>P2eIk40jf zSzKZq!~YaA$(MY@*N-M*KFb;y1o$x+16ma#WeSxy&n34@WZ`F`zHyGH;}M zilfRPCD@dbEIjO}5{M?2z@R~i?W0P-R4u`ghLp&h^e|}QnwF4jhG{~{FG-rpWo5`^ z+QUN(?asah-9iA19>%8=2up0S5O-SXHD{HXeHQbL8Pm@$(`5T%IQ$RJmJhoD*9`%t zK7$T?H0U3fEBs=c+-WWs2(#fb!h%rkb@nU)CM%nB#k1L|C*ECYCQor6!d%E*+^PCS zEd6ODxFk}Y&g$T4jfi0bL=+8Kf3H{gvOlY{!Cfa(6MT zg+we&JU}QdkvYw!k_CFD9}1c7qI6GvH7ddiX%#4U`l0aZ5%|Khc8?LwM)I*?G|`rz zS7r*}FNtvGeyAnsC(}qnLQzrDHn3$X5|bVwgN+?~VZY)f4q}_+MxS9gRU^1!)xCU? zrqB)D$f*<}{x}fASFO%uIYZ2BwPTNloO;97xemcI%^-9X?X2mJ&1w*Qf?cr0HQX_WsR8in82vj@sr+~G$y?O)XDa~GgQXq z;}q;k#6dMlj3TnoAc^Mvm@yiD++lhckv0Xie_T+wGSs<2D$`k}EsE{y=1de|vW#UQ zp2FZAm_yf}-H5{Crbu>E4ouK=*gT}($K6H$T&}n3hs0`eO*J0Z54pM@)MOE^c*^Wr zuv>4v=zIKS1VQQF(CDKP<%|goP;YnuKEelM591fa(y*J9uz=BAUAdb~@0A zgwS4XTsxWdM<@*8Qo{RWs8S6}aK(=3RJ2>ol12=5ap^!j>C_Ku3$-J}+pLl!WZF~U z;wu;`4*dsthl%L?tRCRhoK)+kQA`&REQudWuOmaI!yPNO2aLaA z5DunZ8q%2^NgZJle)55Or!A^WF&0ytz?h2EXPK6*$te+~llBLYp~w&mjB&1o3?YBk z9bTo@!@Sv{J-jrq49TJI-4eZQbS6t2%w|_ZB38Ro}*+U=)W^=eNFeB1eQ7s z;vnIdLpgLN@$dq7j23ybS0}Ky-gQYeOUXjTA~Wi$HmL7X0s6a;cyyCT$)bgs6)b(Y z85zrhGk}-#+*m<8UBdm}MCt55F+BoL}i@+T|(V7;;fk2_@$X0ImqaF;n^r1=f5Ww-p^y<1_Z*8SA} z%k)U50EIju6e9MXTqzOsqaB^&nS=*qEFyA6Em*O{|=!KPZjzy)pBzHd<&9L7d{sRg=Lm8mgfTSNC$G^?uii@VvirsX@S0VY zfQyt8Q)Enks)h_%+VKdicOcRI=!x9Z=Z+#Mw5zO08G^$ zt%*m*QcznjjRz!-?vwj02EgbfVk}@a!D}%hI{(dU@(>5L-v|f9*(fZrY zEjc%A5*N6rlVnX7(N4pu97ixK`&6GGx?-z-#7Is01!>r%^>E~eHyM*FzWh(ov8}W} zTtp@a05}D~2Y#O-Ib7OL6;0YWtnyKo3YR?+G`}WtJeD9yx;4N<85&clf-bqY1*~4M zGcUpJL>`ZHpR>Dpfu^e?+!9Mq?ngYeE3K6g9@B}(cS-Ow10oS`Gi6)iH4`}OqvpHE zxR8X1SPFV(LAf zR{{!Ggo2_`Lb!~_ID};?6ur!$$A)wOdsQ)>|A(-h zSN)b*2Ahend9> z<>}`MtKt~&hbj*B#sU_6wz>I!w^h)gVD{M* za*BRMMsLWrRD7rmfm55wnVtHWjuK;!Bin%7STU9e4!}Ac(6(x7$&$*WD@hRJbrapB zllhEQHbpKpU6Al}`MyI=MT&(CzioqZoXtZ`8p`er0c;RE4s44}mu$0g@w~#YI1Y>f zogV)Mr-$PW)-f%82h-Au&Q3JLD$E>vK(5_$Q>5);tH3KN=a7aQ0ev*oOGPpLCn!Vc zfRPyKwqYbOU`UOFbnV6YO>5C5e#s37_1cUiNR!r}Fkv-w!)_5@64O(!U=8a$oh~cea0htsd^ba8%{u9c^_;3d7xg;1xLJ;`Vh*^tvO z@(Ky$3O%&vf{NX7&qk++ksxoXkq+LG$JBE_)*{mfGLg^7VxX|X7gsc2arcq(ayoN? zyAP)$7r47GQ+f|$k^Bp?YvQnD&Ju5 zDi{E8Bh*wnL~XoyXQdfH&{pY304z~ECO&8zP;6=FNE(_pAHxgLzmmBOu0t(vQ+>@| z8Q0R-2fw+}tR+XGo5on)oQF`4*#$nJkeMpRG>6r(wK2_(NfrMGbJ5aTkuZL9g)88D zn``PbEwMEd%hEfnedQ3kn_ZEROdsC23!7sefj-c z6ZZbZR*@J}qt36!$WhLamI*r-VNlTlUKkj|%M)?XEbYZ7^@)8?=FGpSfN$4~**%Z) zKmXR&%JltO`W~yeV5EHd9-VlfPL8-VBQ_%i1*7*7d6;^~(u-k_Qr|{E_@2IX4)?8- z>XyLViyNRN-+pTa_jF)Fj#j4r_c=+>r*Gv+`UZ)>0RKm;Z#p%r^#J`F;uNEYWUWD@ zFmlH~1nNu08<~-E`yZ7-{|v7ore>ISf{`>j?;p&x%t;D+4Ux+?OmQp!Z)q8GmT4Ig zd5lTS_xjD1IW;?(2FvIqXKXQ?ku&k_WRSD@XwuhGwAd#5U7SynvER+t@8m0Iz@VUj zkY1r^oMjZ{ek-0|E5Dh4e>Gp<%+LQ8*Lvex`7N)=KXbx%BF-7yfv|nUcVP9m74}=w z295ZhK@2=%I={<_E)q9xIq55?8@J!#R`SNJM-I6-`0U$!CV|7m@vVHS47cCp_Cx9E zH@KC?QTClO5jkq$RIoTfj9WtSA<|L9-=eH^j;Dm;w}cK)kXTlIiRgTG7{p0pYmmD@ zy*GI1MuYtRMg=LN4C!O|OR(bjPO`WQ`Fs#>tPhUdo%8vtGFwg@oAcW!&GLrVv&2bS z0IjuKFL{R23*2+L9A9~45WjbV%{qbgPRI_-)lS{|QMmIV0H)i!)pr0I$)BxIP|9xu zu|R40?kJ)3y?oaov9M|m#nlH{%q^lakr`3JtU*3I`fSEYR?Q42;mJP`;=RFmM9>!T zL@a+VBA$#CWMZpRMy>~#!BLxgcW@6Z&`hghm41_WmAfd7g7_}F;v3D@Xs4O|IYSCJqIrUmj z4MYfB3CWS$d-%1&To53RvpvIs3e5?zInE>1MWEe~y&vO0m16yE0I^DgCRM$J;DR}H zb`GSE2(8&;ouFT$#n(OlJ0~xLUFNde3P73!47i59CFmk7=uprs6U{T^c11kLJu9M? z<<(~ZTCGOLq1g+|F20EfIXGK$Qn5U^3@b6n&?D$U9DcnbBiB&{SZSNk!~>&5cYSz) zpUExa9Q?}Mr_LaMfWxnAoM8chJ!1dz{;yrH|2@tTT?U6Xl7ZQ6e{_-KpD?X(lMcQfpxz~Q zIc^pYzQ$7vgtSVo%BBIP@KQje?Kt>a^#Nd<<@cMEzy~CMLdeRy627()wxdG1FYFNY?98471?QD$ zhqjnllkX0Hzv6aQVa)ejwwuj##O!8$(ok}$)C0yFL{vc<&$;rf-W+e!aR&DWfhIz% zvu9%XD+sf(r(qfJBZLDau$}`>wpq^Hkv)?=a>jnIj2oART2Kq8H{uYPIS7~Pvtbkg zLtF`9BL+sb>o{n8vYp&2QNX@*fD3i-gBSX8UDtg z+L-6G>a->WFeJq+cw{JM7?6|{)jQn&HvB&kDa{KbUlf=YpdrseR*LCYupA&oPQS-W z8#9yN9qyyQO-=$B$~=pUS!jg4Eo^ZSbSrEzi`FL2;H%-BHj#`Sp{W|Y zMEk;&ZT?Ev4i4dnJ=6T?*P~Xf5q_h&qDKlbAx2$>g$#{&2|B z5ZJ_j_3KS{x2*CRe_^R9V5B?63}wKGtSRkqp#*qxBiUP@3=+oA2GN%j0W0Q;VCb-_ z&^X3p=DM0dF9RFW{?KN4SQF7B5nBM*(92%Q&_qyUl2rxQOBV20Re}L1eiQr6TCmPE z%()@O!)UUU7T2$^IQ;!)zTS1Qz&l>|%1V7ZKbNa%GWjd{_bchM7bL{j$~&&MYmgAG z^k=SH3}?E<7koz?#}_ql$0llk^ma&kl?hN0^-(P1mQDL87ICYnuiu9P$X5_vZrv&o zfj@)AR?T>VI7&heWpCVA8#=9ULv(Kra5 z3@xBe)v!64sBNlY_mig;jM=>)tWqHo_wZCRqvvIK{8u29-Qz>{f$^48A9CxOZ)eoQ{PED7>2*US#2k~?B%fX!D}vLDyg*|I;kC9ItiY$#CIc;PdXkG zOH9zpQ&1Up2FdF2f{cime1zXjmCDHm|E*KN*O`J+s7n$J%N{AX;#0*E2RUiBq?l)c z6Ekx*r7Ft~eqLW_PA58ov(D9CJk2?t4fv^)4c(h{SJs1xiaa3T{>p>)A*`Ka|Q zQ^P9sc`@aQ^g1K#aUkl%VK^bC4C>61)tF8b)};9G-qSuuV@)l$!N&=LFVD$=f5t1^kSnScz8!uVL|$gY3*E;%MJGT`2J`x-S) zs$fbMFse{~QbC8@(^}Gj#9@3QyeNPNlGHEm%;!f0*8ugM;A+mp`vQQHgM%{UC&t1i z?a2GVhEWHGQIu!RM7_a7ieREaDfl;=<3YxNrv|sv*Q3iVIz{37@}NHmjky#4i*V zd;};i1ac8tgg8kfhjbR!4wB>&gf4UzexeVlvkZ3N+T1~-Kq$ECe5 z>i@5!SUua&6G(P8G3Flok`}9g6}0#VL9He890YQOn;Ou&*ON=ewL_>S zB?@&oP-_sI-=uX%qSo2#rl%CW`t{jX9bV>^J=h4FXBX6Av1<{xmIJr?Gu&G6IkQYN zZh_}V;Fjm`w(77P=t$fOE+ZD*gImabVw_e3aSOy>z^ypCPDL-AMo0|!w?bm5w^~aR zodetMInp{<*QAI3^AFI6Dk%;BVE&g1LKpN%b9Y9*C(l*34W>t6#C>O4oA;Cz4sB!A zNBV4HQVb*H_f-gRB8Bi4`Mq5qPvf|uf80~MY!9?{zZaeQDON5dEe;)W6C#fm547&W zeBe2aioUyl;tJu4Vhs-XFs9<$jqxG6Kg0Rh2?mUGd7&8o&Y(P<50qU;fsO9s6_*c_ z8UX%RGQ-uh{LBu4rd)MxZ<5BcoGf=xV!I&^|nAYMf zu=If;Aq&42j1{v22-U=sV6d1hMV0*6)r(kk5n$ ztgVw}E`Xr=Ucx)wi@fPDEf`lX3?Kx{FBm|SZ}O_={h8X>KP(k650nqr*|>r-ux$I!l33&6T3{$^Q}_Ez=4G0H4?Vxv1Gc|w9X zrY8wroz%@Nc@Dt0kUUZ56udm!RbNpOyt=%_rpDJwo*gC62pm+xB8f+VLm|Lm=L_;NxAN|dwHDSDGLjsRDSAp7!4?k@LluH-Y8h?SyUQQ{<#w(gGA zWbMYh`Hbdcm5L-_2G#kMmF8sfRueUU#I{ywCm9>$>Pu8f6N^TSg>w~_YHB45_6k?z zwl8x{odco*I8eqN3HFdc>}w_KKa9Xmm2tLMq{8Bpl>!|C8r=jr7NWo>9|6^F!kjlv zAUb_5BzNW*)gl3>Z3HmL)tC-RJm3Q(&=&u-R>1CnuK|NMvuU=3cCe`N@b^p#h1@(P z5prRz5N9kS<41x;1Bmp9^+JRqBp2dVdgk8p<2#e(2~SS&o1F~Nqn2oHBo%laP6s{3 zn{jLS&-&HqwGQVU)}5EBmF_)3?>b)kF(iaZA{p6$6f`Jj_$A2}al)WH;wrpON(3aX zzs9kquh~H}y7}I0-6*qIDGLxBYP}k@5nWiP8Ue_yW}Sw6sYZ?|NXNm?YTQUQ_EL?# zsFBfHW2CI6DxCYkiW|r=hrNjZ+-aloz;hHLY>fUE$N&W704v$pUvJ_`wExgF8LuDF zYcqQ=;gS7mxmi!RNhJSm6h&=geIhAHr4o@8eVPcGpJG#ci@4dF8`!KA-1341A1%>Q zS|Rlnh{@C3Swd2c*F(owMd{f?=luj7#V~DtO(hv3#3P{@r17(n=?mi~EDi{e4a*>f z78a3JDPX}_FGs;5l2ZjNHZm+|`VcIjsxw$DMwQTW;3h0Ezs_OdPPGJ!;{ukCgoUll zVUaq^po9gJBP^C`ddTEuSb#X6g%*(-N__c|kDSS8RE(V7vUZzs!UC3zC%@Q@<%N-x zH1EaOqnFIA$Bo=dRp1gbWGqM{Uk)q)qA^YHXXJ;FA>c67_RT8Wm~4h8=+nsRn~;Dd zoE9jDpKf~Kcwd?}e7#?;b50G5O_b*~tIIp$cu`ULhKn(=T!P`&rL3JG@#PB$6 z7;6;`Z?o9BjKL$eTm{`ZX%O&;=S25$)CB-Ruz{3?tiT$U7;||%5CG{5k`~Xn#D1Q7 zS+6k7VwEIo3sM$1ip<%edGFh28Ywcb!b z78<;o*Vk`00w!1nXy*_lv1l$pawC5$+}KYG+yvLVLJh@FsKGUI>u#DNcxy{un-o&^ zc9uYT@Hjrtfrg?P|c)zRb?TD1XTSjP&8t?2*jR7 za9ujYKy;mX6vBx>**F^7+5;Wax6vlI+Om^C@nNA%S(%CiM56e zl$9527%=mc5gAX-1#JYWHzgL$*amZ>|}CE-E3;0rzc@d2L(kfIW-rC2X68wDmn+afk7#j^R*3hr$V@7@C|L>%8@vlbH zDwabRf}00(if!N~kwE=jJm99BGp7w%|H6{!f^B+FY-guI+fOU)U6#XIS`NS+6EVB6 zT@IWBQcPI?Za)n|A=!X51aD2_kK9Z#aL2E>3X(*7Hcflr1}1uO17mW?soU@{9*ifZ z=uNC_)deJP>&e9==K#x!bQ_&~E5K#n{Y<1isVz^7bzLC<(q(s6a%oTXt@=zu=@%#8 zO5HHWcuNnZp_v|bMws5PUpf6=Wzu2-&H{lgj==BcIAZD*`gN#QKCw@XH&{H!7O&!L zi6X$zc@dUeFDG`p)=~nT+~l-mftU}{5eGr&J8nbeAqe5>mjJV`&(R%65H_TjhY3P| zfgt!Xwmx|)S{!$ZUR>q`fQ>XFU*KR60Hz26kWv=J!jG;vr>U-fbAkx--lVLxX&#zn z97j?~tQk(SYF*;cVS8MdP-myji)m4H8}=J7OsXZEKSr0Ki%zV}A=m7`4E-m`5!2q! z>%Z(W?fu!b^Z7kfyXr}D2^A2^ndwr)hto!qdgid5^ZtC!BmT-x+&h;T3J?L)1fF05 z+vtX%WA$vgghCK>LUM8caxqQQ`!2k=4&STdjDkUfQo@lUU0A)kY?g<^|8`tGayamY zrNK-zyH3-^IO*piQ#83$UrdXTnYi>;eQ{<&j}6_ik<5){k2p=v)}^=7i!3$6D?w_B z9YHscB6V;lC!-|agNw)yTq0ZstMZ7S8k>PDm+mm}6PPo61j~s*4PL*_RSVnK{0)I7 zbd@Zuao!laNj+~Y$Sz2)g~9*;iV)?QZokegVGus`m;pl})H4{ovB>@yrytMxBOX6Z zdv9R9=uCf?Af%3=$m0vzOx`TR=@XT`SqeP+X4UxSE=5pn$I}hCwIjU0kzSJ^haX?D zFxRVGLT%~nraP>Zm(v}cs%NcVwefn^wv5JJd>ua^GmhR(tP7!11S}wEc>Prkj$FT5 z0!prLds@-uDNf*>$%l|bjFs2LzsY}P2VygMK+v(eW^!6Hpk`(<=ouo(^#}-r+l8I` z8QrVIaL$?1gHgD7m=0x)>EV#mFbiaL35C)iB5(m2Z$Vwc4V~1b@{K&mJ+r9Q%v zq*60y7P{N11imOn^@r4|fySG-ozbiAsQ=V|6)WnE+i z71C9(X$3KYxC=UYlJp?5HcreVEr#=d27nV+=Y(4ediQMq5N{rYoIF^cT9kFy{khNd z*P}^Y4}QzyS|gebhOGOhd%7$@ozO-gSNJdzB| z1rdai(*2bkl0bw2O#UUr^!hYpZY$Tf1xBr6Yo?}tBmam`_#85~!*jg7;vo-ob8*=o zPJRp~w=0U(0DS^EJ4;s@8h?moX(AGqE1*tGFE2pyx@H6|<_Ib>dYHJx1AFbg2nvmX zlCk6RC)D{|!bp}l-~urPJ7DD^(2?<5p1KZC?ZA;$$W506aT#nYN=2S*Nra*l=7hN@WjoPw5{A`)>$A?9?YS-a0TwTP7!euOKDxjT z(}%FcG?NbkxD5a}wg|xdz=+L6Sx9I{9Oz}IvK%cX6vTpBkPCXJz^PbH_|HNEPl+#F z9Q?XSlK>#Lyh}CgpRa#Rd?5wSesjKlSe*tm72bPwXxEC+sN9Os=nf+;Stfv+DMG{6 zBbjAnyBeen9Ul<7k~ttUCX2)dg4!m7;P_dddF-B4`-A)^1?T)Yu@{g4QFPj*w!j>1 z^Mk2Pj^tE9KbP8kz&4o;)ij_EzC^b}OepRV8o;YanLGUZqiT|bhc^g}>98{~SbQ9m zeBrHz^kI(qLM!1tpo9mol`le|JXRb)bZ~{DD`W{ZDcws;JB)-;)#x%m;80 zn#lEaR)yjKTP(1?#Ku@wiRTZ7zvPvm&tT_F7$Bgq151}pOV(xj+`f{S^Gp_iDa*QN z;(!c1i36}^w`KB|-AMdpzfed6FU^I4mzocRAQd&g&|Jujge%;<=ADe5MxXQ5E8KID z<0L7-rOh2u04ygr>e^0?%7Su(tpvbE6OQgx0(fwLa$ZjV3bV@P)g%YpEtR2m0U5}W z`Ts*5V*MxSltiTTOm-rEUV$!*u}J9heei0+e3F56G6g4 z`)OR&d?RieNN6^vbBS7#i9XcS-p-`)X@1*=8?N$uz2mp0MQG~P;2eE9M<_+fJ~rbQ zu{g8jAR##cjbkI`BJ05YGBcCJ(RBls(F&x|6mPVVYGg!GV(~3(O~KvzGX;vf9xu2+ zDTQ>aDq)w@+&+d!7(8ZWybnvrR zXALpKyqfa%>2P7q~~Fd=Rnu81d+pK<;k-g(p!^4mepJF?G)ytRgJ5U)yk z`d{%r{pJIvp+>sTvx0=^Fgv%VB-rZYff)KNLF-IENB^8eu={22ST=kJJc-Oponw04 zp$1uEMd;VA_8yA4I7hV=LA}5ATR;Xb0^pT@<3qZ%TDDL#zO(8I5TTLIbe@irJWm39VQsKx518(MUh!<(TnAbdDCbUaO)4b6> z$41*blG)XOMm`L$1nhCsUyiw@5UD8rYc6@gTuRn&7Bt)MMDO=xAr zMC?-vwBnl|60Jalqi|<7R3r5cqYGWQA6){1KPb8^9gQwDa3s3K*pEP$1(ct4yPmD{ zgaKeeEEHBlnO1r`Ii5^YGMW2qFll3bjct@mbne`4k`Vw&qpnz0)FUw!L533r*gz`Q zP(nP=TcYZceCOY8ItOweR&06uVEPk;eL^n8eD>OD^m8{{ zkSG$vK@M1#tj@0zcvH#Y$i~Z?kU_FI+VU&Uw zxG%=_HXU+CF4UC7CeiU`g~yX+pn`KQS!0(n5qcmI9?|3;<0 zZK7VdHIPTsz=lo@sMr>_s3W!#Op;F2(#x8B_X`zva&Pi?SrY;EYLd|Rkr{+&n zGvkR$Fn$@Kd1O0mq@4Agt%E^>L6S`2gS<1G{Aty~0JN|yZRe3g9u#!@^KRMQ*jdKx z(_LN)GtTB=Q<~FACkNyyP%aYNyCQ)xziq||RjU4>hK(WwU$4#Ym#K17zsPN}y_;VbIsm36zIVzp? zFMmeklSuJ<#-C%HP-txe!B%PE9EdbytJHv=!H80)sp$x|+Mlu2VX#%49T?Z8ld<{Q z-66)}V4MJ_q6^d)<04wyGAzk7G}&sr$TPu<(R4i)L_)ejJELa2J~X3Z@i7=fo`Ad( z?)e69^l1D%-$fkv5YRGCtXnSZ@dwzWEB;F#SiG-JU*T^`&|R@^cPI$~rVl0ms!#8j z<>{CHH<$Etz&0q!^zLi7rgwkcU1g4fk}+gR z^7IqDC|~|~QP%$I-N8h{uVPv$u0b32c>hl432(pJc`As>;%5?7B-=aF@5EmQ~>Nwe@Q`wNV?d`1n-*iwt)Wd-Dh@UZ%=nx;3M&991r2S3BRnS z?)1OF%<$l8iWbvfc3=$On2Q;#RD?+ zzze^@RMEK1@Edk4a>H~Ua&38XH%saapN;n;XD{Ke;p9hRzR3d{XL4Cce@^i`89sb; z+4(jVf1EX{RF~K%HW=Ps#5O?3=)GvbgE0$-?d-)E-P5z8?&(c*T}jBr4~dJq17es| zHo7DR;77D17Xu`@L8t=!QnpRI96ME$*)iC8bQ*&ehs&{GfT_!qAH0@m00WgM>H%b2 ztKr)WZttjnlwCPk+bot>2FojD)#(ma2HY+6P*Q^qYiMzY47CYyy6Hl@|J9F|^z!Ie zfAaWOmy2V+`V)s=P1%$4$}Kvx+;-;2I>o;fEeh_=#!_MO#QQsTMPJ_09s5&e5gFC!Jt6v`!+&n7wNF*G^QMX(#USJg~?R`oW)7V=#WaNJ}5%QNXow0+t6OW+P?2>9CPNF}Fj9TUN z1I7mS4Nfvbz~A62?i=M9oNfjM@tj@4(+VX9L-Pk7r`x=%SCMUI9cZ>cwK{;JvW~E4 z^v5SCv5E|lh62$r2I{p)-BA(MXx~S^~BjHN{KM;(#{9i^c;QO-uzK)!ZHZ}jy zLD9^3`XSh=q@f<7ka#mVTjlYvt;&cKm4x=Zuku`<3iR=eN; z0fz%F7@`g35s|AfMl@hV!-=yR*o`RnlhJoRlOKrhj=~Z#08LV6@W2Q)J%|0NY)*&* z{ptUW>E`h#S2Yd=K>H7sI0!%f;{N{h_dc{Q#xt=8Q-aD^Ua2+lXSyS1bBeKC-r$W6*!wv)jg}ho>nM0_NXkqt9@JFO_Uh zmnUZ)(%|SQ+NRSLfI=$PmJ6B0153RJVpc9|=_^JY<;oQ0A3N=jUxjv#V29}yd!k2Y z+8?m_5i;ZaBTr(C8seiQ>~`O9uOMayOInvABQ2ViyFWYx(0Fkjl~<_tMk!ruY{ zKn@UV?tWyyKJylEa{B8HWwH9q_4R+1Ki$_SXM$i!F#Y^#{OmNLza7M3z1<|HTSK#vsiP~sD^<9Q^}pcXy~ID3IQ74U|jJEY-+3jvtT3X*XlDr z+nfQ>AbTk5Viq{#G4SaD74Yn#lBz1J(zV!(*@TA)m`p$qo0#<^pet_NTHWNWm6Rr|^0%*dpM%#hG+R;F)~{0SM5 zj}yO%*$U3{6c{;vkt$XXz)#9>r@`Lk4MTuv7ORXaxpn8=DX$kaf~R*V6lf@!5?M>r z8kbFh0r^KRy9WvI~y%!1Dmeto+$N!f7y|Frm zA5rw+(~N(GH$V>F<-QS)rbX(V{>yY1!{`kNL$uCoT93Fg7Y5+xg6D!>CN`;PKto^( z)v?T@DHR{;F{lI#{2^+X$vvx`MXKBJ8#O;9{ecjpZJPx8uMZNrEoy(K~ zBPg}Bu_j>ys>>tUFI3!-NCNw5Yij|#*{y&o9RdQe?GiRSTL5I`N2nT|3lc^l&b#1i z>Lfo;$%IqsbbyBMD}F(G=T*RW4u3%CF2NtrWkV-7;IHg56?vJdM~jDp+PUxaG>eY6 zq8kUM9{?;$e@ZMF&m@;l43}LG`n*h}dV&J|8i4}28<6#J>Nz1yUp)q_h-B%R`jKGt zL0RK&j6yURh4P0jteHNzB3)$0@h@tNWa3+$C=wJS)N_mkv$}VH6t*_}T$S7m|6S9$ ze#I^3>$foGeSiIl?yDH3fhkk{SdsttugB4-vj^Y((|;3X^#FZu){Y0|V9hsV2VE;>~wRbF|^nO9-n!_ZL6E{G!IZ>0RzZ z2(CMyZMp|__vPtb-oAoj>qVCaYWF_l<71obBplc75xO#6E9qL98Ua|2-7du^_R=09 z;QXw|@W$YvacOvnDDvhcaMN4HkzSQbF9jbmk5*2*N-3$g8bz>&vRUv@R~1(&TLm#j z{?0Wx5yipqg*Y5AHx?P(zV)Gy(h`G-3?bofP%oPBN$r6otQCNaf+otBlPc;DcmNi< zL6cTrBZjiaU7$XpQ(Bg~2a3mZBo$QU#P+#Y@ocwxT0+O0K%g+& zG7MA{@W#dm%19lN2#XQ~Shbi+ zXlIW94m8_xJEAFfPbb`sU-mOT}hreBmPj<;nD8?Ls^YqY9xlfVn9XLD>5b_x_Wn`sgPdEK>eh|W1GiZlF-=zhWF%DT#d|t*Gj%O(fKBg$zGRk4iynxL zj=*8q&VA}Z-evFTbgOqYgh9N%kB!LqJD*xjePlP;;TLYRBgfaPLRh`$Ub;!8&W)Y`O%gK1nKNq&QrBnRW3=<5MG z8R1Hy-kDbZpLNJy0u@2b0*iCwe2c5y=3`$oeGm|S*2LB@riB`5nj4KjC1xLNdI!wE zj}Bg(zB9sbtPh_m-z3q}O*tQ9vS;LYr6yMcN#MK;9Ce$I!{E?DFNOOYOuy0lL+9h5 zb9yUWZ*8TzH`{z1dDxFaR;)5VL~h|JwQ3#t+H33ttJE5ke6ZA>bOm7Lc8(q{q?yS@I}X zaf@%=l*3AVqaU?f1lZht2icPod+yB6w*c#t_bwHu4QH4Sm~FzU3E}!3Xgv$ycMy6? zm9-^wOL1L?%|G(ILRDu_@mc1L%U#0Ynf_&q@{_dQ6+kn`PEa?>+DVx4ssb4RnWxri z_a_ycwZS*P?Kcu{Vy$JK;R-@m@icCKllU}KXtS23TzzG3t0N_)Er&;2XnM9q82!7X z@sU5#R8MXOa;~J}FF;|bGn5(YyPJ;7TYJr4UhC;&xg^WdsJa*yid}d6@8JGhZYUEGs zs~~U+o$oTIQrAw*sFe6{zNGu+@;%{u#9ST)-y`PIwx<8QU|jDPZ;nXGbQInkF_+*? zOd|TLQ>wpvK9^AW_nywx>PI+-&d8&vS!n_@`Z|Ry$O{@XK~DG;=4(A?aTgC=YdCcI zSgQIS%drJ3zI*>2zZ@5jzRAlmJC!jLx*Yk#a&(WOw;b2jF2`lpQI+fFt%wG(O2eyM z+l%zz*frY8afV0HgM|)sW*z9X9hlPtIx@(BqyxgyjtDB?%&ZUeDFqIY7E)jK1un$o z)h#Ogy%0dyOLRn@uJZqrm7RL)vd;AVFgyuWWb^Q+FvH(RhS}Aie45Dcz4Lx7*nb4` zZr%5Sdp7Sa?KqYXEZslvGup8*?+V%p@!D*YQpZd?^1LU8co<;qyg$lJv*@p;dB2k8 z9otAE0cqZeSU-N=X(Oa^^Rt!jK?Y!?3u)KhgOtM=GS0g8gEohUiLEr3QZxq$Tq{6f zM2wAhuQ-UfdkK*s^3@u3Zg^ZNjL;PoHt;&A9}ZFu6kIH~v1<^cSNF()LiAl^e~E<9 zN?Q?0aBP+)Yli=+uCi?4MQtm@bf9TPR7BX&`feGJPyYX>KQGZAxMg%%>(JTGp2G-D zKG=Xd25Y_&tJfpDB0x~sz@fCqKb3^> zTajSASz}Jg()9LZc~R_@T?g=g-90JoH#E55!-@I=P3iRKp{8?gOY_P0s{yz#iNu-v`wOp zsDb+fw|X+th`hSsgSv`GfacJ=u83#UDxNK78S=C-{sYfQ)fjk2p6}bS^)=zy%A$6; zGS@D}Gw|s!p4kfF{~6E1167mO=3XTGqwCDNo#}*Si*+%93TwgBLm8HuXD1kT0yRJn z5pRF31DmUyxssU+S&>F-ZXhIKhV?p!bN; z$CBzJM6VgCUJ%)j5WT>+Air#k)y4UAqPoAY5FOiwhhq0(Xejg~URLG)wU9Wre?M|a z9LqKT@Q`>uLE^bZNU)I!2837qURVTX$nFlQSS>t`?d6Xg9>+rd4-b#W5<>5a^SIs6M_IXP=!&pq~9$tU-K(AAH9SmkcWX9CzIjivRVz*#D=CCSk zB*rJA&k?H`lMTW5SK~Q7=()F6Stgpl(>7qY<;c=+8DT$-#2iD$x|EM^ot@gt@NEg> z4e^Z6)I;~6cVZ8kQYDG4B1euHIh0{!28WtxYc3N&qarAKoH@@G%M-MV@kAS#RIe+5 zH`v{XFcbEac`Q=3$8#-fyw?HX!oF0Pmn8b(4@`P=0BVo5uiZ1Ne;h`CTN z1#lv1&^cX_2Mmp!*>;#+XQViHSbTS}fq7athkqDet06Te_RtK(Q9s1C%&JfO{}*A8 zw}Zq)Q0I2+D8)U;@~{z$L~ynw$WoY7Y87Lyh~*Y0yuEz15s$5^#RrB38ZG!qj4zFVF1~ISVdw zRx92qHXUbV09?bR`WzpfWAF)q>fXzY!>{pO!pw%GMIkMu6uRp7D$ka`^c8$$=;_p&D$?{W^NoVV{KV@kliKcap=@QVnuU} zY}aQLKO%)9yWFu*8JdEvZ1Psa@ha|inp|)5U!UYYpZ$b@H_5rM9X30%N0XCY+~Vl| zY|c<50-g3aM3RPLW;S-}llo}@s~}`Ey<=iu=}88)G0(3SgIU{gI~jeqqbJi~9z?ua zV-y;0$0_irK8aNrde1so!=S2TXzg(vJKTZ9L+Fwrx$MSkvOpzB_^}ehm{iHe}Z2p>DIC z({97b!aYI94|^u)ww{TUq4GG-gpFY>x9NB9b~kmKjgv~6T{i)ecO`Wj{IuKT8L->k z)a^yGlSY0I*-5Da+9@Hs8DWXy7BNlSxenq?3Oq&7C+ffc+VIOu)gXm7euuM&OWj3@ zy!8`#TMh{4W7AXiBP2(O5TaI~1HCGA3oV1GP~q$0A%xK9EOCkQ2XXUYh(z2%9mkCi zaa)$S@!dtxBGsFS8y1mh8f1~q@PF$jI1Gv|Ez8xXbdYwYWh_D56bPaG004PqMKwZq zFEFjS4BgHRN!!#%{^mM{t4E@mxHY8WQo#m4lc)UUtu>`p8 z1@2=Kk}~a0|Az=tABEk}7b;kSK+3%C0m3ydON)uG!*i;- z{frUEad$Hs^VwszS9y%ceT}LEq+EIF1WPeTB_PddB&f|R70-z%4^cKjt*F*paK`mq zsiJ&RmySbuYep>> zU4N;JNZ-&F1s+O`7iWV@7b46>#N#3xp%Tc?wbJDucJgBSof$=OzaTAM|2ZAA9DF2w zLJb8Km^zjoC=fOUW4?Kp?CnrRD8}$FcdH)DBz@7X@)}W%@2Dn=o=7F~I6NKVYnxFC zZqPC|l=C)?3IwxV3QKeq%s;SibiQze-o&miT)f^R*~3>&$!Qtj7#XrAcwt*qBB@a@7e%uDHerp#F& z$UDBrbb{0e4X6YnE;1eDbUmVTEZMX()=8D?|IL->j)k$I?F*)dsCYR1&->LlkxW7) zaF$W)qwwcAmYeXej~CXY|Cm2>cXDTceDiF`bRY|-A!%3vjbWyvBxo#0I))YSDgP6z zE)cPXM0mR)91c$sK75~E(J9K$HNvI8fBqI=;^AfT-u7@8H|)d5+R`!EI`_-+t$4&#yX z(mrxzVjV8fHA$K&fw>?qB6mQHiPvDHK8nrZC*BG&s4RhQrF7*U@qMgJsG>;=|EVa< zA$92?!#Z(&`}GLe`0n|iw_y$u*cvugr9p^_p5v?sWg5agANTk3e4;Q$^q5H^ly6wh zbRz)!ELJN9O1T%BAyN_eMxf;5l;zQjPu(&ff!P2|p)2IMx%-{YEu8%UGT=lfsE&jVOX-OwVf`6jTl0hS(@8%zP;aknkP(|UwY zP!9-gC=_ol2lBQEIE7ZBYBOGcRU~(5_ z+J&$cYlgNeBQnB;R+3B$X(vH8RFaG7Y+b=>cuZbMCwwJeQ+ioREGx2UGX(i9K`4Km zhcE!#M-Bn$NS?%uFv`RT5n*ma_KeMu5poU9LXv}gg&8Aep<0}UYOYy03&98%XTeqw z$AS^wI}3@Ffx~$gViMIjVipkeP2Px3Q5x+ti~kw^mldfisy%xi8~0q_q7t!lZ1+>-Z(^VIQ;R5!h~>BPoTd1gZKz} zGpDNs2%l+~3PCsJ=g#m_{^UYxnynZBRTj^8K!<3pVC+G>_GhJyWT2z>mPRUAES<;- zU1pB*KB zx|ZkGagkCW8zZ`?VREO28J7{SM_|Ty!@alcT~n*k{lsMp#?{%gf#)VP2s4IpbJ?2| zl;h_4;4v&Z?q6sk-2uC&9amN)+=OFv)_h_1-|xc24)f9K1;$5TpG%E7NRZnOYU_#f zte*F0XakHq(8NJQ7acTi8!t?7(xT%RlA~Y+JzW=w+d#rny99P3{@2iRj8-PIDW<{@ z@B75!jFG7H1n|93YSO?TJ0z1IHR7%JM~Y&^kEIbmYICWTM2eV~w3=>ngKYMa-H%1> zpjcyEV$BJUmp;nEhGl%DynT(;TSn~q`p3#R?mPiA!)p5=8X~+pAc85+-#=9k^6%w? z0CxZxtAK@+-10u}kT#$cJeEbrYnrd+r>wa42sFh`YQ5Y-@5%!7uD&Pqhyr~-ggl^k zH9_yP&81cn^sWT73|j>%k5qNY@(yYj7A#y%>K!ISK76#n(79&oTci3hM6uDY05Wl<>~ zDUP@853Osgg%{iTsIJsqriIcO)!abMwfRXYl}QWoCbBNkjBl0=Hk@j$svxV>U8$WR zy6!g|R7>sHHK)B7rP&UGOI?y+qhP77@!1sncj!n_5}t8S$^A+4an!nYsonabl(zSI zjY_LLfcgh@bzFIjaU5tpq?)kTGA9h@X~jP_=%?B4@q^WQ4BI9zoXGYx7YOMMKfgH% zt&Y!Wh6qzDLqA|NoO5TyYe5pJ7d?48J!jj}#|ssllwhC`o^|<1eyQ*dhRtZHFs-PLzQ(>@Ci0Y|k_-P;;9tDF z!R{C!-V~&;1Bod9sJyd zCj%#28OW4jC#{eDMjH~4fF+fg!!@747YEL(&CHg_UMQ`Q91s4`zk#F`JuPEZFzurz z_`320EZ`&M=Jaj{?TC|F=(;^fPn*&7*I&C8qIW=a+PnR7v)q|u&X-{Oz+y0x6+1c>nh?bC^S3B5ZPxDbK2?Rzz0NsJA!K9n}vR19{{mvkKhE* zI+{u(HkwM~K@OttG)*d*duonR9$k4D+EV3cKslEKz2h{)BYKwrU{4~pl!c%IV{ z+p&JYU^Ih)8%uzKtBi*W<6U;VhijCNLgRXN1$+j}ge_?0wr7~yYC_Gb)wE{j7^-qQ@b2r3JDns(UjU> z)4#f$kxG`3#1fL=0+X;IR7fE?qH4lRBnCC!L?IL9O9dLD-dQ%3=s$^+l1Uo^1X(^q zvsLiX*O5ruY&|;YnPoBprIk(qilpr&g<`&AsVAC7mz1~9sTlC?fR{nj;yIm^iqYmH zo%&;iWR1Jsj}?I4yUQOdHof~udG#8WkjNu;+bKuYx$R~;ZaEP^E(2YIQi6h>P>gnN zHee_j17WR0nhlbZ{1HQcgI|$C5$X=Ba)M~%y=H+eo%0!Z7x>Ex6M%z59frRLskN`? z@bA4l{QGnpcXo@o_rMJTyu#d)ekZ|kG#%|ZPbp9 zt=Hr~LX$+aE7q#AU~wntqYH+dP)QOf5Wpm@hf3np4Q74>WqKQfsgdkJ5W!tjdlBmh zGxYxCfw~5Z`QH8(EO^JBHqoe}6!in3R(?OPuZ>aY)ueN_ZEUeos(}eeelQwzSfEx~ z*`Nzd(lS~x70qZq_9u6X7cM92MU6KEjQv@C9WO6siuFis}SZCMwi&bA!@PjT+qc_ z9c?~Tt;EXPX%x*0yx7YHE3 zzYm{B%_!kB6MPgt`}lpSt>_`iUkW~l_lEXo_^k7hUo&iSUI0#HBZ6AvfDpY%k}~53 z;$l;11s&K$t1;ER`^$kOSjml`Dq_ zut2Trn&LwSfo~FggV_L+pcGm&5CR|ySs{a9Bql6?mQpNC z%S9_q4x9X0bW&Y2QpK@w&~B+4QcjcT60PC{rTc>-_8*NV!Pi(;Ok-MEp&*=)-shLR zswPTW;Ix(_DRzN60hl&AQa_kjqR#8l`)p*5&V>5z0O`hRGm|6Zw*kv^>`p^2PNg<` z=P`E8X+27WAsIM5hUzq@Z4hQHEviqy_7pSSUq&0L4m<0XBlb1A_*mK}GXkbB64lFG*2F?V-6frXs%?+DT5O5Ni z8(U^>WG%orsK0iZtTCUE-UGh)I}l1)=W=N_?tkU&(zMpb_|1Z>c~er#(B1RlPM1B5 zYTWoDH&0pKkD^UMa{~)8_G-+RvlG-0*@kaWY8W~>qPI#8>H-t3J01jPv|=H|U+M@i zY`Og)bNiJ3hH0i(`E|2O^&FKcw%PY&x?*POTbc2le!bKn5mjYanaYIh%%Kn(P!j>2 z_87;^gqQVjj;^&vu6co{v?)c?e4vk)!Htj-8Ovi32`)85;&Kx?hs%XzpuW+p(^S}c zR7yPrG3ZvkyhuitXJo{x6dZ0QA^$PfQS4=ot?r0sw-Fs!n8F#GoqT}5WRY4uD=}N2 zf_BVRR#Gq6k*jbVJvh6agC19 zXj%yz+nqX6(2?bNM;>J~)N_Ng{VF5UV!G(8HYJ}KC6Vcu`X{}<5#$|3N2j6bgcx_EICRSlD+sVrDrTJq+b`)`burad4!P=fC&8&Ml2xe3)!Jc7lnv2cjDAcne;6zV+1jdIdH>ubmeLL^Nh_U zX=oDq&x>LE3qZVtQ?VrqWY3>b1W|ZyOc~JSL=W7F!^r5O`!^!!T?L({Hc6`uJub)E*(Jw@R1gA%XO5BV%&oykp*oRDxi5D#Ihhv1dCP-oB4IOXANfZ{IzCc^{|1101& zRJ8aWF4i`ofpxj9wfw=kv=t6ZMyfkQY26MdSV zVq2d>CZAA5-dL+BhcQzPD}yGg`MrRu*Z`8I?t(5NqF+dp^zpt>pNfT#odyqv3YQwK zW4wX04T^QI_8$7~Mnev`x#Zx%u8CRC4BD=-nK>I@RbnD7v#zl+h`_PYq$4|G z{K?)8oRu6DZ#tP_qjYh9ujCLN(b*UbD8ipmL2g6W+Rh9XC5OTBk^@31eTfy!UJ9-A z!ZisGX3ueU`U}ECKl(!QKea(%rFJ)yB7n|qqY|BP{|T;_kn$y>p*j_Lhjgje7jS=> z2#XucK1N`@R**tHmfW$>Qf2YE(Mg^yeing9u%kqoa!>J5G98uTnugW17oAhqY!*G zo={?ZR0)i%npa4p29VXDWF{dErbK;JTVcp#HPFi4xS+*~c}sIgLMrVn71``!uKRSZ zqz@pJG7vT$_h=Lw73;*6xbOpfp1&E*enhf7#SxeN>(+U_L{0 zaU@tJ+L5q5F+>-`g6%<29ym5|y*MAxFx)=kxIv>!Zf6NDTH3sz9d_Xt;*bXR0 z^7LWzW;}cL-e+NuoUgeEqnQ5;_xJo~2lJMC@qD|M&tc2S~$%6`5~;l^|8>WT#7 z3(zvx|L4OEzA}D>75yMRLr!uF%!9+XDw6pbkvL8+m98wv6mAAMHfBT9XyCo;x>=G= zbtDmPP6^3A$x=zk!;v^58G;%obb3Xn8{7groO+*=BES%R;~{6{dh&0yzyPi{MO53-fMEIIu3pdt$5U<^)p6dwQgFN&wm;Ro4J6 z_|$BJ59C$Dj=6t^17C4s=$8h=Wo{qw=1)ds==jGHG5+ETU!uV-(?0uKAhKJpZ~@3q@)15KYA2kEU5m{-r4Mygtz&3J+tjxOIvD>puiPX?_V^I4#>IC?Rl&NUJ0fm2?HP#+}$O$K7r_5VnHLlNd%@FAqY%vXs?m$pxQ+Wh~7KMYR_bz%FFuKLY50 zPoPsvIs4Qzew;`|)|KSdo4qRR?5`kP_|cb1@Jykv4UQ`GHdYD?eGS-B=vUn$4+2kr zbr8Fc*iaY=aES5U2L1`(el?YSY~I{%_3f4X;kQ@Phd4#1-y`2smtHzSRQ}s-8M4tC zaL&ZGWnyxHv%HtC|6{uD_1pRS+hRC1d=Jgi<F@6FRn!O7l#X|%rnBSGd|EVIY zD*|9~v4HlP?5|-@0TR$;iHcZDH@cExAe;>Ko#}H(Xz}XL8=T>0JJMDA4Vgt=Cx3f) z|58C`(4eSq>5lsbNfu63pI|Tiv`Sk!{p`D_@_xsw+noQ!=f8!8Cx1w`e0o%O)8|Ic zTLE7gV;4PS&nVr(-arh!3M_dLI7#WVn2s34^b^#`+(SwDweT6Vxoim150_GBdR-@# zopJwJ8aJQOB?n=30g+<*2~DCMcd4@Bk8;oqn3o^+Zr6pU<8>AA9r`}-FtWU0$2b`?2pk6|R))Uww0j!kA08hce0S|0*RXv-5N1GX`^+7+oG^%cRW^KQZVP z@Wx$as`_LZJeY>{CeZ!bX!*C;jEzVr|4H(IPQ4@}h~&EM$m)M4S|*EN_1P<<<=@-* znP{9`B5LQ668UD`Q1TD}mv-+Lj2tIjZtaxnbtT@N08qNCIQ&$XBXY-789;*W9AJ8< z5Sp-5g&^?Dw_Vdy%H37l#X@|kgz-LRBSBm$I(i@dUs_cS1V|_C-^kg%;({(0KqBcxT8UynN_e;v} z;B;?n8ivmt(g!E?xwsC$^!v!&*|9d2Q#@wBov8FCes?ZGe~#m2JgC{#mwcxf^)s3% z%JNpEOdacq`eN3;`o#V0*d-0MBI|hr#!4F)IXEhT)H4E}eHs)5A4g&z4vs|cKv5c* z4I^V1dOvoZ4#Fr>t-EX-4@!%G#jpoEfar=1TkqxaPMv{=Fl^z}j0EYZ>bm#yveskO zd54SJY1%f&l%?$th^+L`p>*T{y28((KL;2oXabTP#3F0AxA8&9UJm)o`@ z(NW*(wesQe(R=sQ70^R^bIA~K?;*3=%m|qA zLxGg`57_K?KMh|Lvoo83%6-Th4L#DxuUEP1)$_#WxeN!Xx^-~P+ep2QMlzewP<1@C zIE88P9U;b}MvUT#h!~VJshyqfr|741K%=EcjRQK$w!2iPsQoj9NQvpRhxvn;mU_=I zNSw)K>OEUNf5;0A)%IcCmCm$Z@_Yd-Tba{C+(t%`@t#Sw$r+7k?Vz@@9LVW3WQs9S zDLC_(I0Y-oX!D=EW`b671dK#zu^Oq<;zaEYJge1LxJU-SY9N332BI?Hso@1N1Qtbw z{hZO*{>7ne_;X?l(vvwzV8stp>k`1gKm)lDOqnJ*LNVgPD+L-O@i>YPeI6y_bNpO< zmOJU^dyN-+t@1Bk25x_3M<5REZ+s!-`|o@90<_aYQYNb}8~WD=TD&>&`Cjh15J-p6 z{7FWY?N6WfW^_(l zgfGX6E+rQNuQgZ_hV)X9hDb~{_-Z69axJaA{Doq8Kja|+U`y;QC%@bq`T_)d2}5S} zWuSxL3PWEI2|?PPWMi20AdDo5b%8vp>)9fwF3)K%2Gvj%e_ba$ zaXb>b(dY^%q!Gpv(qHJMzs`|C0K4JmBk`2Q27Ag~dlwxOPpq8VykzGjae7+!{$jgu z=ccMVm)}f2KT!U2%xF>uhSM!`IU}{>^k>f6Su%XBvt(vdYW}au9Wh+~uPs}>Ctvt9 zzkc8D{Q>v*39)^W<>Ywy46CN0pK34eLXMdDu z!?6lf#&-3}C#a6Yn;>Z&EM8 zg0%fn&KxaUrzAo*hppxBCkKlyjD)A+F`AAR!x>}nj6}wnd=U3*ImfoOT3^H1lWf@{ zhx~b>A1z9-6=2Scl`S&7PBmjshL$n#JdB?W+fE9C?mo8=kAYf4OFRS*oY+0%A?tiS z5YlYeKy>yLXK6LV7G-*2cOh#-gu*b;GJ7IyesCJ*rSU~ApcQ*hy~Hc(ow7v_N}aV} zE)@(UQ&ac|IJ7`7PLn#>8xh!9MOIw~n-5Q~a{YtkAYe;Ad{*!Q3u1+3YgGU>e7ta^ z{L&|dE{Aktak>6=#C)f0eY%&cuf>=(-4Sq4Qb{=iRtZ`(N|&T^aMRZn=sJ-&I*Wp2 zYo`eN9N~-c`&oWeI08o^qr&kH8Lbpc6Uk)h#|pfcrA>|;nWO`gddxR=P>zh}w0$5I zMJ0N-9lv|^L$UCBRk-{ifWf)T@jgH8u)9_58GL748FI^o^K0RRNX+&WSEG7#LtJ{;BUzN!;23_kwt zoBuIHgGs_Py_>16pr}C-lQ-O^4@7T(>EzR@=t*lcMo$b>vrh~m+_8DK*dl(YbT8mO z3!hjFx%D#-I+G0Mxr^40E-SI)dXwX2WXL_wGOl7 zHhRW%{9$4nK}qg_7NBH)hS#+651~O9of`WPu|pgUOqd#09(8O1Z5b4_Ed+xBl?f-4 zLC;|n@)$Ml7hggGT=zX4D>la9{zy8Fr4}Mdd)Ttp8=rmDSSRqjD%N%=ldvBOUNhbu!3loHIZ(&DafK zpteySuiLh@Qle(@b?f8PG{tolG>a`#vCcLCmxl{Z5NWdj!q8|*=WjtCFdsD!$>i3S z;KFU=`S2-qq@x*?$6;`ARH6mbw+$Zy4ZWid5rHsI(qRJ_1TXeUkY0l4{5xdB2}7$W z2T{flwqQ%*a&z^Os?h4jr3c^PUL>(knWQHive#5byLq9$KdPE;6Y~#pv`OAZnI${Ln@O)@qqV zgkk%g-4<5Z`;HZ|n7ARVKxM%=kfUjg6U{BxjWHA4IFk}AICE#99n9ZGk?MkDMCD-+ zL=ce%a4(_4irC-<4Mt&;!D%{3ON$wzW{l^C_V^`MCq5ZASm47n`<{3Y zp$BaebSw8vf}NMH+NN^+#WGWA2>Tv^%m=|LrWb0)HW|jWObXc>Qm@os3_fd4VM^Sy zg;(zedNrO?(l+7HkW$KZ4-K-u(o4Y*HK)z6w^*w>Bb^l@wHaa^6nUmsxYPc!IWBN1 zX*-UTTw$S>4Y4Stk5XpwORI!9A&?Zl`D!I|I&IKXH~0> zy&>;5Wm1)KViMh^yr4fUZkpQK?{=nc)5+Lv-kH~njgZ#e&eZMU>vWsleOGrI&wW!J z^$Dg)?=STAK>Ko*j>KgEcTq9DGxGH_Ycbf!geD7314zqjW2XQB<1!<-7}vX_ zxHf0VWhEq}&{^q%+>K}8B|2c28ME9V6zXzk4hvh+d4Mf z?-=n@v16hsaUi_ha3UkAjb17cT@^0UE+=aUy9_}*v>&&HeF7iSA`Tse@!*P8`d|_H zs+^LxnDG~4dZzn)DItMfq%X2gOBy~1MvF{|7Ohjc$t&fBzeK;3ecWQ_RD9M zO}B5g*6-_%^pgH(@+mvi+us^ud5#ue#Vs^CCt3PU=B20Xc0KKnLv;T+?SO}`pk&Bd zKRVk|#&YT)5sqXDL15>VZp41@%10@I50Cnd?%f&ryY-&9hgHCcRXV_J27oFdX~2#9 zD1i|Bs!qt$$bisGc4bR@^Wdd@N=u8I-2Tk0sgI-kpMgpx9C?!knj>DC+RIvmDq*6T z&quh6t{g_l>HDa=F>OHR(8QEfH~Icy`J$}!h#Xy3IwUuhy_ba1?!zT~i+}OfC|(bA zi20T7)23~sCy*d4QJ_78<0uWu7Q%*qFz$}hi3_C`yx1EF74cs_u-!_BnK9^$VZrCB zKoR%O)luz52496&;Vco81FNk5sguHE+}r%pagy?B@|fZ4v3##E4kc_A$^t@`uau%P zmzg_c8sfkgV$_~Aih)n*n|wY|6b+YV0ou+dUGzLI4XgsHolkJjhzpE)QYn6^xi&$O zqKp(WRY@%l+u_v`Y-AKb_?sezRwwmsNMI`D2NNbTd%(5^uwDiK(*D!k$!An25cB4Q z+kEkA0ui)->m6Y?xX}bR{w<1M6UDn&-J#f7XadtZN$U!~jT zPB84lt)BY+0ljpv9^bFLzvH`lIQ5ydqSJqdjn_Yp7Bv=mov_~KRQV^4C>EYoW3i!4 z4aoPIWt0_AeskE*4ZnzAas)O!GTX9Kp>5}dEh0D{X8#4&q*9b}C9V4lMBP3@kyQp* zF?%ZP?sMFI*zdxOe_nTa!FA~caxp{{3 z9eCq4>j7sk{um$P2T^L%L^dpZU8@V+I2k%5LXZNd{`QjYt;CBY-MfeZDN~3DGtO#M zGxK#bp>Brc*Q$nd=#O|Q5Y&Vo&b=eOgrkpXYg9fA>LI4)V~WG8DdR__R(UX8dt-(mnK)Gk6Vvc(Tk*k>j$Y!K_LB* zB_X+|$?D!oSBLP*H>&CD-g?!Yy96T3g+DmOr~{f}0&k2@>SAxP^eBxTD7d=;z@1VT zM#_r{-EUvaotoC6rj1I?Q?8geF`dyoDTlA=Crs}le+ng?hcH20)E00w@!OEnNiR7i z9ry2!gU%Xm#B;T_c6QYRd275; zsb7?+J=7qfQ*4c&2P$`B>x=Zb^Nj(*^KXv$AuD|SNPTvRS)gR8T48Mu5xzA6kcm3%J{pne}_Vg@P)6?+jkw1^=VHb&}2Z*RC5G1Oy z;Dl^XpB|}f#*~;v!53$mrpG3RB8fl+Z1XSHz{aGoi~t*e4U`3JgVP|e!6pMXK*z~b z6673`A~WB)wVQWuRdf4T2=>xz9`!$^=uI_Z&tJ?Y-Bpi zf*p9Nf+O^w+{>K!5I4^z9Nh;Z*zrW5%OPf${j<9hZpj7L)STLdNnjrNb1Um$zyWj@ zRPc>6)BmW2ZQA`ob2HT37Ct3USy!xr2}DTvS9k`yKPV$6z?A@&tdfwo|8C!ZtAyX> zTwRf}_@FPz_iRpF$_wTP1lw-td*(&h0y2KUiJO<^#HA}ZxgNxnF#L`=!3%e+wFn4NGj~M*aI=v@Qj$zK$PwBj6-DYrq}h2Y`#R70^8D zPXXL9FFBAN@gL;d#IO4a|1l{iF*OC4G#4#-8K@DP5vB-3^%$H!GkRkCPpxrFyFO*;IEN!i)91qh&Mk{}!-=fK9)Dfc=6t7BT(bxC&!I9*7R# zdX2Wswa_+V5O^c3;wfl*fKslV9)?xi1F6LqC^;&Naeyf>3HU7{Os17pE#xj5eFUr! zDk2#YCL&q0W)+5HInpfY{`(scY@tT5xf;P1YXqAgM6ggJ7}_KV_NN*S>Gux~e_vTDh3<32CE1akxsP6ghgy@R1@F7a9=j$>oZ-!RG`N>76@@XBg z4bL)t5)Xh~vHcUt`V0Dvy1A|^LjP$lm{Lz=OJYYXz$$=7Dvg=#4|`D#gGaphluRW< zO%QS)b-Jkp^=D@5XQaJa+FhbhzF>va4n8SjxlQ{zqljLmP_{l3lbe?LIK8AeJr z+p>LFQhPILE~ucDr6Q}&G#8@Dc4dd8xnT4~%>~OoYA$xqG#4vXnu~qpnu{!zOsbe? z;qEGy8+FFGq?JtZu#zbrR;m;a`%x(#ncP??9jQwlhfrAE>0}U_uHeyU5B9wIl(Q?Q$T#{0-Ulmdklfu^ ze+#X{O!xnwBKPlA@Ay+U_O$zb8~cCQ@bo@fmf0wyo^kZ*0{=dcbmm_KI*Q3t|L> zvh_Xrj!EX%gHmjLPYZ{baYI;OxR2}gJuNNrleBHgCS2C!^uWfmRl0_+?_vMT-nU;2 zK@NYy#pkmF^7|7$z%n0~B^GkA9Q{Kr?{V*td;$$E?~Qti8UZ>>S<_7&B*Fw zrKkjcaBqPNO3A!t$)4h3ne%&i-H3YB7bq$-UUE#B@)u;28e_sB?)G3t_39iqCUxXY z0Ga{=OLYi#LF=w`zYUCl)uxoFPbkD26A)*Ns9_9t#-E;@ z?v2Y@SJ4*xR9!rKUQ?KP5KX(+y5Dkv4ucmh*rewnCnTG6Gb#HKvL*ZP8SZQqTZR>;N{89HrBUTHC^Yne1S>6aj+-Top-R^Gh|DK&5=0=OB^hXJ`CdoYvpd1U zo|C%cikyx;wNBSVu<+d`o99_V7BuLv0sYv%KD%0mt?P*2Q?`fKKNU(XpL@j&ZFH3ErLLG|XDg z?nDdqdig$$$6lsdr*n2mvT&k)00&mepf5#B)R+dA@S-Lj_l*E!K~xbinN8(bLPxFl ze5Ky&>y2G!B`focUer6goo$2gsQi1JK}$h8Sm z$|zh$A}q#N`;hS-?Ry8HQ#d&?)1mb#|FHHt3FxSc^;83s2z052bDHY=G}WnGe|y~L zPH91+!R}dhBU?TDB=4G0$t<^*-Qr_g%GAV zX_f69huMBMeQ%l&o zF-q5U;zr#caqN2p={0-77!`+8VNUx!Y~<+s(TMoAgX^QdO8>T4sQAEL!X)#w7*5w~ zr^ZRY*2<xYIsZ#ZP-?Wr$ZS)rZBoXWs0WDm_ zM%hocl)+r3L!|{VhKOfZ0EZCQV!n1uX+SAt3QtE*)T6VvpkU=u zsH3C|a$BW|QyuD_341onusulp);Hd%YXkh2PASJ7z2U3WzRbngVbgQ2`I$|?&wZE! zHX6>_mC21%SRoxi;KbY{Uovp?Y<*~w(|ZL90AgYQJrw}4qh8@#rg_;0GWCwuO-2kU zQIa}}t}z#eOfZtsT^*>t z<#Gp|Z2%5LA-UqriiIpIjWKhOfIaGVZ;R>Q#CT3~OyzJnr8ZDWIZD_{taV|$=$=xs zw*ZOG#%-ZSvY|X^N^(-+q`j?S3u-Yle-j9;-K5*35a)uB>>RA7v&fR(1Xz^U2q4>F zf&BC7S#Fbt-XW)h-sC9)IOjR zxV&w5GSbVjN=CpuzT~xi?E*wXF{M1&Yfdv&86N}^jqwe6OZbdOQ+&jwtMH~&cljBJ z>B_?vvP>YxQ#SB3SV%{M#p&DI@nR3tK&y;9_OnG$8w5H2bI1O9$}Blu)*#Ogr*z@$Qz+TPJdU}GVCL7-79#L97Fl20A=(R_VBFw39X zn!nZ6MZ(}Z{IUS3B%m*9<#d}wErG#I&{!^K*Wi($_=7lWHX$)HDvLqTS*B%Ubl7Th+? z#*hR)Dfi*HEHg{dm8D|z))2jc2*SXIS|s+2)$J9r_IlZyQo}a&(l~=bMX%eYWNJA% zeLA$uPte}3Qw8{9J$V^oXt0zRJ3cgBbqc)gSht0nbk8gz0Ycnf)?vjA=p2TXEy4pX z^#*G$F2X}_9q|+Apj>Q!F#veEZZTD=mIw&QlJ03MEHi-HWqdEO({Kd=1xj2U&k~{* z^CdQj{**<3#xs{dIWmbyl(Ukd+_0fsXt&>~9KJOG%j?PEpGyf#Ocexi4TTP*@{lmr z>B$j}EE7v6E4N3uQSL(6A~|3sk^uvEWu(Ox#m{ISG)p#--KV@4_;id5n8!!2Ng*Uf zTl?{!y&r0)>IaG|^aP5f=gWkpo7fD?JFyvqof{--=5U>~HicZN=LU8l z6)O~%INzU=pin+c$%%tEg6BJ(oI7t+*{{TiC8ow)s_HFqy)c(Xw3W4>=eDwyy5vO{ zEt2@{0JUh5Ge=UH0(C)q}YW#xy&O*G?yo}sV|sA zFyw=5IoLEnWbyTcTsr|V*_IN&iJJuKrRZt z;UXP^3mPZ50&X92s}x`!;6^_T3=xB6E71=*?4yLRndj2ln=Np`!rH^dpl^ku9a9&q7kJ42N=NJ1){dsAxER4?%B)p`fMm?rz7_Wwm? z2_Y&;Nlk2GGMg9xf}{}f0zt&9&M^ipRgV;;bf8PAcZrL-#N|d^k|?H2^K{8nC@hK@ z^%I&xZ=mKT1m09X(W;V7scnwv_u9uqmjI9LDv)_ZMS*Xu_f7A8(|b?H)q8}kdJhIm z_|XCBVS+M(L5y2}OqQE`=aEe2e=j7x&7!!B2@+Zk!JzG1(hA@zhQHW0uYG8g$xy|O zZqRdmP0zI*jSc{Nf^plVG8HS?6R>mC)gkptq9W>EVYA8WFl3}9MbVcZ=(7(PVFew* zs;G`A-$j+oTcvX`DdFDB-j`&5Vy`%11-aDsg50%wr9@*6LOmC>t#^xhdURYi3J2@$)`pC}Wkn=ql39A|$OU zaD=XDv_^SRM}*cySzLx?X7te<9@pUk7uMr+X|{Wb>0q=yjh+`PN4b+>glfo}HjNlS zgI!ez-H6oedRH3*y}5$uOeqAY>K6+xQ7JS&5M_l4Q4A&cvAR(vGHS?{8hZq90T9wq zQ9+xMtTz|8gqh-IOjSPhe4sPMEqn(du}g9+-O(;D^;rm+qoiex3J;WM{-o21OEf&BZj)!;4P&z0%Bn zExOcz(Su1MxB+U+2`XldG-l7=VDejnaq=C0A`Hu)kh{UpSCzp}^>B06qz1HY6f0TP z!UP%H6x%YvEd0O>AoX9Zsgu&bnop7xmsPQb(nNCMHeJg3*X3WMWWj2O>DPq?EtvQK z`DS|CeAuZE8^g<)~3*v|I5>E#~p9i zu(xa2!#-@js)wzOqYV2d4I33f77&+e*Z`{A2Vc&$oRAAPqcjJ6)ff{sa zn13)Po0U{U-(F8OE)uQEnF2-^LAxrXL;KdX^){y~Jsq||g2VJI%9rvj_)F@g(k=y# zQr9E;7$51wah+$2Xb!0w&_TSw6x7LgCkteZBm1AKQcbvAG-tLtHdRhNY1R{3h(Q6m zr)ES!o7$)gbBqKL){i^9AIyMNf=Vl|i#??))zf$aC}e*>GC%n+I~8pr=j5FOVL3F$ z3}2mX99Ks`VkW^xKBj3fIu@^-fY^dj_lTA+W#!=q@Fyf+;wNFN?$;3q?r`pEj0I|Q)d;b{l%ciAnhj%v|esMVqreOW$vVW4MHaVi<# z!}PTujS}ZuXiO{97yU*}fE!^@uZW)MDI2+YPJxpL?Ipg7jw6kUIwwr|R(^43mNWRK zhM*&SAAB~+XCk`#D=ch>Kn4Wpk=xn*Pia>CB7!|SE%ag>82md<1v{n%SZBnQ=WdLt zbqENzea^bs=OQ#J;V|exVD#``8&l;yVEBjwIS?2I5Mkhq6X-A~L8oERfnx|dJQs8l zdkM2dpNg4~XSe_t3_5uwr_4+1pG@`|O3Y3>@rxR5aiUY1bo&F4;crff(pN zHUgY2_59Ken@Wv%h=5{Gep${l>>!isG+0?wQmwn_34u-F*q zR$t)ou`lYmZ7{c}oSNGxv5;P&@qmzl++^wnV;5}<;ff%M;SZn-@V7vLp~Hz%x)>Jl zXMTgA)%5%PG8=JzG52AL$dN(Ok3u8n2;vxQ07fPFh5PnHumSwQhLuWm3PXQhCtsOO zupIFIN;Sc>E<^^50*?*bl@VwX1C-qG5s{&u>dQ&xM;QE2W;5RtNn{kjSHha=L+X(h zXQ<7e%8%#t{T_~f=G~5-jEmpb(O-MsZ@>U*C{;XQqUHhO2F?Si&eNkj8P=p%+Qv^gh7sD++aOHjiCFOGNK*`@{U=QA0!Gi3#c7WEx zEYuI_iu4%n;1OU2i+s*M0Z7yXe1;l|Yt;Kx8=muCF72Pv9A_`!PSoQ(GNNd|_`0wg*NN}E}?a%;)zbt4xb`AbTL!k8veY`Bo? zj|m``qz!FM{2ujaV3AU*Yka|_8XEmIg;+zQryAPuhM`G5YeDrBp{1cs_|VXbuN)eJ zq8ggrXs9>U&_KH2CoM7<&h5d}m4zh}n4QJSP(QA&VAnCH{Az>Pm|bmC^b!_I z%`)<%8j!1Iax0*62D>bNg-EmW5BhaTD@?;CRLGJwHRc1fPKEyi;i8*pp`a-mAMLM> zS^o9@`dGo?hIMD$4UhfkD_`_LQBv56pkc@L)`T0%z1_^07z?hNo|3-H1eIt9C|X~U zR!iAVvBHmxC8~KhYoB*9Rn2T=K`UTp>Or$NrgxyF%~G(NKB=4CYDbb%YQU1XAgFa2 z_8>v!E+Y50^b$YvMrF+QTvrKQE*zr@9wB#GeF2x`s&ji&!JOm zS`D%3PTe1n8s2Fx>9GZ#+03d7j<;8KT&OSntUGRao7P{wCmlCO24p8ZwI0jC?s!Uu z&s}+t=4NRC$AnAwt=?QZDqmHot9u9q4E{Y1G^gYUGTFsF_El%tt`cCXn_wd?%^Ur~{i z#Z?d&{&KW{-01Uu34WO(wSL%@nbRLZwo(+*hJ3;{&n4xhK1(yv(vhADAd1`6t8PK( zcH!vWX?=t(@{(4JAa|fBKX^Or)FLM)oY1KqZWE+&s|YXY5o-#dW|`pvk97Th$z&|>{iDBD+AZh4e#$r}?M|w>ed&L}s=;?-U z%U32u;%Isb5o!9HL#TB8nk?AGpm7i^!gQe1@#4FLRS?2!kjoAUAI4i-7lQKO`po0;>PYQHVV28 zBN-Q-%)JP!nX}r5shA^Or2gTc)uvR5pZ$r!tcet~x~ci0>2Ql`R=AM2LT&De1jS%&>hRCqBe0zI8PzbY@W9iK2`7sf;Jv9B< z_&ePGB9IEVKVALCK!Xp^;W3~PZe|>8>b1Mvs(S4#KkPMLXKIFjq{Q16P6J)6hE8n4n6^ z(aVv5QYd&yslzvi&aUi$n1Ge;+nWb3Ss*tr9fHbk64uo{rAmFQKZjWNhma*y7P)M; z00u3YQ$iKc+Bzku|A0aUAb6d-!X4r~nxWtTD;5wH_16en0pkupm=xQh+6C|!@l-jX z@X7J=k5gS|?G&|taqCZ5`E@%{jrb6L%?&*9@&t3PC$let!Dr5{QM=RAwvaM%We*y+ z^oFpQLZqEA%EIi69vr@*n+OO4H9Jc%vVOB4-PX%toml|kNtv!w66VCzs8vjj^nhY& z9F?VNav!+ldH2bC(>u7IRwwD>$j|bifkjcSH&n#38aca057wJ!*Vc&n z5JINjQms5%OE?nM62lVkXi%7kSANY?tHlS%}UQpa&Ha!}^}#V^Q}yzdJa!ld7r zr?}0FFj2%}5-S9dxGLs)erOdSlYdNGtXjfDI$H&_O+lTYuC4URI&i6L_nIQGSv^I2 z1maTPxz1=@EwS*_SU5#l8(gaBv|0TiNY6fi=@PX#X+zk7@^ofce$cK(M$RCjkbrHv#7tFd^MxJzRIdjX2;O!;kfq^vp-`&Cor>f) zxtLZ~0SG0P#1v!9W@rarjf(+iBl9m7H|NMcu(W4qq*)9hf=Q8aQ-HJB8WFxD0dkWd z#=K2wzGUe2T6A-(f=H(WuQynK<1*5_RhO&nJiN&ArMR6p?RMU+gLWR{$(888g>>9n zOGnoT2BXqTBN)&0LB%y8&H&ycG zX1IKqALQ>h1x{hC_`5hcr=cNwWKnhX@s|F_hz+nJNNwb9lpz^$U!e@ ze6|$vZxkhntd_p3T4UX&?pVvj&#Wp~Z5Laq3iC!-I*(SQ-CSPK-5U3HAY^t1ta0XS zu6KLE*N)?vR5mQF0kmr|3m^pcr;by@{_GjrwIbTJHlkgt5-^T-85pW{Y}iHseF?QC zGEI0WofxZ;*b8J$mc7$xrX-I^Pluw_vbyu7y%vffWBEdO3Y+JcDQ4c>&^-JOpyn4J4 zf3Sfy{>a$lM#W8S)x+iDTlEM^B`lqW`_)_J^*1QE8@tfAb=#0P8&jEXPlaF)A zqvhU6$$d2t_UU$-TnV*>w%|XQwRuV&tp&Af|1v)aj1y{$1>`OzSc9<$35-JV09O*v`g4q~5Q{zZR z33FK?Q=E_CUK8%lEhc+n9(E|3Ho%oT~@82ILDkq7v5w1@~#Mr*r9hX?Lg9 zGghP-l1MrnLswR?to$6g$G|!I|L$D|e4DPl>(3j0fEAl{Wnsp>h?*Mp^Lyym2LFor zXi;mlr*p4C5=d)G0R{7_A9)wOtNi1CXpl=>N)vDJ50j5@;tQX&U;77XcCY7;1CMS7 z^fyaCn?bagJK^S8W!ZKAu_g3&7&ioCu?=luk%I!-G6XfJi2YF9h+`2?=nOyPeHX^q z56v$6y2JS0d@kTZ#vBE-(&LaO=Q*;0!GZ6gTllf~ywSanaEb07@#Dl|vhPE+zd76- zDV9=<5l4=Tsp1m2h!dqXmw=9mQUyFudLvCYpLBE`(kF21kE#T)$Pmhh+!wANvbeYG zxcmeM6zZhH5e~gtQX%M2JnDsv4ccfClf6zDmjA{4&fQ*HWuPHdf(324EMQDSifBZ= zvZa7yNN!>rKm+-3Ewj6xfJVotSybhoU=RqFp!f%BDX1=XFf4hMd=O%HwOp3?3zu}B z6(jj-ymDLIuIqpj&kMByF z3in_#l9q(f;P#U4$=8n}Tr^rz!;eZ|BKa}fuakc;vNw4`jqgf+o8r@S;Q!LbBTc1V zN&Bx*jIWR>qNGcDQ%!Hmt$(UFYYX(W$Oa1fTJ~hKCgryhyIRN)KfD)RI5lq-i0b50 z{}uqJ`2?GjYG7fQEH?;xP8?Cm9XI9$2HaZ4LFgROQ1Tbb!&@P~&Hfg_n zh6H1le-$r2C}sqxHV^2}k+6qYRJ~9v^|9=`EM{qrzGI78ueF$F-hI6V7{NFpTUM^u ziaG$(FW!(vE-^8rP}JA?SQGM^Rq~ydM#~VaTU0E}X`pf^vIr#^z?!6*_}7%4n+m_v z>TR;OFaovQ1zc@29^Im3Ft#ai&BToa1~(qc#f3K*W!rRt?4wNjLi7WMZo!KH5_n z7d2qmQ(@)5$RbwmPTtJ!Nq&~$2t)rLZh!Vl4CVffU*CwW=>WEBD~|Q#I@n56>rmq+ z@1O7w0E<@@DJtO5uH;uo_vV)(A9+4;-qc*xv1$~S0elWft{nR@?yHuZCj)cT)@FC z0#1!|F*ZR~uPM1PJQOVh_3GV?#9Q6z(=NRM4dYPcFun#J#DQ#JOyHn1rvJTSOm`*! z=g7TRPdnVGdL^x2**MjMjOoTx4MPuX%^<@yF${2Y6>X-2 zOp7Vb#5KRa*kqA`W1F%idspNY~c_N)j6p7!&)Zn6xu+Z;3hvs9S5er?R$7BO?1^ISD){h%k;A=QYQ*1wIo zS>Ng-Cu5!9U%|fx{%u7ac{TTgdTitt>Tco|&W!R={D@?UHpdE921Pa|6A7%9aGmw_ zdV6J8p7fZE%eMOhCdw6_p1+pSXK3M|2+sitJGb~@pDazDNnGM?7gzA`Z@)imUxUFH zL?J-*>=8v(*}(oMz_JMiMK>UG-yxb%^4;5tZNZc#SrKocmOL4c1)X{l_dR+#vArTi zqC~p-gC#nyXpwnk;Yq_y@->Wv39!r9{@|p0ptzV{+^K{2-?*omL(Ev+9ClvE4I`(n z+`@y;6go@PmTYAyyDPy~#whNizi}52XKHi!H29)ra^qybg7bc)T+jNPOcI~T6(>Wm z!Pbr22v>69Y=tWmu7pfL-BLmb5ABQ$kotrxAsj$FaY@y|wz<{E6@W6n!U;;l7A4I| z&2iAcO4=4*48jPli#xz5xdKM{H34+>9;ZHlKs98j0q7droGJi4R|DuT8-Si00MG!d zcP$O7g^}1Gq2UN5j9;wSjFjJa+cTEE z#f%ZnT}!aHoH0>IwM9g%V!~tkf&S<76+hdFf~a``C@aE$hmp3(0M{$;Jx|m;(3{{P zfaS&|Ze(^~&=B5=Y*kk4FO$!xbAKN{N zM4H({8K$w!N;s?$Vam1$YNouPKdkPtk{dZWW(U@YD$_Cc;{3uHc5AX6!!J#FE_Wz_ z>Pm?=2Adq#RvsN#TmThqLtzQev&@+bBf3B>RUBc7CUaTA z>Q@EX+3$T&SCqNPPs5zAX}rkZOEors10g*^^hRIyCJYs{aoH<9yOzDonPGTc3 z^wt$(WkB`<Wo;Q-K13)mjYVfSL4_9*a%k|(d8<+m_z~Ha1cqDHzc(Q0i)eJI>T}g`Rk_A&?WGpxMy*=wQPWiIB4PBES4V5uQl!jM{jItRf3Jj#5ij0!q1Y zq&LKokY$(6ExANM6KV%WlnWHcgKy$2lc(?|f#=&T#6Yb|O20_H1y1r@%h2GaDW#MK zbxS?aAx{#2Z5eq}iksoTN+nIP&Af)~bqyP|Q(jOFQ9;FWBO8({sHx6Ww7s{n#B9<+ z0x8SDQ-m)iR(eo+F$lkj&=}J|5Yd%lyd)5J|C$kIGV8 z`afz8mx8!Qf{u&bT%N=2_`_!ZckVAH!Ekgq$riK~TNX1BYxsc>CKN#;oY~xBMyhR~ zmA8TSd1uha3JwD644vU+4nD+nn(R#&i=3;s>`iX*($wBW>#f}D?oG6)PpP>#X)>dx zYxgZ~RWF0vPOE*FwVF|?vC&)2_f@v2SO4}+o3I712m5pBn={d!=Edm{sv?pTWp|3( zR3=DN7XmZEEnW`Xd;V9zmCd8pEnZDX$W>9~ThbMhZ!G1-li zgfczE9Ze+Ipe56o?bk%pF@#P(++Rq`SCEaZPkGDu<$~6tFu^2)4#njuVJ|=7KkCn! zc9@n!>Q08-2-Ek6X>&?_h@XPOUHl`ivRLHb5Ag36{@ugBDgNEgzj;D8#wr6-R|6D7 zoG$>W#N-b$-(C1A7k&>qQ2@zEn1jki@IQEW_HA8R0em$T?~_~mw@3s(LjH^!Dx?`y zO3j1L!)xM~@#S}bUPIjj4A3ayjTWdd9a*SZMd8jct-!~mBo+y2b0;$(-cCoJ#{;}x zEkC@Wbs@Vcd^|2R?1ruqCUJ!GriOC3`O4O)!)G7TF$ue=tp?dKSUfcxv86Tc>POI@ z15CFqPf{n0mtU^%G2eYeAXSN`d7qqt^n{RO+?STQgc|1Wrd8xDERJ6b!E_{hYo9i0 zSkIS8aAJ=`NzxO&$3f!PI9LWo%u}4_GI&Vf*wLnZdy^$tB z`$5}>=d77i&q*abm&R@;d-Db^S6;3>it3*_u@43H3YY6QYAX9{?w|VpP}w`>;^HHU zSY@0+7(OJ9FwX^sAf_xPriTY?2kHP*ZbqhTc?DQdVKydvKNQT?`ytIu&6Fcc-t}Iv z0bagcV3%;Jp|JxWQtCZJT2SmV|1^*s0 zOeV}brT&WrJSrBztm!u-%LIRKybX4_k+)%h-I%wHN8UCr`|rBE4bA!n+>QRr3K`@y z8r&nUiO|${{FF{9r!BLYA9Sv7We4aLN6~C zRoK(Jt01ig7FzGt;uf*IT$0XY>=dCSDodlkH)Xkxn0!@6&3w?@G-OvQwg%?Co;j4U z6a|czg?I>f1%KbJKXeG;gJN;MjW#T~VR}rm$E?jnn>w`lELk8xWOUUQ0Y}g$XOwdr zV=fFoMCkKaxXpgdRH4s%}7B~9k5g~qkG%G@k6WGsHu?blnRLeeB4SlQOZKrDXe z4YYb0rYI5esSfPv0FFTF?(7>%FAGtBQv)wK0aaIie_dDBhhNbZE&FR+rEOn|*I(1s zX8EgnqjPWicXWqY|BAnn{t8zt*Yua;^%vsxui|8qU+|l>F0+H;Hz+n#)d5uweG&c-ATXuHSUr^OrKq%7`*sv6z5dDEBz{cz-CwR?@+wMi(kommPyp^|0?$% z)cyJNrTp&npo+WFi}~L4N4@w0#k;+T7d^d`;yv2-gE~@9X=h0wcug6uGP!-|q?ATD z-(Bf3DX`!~z{s%)afYejn?3IM@cjYQ=NTTW(lOSDYu^ZHYJgz9w~ zlqOrNA#Z^ULJ;%?riWM>D?dy5B`f>N%$H*sgwHP$Gz>vcqr?|mz>RSQc#vL_U}>O& ztEyVX2OLdvnXswFLlsh)Yjo!j4{~s)A;;60^2mt0VPr^^dlLgA4GI6)bfhAE`*I2f zYonR{`brANtR8(eWh-9&=u2dy(+4lHNa3$50mbh@&0+eUD>&0@a=o3$st6;ylUH&gYS{KQhEl)A`^If(>mt6gf1-oT z0LCc)Y?I0kc|OGDcGO(15x9x%b{!rEzZ7qK6pl%yU#0knin|#6-uz*|`x18#>E6W@ zE}V;FaR9Y0fv=OhQ*By<5%NrY@jknW9inIW{a|MIri)yF!JYn{_QYvL5OAHDDf~QSYF{s+&4l-i{U?h(*$?~x-lyAy;yq*H6+ox?)-&#?GrTxukUu+k~Y6s0u z2-F2~8qH5Qi0MccIxaieas^Ux%oT{py(;F%b`5Wg??L%SYb*cdl}^a9y~&t#zS`k9 zT27joFuohlpp0`kdkkBMJ+UsJrngqdhmthQ8|aogR;>KiYw5iSN(Zb+`ljFeR{x$H zq4wT)`uCU&zxSK{d(sWIvLp>UCs*s`ejv#)M=rh9=UbG5FMAy@#59`cnq4s;u^ z_K-vbS58L*_V$&fcvU!6Q9ByK0!wN57HvBbjt2Cylzl#F`Lnk6%z5T-)2d5vq~N{_ z1Ks%Y!ac<3ido46&b7EVwe^|;7s)-zALH~<-5$76jL_DN)N;Cs-iZ_hGz)=u_T5BJ)`b$_VfLLLrw~S0TQ;V0*!i1j0Z@h61tWYQ~cTjB%lThkYMf% z&!sm@zQXZb%7=keEm#pV8qtVFt)0TGTY1~Zjko{OM&3T3 zH1Dp>^->Shdi5#whpMv z{V*t@jj3+0<6A&46*|BGj;Z9*^9d@E_IPZ}5Wwei-nbNok$fS-%Fd>)VJ6d(fR+A)@8EwS`j0mqCz-_#xB8nI7uME5(FWLvJ3WDPj( zSdMn?lFZ^K#!Zr$VawBmrxw-Nyjqf3poB>>)nk#6vX;$&me{^Zl9_X?j-N2$eT5{G z_lmeiV<~dXRdS3XIUNb=l$a3wH|qW1#^7>OSH`|8`vzRMny;bkzwH43*g)d4#^>ZZ zaf^(o+AClSSNtAWxWdL^R5H+vi-n4d{gqs7EZmTZ4{)*cEx6b_@&1O6aJnXJNX}@V zj5R-OSUn;of=Dl3su90WbNvsyCfd75_DBo@mdzE^=pRdf5vbxm^Pj7H=DU)gr)UQX z>Jg&0dPLD4sg?m@%P-ZmahudN800&OV64YxL=DSwUZ{L|;5IBomNtwGmZODJZCf=A zw%4?qW*t|7(f|}-3G2~4Q9r}ZJ@P4s@yliqNmEh^6U&QKXW9vAb$=ChSLa1Cwa4{h zsx@yR#<9f#yIiJ@7>M(lNlD9R;fuT4Q({wusO zI$zrzP%GjMJX~LY`YfL|&zoRaTl1NMBg<{VbjSno28R*gIiypprt_Jn7D5Fh|E49| z(Kae$f9%bIC;u5RFT|8B)Lg^%Ap^y0DHfq4#X{7J4DTQju~BPtRW_=0e3`A(QVH1F zJJbE3>^#ISws+GRFH@?9pejswLBGe1mwV*}TdOGdH$VTdY5IgOI#0o-A@;?~t zymTEu#iDCRkV_LPp!I?3F7#Lmc_mj{A{T^o7*qOT2p4k+PLO;Ut+!e*p#o905qd*< zf@-{)xQ&i<--)|puaWNpo5mtf*r6?GB5m3Hue&!UZlr4@Zk-5e`&HjN+J@bTwn=zW z(Y6(xwyhXx8--5}%$l|j8Et_jTYL3v z${Xcp&X(BBHpA0o{0bJy7ju67f6%FURAuRzuTV{vCU1o#7sR4*F;^Yn*FI}}-wLW~ zg%X-(kZur`_Cb+F)I*R-v15*V&Wp*{q*=wy$(nhT$_?tX^nkKh@y|P(7VZr2U+JBA z>3OVmO#;y9J@0I(*5fqYeCZ3!#Q3Peh#5&j{AN!ZHy~q}?inMUn-8A({`Q04*&gj^ZRq!FllxX`TnKYCt0LOzsWd~ebOj%>0E-m-r z)YrcUrn#!pUOr9V^ZQxA@DU{56S-hkc$33(H)9{Bt1>9JGoDRQzXMP1MNR~^{k@|R zg_y#s?;0j*$w6{Isa+^RIW`ys?+gsWF@{0d+H|wm(I5!G)F3#qTE>cc0t=33r!txy z6{FpF4I@mJ8WDC_=5{hFa!L%lQ^Ody8e#Lt*p{x)=&)JFirqk651UuR_LJo$&P_J% z$XcGpOLoM@>dEr&bsiYQ+r8E1ua_ITl8W7;s@Y8q8jvD5VE!52J_58_0Q@nb~6s)T5SXSJ)xRPCm@Kx0s)I zC~O5(^bOnyoGZd7^!J%_E8rYwMF#T*!=s2GXh4Hd&Qei1GZ%CXt5=(@zUNC^f25Cd$G$OJ0 zzmLG1u7kkhz^fz?amFb=w?&d?l4+0l+#?+-JlpY@?6!S8=3XCHIvrIW7Y>F9#R^_Lp`_w9bj9HXa|U@py^(U0NMP;|fMsqw#1&V~C?hV=zau%V2Nw&}$c)YSCy?5rHBC ziRzSOZKF4CBr;wq{27`{%34{So$yBQR!92%C&+Y@gj_|))e zA=Y@mb~Qnj653RHakLzgFsHcD69W`bDHcOaoN=%6W}s_aBcaQ-tJ7wr>I=Ow$9Yor zWGlbhd`tl@4gm0Dty&la7mL3$h=>u5xU`Xaf?Vy=EMW98+u{=9lt(5`yQULxES%9D zUI3-f7Kow3Nk)t=`D!#cmS+3Q51rd+ zi`!)IW#xQ~DFPXatxTs?QzZ0~8N>i$T0BdQdCpNcIx>&7I;oGuezs~#Z#5*Z9Hi_7 zQ{I$pNpObJZ5tMK@&hVSpv`v07*UQ(f7`Fv8_lvy(!0qU>F>f4I%z$u?YpqrS`X{M zuM+n9_|jj-Q?xq19@vEyd3?v$!%%Eh52Po|ZiJh3d*k9CdIZ&pLt!+bCesifn5MR; zcN5cL3q-r|irD751SwM80g=dug58QIV|bPC_|aJ9Re(9&yCpgZrQGl$Xa_`m#fXh$ z82xk&g-=i=is{v~HzqIdB(K;Wbaq=s4|03M&bB02&~_i3+_-vETX7{g8-SscFS%0| zcnF+I#Lm|P;1n=J`)Y7n2&|+*+|^gOj0c+|)J*NrTAl1jjAk0~F9O zgkcN$B%BMylN-khxL3r+z%HbD(4QQHihIXy40`22k!fzhw740GBo2myNC}HHLzm#l zlVEA@&>p1_tBa@Op%h6D*s0&NNy-boGWLtb{Yzt$>RL zjE4z~)~5q;ypaBe-7bWZRxN2~i}t(V3EvkTiXFItkdGA&w!UoK_(BZpQqchf$v$jQ zMYKXlfY}k1p2}N7Qt97E?bx0C0j35VYj^U$5vKK|>Qqnkhox+ilEVS5pHT`(2e*fW ztN^cE}P+4&N!1*aw$}%$sUEvKrfvat`1~6NgOYG*B0; z73KmkV{3u#GU`%Fx1tP2RgIr^8U?vbRU##>@|aRG^^IC$Rq6&`mBEtGnK2-K{=5c4 z!U;OVnUYM(G+Fp>;!0_?S3Cgh=(V2)NT@gS#s_Ap>TAF$W7|5b>}-VLKt}v{682Nv9o8*o!Pr-JWCb$1PUuc@(>T@$wU$23+Y3U zjXtp8yDDa{?a_KwOkT%-ZY~L@1B)!cZjJVFcPa~~e4U&&aefVRv!md=_F8cV&XL)W z79W7aiZb~p+nTc#&8JyJLS1J)idn=$LX0XzYuzGGh%8RUS^)^Nx*@W7GvW};eF1As zV(~dyWdPyXc)bv>>v~Rp**ByN^ZatWewS<5bZ`2){k}K-LtSb2i+Z1-on=_j5qod? z9sel(U9M=t>2JsD{}`{oK~jFv!50m|toQ;&Y*Ojz&t=ly?e4SOCDXFry+Co&i|Z7p zy!ZxPnDOFe<39H8cPY;4?p^d(E@LbHA;mkqNUT=6;6*~Y(g#(XPhUwDZAWoeirGN8 zofR=Ah_|yMCPsRvtaEgh9CY05M7+5SOrgk#qXp!eUT?TFTBwf11cfT)O*(pFL|#pa z661415>7mLIeehbs2}dA^6ZCMFD-sSY4%|<@<70INlD5mE?|JzpmYu!uj~(oX~_(L9!>2yU*7rzwV$|^HyEE8Xe zCObWAg?X`!gVfE~Ip+-k5CiHNPyv&`p;PMYxzn_It~9?F!5aW8?gfXHfY_b9D&A(g z>{FA^rxy3PV?G)2_6@OHEKz4I)LBF}>Env9ZmjzE3aWD03M4{7$UPnkxOiu%*4 z<=dsWL3-OjZBXJDb-Z9C4dGTK4;YoB6<$cmbJp>YlA#&49-PL9xx>s-<4uSd@L@FU zcnEwLWqxa0XdrVVENm-KLF{9o@q%1t?C&vf;npw@nx0Gf$BiaWM^D~X^wZD=No2j4 z8;u|E4t}{SO&$kv#OQ*62IYcy$F497#_v}m4MDCnR}!o==)%wgTo7QaTo7CaTxsNl z!aphmXy^slwZPj^ARt%nMOPYwi>|bG&M_8prKJuzrEJ0G5+0e)YYLQimlsEPlRTUZ z9X*+gauif>iY^F2-auG;(nRBM%;-v!_i_{;1aoY9GUus-xz#L|ohodbNu(uYg2`uM zeIr(&)=6aODf>97xH+3)eesi=f8{gXo2$7OP~N7SOK-}ssk~rXrZ5L*PH!XV2o8aCz#3BaE_1jL^8^=; zY;HrGLmsxxrpj9JU5j&o$Lvnt7`ey83iT-MKT6{xbwqIv&XBxY7JUg<%9o@*Ue7mD z4MD-RHck3_treOLQDacSZfTgz^ChoA=|~w~Oloap?pyma+}&X)l4k2X5eykI6q2t3N_Agmf?UYvlK|y1 zBL=-;MuiR1bn4hcb--WdRd!8?HkU+_ku9`KJ3AK2M@t8@(Y{wTlw1NFH#;Jo51@$p zH=fI-HoJ(*>`+||&GG@MSb+((&`tU9R3Da?7Luu5iv4PDRNW|FltE_3k6vN(y}g1W zP{7#g?`dg1$cqC#vJZ)`l>>~|?NhwqbN-2HP>gcA|#u#2{=ZHo_KoZG^2_>BCkvk&$zkPE!+jLm#}r zo&Eq}=KzKY5EO3JK0%qLW6pF5U#c=N@6Fk_7lhCO#5MAX_i<-&A1sT%$-Szru%ytC z1l`)*&Tl#sBr!O_dEnOk-dz3DD*%XoghUQ@8E*MULR#RuD{{MG6qcB4HqDnZh|g$! zwco)QE(Q&uuo!caYB<207^}Bp?on8e(47N+<%ogOWd9Kk5E`V*=W0{Z(3D8ir{zG! zgHw|Cr$jYlv1>|TMiJfBiaTO3)WB#>iJ`lOQY6M`g~KWQ*8Co52E zJyQyD=8!ZgR~?TV&&v%!6c3~}z}alDCss1-B|6>xfYd`S=rHBQOo16UW6p5N+HF`S zOotWgR{KZO^ch58|1@4}676e?tj`q3EK}_MGSHW=!TY^AOY45x%PD9uf(eQJSJMoQjmp#4mLcl8`4Ybz&0IjnW9ES~X1QK4#1- zP4h5NnyN5Vw*3K|g=zUERtvB8^1-3iYuE!Ma(8wFTr+Pg^Pu(WNmjC?ceo3gJ!+!P z%r{YITHpYq?fW@OXpbReU~j27ibUW(rmqhvQkCm*rY+S+OpRQ~*@}*B^A}J0nF_*6`{ERg7PdSfz?t4fIttOj!*J5Tfp4rP|MnsW-Za-S#6k zkvS^%-%u=}L8viD>g zl)pBrs+cqOLX6T`Z2|?$zu5v>(z;3QXzYPZ5^y4&VG6F!v;QzY$6I61At+dr9;yr9 zj!k?sUbS7(xC;Vw{Tq;McR{|fVRIX_C&jQ@I5PgD_4Rceq8eEHZ)RyrY>bnubf~x_ zm|%riwhKvB^h>;ywO9j2CfS@3XoxT(KZ7y~stESU3e5dnyjr6SLHr>$SER^YI}=aoJ6-B?jscDJtLOE~SfxD#hW25i!HiVv zPIXw41@BFovpuaoF;I8t9mr!es2z8M#Ji*|T0dbFn#6 zmk_udV+gEGBt)JLv=5MbP1nwxCkun85NU8sg^&r-5UbmGc)xzyqL>{TECd- zSKG%j=c7_w8y%hz%q^2y7+NEs(Wpla5eddgxzveR5eK0HdXVo<;sJz|;JmtFIWU;7 z4nMi*s9r7{+?O&70-iX|5Th$olTO^8PbP`J&sJ6H5CI5uh@}Lu$%of)Zfge(0vK7( zbHFg&^AJyN5VXFk8^DJJLsbuSn1x=3`K^9}REH5VJr{2bkXVy+XwtVi~KqCuPx$elq zwVU!TK6aY^9X@~h@R_ycCr_My;#~DI{W-RL=KOKJMhz!^n!Y}foI8Hv@$>a74AH;; z%!%{I4}bc^xpOB@eM;c?1#}2O@J@u*O zu=9zqn?K3X#~!1#_^pIlo$x_a#NXHGGMGlx$z z{PRa2Tdg0@^UAU1^O`uDu;j$KSU4x(JaI}`_^DH1D8zUC=-Sc8z@FsP(NoEzr}S>b z%Sexhg<{N6jl0XIA5Tu4dOSI`{26<;oIG~=)UoAL=a!RWr%x@bhR4^Ae(JNU(fh>0nAeGQ?1Pp=dsG48b0jrg8=~O|$G)SHJImDVAoBYo%uO-PAzI z>}6;rn06h^?&W?x#Ik$QE3)rz?emy3I7sw)`>Qpqz1Ci@z4khL?{nr14A-S6ODtHB zpAV8bZqz7{Zt)Lv>&X&wA51`VKQ#pjjf;{HKO-SXS%f$tHzk2l5SDo7i0teUnZs~f z8JC$cAuD6Z*o>i07XQEiCu`G&X&`9~C|7|*#2Qphva#Xe;lY#?m(XOOWY^x_AtJJ4 zr_NE)UAo4^I-J+ryLFGV$M;A`?3v`c!Jd3$FPkmJra)@%n`}4tvDxfRLEoknzggao zJp0?z2HbM%z(FmD;#N~`n%L6^+ix2(G~@PR!$*v?-!baW%+Xn6YhPnQc(zj{HtfF+dRkdv3>}lJA{>_&JH@Co3V5Jf?4;e<-XIrf;aHml8c;QK6s{NqIX9H zH`~sxqW-+{RZ*s?W!%lqmST37e>_v#MPe14#hw-RKb|RxDuca={cvbtW#>b@{7_6W zE5nYj^<9QNKjVv;W`(`lucdx^1-B@D&TD*A&UvA)|AEV>(4}6oH;av_9-U&EfOEH7@ec=YR=p9NQ~6!% zPZiSo3JRq6(s-y58K8ZY2=Scz^1gOdgmcH&4kZh%HF;6p0NINAUW2ms@$=O~)VhoP zq1iV@MKw?Z)khYCDy?9Z#<4I|%uihloYUxBX0i%oB}Ra}DX4~`!92*}Uk7rvpXYVe zVkm<|7C9;Bj2KsRN#fvQ8DQm)Ldn{}Mg19<5~KP_%U%VQI(7N+0XTO?}$i0_0YV_2>LnR#a4k zdJ7qx6s6u;MGU>GF|=Fc3!Fpo zoC(yrNfyoriAcmZ0&ykOV?n8(I`>ACHTdKDA$=YsH#d%VoTh&gdh8u^WX+88eu|&i ziHcOsrA)IaJXeeIiPDg-gOGF_QeqT)j7{U?2sVTgArw7Y^;}T;Vl9GIsaUJR{E7xf z4zGxQg$hzJ9}$u=r2Cn=Ixrfh-QB(++t0olGm}P)M9HBvn(foocA=JY7XB23u>S;yDfmZ<%x8~0n&O9?t ztZMa+6d1%XPGf~OK3}DBUVntP20z^{kkRuG6l*=PztpK&*|}z{H7^4VJio2j{}LZ! zoP*!ir?I}7r}+0cRt1#S_0Sb^gzj#tV zrHz>>yfAWj-GNzOY1ddH{P4^rXpqLCI%ukOtpitw7LV$%zM-zoitpCHy1uS%D!;_T z&jK~QLSaNB2@KRY(G3C8H~26ht%*?Jqd?}w^EJ=}#P2Q)zZ5XMYiAZ9eqmuDK>QTP z5`jH|c|eu|G(Z$0Mny%D1h;$w8chsClttm?0rciJRy@jw;Keozu^@-G%tAh@r?6C; zc3KCK!$^;;O)P}OAq=gq*X(pk)6$>=F`@}k#AuCr%}${2Npk*Fd@i$6Lgqob(}4gq>myx?}aG(zVX6Zas|geYRPM!mrlY)3;kl6cXC zC}OnuOTkN&oBQBOwGnRw9VVc2Ja-u^gRcQ=kHF#sQ2$v`hYl-gBScYhs zL@#o1kC)QW?+l9biGA6?Svho{13v>E295@P4EzLG0iWrhUjUDS-vW9JbQx$R@C5KH z;7Q2(W6grForqlm{E%}~B9Z{;dEA6Cdq7tNbR{uq3TR>y?wsHUg3o~MFgQ3M>k5no z-Uy%Gz`npfz|k)2fHmNUK$ZmDgMI?=Z@_q9 zBxLPhM6E_Cc{)K*M?K%M$mc;|4`4hn9f*4bI|1L5z|+7o;C}evy08P_4*`z?KL+9k z!tgDO?Euo5wib5pgWn8#5%r0luh&L$LQi97VGLUCKfw+lrJy+ix#3!}vbIc`CLVX0 zbYue)V`D5+t2N|;Jb&SAQw?VaRx@@I^l9KTz~_J)fm?wD{b7F{@SpAUJcRrp#vA+% zH^r>O!Gm}-4}u)JI2}ZV_fEO#$-U(i_G4kCYKgD@UXlmHPc5=AaR%~C{esza6 z9iEI>7x`4jXF5FF>Cc_lM{S7yOPA-OHg??-jtOwesRo_ zn58lDgq0H?o3wh;nn`OXKbgBOcl(srroKM)jj0FnKAm=W`e)NC?mjZ(=*(lYDrZ;S zb8gO0o}cHQzxS8?f6u#Ea5=dlnI~s?#(3`XWP8SX#(8o)<2@5R6FrkWlRdefDW0jG zJkK(=oUOp!ZzWsB9%HLn*@B9PysL}XEPMRXwJV>Pzwy3}4{dsQ)54NPC68=gym`s< zOP_!9g?G2?*|K-*doPy1@afhQ+fHu#$K3B;`u?RK3eLZ9;pK}j|M!(kuhehtu_I}x zYggu*D_YvLq$Btb5*a#WEL?a!J}$nxah^Bn3DezWuO^#k;JMMH(mO ziPjWXOb`h~9oVj;%7?MTpGvHXV7V|5&2}A>JEWmLcm^``)Cy&iNHhkWY1OvCPe78m z8v50u9D`i3YbXjBDwKr=q~fwB(Os_P5Ev!k66ECM7e{LAEkF~zW6d`YcDd9=sgfIV zg4+J-TtoB4lq|n)VwU)pesUh!)T0?6tk=;wIXAfEoSZb53(L^oFYdQs^5R_4H*LQT zPvb^CD$%<`@px8PT=Y>@QF3u{yP`C?a6Bt6E{bGDW@BBft~l2QU7%bNQ9v&(<+MFl zxk$Q~U?j2h{mn=ECQz6oVc7Jh-TU`fRbhWO^Qo%J-aqV1?5bAAL9CMa@#oiFkd|9D z+JW@lm@$8@%?C8(D$cCY`WdF3WuVC}*P;lbi;{8^6!})xW;b!8%|WVtwe>n&&nbwb zmW^)H6r&kh*>G(K(O0$K0$M0RmBUjF+4PrmWgPuB1XnB5@*vuhJd9C94&ptIF`D38 z5;D-%P-lPC=H|wJo0nl^LtPD3ZFXEkgsZTYgfWE=`}Irk%3A9!fAZ-K>{YGD*zWiJ z{O`+s@DawNZ~506PEo+qYSeEH(Q6F+wPU}#cA;7t>Bry>^i`j}64QGsdP~&`sDXGJ qq;(9mBY1kpl;|=D!8SfO@ajiEpjFFy^YQxR5BQ@3e^elN1^x%d#T4EE literal 191204 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

KByJdN~;_cb@Y5n5f)Zm>u$+mnw!G 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 literal 584238 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

s=QZZR|K@r56xarGWL&>Zn+h>%Bm-+ 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 diff --git a/packages/language-typescript/grammars/common/highlights.scm b/packages/language-typescript/grammars/common/highlights.scm index e4105f7bb8..265165b26b 100644 --- a/packages/language-typescript/grammars/common/highlights.scm +++ b/packages/language-typescript/grammars/common/highlights.scm @@ -663,7 +663,7 @@ ; Named function expressions: ; the "foo" in `let bar = function foo () {` -(function +(function_expression name: (identifier) @entity.name.function.definition._LANG_) ; Function definitions: @@ -697,28 +697,28 @@ left: (member_expression property: (property_identifier) @entity.name.function.definition._LANG_ (#set! capture.final true)) - right: [(arrow_function) (function)]) + right: [(arrow_function) (function_expression)]) ; Function variable assignment: ; The "foo" in `let foo = function () {` (variable_declarator name: (identifier) @entity.name.function.definition._LANG_ - value: [(function) (arrow_function)]) + value: [(function_expression) (arrow_function)]) ; Function variable reassignment: ; The "foo" in `foo = function () {` (assignment_expression left: (identifier) @function - right: [(function) (arrow_function)]) + right: [(function_expression) (arrow_function)]) ; Object key-value pair function: ; The "foo" in `{ foo: function () {} }` (pair key: (property_identifier) @entity.name.function.method.definition._LANG_ - value: [(function) (arrow_function)]) + value: [(function_expression) (arrow_function)]) ; Function is `storage.type` because it's a core language construct. -(function "function" @storage.type.function._LANG_) +(function_expression "function" @storage.type.function._LANG_) (function_declaration "function" @storage.type.function._LANG_) (generator_function "function" @storage.type.function._LANG_) @@ -985,7 +985,7 @@ body: (statement_block) @meta.block.function._LANG_ (#set! capture.final true)) -(function +(function_expression body: (statement_block) @meta.block.function._LANG_ (#set! capture.final true)) diff --git a/packages/language-typescript/grammars/common/tags.scm b/packages/language-typescript/grammars/common/tags.scm index f13b82313e..1087fd1741 100644 --- a/packages/language-typescript/grammars/common/tags.scm +++ b/packages/language-typescript/grammars/common/tags.scm @@ -2,7 +2,7 @@ name: (identifier) @name (#set! symbol.tag "function")) @definition.function -(function +(function_expression name: (identifier) @name (#set! symbol.tag "function")) @definition.function @@ -36,7 +36,7 @@ (lexical_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)]) @definition.function) + value: [(arrow_function) (function_expression)]) @definition.function) (#strip! @doc "^[\\s\\*/]+|^[\\s\\*/]$") (#select-adjacent! @doc @definition.function) ) diff --git a/packages/language-typescript/grammars/modern-tree-sitter-tsx.cson b/packages/language-typescript/grammars/modern-tree-sitter-tsx.cson index 3246caa399..ef5ec0c217 100644 --- a/packages/language-typescript/grammars/modern-tree-sitter-tsx.cson +++ b/packages/language-typescript/grammars/modern-tree-sitter-tsx.cson @@ -11,6 +11,7 @@ comments: start: '// ' treeSitter: + parserSource: 'github:tree-sitter/tree-sitter-typescript#v0.23.0' languageSegment: 'ts.tsx' grammar: 'tree-sitter-tsx/tree-sitter-tsx.wasm' highlightsQuery: [ diff --git a/packages/language-typescript/grammars/modern-tree-sitter-typescript.cson b/packages/language-typescript/grammars/modern-tree-sitter-typescript.cson index 915db3625f..ca41eca0ec 100644 --- a/packages/language-typescript/grammars/modern-tree-sitter-typescript.cson +++ b/packages/language-typescript/grammars/modern-tree-sitter-typescript.cson @@ -11,6 +11,7 @@ comments: start: '// ' treeSitter: + parserSource: 'github:tree-sitter/tree-sitter-typescript#v0.23.0' languageSegment: 'ts' grammar: 'tree-sitter-typescript/tree-sitter-typescript.wasm' highlightsQuery: 'common/highlights.scm' diff --git a/packages/language-typescript/grammars/tree-sitter-tsx/folds.scm b/packages/language-typescript/grammars/tree-sitter-tsx/folds.scm index 6af5811c2d..eb7e13f254 100644 --- a/packages/language-typescript/grammars/tree-sitter-tsx/folds.scm +++ b/packages/language-typescript/grammars/tree-sitter-tsx/folds.scm @@ -32,5 +32,5 @@ (#set! fold.endAt lastChild.previousSibling.endPosition)) ((jsx_self_closing_element) @fold - ; Exclude both the slash and angle bracket `/>` from the fold. - (#set! fold.endAt lastChild.previousSibling.startPosition)) + ; Exclude the slash and angle bracket `/>` from the fold. + (#set! fold.endAt lastChild.startPosition)) diff --git a/packages/language-typescript/grammars/tree-sitter-tsx/highlights.scm b/packages/language-typescript/grammars/tree-sitter-tsx/highlights.scm index 0baec15ffa..fed286e5d2 100644 --- a/packages/language-typescript/grammars/tree-sitter-tsx/highlights.scm +++ b/packages/language-typescript/grammars/tree-sitter-tsx/highlights.scm @@ -1,69 +1,64 @@ ; MISC ; ==== -; In the JSX construct ``, `FOO` should not be marked as -; `constant.other.ts.tsx`. Block off identifiers within complex JSX tag names -; early to prevent this. +; In the JSX construct ``, `Foo.Bar` is treated as a +; `member_expression`. We don't want the ordinary rules for member expressions +; to apply, so we block them off. +; +; TODO: If we wanted to give these segments individual scopes, we'd do that +; here — replacing the `@_IGNORE_`s with scope names. (jsx_opening_element - (nested_identifier + (member_expression (identifier) @_IGNORE_ + (property_identifier) @_IGNORE_ (#set! capture.final))) (jsx_closing_element - (nested_identifier + (member_expression (identifier) @_IGNORE_ + (property_identifier) @_IGNORE_ (#set! capture.final))) (jsx_self_closing_element - (nested_identifier + (member_expression (identifier) @_IGNORE_ + (property_identifier) @_IGNORE_ (#set! capture.final))) ; JSX ; === +[ + (jsx_self_closing_element) + (jsx_opening_element) + (jsx_closing_element) +] @meta.tag.ts.tsx + ; The "Foo" in ``. (jsx_self_closing_element - name: (_) @entity.name.tag.ts.tsx - ) @meta.tag.ts.tsx + name: (_) @entity.name.tag.ts.tsx) ; The "Foo" in ``. (jsx_opening_element - name: (identifier) @entity.name.tag.ts.tsx) @meta.tag.ts.tsx + name: (identifier) @entity.name.tag.ts.tsx) ; The "Foo.Bar" in ``. (jsx_opening_element - name: (nested_identifier) @entity.name.tag.ts.tsx) @meta.tag.ts.tsx + name: (member_expression) @entity.name.tag.ts.tsx) ; The "Foo" in ``. (jsx_closing_element - name: (identifier) @entity.name.tag.ts.tsx) @meta.tag.ts.tsx + name: (identifier) @entity.name.tag.ts.tsx) ; The "Foo.Bar" in ``. (jsx_closing_element - name: (nested_identifier) @entity.name.tag.ts.tsx) @meta.tag.ts.tsx + name: (member_expression) @entity.name.tag.ts.tsx) ; The "bar" in ``. (jsx_attribute (property_identifier) @entity.other.attribute-name.ts.tsx) -; The empty tag used as a shorthand for a fragment: `<>`. -((jsx_fragment) @meta.tag.fragment.ts.tsx - (#set! adjust.endAfterFirstMatchOf "^<>")) - -; The closing fragment tag: ``. -((jsx_fragment) @meta.tag.fragment.ts.tsx - (#set! adjust.startBeforeFirstMatchOf "$")) - -; (jsx_fragment) - -; The slashes in closing tags should not be interpreted as math operators. -(jsx_self_closing_element "/" @punctuation.definition.tag.end.ts.tsx - (#set! capture.final)) -(jsx_closing_element "/" @punctuation.definition.tag.end.ts.tsx - (#set! capture.final)) - ; All JSX expressions/interpolations within braces. ((jsx_expression) @meta.embedded.block.ts.tsx (#match? @meta.embedded.block.ts.tsx "\\n") @@ -74,31 +69,16 @@ (jsx_opening_element "<" @punctuation.definition.tag.begin.ts.tsx ">" @punctuation.definition.tag.end.ts.tsx) - +; (jsx_closing_element - "<" @punctuation.definition.tag.begin.ts.tsx - ">" @punctuation.definition.tag.end.ts.tsx) - -(jsx_fragment - "<" @punctuation.definition.tag.begin.ts.tsx + "" @punctuation.definition.tag.end.ts.tsx) -(jsx_fragment - "/" @punctuation.definition.tag.end.ts.tsx - (#set! capture.final)) - (jsx_self_closing_element "<" @punctuation.definition.tag.begin.ts.tsx + "/>" @punctuation.definition.tag.end.ts.tsx (#set! capture.final)) -((jsx_self_closing_element - ; The "/>" in ``, extended to cover both anonymous nodes at once. - "/") @punctuation.definition.tag.end.ts.tsx - (#set! adjust.startAt lastChild.previousSibling.startPosition) - (#set! adjust.endAt lastChild.endPosition) - (#set! capture.final true)) - - ; META ; ==== diff --git a/packages/language-typescript/grammars/tree-sitter-tsx/indents.scm b/packages/language-typescript/grammars/tree-sitter-tsx/indents.scm index 3a12735e84..c94f7188c3 100644 --- a/packages/language-typescript/grammars/tree-sitter-tsx/indents.scm +++ b/packages/language-typescript/grammars/tree-sitter-tsx/indents.scm @@ -34,7 +34,7 @@ ; point, so the usual heuristic won't work. Instead we set `indent.force` and ; use `test.lastTextOnRow` to ensure that the dedent fires exactly once while ; typing. -((jsx_self_closing_element ">" @dedent) +((jsx_self_closing_element "/>" @dedent) (#is-not? test.startsOnSameRowAs parent.firstChild.startPosition) (#is? test.lastTextOnRow) (#set! indent.force true)) diff --git a/packages/language-typescript/grammars/tree-sitter-tsx/tree-sitter-tsx.wasm b/packages/language-typescript/grammars/tree-sitter-tsx/tree-sitter-tsx.wasm index bf052655c28ae2f6f51fb0b410b62edaddae591f..5f0cba914fa853ea3385cfd8c0ec8308d79db864 100755 GIT binary patch literal 1482951 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

YJ6~xA3Wy|0Z=x;VgAtC_$IhDK#ci=du+2T#}+r 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 diff --git a/packages/language-typescript/grammars/tree-sitter-typescript/tree-sitter-typescript.wasm b/packages/language-typescript/grammars/tree-sitter-typescript/tree-sitter-typescript.wasm index e34b771f8801700687e1998e2ed2b48eb00c7692..86cca1dfa8c0e5d98a4dd2294cd895b6fdb891e1 100755 GIT binary patch literal 1429463 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 literal 1111466 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

xn{!*t{<8L-FYBdU3;ctU|5aw~ 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 From 44ad31fb12e73a0f14935e0ab8171add0ff5fd9a Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Mon, 9 Sep 2024 17:33:38 -0700 Subject: [PATCH 21/28] =?UTF-8?q?[symbol-provider-tree-sitter]=20Fix=20spe?= =?UTF-8?q?cs=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …after `tree-sitter-javascript` bump. --- .../spec/symbol-provider-tree-sitter-spec.js | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/symbol-provider-tree-sitter/spec/symbol-provider-tree-sitter-spec.js b/packages/symbol-provider-tree-sitter/spec/symbol-provider-tree-sitter-spec.js index ad8b7fdf3d..37e2d8f741 100644 --- a/packages/symbol-provider-tree-sitter/spec/symbol-provider-tree-sitter-spec.js +++ b/packages/symbol-provider-tree-sitter/spec/symbol-provider-tree-sitter-spec.js @@ -179,7 +179,7 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) + value: [(arrow_function) (function_expression)])) ) @definition.function ` ); @@ -211,7 +211,7 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) + value: [(arrow_function) (function_expression)])) ) @definition.function ( @@ -255,7 +255,7 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) + value: [(arrow_function) (function_expression)])) (#set! symbol.context "something") ) `); @@ -303,7 +303,7 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) + value: [(arrow_function) (function_expression)])) (#set! symbol.icon "book") ) @@ -325,7 +325,7 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) + value: [(arrow_function) (function_expression)])) (#set! symbol.tag "class") (#set! symbol.icon "book") ) @@ -346,7 +346,7 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) + value: [(arrow_function) (function_expression)])) (#set! symbol.tag "class") (#set! symbol.icon "book") ) @definition.namespace @@ -369,7 +369,7 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) + value: [(arrow_function) (function_expression)])) (#set! symbol.tag "class") ) `); @@ -391,7 +391,7 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) + value: [(arrow_function) (function_expression)])) (#set! symbol.tag "class") ) @definition.namespace `); @@ -415,7 +415,7 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) + value: [(arrow_function) (function_expression)])) (#set! symbol.strip "ort$") ) `); @@ -438,7 +438,7 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) + value: [(arrow_function) (function_expression)])) (#set! symbol.prepend "Foo: ") ) `); @@ -461,7 +461,7 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) + value: [(arrow_function) (function_expression)])) (#set! symbol.append " (foo)") ) @@ -485,8 +485,8 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) - (#set! test.onlyIfDescendantOfType function) + value: [(arrow_function) (function_expression)])) + (#set! test.onlyIfDescendantOfType function_expression) (#set! symbol.prependTextForNode "parent.parent.parent.parent.parent.firstNamedChild") (#set! symbol.joiner ".") (#set! test.final true) @@ -495,7 +495,7 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) + value: [(arrow_function) (function_expression)])) ) `); }); @@ -518,8 +518,8 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) - (#set! test.onlyIfNotDescendantOfType function) + value: [(arrow_function) (function_expression)])) + (#set! test.onlyIfNotDescendantOfType function_expression) (#set! symbol.prepend "ROOT: ") (#set! test.final true) ) @@ -528,8 +528,8 @@ describe('TreeSitterProvider', () => { (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)])) - (#set! test.onlyIfDescendantOfType function) + value: [(arrow_function) (function_expression)])) + (#set! test.onlyIfDescendantOfType function_expression) (#set! symbol.prependSymbolForNode "parent.parent.parent.parent.parent.firstNamedChild") (#set! symbol.joiner ".") (#set! test.final true) From cdad4ffbbeb2a926e2a8cf6cf3db3fd9c1b5c91f Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Mon, 9 Sep 2024 18:24:23 -0700 Subject: [PATCH 22/28] =?UTF-8?q?[language-(java|type)script]=20Update=20i?= =?UTF-8?q?njections=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …to conform to new `tree-sitter-(java|type)script` node structure for template strings. --- packages/language-javascript/lib/main.js | 18 +++++--- .../grammars/common/highlights.scm | 3 +- packages/language-typescript/lib/main.js | 10 ++++- spec/wasm-tree-sitter-language-mode-spec.js | 45 +++++++++++++++---- 4 files changed, 58 insertions(+), 18 deletions(-) diff --git a/packages/language-javascript/lib/main.js b/packages/language-javascript/lib/main.js index 015c289b65..6433360293 100644 --- a/packages/language-javascript/lib/main.js +++ b/packages/language-javascript/lib/main.js @@ -21,7 +21,7 @@ exports.activate = function () { content(callExpression) { const { lastChild } = callExpression; if (lastChild.type === 'template_string') { - return lastChild; + return stringFragmentsOfTemplateString(lastChild); } } }); @@ -29,8 +29,8 @@ exports.activate = function () { atom.grammars.addInjectionPoint('source.js', { type: 'assignment_expression', - language(callExpression) { - const { firstChild } = callExpression; + language(expression) { + const { firstChild } = expression; if (firstChild.type === 'member_expression') { if (firstChild.lastChild.text === 'innerHTML') { return 'html'; @@ -38,10 +38,10 @@ exports.activate = function () { } }, - content(callExpression) { - const { lastChild } = callExpression; + content(expression) { + const { lastChild } = expression; if (lastChild.type === 'template_string') { - return lastChild; + return stringFragmentsOfTemplateString(lastChild); } } }); @@ -95,3 +95,9 @@ function languageStringForTemplateTag(tag) { return tag; } } + +function stringFragmentsOfTemplateString(templateStringNode) { + return templateStringNode.children.filter( + c => c.type === 'string_fragment' + ); +} diff --git a/packages/language-typescript/grammars/common/highlights.scm b/packages/language-typescript/grammars/common/highlights.scm index 265165b26b..97a8614f41 100644 --- a/packages/language-typescript/grammars/common/highlights.scm +++ b/packages/language-typescript/grammars/common/highlights.scm @@ -110,7 +110,8 @@ ; The "bar" in `foo.bar = true` (assignment_expression left: (member_expression - property: (property_identifier) @variable.other.assignment.property._LANG_)) + property: (property_identifier) @variable.other.assignment.property._LANG_) + (#set! capture.final)) ; The "foo" in `foo += 1`. (augmented_assignment_expression diff --git a/packages/language-typescript/lib/main.js b/packages/language-typescript/lib/main.js index 339496549d..9ef84aa33b 100644 --- a/packages/language-typescript/lib/main.js +++ b/packages/language-typescript/lib/main.js @@ -30,7 +30,7 @@ exports.activate = function () { content(callExpression) { const { lastChild } = callExpression; if (lastChild.type === 'template_string') { - return lastChild; + return stringFragmentsOfTemplateString(lastChild); } } }); @@ -50,7 +50,7 @@ exports.activate = function () { content(callExpression) { const { lastChild } = callExpression; if (lastChild.type === 'template_string') { - return lastChild; + return stringFragmentsOfTemplateString(lastChild); } } }); @@ -92,3 +92,9 @@ function languageStringForTemplateTag(tag) { return tag; } } + +function stringFragmentsOfTemplateString(templateStringNode) { + return templateStringNode.children.filter( + c => c.type === 'string_fragment' + ); +} diff --git a/spec/wasm-tree-sitter-language-mode-spec.js b/spec/wasm-tree-sitter-language-mode-spec.js index c9205dbcfc..0fb41f2473 100644 --- a/spec/wasm-tree-sitter-language-mode-spec.js +++ b/spec/wasm-tree-sitter-language-mode-spec.js @@ -766,6 +766,7 @@ describe('WASMTreeSitterLanguageMode', () => { `); jsGrammar.addInjectionPoint(HTML_TEMPLATE_LITERAL_INJECTION_POINT); + jsGrammar.addInjectionPoint(HTML_INNERHTML_ASSIGNMENT_INJECTION_POINT); jsGrammar.addInjectionPoint(JSDOC_INJECTION_POINT); let tempHtmlConfig = { ...htmlConfig }; @@ -784,7 +785,7 @@ describe('WASMTreeSitterLanguageMode', () => { jasmine.useRealClock(); atom.grammars.addGrammar(jsGrammar); atom.grammars.addGrammar(htmlGrammar); - buffer.setText('node.innerHTML = html `\na ${b}\n`;'); + buffer.setText('node.x = html `\na ${b}\n`;'); const languageMode = new WASMTreeSitterLanguageMode({ grammar: jsGrammar, @@ -800,7 +801,7 @@ describe('WASMTreeSitterLanguageMode', () => { expectTokensToEqual(editor, [ [ { text: 'node.', scopes: [] }, - { text: 'innerHTML', scopes: ['property'] }, + { text: 'x', scopes: ['property'] }, { text: ' = ', scopes: [] }, { text: 'html', scopes: ['function'] }, { text: ' ', scopes: [] }, @@ -829,7 +830,7 @@ describe('WASMTreeSitterLanguageMode', () => { expectTokensToEqual(editor, [ [ { text: 'node.', scopes: [] }, - { text: 'innerHTML', scopes: ['property'] }, + { text: 'x', scopes: ['property'] }, { text: ' = ', scopes: [] }, { text: 'xml', scopes: ['function'] }, { text: ' ', scopes: [] }, @@ -893,7 +894,7 @@ describe('WASMTreeSitterLanguageMode', () => { jasmine.useRealClock(); atom.grammars.addGrammar(jsGrammar); - buffer.setText('node.innerHTML = html `\na ${b}\n`;'); + buffer.setText('node.innerHTML = `\na ${b}\n`;'); const languageMode = new WASMTreeSitterLanguageMode({ grammar: jsGrammar, buffer, @@ -908,8 +909,6 @@ describe('WASMTreeSitterLanguageMode', () => { { text: 'node.', scopes: [] }, { text: 'innerHTML', scopes: ['property'] }, { text: ' = ', scopes: [] }, - { text: 'html', scopes: ['function'] }, - { text: ' ', scopes: [] }, { text: '`', scopes: ['string'] } ], [ @@ -931,8 +930,6 @@ describe('WASMTreeSitterLanguageMode', () => { { text: 'node.', scopes: [] }, { text: 'innerHTML', scopes: ['property'] }, { text: ' = ', scopes: [] }, - { text: 'html', scopes: ['function'] }, - { text: ' ', scopes: [] }, { text: '`', scopes: ['string'] }, { text: '', scopes: ['string', 'html'] } ], @@ -1057,6 +1054,8 @@ describe('WASMTreeSitterLanguageMode', () => { '

' ); await languageMode.nextTransaction; + expect(buffer.getText()).toEqual(`text = html \`
\`;`); + await wait(100); expectTokensToEqual(editor, [ [ { text: 'text = ', scopes: [] }, @@ -4822,6 +4821,27 @@ function expectTokensToEqual(editor, expectedTokenLines) { editor.displayLayer.getScreenLines(0, Infinity); } +const HTML_INNERHTML_ASSIGNMENT_INJECTION_POINT = { + type: 'assignment_expression', + + language(callExpression) { + const { firstChild } = callExpression; + if (firstChild.type === 'member_expression') { + if (firstChild.lastChild.text === 'innerHTML') { + return 'html'; + } + } + }, + + content(callExpression) { + const { lastChild } = callExpression; + if (lastChild.type === 'template_string') { + return stringFragmentsOfTemplateString(lastChild); + } + }, +}; + + const HTML_TEMPLATE_LITERAL_INJECTION_POINT = { type: 'call_expression', language(node) { @@ -4833,7 +4853,7 @@ const HTML_TEMPLATE_LITERAL_INJECTION_POINT = { } }, content(node) { - return node?.lastChild; + return stringFragmentsOfTemplateString(node.lastChild); } }; @@ -4856,3 +4876,10 @@ const JSDOC_INJECTION_POINT = { return comment; } }; + + +function stringFragmentsOfTemplateString(templateStringNode) { + return templateStringNode.children.filter( + c => c.type === 'string_fragment' + ); +} From 44d7734e4cdc7e657e71e2045140fa642d8db618 Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Mon, 9 Sep 2024 23:19:02 -0700 Subject: [PATCH 23/28] =?UTF-8?q?[language-gfm]=20Migrate=20to=20`tree-sit?= =?UTF-8?q?ter-markdown`=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …at new repo location. --- .../modern-tree-sitter-gfm-inline.cson | 2 +- .../grammars/modern-tree-sitter-gfm.cson | 2 +- .../tree-sitter-markdown-inline.wasm | Bin 376797 -> 376209 bytes .../tree-sitter-markdown.wasm | Bin 377817 -> 378449 bytes 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/language-gfm/grammars/modern-tree-sitter-gfm-inline.cson b/packages/language-gfm/grammars/modern-tree-sitter-gfm-inline.cson index 7f44177667..dfa36a58af 100644 --- a/packages/language-gfm/grammars/modern-tree-sitter-gfm-inline.cson +++ b/packages/language-gfm/grammars/modern-tree-sitter-gfm-inline.cson @@ -5,6 +5,6 @@ parser: 'tree-sitter-markdown_inline' injectionRegex: '^(markdown-inline-internal)$' treeSitter: - parserSource: 'github:MDeiml/tree-sitter-markdown/tree-sitter-markdown-inline#28aa3baef73bd458d053b613b8bd10fd102b4405' + parserSource: 'github:tree-sitter-grammars/tree-sitter-markdown/tree-sitter-markdown-inline#a3481e1db0b5f9aecfa7124d362a6485286a8e72' grammar: 'tree-sitter-markdown-inline/tree-sitter-markdown-inline.wasm' highlightsQuery: 'tree-sitter-markdown-inline/highlights.scm' diff --git a/packages/language-gfm/grammars/modern-tree-sitter-gfm.cson b/packages/language-gfm/grammars/modern-tree-sitter-gfm.cson index b2cf67c6b5..57f0754820 100644 --- a/packages/language-gfm/grammars/modern-tree-sitter-gfm.cson +++ b/packages/language-gfm/grammars/modern-tree-sitter-gfm.cson @@ -6,7 +6,7 @@ parser: 'tree-sitter-markdown' injectionRegex: '^(markdown|MARKDOWN|gfm|GFM)$' treeSitter: - parserSource: 'github:MDeiml/tree-sitter-markdown/tree-sitter-markdown#28aa3baef73bd458d053b613b8bd10fd102b4405' + parserSource: 'github:tree-sitter-grammars/tree-sitter-markdown/tree-sitter-markdown#a3481e1db0b5f9aecfa7124d362a6485286a8e72' grammar: 'tree-sitter-markdown/tree-sitter-markdown.wasm' highlightsQuery: 'tree-sitter-markdown/highlights.scm' foldsQuery: 'tree-sitter-markdown/folds.scm' diff --git a/packages/language-gfm/grammars/tree-sitter-markdown-inline/tree-sitter-markdown-inline.wasm b/packages/language-gfm/grammars/tree-sitter-markdown-inline/tree-sitter-markdown-inline.wasm index 04618d113f52e89ef675d39dd0198c76e5313214..26a20f33fc7a701210a08ef5379364a7a3e9eab4 100755 GIT binary patch delta 1059 zcmbVKON$dh5bo;7ygJ#*V+iYx#vbG9qJ+hRE5=JYka$`2BB(!L5hEyxH$f8c;NxWI ztBN;e!Gn0%g9=_f35plN7x@V)2rI-#i$ryKBDm=o4dy1K(bQxmvhQrUFe) z0M`&o+WdbhSfXSf)1SyHW-`6MlLy626efp+=Dl{FS|BVwi94c%-h^I*5X9t&ne!16 z(=UW8b2i1s9UFJdz0zLuHf*1_VIi@UX}HuNENz$|V8RqrT&oU#{7zqq7$f{u!A&?~ zVpAtW#GQx0cxHpX9$fABHT2r%Vxbxf#qtc(c^gygarX1D)I2OSj%OOuBay-Vqd}xx zrLA#@VF2594=x-0osCNJW delta 1408 zcmbVL&ubGw6rMLTo84ryNs~%xO@B-pQwvf{RjNdhP9Z7&fJ!MMUTSDpXj3BHR?uD= z?4jN?%pnKSvj;tS=s|@32?~1iCtkdG^Pp6zZ+5FDO%6rEWZv%k-uHcP-fVTd7&Nv9!OQIS1vBjEYB9pW!IaT_1xl$%hup8 z@`OeXG$ZHSI5RJTe6R{Zq`+=H*Pa|xUk_^ai52Fhi9>m{uYy|O79fyLr@(5$|*)r{p zoOvAvwnoSFPtYL(d`y5Or-4Vo4qp2y7^I}1%lG6W0=PU>a6oYNDw;mVC11)rR2Or- z6HITzQjQQL;z)#Vn1oV}uxJP=v8>w}?Z`ViA8O1qbQ;K(Ej z_!lmC!bss8w$)~)4P-_6kmkhQ3bt@w7@pvsgbCFX>+NEKI}DM=E-bu@&a2C@+_|6) zzupHlv|;SAX=@oXXu)jEQEZ`4eTfwyuSVkSXZK^=XKHPHBOVy1Esbx*Q^3{R_&~k= zi1yWBKeET7Z{H5=+l@K!?O$yx;1t+@O~L1F-OP`+-t&42(5e}SYB@4Qh~!>yd$eyG z2aiTr+?K@t1;E#E{5!DJZ>dru1D3j%$PP)oAc6{G0jnLr_5{~qa2?4Y?MzUT=VMG? za!Y+kbjBE#n1bmu2&I`al38HtNV4Y~LuqY9k6ePUS^&T=L=c%SX=NFo#BYGeT&W-Y z=fjiZJC#c1V_d+~yW_Ba$wLovy_VdlB>@-3#c=V>TGCj3T)T6DAK1)3Hx}t{6VWJ7 diff --git a/packages/language-gfm/grammars/tree-sitter-markdown/tree-sitter-markdown.wasm b/packages/language-gfm/grammars/tree-sitter-markdown/tree-sitter-markdown.wasm index e248b733553711ebef0bb515606aab89e5121bfe..ee99a043dbfc82be96eff2f2988fba6cc116b9ff 100755 GIT binary patch literal 378449 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 U)b$70PrW;F3-((VeB(&|ALgem4*&oF literal 377817 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 Date: Sat, 14 Sep 2024 11:28:07 -0700 Subject: [PATCH 24/28] =?UTF-8?q?[language-html]=20Update=20to=20latest=20?= =?UTF-8?q?Tree-sitter=20parsers=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …for `tree-sitter-html` and `tree-sitter-embedded-template`. Fixed an inscrutable out-of-memory error I was getting in an EJS file. --- .../tree-sitter-embedded-template.wasm | Bin 5525 -> 5447 bytes .../tree-sitter-html/tree-sitter-html.wasm | Bin 18346 -> 18385 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/language-html/grammars/tree-sitter-embedded-template/tree-sitter-embedded-template.wasm b/packages/language-html/grammars/tree-sitter-embedded-template/tree-sitter-embedded-template.wasm index eec102a4607c58822a3ac8047ad0e4abbd4741d9..66a8cadcaa4c082348e6ffe5b51a3aded15b760f 100755 GIT binary patch delta 874 zcmZ{i&2G~`6oqY%?fl%Cgrxa#k|vpn^B>ZPvO%JS+(ly+eFYF=i&y{;5S{=bS*#IH zfDjMCV^nMqLR|n05IfE|6_iC+*WbD4+_{?Z>&3_Ut6$!E>HY5)-r#G&4Yp#fovG&- zk3A!_VejtSW@LHbraO5cfMD*Wi-bXKYE)#~#`v(@hGcYA$p2Jvt-o*a@6)lKd3 z(W$>i8ErCJZq!n)2*UA3d2(sL{y7do%S0W>>lY4@-uKPcfqdrd{JdvedE@`s%EmUz zm5YnmE|91N@io}9^X?>S&JECkHGyW_17#b4raS^==Yl5O2W8_vIZqNbW&+P`@{5zG z5li6A;yG~06X4Y1H(<;K;Kbs0;DC$3vBe)i!+GGyUQZ0^XydQBxl=rqlR7PjjSdxTHiJLNS+=Cg-4JQ`6^RBRi+9r?+ywZI8GGUzd2evv*KB#0sTNSVhPZ zX@_&SU4Qo%$%^B!YkUklPE?r(a7Kh15mFMaO-LeKmyku9qbqX62D#b;!ZQe&w^nt9 zwZJi~RpJtyA#oWcuz!V+K5+#_5LZz=!oMw~OIS}}q891heEl94J;S5H>zcqOs~DHF kFJfhvYrqhAqL8cueA2!NNC)gbE!z`ZJG1=ZP5!6+10F4TCIA2c delta 976 zcmZvby^hmB5XX0IuM=)&6P)ijiQ{#?lgk}Y!hteKBn=G`9TFuC)jdIY1SE?GprS@J zh!@}`kdEspD1ZWV70l)iV>qhO{^mdb9nX&6&tEK_|8U-wU!Og5lDB(OZQWHYrj9TU zIY!089$JAXj8DS2=}Y%Xs=V;-WExbewfd~lY_-Eqw-@zelMIHV@pYiGk+H9D#10+Z z_f{N6>)mO&*86w>3~sNrlWsk;b#YhJ>$>Hy2n%}cbsL3gw(^@C7b5HlF zm3~lRjl3P^`5OCm8{MW}`cs7gDI-bl+&LLzlzvo=fc!k|WAB_6@-)IO(=c86wMR9q zLoCR>CB5@Sz(5GL^(f4jbTRzD%(hykR;E4L=nl4lyH@Ed{}5cqZpYwh$?d17ep5#2 znIApw0k!$zxMMo1N^rrl)%$c>>8`Q>qEgA zI~+mv%=$!ZbkUmfvsu#$f39zL-6kZ}_{dIN#HL)uH`%3z*d=+)9R+V56u;vy(lmqf diff --git a/packages/language-html/grammars/tree-sitter-html/tree-sitter-html.wasm b/packages/language-html/grammars/tree-sitter-html/tree-sitter-html.wasm index 2d2835ca4c38ccd28385614934ec2effc9f72f48..d0fca0826ef09e3f6cc90a8ba7ca9b72f94bbfb8 100755 GIT binary patch literal 18385 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 literal 18346 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 From 99521c79f320b50b6a2cf3605df919e3b1bb21bf Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 14 Sep 2024 13:38:09 -0700 Subject: [PATCH 25/28] =?UTF-8?q?Prevent=20race=20condition=20during=20sta?= =?UTF-8?q?rtup=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …related to updating open documents’ syntax highlighting as grammars are processed. --- src/wasm-tree-sitter-language-mode.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/wasm-tree-sitter-language-mode.js b/src/wasm-tree-sitter-language-mode.js index 58e891b1a9..89e2c57f74 100644 --- a/src/wasm-tree-sitter-language-mode.js +++ b/src/wasm-tree-sitter-language-mode.js @@ -3031,6 +3031,9 @@ class LanguageLayer { if (!this.ready) { params.async = true; await this.languageLoaded; + // While we were waiting for this language to load, another update may + // have been scheduled. + if (this.currentParsePromise) return false; } this.currentParsePromise = this._performUpdate(nodeRangeSet, params); if (!params.async) { break; } From 986c697f10043be4254ade393b4872f65043ae16 Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 14 Sep 2024 13:49:36 -0700 Subject: [PATCH 26/28] [language-html] Update `parserSource` fields --- packages/language-html/grammars/modern-tree-sitter-ejs.cson | 2 +- packages/language-html/grammars/modern-tree-sitter-erb.cson | 2 +- packages/language-html/grammars/modern-tree-sitter-html.cson | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/language-html/grammars/modern-tree-sitter-ejs.cson b/packages/language-html/grammars/modern-tree-sitter-ejs.cson index 4b54d8bdd1..ebec49e1ca 100644 --- a/packages/language-html/grammars/modern-tree-sitter-ejs.cson +++ b/packages/language-html/grammars/modern-tree-sitter-ejs.cson @@ -11,7 +11,7 @@ fileTypes: [ injectionRegex: '^(ejs|EJS)$' treeSitter: - parserSource: 'github:tree-sitter/tree-sitter-embedded-template#203f7bd3c1bbfbd98fc19add4b8fcb213c059205' + parserSource: 'github:tree-sitter/tree-sitter-embedded-template#v0.23.0' grammar: 'tree-sitter-embedded-template/tree-sitter-embedded-template.wasm' highlightsQuery: 'tree-sitter-embedded-template/ejs/highlights.scm' foldsQuery: 'tree-sitter-embedded-template/ejs/folds.scm' diff --git a/packages/language-html/grammars/modern-tree-sitter-erb.cson b/packages/language-html/grammars/modern-tree-sitter-erb.cson index 1e7d28e6e7..3f4ca5275d 100644 --- a/packages/language-html/grammars/modern-tree-sitter-erb.cson +++ b/packages/language-html/grammars/modern-tree-sitter-erb.cson @@ -11,7 +11,7 @@ fileTypes: [ injectionRegex: '^(erb|ERB)$' treeSitter: - parserSource: 'github:tree-sitter/tree-sitter-embedded-template#203f7bd3c1bbfbd98fc19add4b8fcb213c059205' + parserSource: 'github:tree-sitter/tree-sitter-embedded-template#v0.23.0' grammar: 'tree-sitter-embedded-template/tree-sitter-embedded-template.wasm' highlightsQuery: 'tree-sitter-embedded-template/erb/highlights.scm' foldsQuery: 'tree-sitter-embedded-template/erb/folds.scm' diff --git a/packages/language-html/grammars/modern-tree-sitter-html.cson b/packages/language-html/grammars/modern-tree-sitter-html.cson index 55b856d1c7..cc36821ecd 100644 --- a/packages/language-html/grammars/modern-tree-sitter-html.cson +++ b/packages/language-html/grammars/modern-tree-sitter-html.cson @@ -6,7 +6,7 @@ parser: 'tree-sitter-html' injectionRegex: '(HTML|html|Html)$' treeSitter: - parserSource: 'github:tree-sitter/tree-sitter-html#d742025fa2d8e6100f134a6ea990443aa1f074b3' + parserSource: 'github:tree-sitter/tree-sitter-html#v0.23.0' grammar: 'tree-sitter-html/tree-sitter-html.wasm' highlightsQuery: 'tree-sitter-html/highlights.scm' foldsQuery: 'tree-sitter-html/folds.scm' From 74479ba1c0d284d2dabb46cab3d849bbdafcea3f Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 14 Sep 2024 15:27:10 -0700 Subject: [PATCH 27/28] Fix failing tests --- spec/text-editor-spec.js | 4 ++-- spec/wasm-tree-sitter-language-mode-spec.js | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/spec/text-editor-spec.js b/spec/text-editor-spec.js index 832c482a53..18fd19bf83 100644 --- a/spec/text-editor-spec.js +++ b/spec/text-editor-spec.js @@ -8326,11 +8326,11 @@ describe('TextEditor', () => { 'program', 'variable_declaration', 'variable_declarator', - 'function', + 'function_expression', 'statement_block', 'variable_declaration', 'variable_declarator', - 'function', + 'function_expression', 'statement_block', 'while_statement', 'parenthesized_expression', diff --git a/spec/wasm-tree-sitter-language-mode-spec.js b/spec/wasm-tree-sitter-language-mode-spec.js index 0fb41f2473..60aee9b1d6 100644 --- a/spec/wasm-tree-sitter-language-mode-spec.js +++ b/spec/wasm-tree-sitter-language-mode-spec.js @@ -773,7 +773,7 @@ describe('WASMTreeSitterLanguageMode', () => { htmlGrammar = new WASMTreeSitterGrammar(atom.grammars, htmlGrammarPath, tempHtmlConfig); await htmlGrammar.setQueryForTest('highlightsQuery', ` - (fragment) @html + (document) @html (tag_name) @tag (attribute_name) @attr `); @@ -1351,7 +1351,7 @@ describe('WASMTreeSitterLanguageMode', () => { let customHtmlGrammar = new WASMTreeSitterGrammar(atom.grammars, htmlGrammarPath, customHtmlConfig); await htmlGrammar.setQueryForTest('highlightsQuery', ` - (fragment) @html + (document) @html (tag_name) @tag (attribute_name) @attr `); @@ -1399,7 +1399,7 @@ describe('WASMTreeSitterLanguageMode', () => { let customHtmlGrammar = new WASMTreeSitterGrammar(atom.grammars, htmlGrammarPath, customHtmlConfig); await htmlGrammar.setQueryForTest('highlightsQuery', ` - (fragment) @html + (document) @html (tag_name) @tag (attribute_name) @attr `); @@ -1450,7 +1450,7 @@ describe('WASMTreeSitterLanguageMode', () => { let customHtmlGrammar = new WASMTreeSitterGrammar(atom.grammars, htmlGrammarPath, customHtmlConfig); await htmlGrammar.setQueryForTest('highlightsQuery', ` - (fragment) @html + (document) @html (tag_name) @tag (attribute_name) @attr `); @@ -1503,7 +1503,7 @@ describe('WASMTreeSitterLanguageMode', () => { let customHtmlGrammar = new WASMTreeSitterGrammar(atom.grammars, htmlGrammarPath, customHtmlConfig); await htmlGrammar.setQueryForTest('highlightsQuery', ` - (fragment) @html + (document) @html (tag_name) @tag (attribute_name) @attr `); @@ -3085,7 +3085,7 @@ describe('WASMTreeSitterLanguageMode', () => { .getScopesArray() ).toEqual([ 'text.html.basic', - 'fragment', + 'document', 'element', 'script_element', 'raw_text', @@ -3093,7 +3093,7 @@ describe('WASMTreeSitterLanguageMode', () => { 'expression_statement', 'call_expression', 'template_string', - 'fragment', + 'document', 'element', 'template_substitution', 'member_expression', @@ -3833,7 +3833,7 @@ describe('WASMTreeSitterLanguageMode', () => { htmlConfig ); await htmlGrammar.setQueryForTest('highlightsQuery', ` - (fragment) @html + (document) @html (tag_name) @tag (attribute_name) @attr `); From c1d3a8cbc6d24549ad2ff5b12cd0d9dbbbf481d8 Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Mon, 16 Sep 2024 17:20:49 -0700 Subject: [PATCH 28/28] Address feedback --- src/wasm-tree-sitter-language-mode.js | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/wasm-tree-sitter-language-mode.js b/src/wasm-tree-sitter-language-mode.js index 89e2c57f74..3bc5f253d0 100644 --- a/src/wasm-tree-sitter-language-mode.js +++ b/src/wasm-tree-sitter-language-mode.js @@ -1287,12 +1287,12 @@ class WASMTreeSitterLanguageMode { // * `bufferRow` A {Number} indicating the buffer row. // * `tabLength` A {Number} signifying the length of a tab, in spaces, // according to the current settings of the buffer. - // * `options` An optional {Object} will the following properties, all of + // * `options` An optional {Object} with the following properties, all of // which are themselves optional: // * `options.skipBlankLines`: {Boolean} indicating whether to ignore blank // lines when determining which row to use as a reference row. Default is // `true`. Irrelevant if `options.comparisonRow` is specified. - // * `options.skipDedentCheck`: {Boolean} indicationg whether to skip the + // * `options.skipDedentCheck`: {Boolean} indicating whether to skip the // second phase of the check and determine only if the current row should // _start out_ indented from the reference row. // * `options.preserveLeadingWhitespace`: {Boolean} indicating whether to @@ -1394,8 +1394,8 @@ class WASMTreeSitterLanguageMode { return results; } - // Given a {Point}, returns all injection {LanguageLayer}s whose extent - // includes that point. Does not include the root language layer. + // Given a {Point}, returns all injection {LanguageLayer}s that include that + // point. Does not include the root language layer. // // A {LanguageLayer} can have multiple content ranges. Its “extent” is a // single contiguous {Range} that includes all of its content ranges. To @@ -1404,7 +1404,9 @@ class WASMTreeSitterLanguageMode { // // * point - A {Point} representing a buffer position. // * options - An {Object} containing these keys: - // * exact - {Boolean} that checks content ranges instead of extent. + // * exact - {Boolean} that, when `true`, checks for containment within the + // layer's _content ranges_ instead of its _extent_ (see description + // above). injectionLayersAtPoint(point, { exact = false } = {}) { let injectionMarkers = this.injectionsMarkerLayer.findMarkers({ containsPosition: point @@ -1423,8 +1425,8 @@ class WASMTreeSitterLanguageMode { return results; } - // Given a {Point}, returns all {LanguageLayer}s whose extent includes that - // point. + // Given a {Point}, returns all {LanguageLayer}s that include that point, + // including the root language layer. // // A {LanguageLayer} can have multiple content ranges. Its “extent” is a // single contiguous {Range} that includes all of its content ranges. To @@ -1432,8 +1434,9 @@ class WASMTreeSitterLanguageMode { // `{ exact: true }` as the second argument. // // * point - A {Point} representing a buffer position. - // * options - An {Object} containing these keys: - // * exact - {Boolean} that checks content ranges instead of extent. + // * options - An {Object} containing these keys: * exact - {Boolean} that, + // when `true`, checks for containment within the layer's _content ranges_ + // instead of its _extent_ (see description above). languageLayersAtPoint(point, { exact = false } = {}) { let injectionLayers = this.injectionLayersAtPoint(point, { exact }); return [ @@ -1464,6 +1467,9 @@ class WASMTreeSitterLanguageMode { // DEPRECATED + // Implemented for parity with `TextMateLanguageMode`. If you want to analyze + // the content of a row or other buffer range, you can inspect a Tree-sitter + // tree or run queries against it. tokenizedLineForRow(row) { const lineText = this.buffer.lineForRow(row); const tokens = []; @@ -1515,6 +1521,9 @@ class WASMTreeSitterLanguageMode { }); } + // Implemented for parity with `TextMateLanguageMode`. If you want to analyze + // the content of a point, you can inspect a Tree-sitter tree or run queries + // against it. tokenForPosition(point) { if (Array.isArray(point)) { point = new Point(...point);

slpBLJM?<0%#^l%FmNN_X4QhPM~ou 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%0Aq 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 z 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 ?`UARk~T+-WKZwo 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 n={*{~R4R4HWW@EnH}L95K)hAodOPv@ Date: Sat, 7 Sep 2024 17:28:48 -0700 Subject: [PATCH 13/28] (Whoops, left some logging statements in there) --- vendor/web-tree-sitter/tree-sitter.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/vendor/web-tree-sitter/tree-sitter.js b/vendor/web-tree-sitter/tree-sitter.js index f9181ba1b1..f5ce810a20 100644 --- a/vendor/web-tree-sitter/tree-sitter.js +++ b/vendor/web-tree-sitter/tree-sitter.js @@ -2027,9 +2027,7 @@ var TreeSitter = function() { static init() { TRANSFER_BUFFER = C._ts_init(); VERSION = getValue(TRANSFER_BUFFER, "i32"); - console.log('Version???????', VERSION); MIN_COMPATIBLE_VERSION = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32"); - console.log('MIN COMPAT:', MIN_COMPATIBLE_VERSION); } initialize() { C._ts_parser_new_wasm(); From d4337539ad5007a46da2351e8a44218bd5b7054a Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 7 Sep 2024 17:34:25 -0700 Subject: [PATCH 14/28] Fix regression with indentation --- src/wasm-tree-sitter-language-mode.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/wasm-tree-sitter-language-mode.js b/src/wasm-tree-sitter-language-mode.js index 23fd98cb7f..49ea29883a 100644 --- a/src/wasm-tree-sitter-language-mode.js +++ b/src/wasm-tree-sitter-language-mode.js @@ -4654,7 +4654,7 @@ class IndentResolver { // We were able to resolve the `@match` capture, so we’ll be // returning early. scopeResolver.reset(); - let finalIndent = Math.max(matchIndentLevel - existingIndent, 0); + let finalIndent = Math.max(matchIndentLevel - Math.floor(existingIndent), 0); if (!options.skipEvent) { this.emitter.emit('did-suggest-indent', { currentRow: row, @@ -4716,9 +4716,13 @@ class IndentResolver { // to signify that other Phase 1 logic was ignored altogether. let finalIndent = baseline + indentDelta + dedentDelta; - // Finally, we might have to adjust for the existing leading whitespace - // if `options.preserveLeadingWhitespace` is `true`. - let adjustedIndent = Math.max(finalIndent - existingIndent, 0); + // Finally, we might have to adjust for the existing leading whitespace if + // `options.preserveLeadingWhitespace` is `true`. + // + // We call `Math.floor` because we should only subtract whole units of + // indentation here. “Leading whitespace” seems not to consider (for + // example) a single leading space character if `editor.tabLength` is `2`. + let adjustedIndent = Math.max(finalIndent - Math.floor(existingIndent), 0); // Emit an event with all this information. This makes it possible for // tooling to help a grammar author understand the indentation logic From 4d696a7438bf4fbbd6fe921ad739e02668fc4ad4 Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 7 Sep 2024 18:16:07 -0700 Subject: [PATCH 15/28] Rewrite warning message in `web-tree-sitter` --- vendor/web-tree-sitter/tree-sitter.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/vendor/web-tree-sitter/tree-sitter.js b/vendor/web-tree-sitter/tree-sitter.js index f5ce810a20..db72adc2ad 100644 --- a/vendor/web-tree-sitter/tree-sitter.js +++ b/vendor/web-tree-sitter/tree-sitter.js @@ -14,12 +14,6 @@ // can continue to use Module afterwards as well. var Module = typeof Module != "undefined" ? Module : {}; -function checkForAsmVersion(prop) { - if (!(prop in Module['asm'])) { - console.warn(`Warning: parser wants to call function ${prop}, but it is not defined. If parsing fails, this is probably the reason why. Please report this to the Pulsar team so that this parser can be supported properly.`); - } -} - // Determine the runtime environment we are in. You can customize this by // setting the ENVIRONMENT setting at compile time (see settings.js). // Attempt to auto-detect the environment @@ -1134,6 +1128,9 @@ var TreeSitter = function() { if (!resolved) { resolved = moduleExports[sym]; } + if (!resolved) { + console.warn(`Warning: parser wants to call function ${sym}, but it is not defined. If parsing fails, this is probably the reason why. Please report this to the Pulsar team so that this parser can be supported properly.`); + } return resolved; } // TODO kill ↓↓↓ (except "symbols local to this module", it will likely be @@ -1166,7 +1163,6 @@ var TreeSitter = function() { var resolved; stubs[prop] = (...args) => { resolved ||= resolveSymbol(prop); - checkForAsmVersion(prop); return resolved(...args); }; } From 72b1a6e0d20688698ac341ec78c9347a4069f604 Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 7 Sep 2024 18:17:25 -0700 Subject: [PATCH 16/28] [language-yaml] Update to newest `tree-sitter-yaml` --- .../grammars/modern-tree-sitter-yaml.cson | 1 + .../tree-sitter/tree-sitter-yaml.wasm | Bin 186146 -> 186625 bytes 2 files changed, 1 insertion(+) diff --git a/packages/language-yaml/grammars/modern-tree-sitter-yaml.cson b/packages/language-yaml/grammars/modern-tree-sitter-yaml.cson index f82dd3eed6..97431793bc 100644 --- a/packages/language-yaml/grammars/modern-tree-sitter-yaml.cson +++ b/packages/language-yaml/grammars/modern-tree-sitter-yaml.cson @@ -6,6 +6,7 @@ parser: 'tree-sitter-yaml' injectionRegex: 'yml|yaml|YML|YAML' treeSitter: + parserSource: 'github:tree-sitter-grammars/tree-sitter-yaml#7b03feefd36b5f155465ca736c6304aca983b267' grammar: 'tree-sitter/tree-sitter-yaml.wasm' highlightsQuery: 'tree-sitter/highlights.scm' foldsQuery: 'tree-sitter/folds.scm' diff --git a/packages/language-yaml/grammars/tree-sitter/tree-sitter-yaml.wasm b/packages/language-yaml/grammars/tree-sitter/tree-sitter-yaml.wasm index 6b7218472a4895558f3d7951c3fc743ff44984a0..901f841f377619f0e787f7c539c5805407aa5d01 100755 GIT binary patch literal 186625 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 Y3~4OVsYu@-%|v#eum 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 Date: Sat, 7 Sep 2024 20:39:27 -0700 Subject: [PATCH 17/28] Update README for `web-tree-sitter` --- vendor/web-tree-sitter/README.md | 39 ++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/vendor/web-tree-sitter/README.md b/vendor/web-tree-sitter/README.md index 03b0a54cea..6b3db8db5a 100644 --- a/vendor/web-tree-sitter/README.md +++ b/vendor/web-tree-sitter/README.md @@ -36,31 +36,42 @@ The default `build-wasm` script now skips minification, so we no longer have to When a parser tries to use a stdlib function that isn’t exported by `web-tree-sitter`, the error that’s thrown is not very useful. So we try to detect when that scenario is going to happen and insert a warning in the console to help users that might otherwise be befuddled. -This may be automated in the future, but for now you can modify `tree-sitter.js` to include the `checkForAsmVersion` function: +This may be automated in the future, but for now you can modify `tree-sitter.js` so that this function… ```js -var Module = typeof Module != "undefined" ? Module : {}; - -function checkForAsmVersion(prop) { - if (!(prop in Module['asm'])) { - console.warn(`Warning: parser wants to call function ${prop}, but it is not defined. If parsing fails, this is probably the reason why. Please report this to the Pulsar team so that this parser can be supported properly.`); +function resolveSymbol(sym) { + var resolved = resolveGlobalSymbol(sym).sym; + if (!resolved && localScope) { + resolved = localScope[sym]; + } + if (!resolved) { + resolved = moduleExports[sym]; } + return resolved; } -``` -You can then search for this line - -```js -resolved ||= resolveSymbol(prop); ``` -and add the following line right below it: +…has an extra check at the end: ```js -checkForAsmVersion(prop); +function resolveSymbol(sym) { + var resolved = resolveGlobalSymbol(sym).sym; + if (!resolved && localScope) { + resolved = localScope[sym]; + } + if (!resolved) { + resolved = moduleExports[sym]; + } + if (!resolved) { + console.warn(`Warning: parser wants to call function ${sym}, but it is not defined. If parsing fails, this is probably the reason why. Please report this to the Pulsar team so that this parser can be supported properly.`); + } + return resolved; +} ``` -The line in question is [generated by emscripten](https://github.com/emscripten-core/emscripten/blob/127fb03dad7288a71f51bd46be49f1da8bdb0fa8/src/library_dylink.js#L716), so if it changes in the future, you should be able to look up its equivalent in the correct version of emscripten. + +The function in question is [generated by emscripten](https://github.com/emscripten-core/emscripten/blob/127fb03dad7288a71f51bd46be49f1da8bdb0fa8/src/library_dylink.js#L665-L677) and is the rough equivalent of what we’d get if we built with assertions enabled (though less generic and more tailored to Pulsar). If the implementation changes on the emscripten side, you should still be able to find the equivalent logic. ## Copy it to `vendor` From 265d7e09c1c991b3f3dd67c520452c5a99d97ebb Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sat, 7 Sep 2024 20:53:26 -0700 Subject: [PATCH 18/28] [language-(java|type)script] Scope `??=`, `++`, etc., as assignments --- .../grammars/tree-sitter/highlights.scm | 15 +++++++++++++++ .../grammars/common/highlights.scm | 14 ++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/packages/language-javascript/grammars/tree-sitter/highlights.scm b/packages/language-javascript/grammars/tree-sitter/highlights.scm index 7d58a1ad83..69881ca89a 100644 --- a/packages/language-javascript/grammars/tree-sitter/highlights.scm +++ b/packages/language-javascript/grammars/tree-sitter/highlights.scm @@ -117,10 +117,25 @@ (augmented_assignment_expression left: (identifier) @variable.other.assignment.js) +; The "bar" in `foo.bar += 1`. +(augmented_assignment_expression + left: (member_expression + property: (property_identifier) @variable.other.assignment.property.js) + (#is-not? test.rangeWithData isFunctionProperty) + (#set! capture.final)) + ; The "foo" in `foo++`. (update_expression argument: (identifier) @variable.other.assignment.js) +; The "bar" in `foo.bar++`. +(update_expression + argument: (member_expression + property: (property_identifier) @variable.other.assignment.property.js) + (#is-not? test.rangeWithData isFunctionProperty) + (#set! capture.final)) + + ; Public field definition in a class body: ; The "foo" in `foo = "bar";` (field_definition diff --git a/packages/language-typescript/grammars/common/highlights.scm b/packages/language-typescript/grammars/common/highlights.scm index a3276670b8..e4105f7bb8 100644 --- a/packages/language-typescript/grammars/common/highlights.scm +++ b/packages/language-typescript/grammars/common/highlights.scm @@ -116,10 +116,24 @@ (augmented_assignment_expression left: (identifier) @variable.other.assignment._LANG_) +; The "bar" in `foo.bar += 1`. +(augmented_assignment_expression + left: (member_expression + property: (property_identifier) @variable.other.assignment.property._LANG_) + (#is-not? test.rangeWithData isFunctionProperty) + (#set! capture.final)) + ; The "foo" in `foo++`. (update_expression argument: (identifier) @variable.other.assignment._LANG_) +; The "bar" in `foo.bar++`. +(update_expression + argument: (member_expression + property: (property_identifier) @variable.other.assignment.property._LANG_) + (#is-not? test.rangeWithData isFunctionProperty) + (#set! capture.final)) + ; `object_pattern` appears to only be encountered in assignment expressions, so ; this won't match other uses of object/prop shorthand. ((object_pattern From fbdf18a4504d8bf8ba3aa259162cea100b98947f Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Sun, 8 Sep 2024 15:57:07 -0700 Subject: [PATCH 19/28] =?UTF-8?q?`coverShallowerScopes`=20shouldn't=20affe?= =?UTF-8?q?ct=20=E2=80=9Csibling=E2=80=9D=20injections=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …only injections with a shallower depth. --- src/wasm-tree-sitter-language-mode.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wasm-tree-sitter-language-mode.js b/src/wasm-tree-sitter-language-mode.js index 49ea29883a..58e891b1a9 100644 --- a/src/wasm-tree-sitter-language-mode.js +++ b/src/wasm-tree-sitter-language-mode.js @@ -2333,7 +2333,7 @@ class LayerHighlightIterator { if (!this.coverShallowerScopes) { return false; } // …and this iterator is deeper than the other… - if (iterator.depth > this.depth) { return false; } + if (iterator.depth >= this.depth) { return false; } // …and one of this iterator's content ranges actually includes this // position. (With caveats!) From 03ba902e46143f82e824527045f67cbe60d26724 Mon Sep 17 00:00:00 2001 From: Andrew Dupont Date: Mon, 9 Sep 2024 16:54:30 -0700 Subject: [PATCH 20/28] =?UTF-8?q?[language-(java|type)script]:=20Update=20?= =?UTF-8?q?Tree-sitter=20parsers=20to=200.23.0=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …and modify query files in response to all non–backwards-compatible changes. --- .../modern-tree-sitter-javascript.cson | 2 +- .../grammars/tree-sitter/highlights.scm | 28 ++++--- .../grammars/tree-sitter/tags.scm | 10 +-- .../tree-sitter/tree-sitter-javascript.wasm | Bin 584238 -> 391417 bytes .../grammars/common/highlights.scm | 14 ++-- .../grammars/common/tags.scm | 4 +- .../grammars/modern-tree-sitter-tsx.cson | 1 + .../modern-tree-sitter-typescript.cson | 1 + .../grammars/tree-sitter-tsx/folds.scm | 4 +- .../grammars/tree-sitter-tsx/highlights.scm | 72 +++++++----------- .../grammars/tree-sitter-tsx/indents.scm | 2 +- .../tree-sitter-tsx/tree-sitter-tsx.wasm | Bin 1146645 -> 1482951 bytes .../tree-sitter-typescript.wasm | Bin 1111466 -> 1429463 bytes 13 files changed, 63 insertions(+), 75 deletions(-) diff --git a/packages/language-javascript/grammars/modern-tree-sitter-javascript.cson b/packages/language-javascript/grammars/modern-tree-sitter-javascript.cson index 084577fd01..1bd9ff01c1 100644 --- a/packages/language-javascript/grammars/modern-tree-sitter-javascript.cson +++ b/packages/language-javascript/grammars/modern-tree-sitter-javascript.cson @@ -6,7 +6,7 @@ parser: 'tree-sitter-javascript' injectionRegex: '^(js|javascript|JS|JAVASCRIPT)$' treeSitter: - parserSource: 'github:tree-sitter/tree-sitter-javascript#f1e5a09b8d02f8209a68249c93f0ad647b228e6e' + parserSource: 'github:tree-sitter/tree-sitter-javascript#v0.23.0' grammar: 'tree-sitter/tree-sitter-javascript.wasm' highlightsQuery: 'tree-sitter/highlights.scm' localsQuery: 'tree-sitter/locals.scm' diff --git a/packages/language-javascript/grammars/tree-sitter/highlights.scm b/packages/language-javascript/grammars/tree-sitter/highlights.scm index 69881ca89a..f0527bb1c6 100644 --- a/packages/language-javascript/grammars/tree-sitter/highlights.scm +++ b/packages/language-javascript/grammars/tree-sitter/highlights.scm @@ -1,23 +1,29 @@ ; MISC ; ==== -; In the JSX construct ``, `FOO` should not be marked as -; `constant.other.js`. Block off identifiers within complex JSX tag names early -; to prevent this. +; In the JSX construct ``, `Foo.Bar` is treated as a +; `member_expression`. We don't want the ordinary rules for member expressions +; to apply, so we block them off. +; +; TODO: If we wanted to give these segments individual scopes, we'd do that +; here — replacing the `@_IGNORE_`s with scope names. (jsx_opening_element (member_expression (identifier) @_IGNORE_ + (property_identifier) @_IGNORE_ (#set! capture.final))) (jsx_closing_element (member_expression (identifier) @_IGNORE_ + (property_identifier) @_IGNORE_ (#set! capture.final))) (jsx_self_closing_element (member_expression (identifier) @_IGNORE_ + (property_identifier) @_IGNORE_ (#set! capture.final))) @@ -98,7 +104,7 @@ (assignment_expression left: (member_expression property: (property_identifier) @variable.other.assignment.property.js) - right: [(arrow_function) (function)] @_IGNORE_ + right: [(arrow_function) (function_expression)] @_IGNORE_ (#set! isFunctionProperty true)) ; The "bar" in `foo.bar = true`. @@ -279,7 +285,7 @@ ; Named function expressions: ; the "foo" in `let bar = function foo () {` -(function +(function_expression name: (identifier) @entity.name.function.definition.js) ; Function definitions: @@ -313,27 +319,27 @@ left: (member_expression property: (property_identifier) @entity.name.function.definition.js (#set! capture.final true)) - right: [(arrow_function) (function)]) + right: [(arrow_function) (function_expression)]) ; Function variable assignment: ; The "foo" in `let foo = function () {` (variable_declarator name: (identifier) @entity.name.function.definition.js - value: [(function) (arrow_function)]) + value: [(function_expression) (arrow_function)]) ; Function variable reassignment: ; The "foo" in `foo = function () {` (assignment_expression left: (identifier) @function - right: [(function) (arrow_function)]) + right: [(function_expression) (arrow_function)]) ; Object key-value pair function: ; The "foo" in `{ foo: function () {} }` (pair key: (property_identifier) @entity.name.function.method.definition.js - value: [(function) (arrow_function)]) + value: [(function_expression) (arrow_function)]) -(function "function" @storage.type.function.js) +(function_expression "function" @storage.type.function.js) (function_declaration "function" @storage.type.function.js) (generator_function "function" @storage.type.function.js) @@ -1010,7 +1016,7 @@ (#set! adjust.endAt lastChild.startPosition) (#set! capture.final true)) -(function +(function_expression body: (statement_block) @meta.block.function.js (#set! adjust.startAt firstChild.endPosition) (#set! adjust.endAt lastChild.startPosition) diff --git a/packages/language-javascript/grammars/tree-sitter/tags.scm b/packages/language-javascript/grammars/tree-sitter/tags.scm index 5063d183f9..c5113e0c7c 100644 --- a/packages/language-javascript/grammars/tree-sitter/tags.scm +++ b/packages/language-javascript/grammars/tree-sitter/tags.scm @@ -28,7 +28,7 @@ (comment)* @doc . [ - (function + (function_expression name: (identifier) @name) (function_declaration name: (identifier) @name) @@ -47,7 +47,7 @@ (lexical_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)]) @definition.function) + value: [(arrow_function) (function_expression)]) @definition.function) (#strip! @doc "^[\\s\\*/]+|^[\\s\\*/]$") (#select-adjacent! @doc @definition.function) ) @@ -58,7 +58,7 @@ (variable_declaration (variable_declarator name: (identifier) @name - value: [(arrow_function) (function)]) @definition.function) + value: [(arrow_function) (function_expression)]) @definition.function) (#strip! @doc "^[\\s\\*/]+|^[\\s\\*/]$") (#select-adjacent! @doc @definition.function) ) @@ -69,12 +69,12 @@ (member_expression property: (property_identifier) @name) ] - right: [(arrow_function) (function)] + right: [(arrow_function) (function_expression)] ) @definition.function (pair key: (property_identifier) @name - value: [(arrow_function) (function)]) @definition.function + value: [(arrow_function) (function_expression)]) @definition.function ( (call_expression diff --git a/packages/language-javascript/grammars/tree-sitter/tree-sitter-javascript.wasm b/packages/language-javascript/grammars/tree-sitter/tree-sitter-javascript.wasm index 5857388d3d59133f600b1f27f8fd2087ac29d215..7cdd4da7435fc199c19052900730d9f8369efb4e 100755 GIT binary patch literal 391417 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