Spaces:
Sleeping
Sleeping
| /** | |
| * @fileoverview ESLint Parser | |
| * @author Nicholas C. Zakas | |
| */ | |
| /* eslint class-methods-use-this: off -- Anticipate future constructor arguments. */ | |
| ; | |
| //----------------------------------------------------------------------------- | |
| // 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, | |
| fatal: true, | |
| severity: 2, | |
| message: `Parsing error: ${error.message}`, | |
| line: error.line, | |
| column: error.column, | |
| })), | |
| }; | |
| } | |
| } | |
| module.exports = { ParserService }; | |