{
  // ===
  // Spacing
  // ===

  "editor.insertSpaces": true,
  "editor.tabSize": 2,
  "editor.trimAutoWhitespace": true,
  "files.trimTrailingWhitespace": true,
  "files.eol": "\n",
  "files.insertFinalNewline": true,
  "files.trimFinalNewlines": true,

  // ===
  // Files
  // ===

  "files.exclude": {
    "**/_import-components": true,
    "**/index-normalize-route.js": true,
    "**/*.log": true,
    "**/*.log*": true,
    "dist": true,
    "**/coverage": true
  },
  "files.associations": {
    ".markdownlintrc": "jsonc"
  },

  // ===
  // Event Triggers
  // ===

  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "[vue]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[JavaScript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[html]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[SCSS]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": "explicit",
    "source.fixAll.stylelint": "explicit",
    "source.fixAll.markdownlint": "explicit"
  },
  "eslint.validate": ["javascript", "javascriptreact", "vue", "vue-html", "html"],
  "vetur.format.enable": false,
  "vetur.completion.scaffoldSnippetSources": {
    "user": "🗒️",
    "workspace": "💼",
    "vetur": ""
  },

  // ===
  // HTML
  // ===

  "html.format.enable": false,
  "vetur.validation.template": false,
  "emmet.triggerExpansionOnTab": true,
  "emmet.includeLanguages": {
    "vue-html": "html"
  },
  "vetur.completion.tagCasing": "initial",

  // ===
  // JS(ON)
  // ===

  "jest.autoEnable": false,
  "jest.enableCodeLens": false,
  "javascript.format.enable": false,
  "json.format.enable": false,
  "vetur.validation.script": false,

  // ===
  // CSS
  // ===

  "stylelint.enable": true,
  "stylelint.autoFixOnSave": true,
  "stylelint.useLocal": true,
  "css.validate": false,
  "scss.validate": false,
  "vetur.validation.style": false,

  // ===
  // MARKDOWN
  // ===

  "[markdown]": {
    "editor.wordWrap": "wordWrapColumn",
    "editor.wordWrapColumn": 100
  },
  "stylelint.packageManager": "yarn",

  "blueprint.templatesPath": [
    "./blueprint-templates",
    "./src/blueprint-templates",
    "./src_custom/blueprint-templates"
  ],

  "emeraldwalk.runonsave": {
    "commands": [
      {
        "match": "\\.vue$",
        "isAsync": true,
        "cmd": "node \"${workspaceFolder}/src/common/components/_auto-import/index.js\" \"${file}\" \"${workspaceFolder}\""
      },
      {
        "match": "src(?:_custom)?[/\\\\][0-9a-z-]+[/\\\\]index\\.js$",
        "isAsync": true,
        "cmd": "node \"${workspaceFolder}/src/common/services/_router-util/single.js\" \"${file}\" \"${workspaceFolder}\""
      },
      {
        "match": "src_product[/\\\\][a-z-]+[/\\\\][a-z-]+[/\\\\]index\\.js$",
        "isAsync": true,
        "cmd": "node \"${workspaceFolder}/src/common/services/_router-util/single.js\" \"${file}\" \"${workspaceFolder}\""
      }
    ]
  },
  "runTerminalCommand.commands": [
    {
      "command": "yarn workspace platform run auto-import $PWD %cd%",
      "name": "整理自动导入",
      "auto": true
    },
    {
      "command": "yarn workspace platform run rename-prefix $PWD %cd%",
      "name": "组件批量重命名 sd->oa",
      "auto": true
    }
  ],
  "window.title": "${dirty}${activeEditorShort}${separator}${rootName}${separator}VS Code 🥇🥇🥇",
  "editor.maxTokenizationLineLength": 20000000
}
