Skip to content

Commit cf47476

Browse files
committed
Fix variable lookup when it contains escaped dots
1 parent a8efcb7 commit cf47476

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

packages/tailwindcss-language-service/src/util/rewriting/index.test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,42 @@ test('recursive theme replacements (inlined)', () => {
164164
expect(inlineThemeValues('var(--mutual-b)', state)).toBe('calc(calc(var(--mutual-b) * 1) + 1)')
165165
})
166166

167+
test('pixel equivalents work with theme variables containing dots', () => {
168+
let map = new Map([
169+
['--font-size-sm', '0.875rem'],
170+
['--font-size.md', '1rem'],
171+
['--font-size.lg', '1.125rem'],
172+
['--spacing-4', '1rem'],
173+
['--spacing.8', '2rem'],
174+
])
175+
176+
let state = {
177+
designSystem: {
178+
theme: { prefix: null } as any,
179+
resolveThemeValue: (name) => map.get(name) ?? null,
180+
} as DesignSystem,
181+
} as State
182+
183+
let settings = { rootFontSize: 16 } as TailwindCssSettings
184+
185+
// Test that dotted variables are resolved correctly
186+
expect(addThemeValues('var(--font-size-sm)', state, settings)).toBe(
187+
'var(--font-size-sm) /* 0.875rem = 14px */',
188+
)
189+
expect(addThemeValues('var(--font-size\\.md)', state, settings)).toBe(
190+
'var(--font-size\\.md) /* 1rem = 16px */',
191+
)
192+
expect(addThemeValues('var(--font-size\\.lg)', state, settings)).toBe(
193+
'var(--font-size\\.lg) /* 1.125rem = 18px */',
194+
)
195+
expect(addThemeValues('var(--spacing-4)', state, settings)).toBe(
196+
'var(--spacing-4) /* 1rem = 16px */',
197+
)
198+
expect(addThemeValues('var(--spacing.8)', state, settings)).toBe(
199+
'var(--spacing.8) /* 2rem = 32px */',
200+
)
201+
})
202+
167203
test('Evaluating CSS calc expressions', () => {
168204
expect(replaceCssCalc('calc(1px + 1px)', (node) => evaluateExpression(node.value))).toBe('2px')
169205
expect(replaceCssCalc('calc(1px * 4)', (node) => evaluateExpression(node.value))).toBe('4px')

packages/tailwindcss-language-service/src/util/rewriting/lookup.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,9 @@ export function resolveVariableValue(design: DesignSystem, name: string): string
88
name = `--${name.slice(prefix.length + 3)}`
99
}
1010

11+
// Variables have to escape the `.` but the theme system in v4 does not store
12+
// the values with escapes so name lookups will fail.
13+
name = name.replaceAll('\\.', '.')
14+
1115
return design.resolveThemeValue?.(name, true) ?? null
1216
}

0 commit comments

Comments
 (0)