Skip to content

Commit 79c0b2c

Browse files
authored
fix(lsp): css preprocessor formatting (#27526)
1 parent 7d66018 commit 79c0b2c

File tree

3 files changed

+88
-5
lines changed

3 files changed

+88
-5
lines changed

cli/lsp/documents.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ pub enum LanguageId {
6464
Markdown,
6565
Html,
6666
Css,
67+
Scss,
68+
Sass,
69+
Less,
6770
Yaml,
6871
Sql,
6972
Svelte,
@@ -86,6 +89,9 @@ impl LanguageId {
8689
LanguageId::Markdown => Some("md"),
8790
LanguageId::Html => Some("html"),
8891
LanguageId::Css => Some("css"),
92+
LanguageId::Scss => Some("scss"),
93+
LanguageId::Sass => Some("sass"),
94+
LanguageId::Less => Some("less"),
8995
LanguageId::Yaml => Some("yaml"),
9096
LanguageId::Sql => Some("sql"),
9197
LanguageId::Svelte => Some("svelte"),
@@ -107,6 +113,9 @@ impl LanguageId {
107113
LanguageId::Markdown => Some("text/markdown"),
108114
LanguageId::Html => Some("text/html"),
109115
LanguageId::Css => Some("text/css"),
116+
LanguageId::Scss => None,
117+
LanguageId::Sass => None,
118+
LanguageId::Less => None,
110119
LanguageId::Yaml => Some("application/yaml"),
111120
LanguageId::Sql => None,
112121
LanguageId::Svelte => None,
@@ -140,6 +149,9 @@ impl FromStr for LanguageId {
140149
"markdown" => Ok(Self::Markdown),
141150
"html" => Ok(Self::Html),
142151
"css" => Ok(Self::Css),
152+
"scss" => Ok(Self::Scss),
153+
"sass" => Ok(Self::Sass),
154+
"less" => Ok(Self::Less),
143155
"yaml" => Ok(Self::Yaml),
144156
"sql" => Ok(Self::Sql),
145157
"svelte" => Ok(Self::Svelte),

tests/integration/lsp_tests.rs

Lines changed: 73 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11889,13 +11889,22 @@ fn lsp_format_html() {
1188911889
fn lsp_format_css() {
1189011890
let context = TestContextBuilder::new().use_temp_cwd().build();
1189111891
let temp_dir = context.temp_dir();
11892-
let file = source_file(temp_dir.path().join("file.css"), " foo {}");
11892+
let css_file = source_file(temp_dir.path().join("file.css"), " foo {}\n");
11893+
let scss_file = source_file(temp_dir.path().join("file.scss"), " $font-stack: Helvetica, sans-serif;\n\nbody {\n font: 100% $font-stack;\n}\n");
11894+
let sass_file = source_file(
11895+
temp_dir.path().join("file.sass"),
11896+
" $font-stack: Helvetica, sans-serif\n\nbody\n font: 100% $font-stack\n",
11897+
);
11898+
let less_file = source_file(
11899+
temp_dir.path().join("file.less"),
11900+
" @width: 10px;\n\n#header {\n width: @width;\n}\n",
11901+
);
1189311902
let mut client = context.new_lsp_command().build();
1189411903
client.initialize_default();
1189511904
let res = client.write_request(
1189611905
"textDocument/formatting",
1189711906
json!({
11898-
"textDocument": { "uri": file.url() },
11907+
"textDocument": { "uri": css_file.url() },
1189911908
"options": {
1190011909
"tabSize": 2,
1190111910
"insertSpaces": true,
@@ -11912,12 +11921,71 @@ fn lsp_format_css() {
1191211921
},
1191311922
"newText": "",
1191411923
},
11924+
]),
11925+
);
11926+
let res = client.write_request(
11927+
"textDocument/formatting",
11928+
json!({
11929+
"textDocument": { "uri": scss_file.url() },
11930+
"options": {
11931+
"tabSize": 2,
11932+
"insertSpaces": true,
11933+
},
11934+
}),
11935+
);
11936+
assert_eq!(
11937+
res,
11938+
json!([
1191511939
{
1191611940
"range": {
11917-
"start": { "line": 0, "character": 8 },
11918-
"end": { "line": 0, "character": 8 },
11941+
"start": { "line": 0, "character": 0 },
11942+
"end": { "line": 0, "character": 2 },
1191911943
},
11920-
"newText": "\n",
11944+
"newText": "",
11945+
},
11946+
]),
11947+
);
11948+
let res = client.write_request(
11949+
"textDocument/formatting",
11950+
json!({
11951+
"textDocument": { "uri": sass_file.url() },
11952+
"options": {
11953+
"tabSize": 2,
11954+
"insertSpaces": true,
11955+
},
11956+
}),
11957+
);
11958+
assert_eq!(
11959+
res,
11960+
json!([
11961+
{
11962+
"range": {
11963+
"start": { "line": 0, "character": 0 },
11964+
"end": { "line": 0, "character": 2 },
11965+
},
11966+
"newText": "",
11967+
},
11968+
]),
11969+
);
11970+
let res = client.write_request(
11971+
"textDocument/formatting",
11972+
json!({
11973+
"textDocument": { "uri": less_file.url() },
11974+
"options": {
11975+
"tabSize": 2,
11976+
"insertSpaces": true,
11977+
},
11978+
}),
11979+
);
11980+
assert_eq!(
11981+
res,
11982+
json!([
11983+
{
11984+
"range": {
11985+
"start": { "line": 0, "character": 0 },
11986+
"end": { "line": 0, "character": 2 },
11987+
},
11988+
"newText": "",
1192111989
},
1192211990
]),
1192311991
);

tests/util/server/src/lsp.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1289,6 +1289,9 @@ impl SourceFile {
12891289
"md" => "markdown",
12901290
"html" => "html",
12911291
"css" => "css",
1292+
"scss" => "scss",
1293+
"sass" => "sass",
1294+
"less" => "less",
12921295
"yaml" => "yaml",
12931296
"sql" => "sql",
12941297
"svelte" => "svelte",

0 commit comments

Comments
 (0)