/** * @fileoverview ESLint Parser * @author Nicholas C. Zakas */ /* eslint class-methods-use-this: off -- Anticipate future constructor arguments. */ "use strict"; //----------------------------------------------------------------------------- // Types //----------------------------------------------------------------------------- /** @typedef {import("../linter/vfile.js").VFile} VFile */ /** @typedef {import("@eslint/core").Language} Language */ /** @typedef {import("@eslint/core").LanguageOptions} LanguageOptions */ //----------------------------------------------------------------------------- // Exports //----------------------------------------------------------------------------- /** * The parser for ESLint. */ class ParserService { /** * Parses the given file synchronously. * @param {VFile} file The file to parse. * @param {{language:Language,languageOptions:LanguageOptions}} config The configuration to use. * @returns {Object} An object with the parsed source code or errors. * @throws {Error} If the parser returns a promise. */ parseSync(file, config) { const { language, languageOptions } = config; const result = language.parse(file, { languageOptions }); if (typeof result.then === "function") { throw new Error("Unsupported: Language parser returned a promise."); } if (result.ok) { return { ok: true, sourceCode: language.createSourceCode(file, result, { languageOptions }) }; } // if we made it to here there was an error return { ok: false, errors: result.errors.map(error => ({ ruleId: null, nodeType: null, fatal: true, severity: 2, message: `Parsing error: ${error.message}`, line: error.line, column: error.column })) }; } } module.exports = { ParserService };