diff --git a/src/compiler/utils/error.ts b/src/compiler/utils/error.ts index 3ad609ae63..89b24ac6b2 100644 --- a/src/compiler/utils/error.ts +++ b/src/compiler/utils/error.ts @@ -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; - - toString() { - return `${this.message} (${this.start.line}:${this.start.column})\n${this.frame}`; - } + + /** + * @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 { - 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; +/** + * @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; } + + + + diff --git a/src/compiler/utils/fuzzymatch.js b/src/compiler/utils/fuzzymatch.js index e6323d0ae3..e7bb1ad697 100644 --- a/src/compiler/utils/fuzzymatch.js +++ b/src/compiler/utils/fuzzymatch.js @@ -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) {