.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / lib / createStylelintResult.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/stylelint/lib/createStylelintResult.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/stylelint/lib/createStylelintResult.js
new file mode 100644 (file)
index 0000000..5279d9f
--- /dev/null
@@ -0,0 +1,151 @@
+/* @flow */
+"use strict";
+const _ = require("lodash");
+
+/*:: type messageType = {
+  type: string,
+  text: string,
+  line: number,
+  column: number,
+  severity: string,
+  rule: string,
+  node: Object,
+  index: number,
+  stylelintType?: string,
+  stylelintReference?: string,
+}
+*/
+
+/*:: type postcssResultType = {
+  processor: {
+    version: string,
+    plugins: Array<any>,
+  },
+  messages: Array<messageType>,
+  root: {
+    raws: {
+      semicolon: boolean,
+      after: string,
+    },
+    type: string,
+    nodes: Array<Object>,
+    source: {
+      input: Object,
+      start: Object,
+    },
+    lastEach: number,
+    indexes: Object,
+  },
+  opts: {
+    from: ?string,
+    syntax: ?{
+      parse: Function,
+      stringify: Function,
+    },
+  },
+  css: string,
+  map: ?any,
+  stylelint: {
+    ruleSeverities: Object,
+    customMessages: Object,
+    quiet: ?any,
+    disabledRanges: {
+      all: Array<any>,
+    },
+    ignored?: boolean,
+    stylelintError?: boolean,
+  },
+}
+*/
+
+/*:: type resultType = {
+  config: {
+    codeProcessors?: Array<Function>,
+    ignorePatterns?: string,
+    processors?: Array<any>,
+    quiet?: boolean,
+    resultProcessors?: Array<Function>,
+    rules: Object,
+  },
+  filepath: string,
+}
+*/
+
+module.exports = function(
+  stylelint /*: stylelint$internalApi*/,
+  postcssResult /*: postcssResultType*/,
+  filePath /*:: ?: string*/
+) /*: Promise<stylelint$result>*/ {
+  const source = !postcssResult.root.source
+    ? undefined
+    : postcssResult.root.source.input.file ||
+      postcssResult.root.source.input.id;
+
+  // Strip out deprecation warnings from the messages
+  const deprecationMessages = _.remove(postcssResult.messages, {
+    stylelintType: "deprecation"
+  });
+  const deprecations = deprecationMessages.map((
+    deprecationMessage /*: messageType*/
+  ) => {
+    return {
+      text: deprecationMessage.text,
+      reference: deprecationMessage.stylelintReference
+    };
+  });
+
+  // Also strip out invalid options
+  const invalidOptionMessages = _.remove(postcssResult.messages, {
+    stylelintType: "invalidOption"
+  });
+  const invalidOptionWarnings = invalidOptionMessages.map((
+    invalidOptionMessage /*: messageType*/
+  ) => {
+    return {
+      text: invalidOptionMessage.text
+    };
+  });
+
+  const parseErrors = _.remove(postcssResult.messages, {
+    stylelintType: "parseError"
+  });
+
+  // This defines the stylelint result object that formatters receive
+  let stylelintResult = {
+    source,
+    deprecations,
+    invalidOptionWarnings,
+    parseErrors,
+    errored: postcssResult.stylelint.stylelintError,
+    warnings: postcssResult.messages.map((message /*: messageType*/) => {
+      return {
+        line: message.line,
+        column: message.column,
+        rule: message.rule,
+        severity: message.severity,
+        text: message.text
+      };
+    }),
+    ignored: postcssResult.stylelint.ignored,
+    _postcssResult: postcssResult
+  };
+
+  return stylelint.getConfigForFile(filePath).then((
+    result /*: resultType*/
+  ) => {
+    const config = result.config;
+
+    if (config.resultProcessors) {
+      config.resultProcessors.forEach(resultProcessor => {
+        // Result processors might just mutate the result object,
+        // or might return a new one
+        const returned = resultProcessor(stylelintResult, source);
+        if (returned) {
+          stylelintResult = returned;
+        }
+      });
+    }
+
+    return stylelintResult;
+  });
+};