Skip to content

feat(language-core): support configuration for language plugins#5678

Merged
KazariEX merged 4 commits intovuejs:masterfrom
KazariEX:feat/plugin-config
Jan 23, 2026
Merged

feat(language-core): support configuration for language plugins#5678
KazariEX merged 4 commits intovuejs:masterfrom
KazariEX:feat/plugin-config

Conversation

@KazariEX
Copy link
Copy Markdown
Member

This PR allows us to provide configuration for the Vue language plugins in the same way as the TypeScript language plugins.

{
  "vueCompilerOptions": {
    "plugins": [
      {
        "name": "...",
        "options": { "foo": "bar" }
      }
    ]
  }
}

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new bot commented Sep 30, 2025

Open in StackBlitz

vue-component-meta

npm i https://pkg.pr.new/vuejs/language-tools/vue-component-meta@5678

vue-component-type-helpers

npm i https://pkg.pr.new/vuejs/language-tools/vue-component-type-helpers@5678

@vue/language-core

npm i https://pkg.pr.new/vuejs/language-tools/@vue/language-core@5678

@vue/language-plugin-pug

npm i https://pkg.pr.new/vuejs/language-tools/@vue/language-plugin-pug@5678

@vue/language-server

npm i https://pkg.pr.new/vuejs/language-tools/@vue/language-server@5678

@vue/language-service

npm i https://pkg.pr.new/vuejs/language-tools/@vue/language-service@5678

vue-tsc

npm i https://pkg.pr.new/vuejs/language-tools/vue-tsc@5678

@vue/typescript-plugin

npm i https://pkg.pr.new/vuejs/language-tools/@vue/typescript-plugin@5678

commit: 89bd13b

@KazariEX KazariEX merged commit afc069e into vuejs:master Jan 23, 2026
4 checks passed
@KazariEX KazariEX deleted the feat/plugin-config branch January 23, 2026 02:34
@posva
Copy link
Copy Markdown
Member

posva commented Jan 23, 2026

Is there a way to type the options?

currently doing

const plugin: VueLanguagePlugin = ({
  compilerOptions,
  modules: { typescript: ts },
  ...options
}) => {
  // rootDir comes from plugin options (vuejs/language-tools#5678)
  const optionsRootDir = (options as { rootDir?: string }).rootDir
  // Prioritize plugin options over tsconfig
  const rootDir = optionsRootDir ?? compilerOptions.rootDir

@posva
Copy link
Copy Markdown
Member

posva commented Jan 26, 2026

What's the syntax to make it work? It doesn't seem to recognize the name when I try it this way:

    "plugins": [
      "unplugin-vue-router/volar/sfc-route-blocks",
      "unplugin-vue-router/volar/sfc-typed-router"  // works
      // does not work
      // {
      //   "name": "unplugin-vue-router/volar/sfc-typed-router",
      //   "options": { "rootDir": "." }
      // }
    ]

@KazariEX
Copy link
Copy Markdown
Member Author

KazariEX commented Jan 26, 2026

The value of ctx.config is the entire original plugin object. (which is also the behavior of ts plugins!)

@posva
Copy link
Copy Markdown
Member

posva commented Jan 26, 2026

ah so it would be config.options.rootDir? But in that case, it should still have worked because I set a fallback value of rootDir 🤔

Testing this at vuejs/router#2603

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants