feat(compiler-sfc): deep selector supports multiple values
Size Report
Bundles
| File | Size | Gzip | Brotli |
|---|---|---|---|
| runtime-dom.global.prod.js | 101 kB | 38.4 kB | 34.5 kB |
| vue.global.prod.js | 159 kB | 58.5 kB | 52.1 kB |
Usages
| Name | Size | Gzip | Brotli |
|---|---|---|---|
| createApp (CAPI only) | 46.5 kB | 18.2 kB | 16.7 kB |
| createApp | 54.5 kB | 21.2 kB | 19.4 kB |
| createSSRApp | 58.7 kB | 22.9 kB | 20.9 kB |
| defineCustomElement | 59.5 kB | 22.8 kB | 20.8 kB |
| overall | 68.5 kB | 26.4 kB | 24 kB |
@vue/compiler-core
npm i https://pkg.pr.new/@vue/compiler-core@8232
@vue/compiler-dom
npm i https://pkg.pr.new/@vue/compiler-dom@8232
@vue/compiler-sfc
npm i https://pkg.pr.new/@vue/compiler-sfc@8232
@vue/compiler-ssr
npm i https://pkg.pr.new/@vue/compiler-ssr@8232
@vue/reactivity
npm i https://pkg.pr.new/@vue/reactivity@8232
@vue/runtime-core
npm i https://pkg.pr.new/@vue/runtime-core@8232
@vue/runtime-dom
npm i https://pkg.pr.new/@vue/runtime-dom@8232
@vue/server-renderer
npm i https://pkg.pr.new/@vue/server-renderer@8232
@vue/shared
npm i https://pkg.pr.new/@vue/shared@8232
vue
npm i https://pkg.pr.new/vue@8232
@vue/compat
npm i https://pkg.pr.new/@vue/compat@8232
commit: 13ca7e1
Walkthrough
The changes expand the selector rewriting logic in the style scoping plugin to support multiple and nested selectors within special pseudo-selectors like :deep, :slotted, and :global. Corresponding test cases are added to verify correct scoping behavior for these complex selector scenarios.
Changes
| Files | Change Summary |
|---|---|
| packages/compiler-sfc/src/style/pluginScoped.ts | Refactored rewriteSelector to handle multiple nodes for attribute injection, supporting complex and nested selectors. |
| packages/compiler-sfc/tests/compileStyle.spec.ts | Added test cases for multiple and nested selector handling in :deep, :slotted, and :global pseudo-selectors. |
Sequence Diagram(s)
sequenceDiagram
participant TestRunner
participant CompilerSFC
participant StylePluginScoped
TestRunner->>CompilerSFC: Compile style block with complex selectors
CompilerSFC->>StylePluginScoped: Call rewriteSelector(selector)
StylePluginScoped->>StylePluginScoped: Process pseudo-selectors (:deep, :slotted, :global)
StylePluginScoped-->>CompilerSFC: Return rewritten selector(s) with scoped attributes
CompilerSFC-->>TestRunner: Output compiled CSS
Estimated code review effort
4 (60–120 minutes)
Possibly related PRs
- vuejs/core#12918: Both PRs modify
rewriteSelectorto handle complex selector scenarios, though the referenced PR focuses on universal selectors while this PR addresses multiple and nested pseudo-selectors.
Suggested labels
ready to merge
Poem
In the garden of selectors deep,
Where pseudo-classes twist and creep,
The rabbits hop with careful glee,
Adding scopes for all to see.
Now with tests and code anew,
Complex styles are handled true!
🐇✨
✨ Finishing Touches
- [ ] 📝 Generate Docstrings
🪧 Tips
Chat
There are 3 ways to chat with CodeRabbit:
- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
I pushed a fix in commit <commit_id>, please review it.Explain this complex logic.Open a follow-up GitHub issue for this discussion.
- Files and specific lines of code (under the "Files changed" tab): Tag
@coderabbitaiin a new review comment at the desired location with your query. Examples:@coderabbitai explain this code block.@coderabbitai modularize this function.
- PR comments: Tag
@coderabbitaiin a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.@coderabbitai read src/utils.ts and explain its main purpose.@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.@coderabbitai help me debug CodeRabbit configuration file.
Support
Need help? Create a ticket on our support page for assistance with any issues or questions.
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.
CodeRabbit Commands (Invoked using PR comments)
@coderabbitai pauseto pause the reviews on a PR.@coderabbitai resumeto resume the paused reviews.@coderabbitai reviewto trigger an incremental review. This is useful when automatic reviews are disabled for the repository.@coderabbitai full reviewto do a full review from scratch and review all the files again.@coderabbitai summaryto regenerate the summary of the PR.@coderabbitai generate docstringsto generate docstrings for this PR.@coderabbitai generate sequence diagramto generate a sequence diagram of the changes in this PR.@coderabbitai resolveresolve all the CodeRabbit review comments.@coderabbitai configurationto show the current CodeRabbit configuration for the repository.@coderabbitai helpto get help.
Other keywords and placeholders
- Add
@coderabbitai ignoreanywhere in the PR description to prevent this PR from being reviewed. - Add
@coderabbitai summaryto generate the high-level summary at a specific location in the PR description. - Add
@coderabbitaianywhere in the PR title to generate the title automatically.
CodeRabbit Configuration File (.coderabbit.yaml)
- You can programmatically configure CodeRabbit by adding a
.coderabbit.yamlfile to the root of your repository. - Please see the configuration documentation for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation:
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
Documentation and Community
- Visit our Documentation for detailed information on how to use CodeRabbit.
- Join our Discord Community to get help, request features, and share feedback.
- Follow us on X/Twitter for updates and announcements.