Actualizacion maquina principal
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / eslint / lib / init / source-code-utils.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/eslint/lib/init/source-code-utils.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/eslint/lib/init/source-code-utils.js
new file mode 100644 (file)
index 0000000..dfc170a
--- /dev/null
@@ -0,0 +1,109 @@
+/**
+ * @fileoverview Tools for obtaining SourceCode objects.
+ * @author Ian VanSchooten
+ */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+const { CLIEngine } = require("../cli-engine");
+
+/*
+ * This is used for:
+ *
+ * 1. Enumerate target file because we have not expose such a API on `CLIEngine`
+ *    (https://github.com/eslint/eslint/issues/11222).
+ * 2. Create `SourceCode` instances. Because we don't have any function which
+ *    instantiate `SourceCode` so it needs to take the created `SourceCode`
+ *    instance out after linting.
+ *
+ * TODO1: Expose the API that enumerates target files.
+ * TODO2: Extract the creation logic of `SourceCode` from `Linter` class.
+ */
+const { getCLIEngineInternalSlots } = require("../cli-engine/cli-engine"); // eslint-disable-line no-restricted-modules
+
+const debug = require("debug")("eslint:source-code-utils");
+
+//------------------------------------------------------------------------------
+// Helpers
+//------------------------------------------------------------------------------
+
+/**
+ * Get the SourceCode object for a single file
+ * @param   {string}     filename The fully resolved filename to get SourceCode from.
+ * @param   {Object}     engine  A CLIEngine.
+ * @returns {Array}               Array of the SourceCode object representing the file
+ *                                and fatal error message.
+ */
+function getSourceCodeOfFile(filename, engine) {
+    debug("getting sourceCode of", filename);
+    const results = engine.executeOnFiles([filename]);
+
+    if (results && results.results[0] && results.results[0].messages[0] && results.results[0].messages[0].fatal) {
+        const msg = results.results[0].messages[0];
+
+        throw new Error(`(${filename}:${msg.line}:${msg.column}) ${msg.message}`);
+    }
+
+    // TODO: extract the logic that creates source code objects to `SourceCode#parse(text, options)` or something like.
+    const { linter } = getCLIEngineInternalSlots(engine);
+    const sourceCode = linter.getSourceCode();
+
+    return sourceCode;
+}
+
+//------------------------------------------------------------------------------
+// Public Interface
+//------------------------------------------------------------------------------
+
+
+/**
+ * This callback is used to measure execution status in a progress bar
+ * @callback progressCallback
+ * @param {number} The total number of times the callback will be called.
+ */
+
+/**
+ * Gets the SourceCode of a single file, or set of files.
+ * @param {string[]|string} patterns A filename, directory name, or glob, or an array of them
+ * @param {Object} options A CLIEngine options object. If not provided, the default cli options will be used.
+ * @param {progressCallback} callback Callback for reporting execution status
+ * @returns {Object} The SourceCode of all processed files.
+ */
+function getSourceCodeOfFiles(patterns, options, callback) {
+    const sourceCodes = {};
+    const globPatternsList = typeof patterns === "string" ? [patterns] : patterns;
+    const engine = new CLIEngine({ ...options, rules: {} });
+
+    // TODO: make file iteration as a public API and use it.
+    const { fileEnumerator } = getCLIEngineInternalSlots(engine);
+    const filenames =
+        Array.from(fileEnumerator.iterateFiles(globPatternsList))
+            .filter(entry => !entry.ignored)
+            .map(entry => entry.filePath);
+
+    if (filenames.length === 0) {
+        debug(`Did not find any files matching pattern(s): ${globPatternsList}`);
+    }
+
+    filenames.forEach(filename => {
+        const sourceCode = getSourceCodeOfFile(filename, engine);
+
+        if (sourceCode) {
+            debug("got sourceCode of", filename);
+            sourceCodes[filename] = sourceCode;
+        }
+        if (callback) {
+            callback(filenames.length); // eslint-disable-line callback-return
+        }
+    });
+
+    return sourceCodes;
+}
+
+module.exports = {
+    getSourceCodeOfFiles
+};