| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import { LanguageAgnosticBracketTokens } from './bracketPairsTree/brackets.js';
- import { lengthAdd, lengthGetColumnCountIfZeroLineCount, lengthZero } from './bracketPairsTree/length.js';
- import { parseDocument } from './bracketPairsTree/parser.js';
- import { DenseKeyProvider } from './bracketPairsTree/smallImmutableSet.js';
- import { TextBufferTokenizer } from './bracketPairsTree/tokenizer.js';
- export function fixBracketsInLine(tokens, languageConfigurationService) {
- const denseKeyProvider = new DenseKeyProvider();
- const bracketTokens = new LanguageAgnosticBracketTokens(denseKeyProvider, (languageId) => languageConfigurationService.getLanguageConfiguration(languageId));
- const tokenizer = new TextBufferTokenizer(new StaticTokenizerSource([tokens]), bracketTokens);
- const node = parseDocument(tokenizer, [], undefined, true);
- let str = '';
- const line = tokens.getLineContent();
- function processNode(node, offset) {
- if (node.kind === 2 /* AstNodeKind.Pair */) {
- processNode(node.openingBracket, offset);
- offset = lengthAdd(offset, node.openingBracket.length);
- if (node.child) {
- processNode(node.child, offset);
- offset = lengthAdd(offset, node.child.length);
- }
- if (node.closingBracket) {
- processNode(node.closingBracket, offset);
- offset = lengthAdd(offset, node.closingBracket.length);
- }
- else {
- const singleLangBracketTokens = bracketTokens.getSingleLanguageBracketTokens(node.openingBracket.languageId);
- const closingTokenText = singleLangBracketTokens.findClosingTokenText(node.openingBracket.bracketIds);
- str += closingTokenText;
- }
- }
- else if (node.kind === 3 /* AstNodeKind.UnexpectedClosingBracket */) {
- // remove the bracket
- }
- else if (node.kind === 0 /* AstNodeKind.Text */ || node.kind === 1 /* AstNodeKind.Bracket */) {
- str += line.substring(lengthGetColumnCountIfZeroLineCount(offset), lengthGetColumnCountIfZeroLineCount(lengthAdd(offset, node.length)));
- }
- else if (node.kind === 4 /* AstNodeKind.List */) {
- for (const child of node.children) {
- processNode(child, offset);
- offset = lengthAdd(offset, child.length);
- }
- }
- }
- processNode(node, lengthZero);
- return str;
- }
- class StaticTokenizerSource {
- constructor(lines) {
- this.lines = lines;
- this.tokenization = {
- getLineTokens: (lineNumber) => {
- return this.lines[lineNumber - 1];
- }
- };
- }
- getLineCount() {
- return this.lines.length;
- }
- getLineLength(lineNumber) {
- return this.lines[lineNumber - 1].getLineContent().length;
- }
- }
|