1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /**
- * @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 };
|