Color picker goober works w single quotes (#6957)
* lsp stuffs Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
@ -1,4 +1,3 @@
|
|||||||
import { KCL_DEFAULT_LENGTH } from '@src/lib/constants'
|
|
||||||
import type { CmdBarFixture } from '@e2e/playwright/fixtures/cmdBarFixture'
|
import type { CmdBarFixture } from '@e2e/playwright/fixtures/cmdBarFixture'
|
||||||
import type { SceneFixture } from '@e2e/playwright/fixtures/sceneFixture'
|
import type { SceneFixture } from '@e2e/playwright/fixtures/sceneFixture'
|
||||||
import { TEST_SETTINGS, TEST_SETTINGS_KEY } from '@e2e/playwright/storageStates'
|
import { TEST_SETTINGS, TEST_SETTINGS_KEY } from '@e2e/playwright/storageStates'
|
||||||
@ -9,6 +8,7 @@ import {
|
|||||||
settingsToToml,
|
settingsToToml,
|
||||||
} from '@e2e/playwright/test-utils'
|
} from '@e2e/playwright/test-utils'
|
||||||
import { expect, test } from '@e2e/playwright/zoo-test'
|
import { expect, test } from '@e2e/playwright/zoo-test'
|
||||||
|
import { KCL_DEFAULT_LENGTH } from '@src/lib/constants'
|
||||||
|
|
||||||
test.beforeEach(async ({ page, context }) => {
|
test.beforeEach(async ({ page, context }) => {
|
||||||
// Make the user avatar image always 404
|
// Make the user avatar image always 404
|
||||||
@ -873,6 +873,50 @@ sweepSketch = startSketchOn(XY)
|
|||||||
mask: lowerRightMasks(page),
|
mask: lowerRightMasks(page),
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
test('code color goober works with single quotes', async ({
|
||||||
|
page,
|
||||||
|
context,
|
||||||
|
scene,
|
||||||
|
cmdBar,
|
||||||
|
}) => {
|
||||||
|
const u = await getUtils(page)
|
||||||
|
await context.addInitScript(async () => {
|
||||||
|
localStorage.setItem(
|
||||||
|
'persistCode',
|
||||||
|
`// Create a pipe using a sweep.
|
||||||
|
|
||||||
|
// Create a path for the sweep.
|
||||||
|
sweepPath = startSketchOn(XZ)
|
||||||
|
|> startProfile(at = [0.05, 0.05])
|
||||||
|
|> line(end = [0, 7])
|
||||||
|
|> tangentialArc(angle = 90, radius = 5)
|
||||||
|
|> line(end = [-3, 0])
|
||||||
|
|> tangentialArc(angle = -90, radius = 5)
|
||||||
|
|> line(end = [0, 7])
|
||||||
|
|
||||||
|
sweepSketch = startSketchOn(XY)
|
||||||
|
|> startProfile(at = [2, 0])
|
||||||
|
|> arc(angleStart = 0, angleEnd = 360, radius = 2)
|
||||||
|
|> sweep(path = sweepPath)
|
||||||
|
|> appearance(
|
||||||
|
color = '#bb00ff',
|
||||||
|
metalness = 90,
|
||||||
|
roughness = 90
|
||||||
|
)
|
||||||
|
`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
await page.setViewportSize({ width: 1200, height: 1000 })
|
||||||
|
await u.waitForAuthSkipAppStart()
|
||||||
|
|
||||||
|
await scene.settled(cmdBar)
|
||||||
|
|
||||||
|
await expect(page, 'expect small color widget').toHaveScreenshot({
|
||||||
|
maxDiffPixels: 100,
|
||||||
|
mask: lowerRightMasks(page),
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
test('code color goober opening window', async ({
|
test('code color goober opening window', async ({
|
||||||
page,
|
page,
|
||||||
|
14
rust/Cargo.lock
generated
14
rust/Cargo.lock
generated
@ -535,7 +535,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
|
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -963,7 +963,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
|
checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1746,7 +1746,7 @@ checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"hermit-abi",
|
"hermit-abi",
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2987,7 +2987,7 @@ dependencies = [
|
|||||||
"once_cell",
|
"once_cell",
|
||||||
"socket2",
|
"socket2",
|
||||||
"tracing",
|
"tracing",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -3306,7 +3306,7 @@ dependencies = [
|
|||||||
"errno",
|
"errno",
|
||||||
"libc",
|
"libc",
|
||||||
"linux-raw-sys",
|
"linux-raw-sys",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -3900,7 +3900,7 @@ dependencies = [
|
|||||||
"getrandom 0.3.1",
|
"getrandom 0.3.1",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rustix",
|
"rustix",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -4753,7 +4753,7 @@ version = "0.1.9"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -4220,8 +4220,8 @@ sketch001 = startSketchOn(XY)
|
|||||||
result,
|
result,
|
||||||
vec![tower_lsp::lsp_types::ColorInformation {
|
vec![tower_lsp::lsp_types::ColorInformation {
|
||||||
range: tower_lsp::lsp_types::Range {
|
range: tower_lsp::lsp_types::Range {
|
||||||
start: tower_lsp::lsp_types::Position { line: 4, character: 24 },
|
start: tower_lsp::lsp_types::Position { line: 4, character: 25 },
|
||||||
end: tower_lsp::lsp_types::Position { line: 4, character: 33 },
|
end: tower_lsp::lsp_types::Position { line: 4, character: 32 },
|
||||||
},
|
},
|
||||||
color: tower_lsp::lsp_types::Color {
|
color: tower_lsp::lsp_types::Color {
|
||||||
red: 1.0,
|
red: 1.0,
|
||||||
@ -4272,8 +4272,8 @@ sketch001 = startSketchOn(XY)
|
|||||||
result,
|
result,
|
||||||
vec![tower_lsp::lsp_types::ColorInformation {
|
vec![tower_lsp::lsp_types::ColorInformation {
|
||||||
range: tower_lsp::lsp_types::Range {
|
range: tower_lsp::lsp_types::Range {
|
||||||
start: tower_lsp::lsp_types::Position { line: 4, character: 24 },
|
start: tower_lsp::lsp_types::Position { line: 4, character: 25 },
|
||||||
end: tower_lsp::lsp_types::Position { line: 4, character: 33 },
|
end: tower_lsp::lsp_types::Position { line: 4, character: 32 },
|
||||||
},
|
},
|
||||||
color: tower_lsp::lsp_types::Color {
|
color: tower_lsp::lsp_types::Color {
|
||||||
red: 1.0,
|
red: 1.0,
|
||||||
@ -4291,8 +4291,8 @@ sketch001 = startSketchOn(XY)
|
|||||||
uri: "file:///test.kcl".try_into().unwrap(),
|
uri: "file:///test.kcl".try_into().unwrap(),
|
||||||
},
|
},
|
||||||
range: tower_lsp::lsp_types::Range {
|
range: tower_lsp::lsp_types::Range {
|
||||||
start: tower_lsp::lsp_types::Position { line: 4, character: 24 },
|
start: tower_lsp::lsp_types::Position { line: 4, character: 25 },
|
||||||
end: tower_lsp::lsp_types::Position { line: 4, character: 33 },
|
end: tower_lsp::lsp_types::Position { line: 4, character: 32 },
|
||||||
},
|
},
|
||||||
color: tower_lsp::lsp_types::Color {
|
color: tower_lsp::lsp_types::Color {
|
||||||
red: 1.0,
|
red: 1.0,
|
||||||
|
@ -438,8 +438,15 @@ impl Node<Program> {
|
|||||||
let add_color = |literal: &Node<Literal>| {
|
let add_color = |literal: &Node<Literal>| {
|
||||||
// Check if the string is a color.
|
// Check if the string is a color.
|
||||||
if let Some(c) = literal.value.is_color() {
|
if let Some(c) = literal.value.is_color() {
|
||||||
|
let source_range = literal.as_source_range();
|
||||||
|
// We subtract 1 from either side because of the "'s in the literal.
|
||||||
|
let fixed_source_range = SourceRange::new(
|
||||||
|
source_range.start() + 1,
|
||||||
|
source_range.end() - 1,
|
||||||
|
source_range.module_id(),
|
||||||
|
);
|
||||||
let color = ColorInformation {
|
let color = ColorInformation {
|
||||||
range: literal.as_source_range().to_lsp_range(code),
|
range: fixed_source_range.to_lsp_range(code),
|
||||||
color: tower_lsp::lsp_types::Color {
|
color: tower_lsp::lsp_types::Color {
|
||||||
red: c.r,
|
red: c.r,
|
||||||
green: c.g,
|
green: c.g,
|
||||||
@ -498,7 +505,11 @@ impl Node<Program> {
|
|||||||
crate::walk::walk(self, |node: crate::walk::Node<'a>| {
|
crate::walk::walk(self, |node: crate::walk::Node<'a>| {
|
||||||
match node {
|
match node {
|
||||||
crate::walk::Node::Literal(literal) => {
|
crate::walk::Node::Literal(literal) => {
|
||||||
if literal.start == pos_start && literal.end == pos_end && literal.value.is_color().is_some() {
|
// Account for the quotes in the literal.
|
||||||
|
if (literal.start + 1) == pos_start
|
||||||
|
&& (literal.end - 1) == pos_end
|
||||||
|
&& literal.value.is_color().is_some()
|
||||||
|
{
|
||||||
found.replace(true);
|
found.replace(true);
|
||||||
return Ok(true);
|
return Ok(true);
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ function discoverColorsInKCL(
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function parseColorLiteral(colorLiteral: string): ColorData | null {
|
export function parseColorLiteral(colorLiteral: string): ColorData | null {
|
||||||
const literal = colorLiteral.replace(/"/g, '')
|
const literal = colorLiteral.replace(/"/g, '').replace(/'/g, '')
|
||||||
const match = hexRegex.exec(literal)
|
const match = hexRegex.exec(literal)
|
||||||
if (!match) {
|
if (!match) {
|
||||||
return null
|
return null
|
||||||
|
Reference in New Issue
Block a user