123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.generateMap = exports.clone = void 0;
- const sourcemap_codec_1 = require("@jridgewell/sourcemap-codec");
- const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
- const base_1 = require("./base");
- function clone(segments) {
- const cloned = [];
- for (const s of segments) {
- if (typeof s === 'string') {
- cloned.push(s);
- }
- else {
- cloned.push([...s]);
- }
- }
- return cloned;
- }
- exports.clone = clone;
- function generateMap(segments, readSource) {
- const cloned = clone(segments);
- const mappings = [];
- const sourceCode = new Map();
- let newLineIndex = (0, base_1.toString)(cloned).indexOf('\n');
- while (newLineIndex >= 0) {
- onLine((0, base_1.overwrite)(cloned, [0, newLineIndex + 1]));
- newLineIndex = (0, base_1.toString)(cloned).indexOf('\n');
- }
- onLine((0, base_1.overwrite)(cloned, [0, (0, base_1.getLength)(cloned)]));
- return (0, sourcemap_codec_1.encode)(mappings);
- function onLine(lineSegments) {
- const lineMapping = [];
- let currentColumn = 0;
- let hasCodeMapping = false;
- for (const s of lineSegments) {
- if (typeof s === 'string') {
- if (hasCodeMapping) {
- hasCodeMapping = false;
- // we don't break off last mapping for now
- }
- currentColumn += s.length;
- }
- else {
- hasCodeMapping = true;
- const source = s[1];
- const sourceOffset = s[2][0];
- if (!sourceCode.has(source)) {
- const readed = readSource(source);
- sourceCode.set(source, [readed[0], vscode_languageserver_textdocument_1.TextDocument.create('', '', 0, readed[1])]);
- }
- const [sourceIndex, document] = sourceCode.get(source);
- const position = document.positionAt(sourceOffset);
- lineMapping.push([
- currentColumn,
- sourceIndex,
- position.line,
- position.character,
- ]);
- currentColumn += s[0].length;
- }
- }
- mappings.push(lineMapping);
- }
- }
- exports.generateMap = generateMap;
- //# sourceMappingURL=map.js.map
|