svelte_syntax/parse/
mod.rs1mod component;
2mod css;
3mod oxc;
4mod oxc_query;
5mod scan;
6
7use std::sync::Arc;
8
9use crate::ast::{CssAst, modern::CssNode};
10use crate::error::CompileError;
11use crate::js::ParsedJsProgram;
12pub use component::modern::{
13 expression_literal_bool, expression_literal_string, find_matching_brace_close,
14 legacy_expression_from_modern_expression, line_column_at_offset, named_children_vec,
15 parse_modern_expression_from_text, parse_modern_expression_tag,
16};
17pub use component::{
18 AttributeKind, ElementKind, SvelteElementKind, classify_attribute_name, classify_element_name,
19 is_component_name, is_custom_element_name, is_valid_component_name, is_valid_element_name,
20 is_void_element_name,
21};
22pub use component::{ParseMode, ParseOptions, parse, parse_modern_root, parse_modern_root_incremental};
23pub use component::{
24 expression_identifier_name, modern_node_end, modern_node_span, modern_node_start,
25};
26pub(crate) use scan::find_valid_legacy_closing_tag_start;
27pub use scan::parse_svelte_ignores;
28
29pub(crate) struct ParsedProgramContent {
30 pub parsed: Arc<ParsedJsProgram>,
31}
32
33pub fn parse_css(source: &str) -> Result<CssAst, CompileError> {
34 css::parse_css_stylesheet(source)
35}
36
37pub fn parse_modern_css_nodes(source: &str, start: usize, end: usize) -> Vec<CssNode> {
38 css::parse_modern_css_nodes(source, start, end)
39}
40
41pub(crate) fn parse_modern_program_content_with_offsets(
42 snippet: &str,
43 global_start: usize,
44 _start_line: usize,
45 _start_column: usize,
46 _end_line: usize,
47 _end_column: usize,
48 is_ts: bool,
49) -> Option<ParsedProgramContent> {
50 oxc::SvelteOxcParser::new(snippet)
51 .with_offsets(oxc::OxcProgramOffsets { global_start })
52 .parse_program_for_compile(is_ts)
53}
54
55pub(crate) fn parse_modern_expression_with_oxc(
56 expression: &str,
57 global_start: usize,
58 _base_line: usize,
59 _base_column: usize,
60) -> Option<crate::ast::modern::Expression> {
61 oxc::SvelteOxcParser::new(expression)
62 .with_offsets(oxc::OxcProgramOffsets { global_start })
63 .parse_expression_for_template()
64}
65
66pub(crate) fn parse_modern_expression_error_with_oxc(
67 expression: &str,
68 global_start: usize,
69 _base_line: usize,
70 _base_column: usize,
71) -> Option<std::sync::Arc<str>> {
72 oxc::SvelteOxcParser::new(expression)
73 .with_offsets(oxc::OxcProgramOffsets { global_start })
74 .parse_expression_error_for_template()
75}
76
77pub(crate) fn parse_modern_expression_error_detail_with_oxc(
78 expression: &str,
79 global_start: usize,
80 _base_line: usize,
81 _base_column: usize,
82) -> Option<(usize, std::sync::Arc<str>)> {
83 oxc::SvelteOxcParser::new(expression)
84 .with_offsets(oxc::OxcProgramOffsets { global_start })
85 .parse_expression_error_detail_for_template()
86}