Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
items.push(suggestion);
}
},
setAsIncomplete: () => isIncomplete = true,
error: (message: string) => console.error(message),
log: (message: string) => console.log(message)
};
let collectPromise: Thenable = null;
if (location.isAtPropertyKey) {
let addValue = !location.previousNode || !location.previousNode.columnOffset && (offset == (location.previousNode.offset + location.previousNode.length));
let scanner = createScanner(document.getText(), true);
scanner.setPosition(offset);
scanner.scan();
let isLast = scanner.getToken() === SyntaxKind.CloseBraceToken || scanner.getToken() === SyntaxKind.EOF;
collectPromise = this.jsonContribution.collectPropertySuggestions(document.fileName, location, currentWord, addValue, isLast, collector);
} else {
if (location.path.length === 0) {
collectPromise = this.jsonContribution.collectDefaultSuggestions(document.fileName, collector);
} else {
collectPromise = this.jsonContribution.collectValueSuggestions(document.fileName, location, collector);
}
}
if (collectPromise) {
return collectPromise.then(() => {
if (items.length > 0) {
return new CompletionList(items, isIncomplete);
}
return null;
});
}
items.push(suggestion);
}
},
error: (message: string) => console.error(message),
log: (message: string) => console.log(message)
};
let collectPromise: Thenable = null;
if (location.isAtPropertyKey) {
let addValue = !location.previousNode || !location.previousNode.columnOffset && (offset == (location.previousNode.offset + location.previousNode.length));
let scanner = createScanner(document.getText(), true);
scanner.setPosition(offset);
scanner.scan();
let isLast = scanner.getToken() === SyntaxKind.CloseBraceToken || scanner.getToken() === SyntaxKind.EOF;
collectPromise = this.jsonContribution.collectPropertySuggestions(document.fileName, location, currentWord, addValue, isLast, collector);
} else if (location.path.length !== 0)
collectPromise = this.jsonContribution.collectValueSuggestions(document.fileName, location, collector);
if (collectPromise) {
return collectPromise.then(() => {
if (items.length > 0) {
return new vscode.CompletionList(items);
}
return null;
});
}
return null;
}
}
function scanNext(): [SyntaxKind, string] {
const token = scanner.scan();
const offset = scanner.getTokenOffset();
const length = scanner.getTokenLength();
const value = text.substr(offset, length);
return [ token, value ];
}
let [firstToken, firstTokenValue] = scanNext();
let secondToken: SyntaxKind;
let secondTokenValue: string;
let result = '';
while (firstToken !== SyntaxKind.EOF) {
[secondToken, secondTokenValue] = scanNext();
switch (firstToken) {
case SyntaxKind.OpenBraceToken:
result += ResponseFormatUtility.jsonSpecialTokenMapping[firstToken];
if (secondToken !== SyntaxKind.CloseBraceToken) {
indentLevel++;
result += newLineAndIndent();
}
break;
case SyntaxKind.OpenBracketToken:
result += ResponseFormatUtility.jsonSpecialTokenMapping[firstToken];
if (secondToken !== SyntaxKind.CloseBracketToken) {
indentLevel++;
result += newLineAndIndent();
}
export function getFoldingRanges(document: TextDocument, context?: FoldingRangesContext): FoldingRange[] {
let ranges: FoldingRange[] = [];
let nestingLevels: number[] = [];
let stack: FoldingRange[] = [];
let prevStart = -1;
let scanner = createScanner(document.getText(), false);
let token = scanner.scan();
function addRange(range: FoldingRange) {
ranges.push(range);
nestingLevels.push(stack.length);
}
while (token !== SyntaxKind.EOF) {
switch (token) {
case SyntaxKind.OpenBraceToken:
case SyntaxKind.OpenBracketToken: {
let startLine = document.positionAt(scanner.getTokenOffset()).line;
let range = { startLine, endLine: startLine, kind: token === SyntaxKind.OpenBraceToken ? 'object' : 'array' };
stack.push(range);
break;
}
case SyntaxKind.CloseBraceToken:
case SyntaxKind.CloseBracketToken: {
let kind = token === SyntaxKind.CloseBraceToken ? 'object' : 'array';
if (stack.length > 0 && stack[stack.length - 1].kind === kind) {
let range = stack.pop();
let line = document.positionAt(scanner.getTokenOffset()).line;
if (range && line > range.startLine + 1 && prevStart !== range.startLine) {
range.endLine = line - 1;