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 get_code_frame from './get_code_frame';
import get_code_frame from './get_code_frame.js';
/**
* @extends Error
*/
class CompileError extends Error {
code: string;
start: { line: number; column: number };
end: { line: number; column: number };
pos: number;
filename: string;
frame: string;
/**
* @type {string}
*/
code = undefined;
/**
* @type {{ line: number; column: number }}
*/
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,
props: {
name: string;
code: string;
source: string;
filename: string;
start: number;
end?: number;
}
): never {
/**
* @param {string} message
* @param {{
* name: string;
* code: string;
* source: string;
* filename: string;
* start: number;
* end?: number;
* }} props
* @returns {never}
*/
export default function error(message, props) {
const error = new CompileError(message);
error.name = props.name;
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.start = start;
error.end = end;
error.pos = props.start;
error.filename = props.filename;
error.frame = get_code_frame(props.source, start.line - 1, start.column);
throw error;
}

@ -7,6 +7,7 @@ export default function fuzzymatch(name, names) {
const matches = set.get(name);
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
// BSD Licensed
const GRAM_SIZE_LOWER = 2;
@ -31,6 +32,7 @@ function _distance(str1, str2) {
return 1 - distance / str2.length;
}
}
// helper functions
/**
@ -61,6 +63,7 @@ function levenshtein(str1, str2) {
}
return current.pop();
}
const non_word_regex = /[^\w, ]+/;
/**
@ -108,22 +111,15 @@ function gram_counter(value, gram_size = 2) {
function sort_descending(a, b) {
return b[0] - a[0];
}
/** */
class FuzzySet {
/**
* @default {}
*/
exact_set = {};
/**
* @default {}
*/
match_dict = {};
items = {};
/**
* @default {}
* @param {string[]} arr
*/
items = {};
constructor(arr) {
// initialization
for (let i = GRAM_SIZE_LOWER; i < GRAM_SIZE_UPPER + 1; ++i) {

Loading…
Cancel
Save