Skip to content

Commit 06786e4

Browse files
committed
feat: follow change requests
1 parent f3b9b30 commit 06786e4

File tree

4 files changed

+21
-15
lines changed

4 files changed

+21
-15
lines changed

crates/biome_js_syntax/src/file_source.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,9 @@ impl Language {
120120
Debug, Clone, Default, Copy, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize,
121121
)]
122122
pub enum EmbeddingKind {
123-
Astro,
124-
// This variant is currently only used to record whether it is an Astro frontmatter,
125-
// and in that case, the `indentScriptAndStyle` setting is ignored.
126-
AstroFrontmatter,
123+
Astro {
124+
frontmatter: bool,
125+
},
127126
Vue,
128127
Svelte,
129128
#[default]
@@ -132,7 +131,10 @@ pub enum EmbeddingKind {
132131

133132
impl EmbeddingKind {
134133
pub const fn is_astro(&self) -> bool {
135-
matches!(self, Self::Astro)
134+
matches!(self, Self::Astro { frontmatter: false })
135+
}
136+
pub const fn is_astro_frontmatter(&self) -> bool {
137+
matches!(self, Self::Astro { frontmatter: true })
136138
}
137139
pub const fn is_vue(&self) -> bool {
138140
matches!(self, Self::Vue)
@@ -204,7 +206,10 @@ impl JsFileSource {
204206
}
205207

206208
pub fn astro() -> Self {
207-
Self::ts().with_embedding_kind(EmbeddingKind::Astro)
209+
Self::ts().with_embedding_kind(EmbeddingKind::Astro { frontmatter: false })
210+
}
211+
pub fn astro_frontmatter() -> Self {
212+
Self::ts().with_embedding_kind(EmbeddingKind::Astro { frontmatter: true })
208213
}
209214

210215
/// Vue file definition

crates/biome_service/src/file_handlers/html.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,8 @@ pub(crate) fn parse_astro_embedded_script(
445445
settings: &Settings,
446446
) -> Option<(EmbeddedSnippet<JsLanguage>, DocumentFileSource)> {
447447
let content = element.content_token()?;
448-
let file_source = JsFileSource::ts().with_embedding_kind(EmbeddingKind::AstroFrontmatter);
448+
let file_source =
449+
JsFileSource::ts().with_embedding_kind(EmbeddingKind::Astro { frontmatter: true });
449450
let document_file_source = DocumentFileSource::Js(file_source);
450451
let options = settings.parse_options::<JsLanguage>(path, &document_file_source);
451452
let parse = parse_js_with_offset_and_cache(
@@ -493,7 +494,7 @@ pub(crate) fn parse_embedded_script(
493494
}
494495
file_source
495496
} else if html_file_source.is_astro() {
496-
JsFileSource::ts().with_embedding_kind(EmbeddingKind::Astro)
497+
JsFileSource::ts().with_embedding_kind(EmbeddingKind::Astro { frontmatter: false })
497498
} else {
498499
let is_module = element.is_javascript_module().unwrap_or_default();
499500
if is_module {
@@ -672,8 +673,8 @@ fn format_embedded(
672673
let mut iter = embedded_nodes.iter();
673674
let node = iter.find(|node| node.range == range)?;
674675

675-
let wrap_document = |document: Document, is_astro_frontmatter: bool| {
676-
if indent_script_and_style && !is_astro_frontmatter {
676+
let wrap_document = |document: Document, should_indent: bool| {
677+
if indent_script_and_style && should_indent {
677678
let elements = vec![
678679
FormatElement::Line(LineMode::Hard),
679680
FormatElement::Tag(Tag::StartIndent),
@@ -701,7 +702,7 @@ fn format_embedded(
701702

702703
Some(wrap_document(
703704
formatted.into_document(),
704-
file_source.as_embedding_kind() == &EmbeddingKind::AstroFrontmatter,
705+
!file_source.as_embedding_kind().is_astro_frontmatter(),
705706
))
706707
}
707708
DocumentFileSource::Json(_) => {
@@ -710,14 +711,14 @@ fn format_embedded(
710711
let node = node.node.clone().embedded_syntax::<JsonLanguage>().clone();
711712
let formatted =
712713
biome_json_formatter::format_node_with_offset(json_options, &node).ok()?;
713-
Some(wrap_document(formatted.into_document(), false))
714+
Some(wrap_document(formatted.into_document(), true))
714715
}
715716
DocumentFileSource::Css(_) => {
716717
let css_options = settings.format_options::<CssLanguage>(biome_path, &node.source);
717718
let node = node.node.clone().embedded_syntax::<CssLanguage>();
718719
let formatted =
719720
biome_css_formatter::format_node_with_offset(css_options, &node).ok()?;
720-
Some(wrap_document(formatted.into_document(), false))
721+
Some(wrap_document(formatted.into_document(), true))
721722
}
722723
_ => None,
723724
}

crates/biome_service/src/file_handlers/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,7 @@ impl Features {
814814
match language_hint {
815815
// TODO: remove match once we remove vue/astro/svelte handlers
816816
DocumentFileSource::Js(source) => match source.as_embedding_kind() {
817-
EmbeddingKind::Astro | EmbeddingKind::AstroFrontmatter => self.astro.capabilities(),
817+
EmbeddingKind::Astro { .. } => self.astro.capabilities(),
818818
EmbeddingKind::Vue => self.vue.capabilities(),
819819
EmbeddingKind::Svelte => self.svelte.capabilities(),
820820
EmbeddingKind::None => self.js.capabilities(),

xtask/rules_check/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ fn assert_lint(
285285
DocumentFileSource::Js(file_source) => {
286286
// Temporary support for astro, svelte and vue code blocks
287287
let (code, file_source) = match file_source.as_embedding_kind() {
288-
EmbeddingKind::Astro => (
288+
EmbeddingKind::Astro { .. } => (
289289
biome_service::file_handlers::AstroFileHandler::input(code),
290290
JsFileSource::ts(),
291291
),

0 commit comments

Comments
 (0)