Convert src/compiler/utils/error.ts to JavaScript

pull/8569/head
Simon Holthausen 3 years ago
parent 5b130d1b85
commit af3c2539fa

@ -1,43 +1,71 @@
import { locate } from 'locate-character'; import { locate } from 'locate-character';
import get_code_frame from './get_code_frame'; import get_code_frame from './get_code_frame.js';
/**
* @extends Error
*/
class CompileError extends Error { class CompileError extends Error {
code: string;
start: { line: number; column: number }; /**
end: { line: number; column: number }; * @type {string}
pos: number; */
filename: string; code = undefined;
frame: string;
/**
toString() { * @type {{ line: number; column: number }}
return `${this.message} (${this.start.line}:${this.start.column})\n${this.frame}`; */
} start = undefined;
/**
* @type {{ line: number; column: number }}
*/
end = undefined;
/**
* @type {number}
*/
pos = undefined;
/**
* @type {string}
*/
filename = undefined;
/**
* @type {string}
*/
frame = undefined;
toString() {
return `${this.message} (${this.start.line}:${this.start.column})\n${this.frame}`;
}
} }
export default function error( /**
message: string, * @param {string} message
props: { * @param {{
name: string; * name: string;
code: string; * code: string;
source: string; * source: string;
filename: string; * filename: string;
start: number; * start: number;
end?: number; * end?: number;
} * }} props
): never { * @returns {never}
const error = new CompileError(message); */
error.name = props.name; export default function error(message, props) {
const error = new CompileError(message);
const start = locate(props.source, props.start, { offsetLine: 1 }); error.name = props.name;
const end = locate(props.source, props.end || props.start, { offsetLine: 1 }); const start = locate(props.source, props.start, { offsetLine: 1 });
const end = locate(props.source, props.end || props.start, { offsetLine: 1 });
error.code = props.code; error.code = props.code;
error.start = start; error.start = start;
error.end = end; error.end = end;
error.pos = props.start; error.pos = props.start;
error.filename = props.filename; error.filename = props.filename;
error.frame = get_code_frame(props.source, start.line - 1, start.column);
error.frame = get_code_frame(props.source, start.line - 1, start.column); throw error;
throw error;
} }

@ -7,6 +7,7 @@ export default function fuzzymatch(name, names) {
const matches = set.get(name); const matches = set.get(name);
return matches && matches[0] && matches[0][0] > 0.7 ? matches[0][1] : null; return matches && matches[0] && matches[0][0] > 0.7 ? matches[0][1] : null;
} }
// adapted from https://github.com/Glench/fuzzyset.js/blob/master/lib/fuzzyset.js // adapted from https://github.com/Glench/fuzzyset.js/blob/master/lib/fuzzyset.js
// BSD Licensed // BSD Licensed
const GRAM_SIZE_LOWER = 2; const GRAM_SIZE_LOWER = 2;
@ -31,6 +32,7 @@ function _distance(str1, str2) {
return 1 - distance / str2.length; return 1 - distance / str2.length;
} }
} }
// helper functions // helper functions
/** /**
@ -61,6 +63,7 @@ function levenshtein(str1, str2) {
} }
return current.pop(); return current.pop();
} }
const non_word_regex = /[^\w, ]+/; const non_word_regex = /[^\w, ]+/;
/** /**
@ -108,22 +111,15 @@ function gram_counter(value, gram_size = 2) {
function sort_descending(a, b) { function sort_descending(a, b) {
return b[0] - a[0]; return b[0] - a[0];
} }
/** */
class FuzzySet { class FuzzySet {
/**
* @default {}
*/
exact_set = {}; exact_set = {};
/**
* @default {}
*/
match_dict = {}; match_dict = {};
items = {};
/** /**
* @default {} * @param {string[]} arr
*/ */
items = {};
constructor(arr) { constructor(arr) {
// initialization // initialization
for (let i = GRAM_SIZE_LOWER; i < GRAM_SIZE_UPPER + 1; ++i) { for (let i = GRAM_SIZE_LOWER; i < GRAM_SIZE_UPPER + 1; ++i) {

Loading…
Cancel
Save