From: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 07:37:29 +0000 (+0800) Subject: chore(deps): update lint (#13671) X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f5adc4b8cdf3df1b572ac18a979ff56b1e252dda;p=thirdparty%2Fvuejs%2Fcore.git chore(deps): update lint (#13671) * chore(deps): update lint * chore: format --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edison --- diff --git a/.github/contributing.md b/.github/contributing.md index 2554582b8..9fb673227 100644 --- a/.github/contributing.md +++ b/.github/contributing.md @@ -38,7 +38,6 @@ Hi! I'm really excited that you are interested in contributing to Vue.js. Before ### Pull Request Checklist - Vue core has two primary work branches: `main` and `minor`. - - If your pull request is a feature that adds new API surface, it should be submitted against the `minor` branch. - Otherwise, it should be submitted against the `main` branch. @@ -46,12 +45,10 @@ Hi! I'm really excited that you are interested in contributing to Vue.js. Before - [Make sure to tick the "Allow edits from maintainers" box](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork). This allows us to directly make minor edits / refactors and saves a lot of time. - If adding a new feature: - - Add accompanying test case. - Provide a convincing reason to add this feature. Ideally, you should open a suggestion issue first and have it approved before working on it. - If fixing a bug: - - If you are resolving a special issue, add `(fix #xxxx[,#xxxx])` (#xxxx is the issue id) in your PR title for a better release log, e.g. `update entities encoding/decoding (fix #3899)`. - Provide a detailed description of the bug in the PR. Live demo preferred. - Add appropriate test coverage if applicable. You can check the coverage of your code addition by running `nr test-coverage`. @@ -69,9 +66,7 @@ Hi! I'm really excited that you are interested in contributing to Vue.js. Before - The PR should fix the intended bug **only** and not introduce unrelated changes. This includes unnecessary refactors - a PR should focus on the fix and not code style, this makes it easier to trace changes in the future. - Consider the performance / size impact of the changes, and whether the bug being fixes justifies the cost. If the bug being fixed is a very niche edge case, we should try to minimize the size / perf cost to make it worthwhile. - - Is the code perf-sensitive (e.g. in "hot paths" like component updates or the vdom patch function?) - - If the branch is dev-only, performance is less of a concern. - Check how much extra bundle size the change introduces. @@ -265,7 +260,6 @@ This repository employs a [monorepo](https://en.wikipedia.org/wiki/Monorepo) set - `vue`: The public facing "full build" which includes both the runtime AND the compiler. - Private utility packages: - - `dts-test`: Contains type-only tests against generated dts files. - `sfc-playground`: The playground continuously deployed at https://play.vuejs.org. To run the playground locally, use [`nr dev-sfc`](#nr-dev-sfc). diff --git a/.github/maintenance.md b/.github/maintenance.md index b1fb550dd..7b0c2a336 100644 --- a/.github/maintenance.md +++ b/.github/maintenance.md @@ -48,7 +48,6 @@ Depending on the type of the PR, different considerations need to be taken into - Performance: if a refactor PR claims to improve performance, there should be benchmarks showcasing said performance unless the improvement is self-explanatory. - Code quality / stylistic PRs: we should be conservative on merging this type PRs because (1) they can be subjective in many cases, and (2) they often come with large git diffs, causing merge conflicts with other pending PRs, and leading to unwanted noise when tracing changes through git history. Use your best judgement on this type of PRs on whether they are worth it. - - For PRs in this category that are approved, do not merge immediately. Group them before releasing a new minor, after all feature-oriented PRs are merged. ### Reviewing a Feature @@ -56,7 +55,6 @@ Depending on the type of the PR, different considerations need to be taken into - Feature PRs should always have clear context and explanation on why the feature should be added, ideally in the form of an RFC. If the PR doesn't explain what real-world problem it is solving, ask the contributor to clarify. - Decide if the feature should require an RFC process. The line isn't always clear, but a rough criteria is whether it is augmenting an existing API vs. adding a new API. Some examples: - - Adding a new built-in component or directive is "significant" and definitely requires an RFC. - Template syntax additions like adding a new `v-on` modifier or a new `v-bind` syntax sugar are "substantial". It would be nice to have an RFC for it, but a detailed explanation on the use case and reasoning behind the design directly in the PR itself can be acceptable. - Small, low-impact additions like exposing a new utility type or adding a new app config option can be self-explanatory, but should still provide enough context in the PR. @@ -70,7 +68,6 @@ Depending on the type of the PR, different considerations need to be taken into - Implementation: code style should be consistent with the rest of the codebase, follow common best practices. Prefer code that is boring but easy to understand over "clever" code. - Size: bundle size matters. We have a GitHub action that compares the size change for every PR. We should always aim to realize the desired changes with the smallest amount of code size increase. - - Sometimes we need to compare the size increase vs. perceived benefits to decide whether a change is justifiable. Also take extra care to make sure added code can be tree-shaken if not needed. - Make sure to put dev-only code in `__DEV__` branches so they are tree-shakable. @@ -80,7 +77,6 @@ Depending on the type of the PR, different considerations need to be taken into - Make sure it doesn't accidentally cause dev-only or compiler-only code branches to be included in the runtime build. Notable case is that some functions in @vue/shared are compiler-only and should not be used in runtime code, e.g. `isHTMLTag` and `isSVGTag`. - Performance - - Be careful about code changes in "hot paths", in particular the Virtual DOM renderer (`runtime-core/src/renderer.ts`) and component instantiation code. - Potential Breakage diff --git a/package.json b/package.json index b9ed27efa..83c8a8a00 100644 --- a/package.json +++ b/package.json @@ -81,18 +81,18 @@ "enquirer": "^2.4.1", "esbuild": "^0.27.1", "esbuild-plugin-polyfill-node": "^0.3.0", - "eslint": "^9.27.0", - "eslint-plugin-import-x": "^4.13.1", + "eslint": "^9.39.2", + "eslint-plugin-import-x": "^4.16.1", "estree-walker": "catalog:", "jsdom": "^27.1.0", - "lint-staged": "^16.0.0", + "lint-staged": "^16.2.7", "lodash": "^4.17.21", "magic-string": "^0.30.21", "markdown-table": "^3.0.4", "marked": "13.0.3", "npm-run-all2": "^8.0.4", "picocolors": "^1.1.1", - "prettier": "^3.5.3", + "prettier": "^3.7.4", "pretty-bytes": "^7.1.0", "pug": "^3.0.3", "puppeteer": "~24.28.0", @@ -104,11 +104,11 @@ "semver": "^7.7.3", "serve": "^14.2.5", "serve-handler": "^6.1.6", - "simple-git-hooks": "^2.13.0", + "simple-git-hooks": "^2.13.1", "todomvc-app-css": "^2.4.3", "tslib": "^2.8.1", "typescript": "~5.6.2", - "typescript-eslint": "^8.32.1", + "typescript-eslint": "^8.49.0", "vite": "catalog:", "vitest": "^3.2.4" } diff --git a/packages/compiler-core/src/ast.ts b/packages/compiler-core/src/ast.ts index 2d6df9d90..520a43c93 100644 --- a/packages/compiler-core/src/ast.ts +++ b/packages/compiler-core/src/ast.ts @@ -482,7 +482,7 @@ export interface DirectiveArguments extends ArrayExpression { export interface DirectiveArgumentNode extends ArrayExpression { elements: // dir, exp, arg, modifiers - | [string] + | [string] | [string, ExpressionNode] | [string, ExpressionNode, ExpressionNode] | [string, ExpressionNode, ExpressionNode, ObjectExpression] @@ -492,7 +492,7 @@ export interface DirectiveArgumentNode extends ArrayExpression { export interface RenderSlotCall extends CallExpression { callee: typeof RENDER_SLOT arguments: // $slots, name, props, fallback - | [string, string | ExpressionNode] + | [string, string | ExpressionNode] | [string, string | ExpressionNode, PropsExpression] | [ string, diff --git a/packages/compiler-core/src/codegen.ts b/packages/compiler-core/src/codegen.ts index 6b4559fab..659697506 100644 --- a/packages/compiler-core/src/codegen.ts +++ b/packages/compiler-core/src/codegen.ts @@ -119,8 +119,10 @@ enum NewlineType { Unknown = -3, } -export interface CodegenContext - extends Omit, 'bindingMetadata' | 'inline'> { +export interface CodegenContext extends Omit< + Required, + 'bindingMetadata' | 'inline' +> { source: string code: string line: number diff --git a/packages/compiler-core/src/options.ts b/packages/compiler-core/src/options.ts index 1de865f42..8d19921c8 100644 --- a/packages/compiler-core/src/options.ts +++ b/packages/compiler-core/src/options.ts @@ -20,8 +20,7 @@ export interface ErrorHandlingOptions { } export interface ParserOptions - extends ErrorHandlingOptions, - CompilerCompatOptions { + extends ErrorHandlingOptions, CompilerCompatOptions { /** * Base mode is platform agnostic and only parses HTML-like template syntax, * treating all tags the same way. Specific tag parsing behavior can be @@ -217,7 +216,8 @@ interface SharedTransformCodegenOptions { } export interface TransformOptions - extends SharedTransformCodegenOptions, + extends + SharedTransformCodegenOptions, ErrorHandlingOptions, CompilerCompatOptions { /** diff --git a/packages/compiler-core/src/transform.ts b/packages/compiler-core/src/transform.ts index 9d8fd8429..f88ce3a7b 100644 --- a/packages/compiler-core/src/transform.ts +++ b/packages/compiler-core/src/transform.ts @@ -82,7 +82,8 @@ export interface ImportItem { } export interface TransformContext - extends Required>, + extends + Required>, CompilerCompatOptions { selfName: string | null root: RootNode diff --git a/packages/compiler-sfc/README.md b/packages/compiler-sfc/README.md index 4f8ff3ac8..4d2ae6e92 100644 --- a/packages/compiler-sfc/README.md +++ b/packages/compiler-sfc/README.md @@ -11,7 +11,6 @@ This package contains lower level utilities that you can use if you are writing The API is intentionally low-level due to the various considerations when integrating Vue SFCs in a build system: - Separate hot-module replacement (HMR) for script, template and styles - - template updates should not reset component state - style updates should be performed without component re-render diff --git a/packages/runtime-core/__tests__/rendererAttrsFallthrough.spec.ts b/packages/runtime-core/__tests__/rendererAttrsFallthrough.spec.ts index 45d00579f..73e67aab2 100644 --- a/packages/runtime-core/__tests__/rendererAttrsFallthrough.spec.ts +++ b/packages/runtime-core/__tests__/rendererAttrsFallthrough.spec.ts @@ -573,7 +573,7 @@ describe('attribute fallthrough', () => { const Child = { props: [], render() { - return openBlock(), createBlock('div') + return (openBlock(), createBlock('div')) }, } diff --git a/packages/runtime-core/__tests__/rendererFragment.spec.ts b/packages/runtime-core/__tests__/rendererFragment.spec.ts index 81cf7b8df..3394a41b2 100644 --- a/packages/runtime-core/__tests__/rendererFragment.spec.ts +++ b/packages/runtime-core/__tests__/rendererFragment.spec.ts @@ -416,7 +416,7 @@ describe('renderer: fragment', () => { const root = nodeOps.createElement('div') const renderFn = () => { - return openBlock(true), createBlock(Fragment, null) + return (openBlock(true), createBlock(Fragment, null)) } render(renderFn(), root) diff --git a/packages/runtime-core/src/apiDefineComponent.ts b/packages/runtime-core/src/apiDefineComponent.ts index e83715f6a..3369c2b21 100644 --- a/packages/runtime-core/src/apiDefineComponent.ts +++ b/packages/runtime-core/src/apiDefineComponent.ts @@ -183,8 +183,8 @@ export function defineComponent< export function defineComponent< // props TypeProps, - RuntimePropsOptions extends - ComponentObjectPropsOptions = ComponentObjectPropsOptions, + RuntimePropsOptions extends ComponentObjectPropsOptions = + ComponentObjectPropsOptions, RuntimePropsKeys extends string = string, // emits TypeEmits extends ComponentTypeEmits = {}, diff --git a/packages/runtime-core/src/compat/componentAsync.ts b/packages/runtime-core/src/compat/componentAsync.ts index b6bd6dd4b..fc6ae3b79 100644 --- a/packages/runtime-core/src/compat/componentAsync.ts +++ b/packages/runtime-core/src/compat/componentAsync.ts @@ -35,7 +35,7 @@ export function convertLegacyAsyncComponent( let resolve: (res: LegacyAsyncReturnValue) => void let reject: (reason?: any) => void const fallbackPromise = new Promise((r, rj) => { - ;(resolve = r), (reject = rj) + ;((resolve = r), (reject = rj)) }) const res = comp(resolve!, reject!) diff --git a/packages/runtime-core/src/componentOptions.ts b/packages/runtime-core/src/componentOptions.ts index fc41b04a9..66d1050e1 100644 --- a/packages/runtime-core/src/componentOptions.ts +++ b/packages/runtime-core/src/componentOptions.ts @@ -125,7 +125,9 @@ export interface ComponentOptionsBase< Directives extends Record = {}, Exposed extends string = string, Provide extends ComponentProvideOptions = ComponentProvideOptions, -> extends LegacyOptions, +> + extends + LegacyOptions, ComponentInternalOptions, ComponentCustomOptions { setup?: ( diff --git a/packages/runtime-core/src/componentPublicInstance.ts b/packages/runtime-core/src/componentPublicInstance.ts index a334b487d..8856d4e3b 100644 --- a/packages/runtime-core/src/componentPublicInstance.ts +++ b/packages/runtime-core/src/componentPublicInstance.ts @@ -132,13 +132,8 @@ export type UnwrapMixinsType< type EnsureNonVoid = T extends void ? {} : T export type ComponentPublicInstanceConstructor< - T extends ComponentPublicInstance< - Props, - RawBindings, - D, - C, - M - > = ComponentPublicInstance, + T extends ComponentPublicInstance = + ComponentPublicInstance, Props = any, RawBindings = any, D = any, diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index 85d37bc11..3487922e2 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -80,8 +80,8 @@ export function defineCustomElement( // overload 2: defineCustomElement with options object, infer props from options export function defineCustomElement< // props - RuntimePropsOptions extends - ComponentObjectPropsOptions = ComponentObjectPropsOptions, + RuntimePropsOptions extends ComponentObjectPropsOptions = + ComponentObjectPropsOptions, PropsKeys extends string = string, // emits RuntimeEmitsOptions extends EmitsOptions = {}, diff --git a/packages/runtime-dom/src/jsx.ts b/packages/runtime-dom/src/jsx.ts index 550926bb1..e15095b1e 100644 --- a/packages/runtime-dom/src/jsx.ts +++ b/packages/runtime-dom/src/jsx.ts @@ -29,7 +29,8 @@ import type * as CSS from 'csstype' export interface CSSProperties - extends CSS.Properties, + extends + CSS.Properties, CSS.PropertiesHyphen { /** * The index signature was removed to enable closed typing for style diff --git a/packages/vue-compat/README.md b/packages/vue-compat/README.md index 260c5df2c..4942b6a67 100644 --- a/packages/vue-compat/README.md +++ b/packages/vue-compat/README.md @@ -41,7 +41,6 @@ The following workflow walks through the steps of migrating an actual Vue 2 app ### Installation 1. Upgrade tooling if applicable. - - If using custom webpack setup: Upgrade `vue-loader` to `^16.0.0`. - If using `vue-cli`: upgrade to the latest `@vue/cli-service` with `vue upgrade` - (Alternative) migrate to [Vite](https://vitejs.dev/) + [vite-plugin-vue2](https://github.com/underfin/vite-plugin-vue2). [[Example commit](https://github.com/vuejs/vue-hackernews-2.0/commit/565b948919eb58f22a32afca7e321b490cb3b074)] @@ -160,7 +159,6 @@ The following workflow walks through the steps of migrating an actual Vue 2 app 5. After fixing the errors, the app should be able to run if it is not subject to the [limitations](#known-limitations) mentioned above. You will likely see a LOT of warnings from both the command line and the browser console. Here are some general tips: - - You can filter for specific warnings in the browser console. It's a good idea to use the filter and focus on fixing one item at a time. You can also use negated filters like `-GLOBAL_MOUNT`. - You can suppress specific deprecations via [compat configuration](#compat-configuration). @@ -287,41 +285,41 @@ Features that start with `COMPILER_` are compiler-specific: if you are using the | ID | Type | Description | Docs | | ---------------------------- | ---- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| GLOBAL_MOUNT | ✔ | new Vue() -> createApp | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#mounting-app-instance) | -| GLOBAL_EXTEND | ✔ | Vue.extend removed (use `defineComponent` or `extends` option) | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-extend-replaced-by-definecomponent) | -| GLOBAL_PROTOTYPE | ✔ | `Vue.prototype` -> `app.config.globalProperties` | [link](https://v3-migration.vuejs.org/breaking-changes/global-api.html#vue-prototype-replaced-by-config-globalproperties) | -| GLOBAL_SET | ✔ | `Vue.set` removed (no longer needed) | | -| GLOBAL_DELETE | ✔ | `Vue.delete` removed (no longer needed) | | -| GLOBAL_OBSERVABLE | ✔ | `Vue.observable` removed (use `reactive`) | [link](https://vuejs.org/api/reactivity-core.html#reactive) | -| CONFIG_KEY_CODES | ✔ | config.keyCodes removed | [link](https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html) | -| CONFIG_WHITESPACE | ✔ | In Vue 3 whitespace defaults to `"condense"` | | -| INSTANCE_SET | ✔ | `vm.$set` removed (no longer needed) | | -| INSTANCE_DELETE | ✔ | `vm.$delete` removed (no longer needed) | | -| INSTANCE_EVENT_EMITTER | ✔ | `vm.$on`, `vm.$off`, `vm.$once` removed | [link](https://v3-migration.vuejs.org/breaking-changes/events-api.html) | -| INSTANCE_EVENT_HOOKS | ✔ | Instance no longer emits `hook:x` events | [link](https://v3-migration.vuejs.org/breaking-changes/vnode-lifecycle-events.html) | -| INSTANCE_CHILDREN | ✔ | `vm.$children` removed | [link](https://v3-migration.vuejs.org/breaking-changes/children.html) | -| INSTANCE_LISTENERS | ✔ | `vm.$listeners` removed | [link](https://v3-migration.vuejs.org/breaking-changes/listeners-removed.html) | -| INSTANCE_SCOPED_SLOTS | ✔ | `vm.$scopedSlots` removed; `vm.$slots` now exposes functions | [link](https://v3-migration.vuejs.org/breaking-changes/slots-unification.html) | -| INSTANCE_ATTRS_CLASS_STYLE | ✔ | `$attrs` now includes `class` and `style` | [link](https://v3-migration.vuejs.org/breaking-changes/attrs-includes-class-style.html) | -| OPTIONS_DATA_FN | ✔ | `data` must be a function in all cases | [link](https://v3-migration.vuejs.org/breaking-changes/data-option.html) | -| OPTIONS_DATA_MERGE | ✔ | `data` from mixin or extension is now shallow merged | [link](https://v3-migration.vuejs.org/breaking-changes/data-option.html) | -| OPTIONS_BEFORE_DESTROY | ✔ | `beforeDestroy` -> `beforeUnmount` | | -| OPTIONS_DESTROYED | ✔ | `destroyed` -> `unmounted` | | -| WATCH_ARRAY | ✔ | watching an array no longer triggers on mutation unless deep | [link](https://v3-migration.vuejs.org/breaking-changes/watch.html) | -| V_ON_KEYCODE_MODIFIER | ✔ | `v-on` no longer supports keyCode modifiers | [link](https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html) | -| CUSTOM_DIR | ✔ | Custom directive hook names changed | [link](https://v3-migration.vuejs.org/breaking-changes/custom-directives.html) | -| ATTR_FALSE_VALUE | ✔ | No longer removes attribute if binding value is boolean `false` | [link](https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html) | -| ATTR_ENUMERATED_COERCION | ✔ | No longer special case enumerated attributes | [link](https://v3-migration.vuejs.org/breaking-changes/attribute-coercion.html) | -| TRANSITION_GROUP_ROOT | ✔ | `` no longer renders a root element by default | [link](https://v3-migration.vuejs.org/breaking-changes/transition-group.html) | -| COMPONENT_ASYNC | ✔ | Async component API changed (now requires `defineAsyncComponent`) | [link](https://v3-migration.vuejs.org/breaking-changes/async-components.html) | -| COMPONENT_FUNCTIONAL | ✔ | Functional component API changed (now must be plain functions) | [link](https://v3-migration.vuejs.org/breaking-changes/functional-components.html) | -| COMPONENT_V_MODEL | ✔ | Component v-model reworked | [link](https://v3-migration.vuejs.org/breaking-changes/v-model.html) | -| RENDER_FUNCTION | ✔ | Render function API changed | [link](https://v3-migration.vuejs.org/breaking-changes/render-function-api.html) | -| FILTERS | ✔ | Filters removed (this option affects only runtime filter APIs) | [link](https://v3-migration.vuejs.org/breaking-changes/filters.html) | -| COMPILER_IS_ON_ELEMENT | ✔ | `is` usage is now restricted to `` only | [link](https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html) | -| COMPILER_V_BIND_SYNC | ✔ | `v-bind.sync` replaced by `v-model` with arguments | [link](https://v3-migration.vuejs.org/breaking-changes/v-model.html) | -| COMPILER_V_BIND_OBJECT_ORDER | ✔ | `v-bind="object"` is now order sensitive | [link](https://v3-migration.vuejs.org/breaking-changes/v-bind.html) | -| COMPILER_V_ON_NATIVE | ✔ | `v-on.native` modifier removed | [link](https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html) | -| COMPILER_V_FOR_REF | ✔ | `ref` in `v-for` (compiler support) | | -| COMPILER_NATIVE_TEMPLATE | ✔ | `