Get CSS completions in styled-components in under 2 minutes!
npm install -g vscode-langservers-extractedFor Neovim 0.11+ (Native LSP):
{
"crafts69guy/styled-components.nvim",
dependencies = {
"nvim-treesitter/nvim-treesitter",
-- nvim-lspconfig is optional for Neovim 0.11+
},
ft = { "typescript", "typescriptreact", "javascript", "javascriptreact" },
opts = {}, -- Use default config
}For Neovim 0.10.x:
{
"crafts69guy/styled-components.nvim",
dependencies = {
"nvim-treesitter/nvim-treesitter",
"neovim/nvim-lspconfig", -- Required for 0.10.x
},
ft = { "typescript", "typescriptreact", "javascript", "javascriptreact" },
opts = {}, -- Use default config
}Plugin auto-configures everything. Just reload Neovim.
Create test.tsx:
import styled from 'styled-components';
const Button = styled.div`
dis ← Type here and trigger completion (Ctrl+Space)
`;You should see:
displaydisplay-insidedisplay-list-item- etc.
const Box = styled.div`
dis → display, display-inside, ...
display: f → flex, flow-root, ...
color: → CSS colors, values, ...
`;const Box = styled.div`
display: flex;
^^^^^^^
Press K here → See MDN documentation!
`;const Box = styled.div`
colr: red; // ← Error: Unknown property 'colr'
display: flexxx; // ← Error: Invalid value 'flexxx'
`;Check cssls installed:
:!which vscode-css-language-serverShould show path. If not found, run step 1 again.
Check LSP attached:
:LspInfoShould show cssls client attached.
Check TreeSitter:
:TSInstall typescript tsxDebug mode:
require("styled-components").setup({ debug = true })Check status:
:lua require("styled-components").print_status()Should show:
{
injection_available = true,
injection_active = true,
injected_language = "css", -- When cursor in template
}If injection_available = false:
- Check Neovim version:
:version(need 0.10+) - Update TreeSitter:
:TSUpdate
If injection_active = false:
- Make sure you're in a
.tsxor.tsfile - Check you have
import styled from 'styled-components' - Place cursor INSIDE template literal
All these work automatically:
// styled.element
const Box = styled.div`...`;
// styled(Component)
const Styled = styled(Button)`...`;
// css helper
const styles = css`...`;
// createGlobalStyle
const Global = createGlobalStyle`...`;
// keyframes
const fadeIn = keyframes`...`;Default config works for 99% of users. To customize:
require("styled-components").setup({
enabled = true,
debug = false,
auto_setup = true,
cssls_config = {
settings = {
css = {
validate = true,
lint = {
unknownAtRules = "ignore",
vendorPrefix = "warning",
},
},
},
},
})You now have native CSS LSP in styled-components!
- Same experience as .css files
- Full CSS completions from cssls
- Hover documentation
- Diagnostics for errors
- Zero configuration needed
Enjoy! 🎉
- README.md - Full documentation
- CLAUDE.md - Architecture details
- VS_CODE_COMPARISON.md - How it compares
Create an issue: https://github.com/crafts69guy/styled-components.nvim/issues