greybel-languageserver-core
Version:
Core functionality of language server for GreyScript
50 lines • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildFoldingRanges = void 0;
const miniscript_core_1 = require("miniscript-core");
const vscode_languageserver_1 = require("vscode-languageserver");
const ast_scraper_1 = require("./ast-scraper");
function buildFoldingRanges(item) {
const ranges = [];
const walker = new ast_scraper_1.ScraperWalker((item, level) => {
if (item.start.line === item.end.line)
return null;
switch (item.type) {
case miniscript_core_1.ASTType.Comment:
ranges.push({
startLine: item.start.line - 1,
endLine: item.end.line - 1,
kind: vscode_languageserver_1.FoldingRangeKind.Comment
});
return null;
case miniscript_core_1.ASTType.MapConstructorExpression:
case miniscript_core_1.ASTType.ListConstructorExpression:
case miniscript_core_1.ASTType.StringLiteral:
case miniscript_core_1.ASTType.WhileStatement:
case miniscript_core_1.ASTType.ForGenericStatement:
case miniscript_core_1.ASTType.FunctionDeclaration: {
ranges.push({
startLine: item.start.line - 1,
endLine: item.end.line - 1,
kind: vscode_languageserver_1.FoldingRangeKind.Region
});
return null;
}
case miniscript_core_1.ASTType.IfClause:
case miniscript_core_1.ASTType.ElseifClause:
case miniscript_core_1.ASTType.ElseClause: {
ranges.push({
startLine: item.start.line - 1,
endLine: item.end.line - 2,
kind: vscode_languageserver_1.FoldingRangeKind.Region
});
return null;
}
}
return null;
});
walker.visit(item.parsedPayload);
return ranges;
}
exports.buildFoldingRanges = buildFoldingRanges;
//# sourceMappingURL=folding-range-builder.js.map