Skip to main content

svelte_syntax/parse/
mod.rs

1mod component;
2mod css;
3mod oxc;
4mod scan;
5
6use crate::ast::{CssAst, modern::CssNode};
7use crate::error::CompileError;
8pub use component::modern::{
9    attach_estree_comments_to_tree, attach_leading_comments_to_expression,
10    attach_trailing_comments_to_expression, estree_value_to_usize, expression_literal_bool,
11    expression_literal_string, find_matching_brace_close, legacy_expression_from_modern_expression,
12    line_column_at_offset, modern_empty_identifier_expression, named_children_vec,
13    normalize_estree_node, normalize_pattern_template_elements, parse_all_comment_nodes,
14    parse_leading_comment_nodes, parse_modern_expression_from_text, parse_modern_expression_tag,
15    position_raw_node,
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};
23pub use component::{
24    RawField, estree_node_field, estree_node_field_array, estree_node_field_mut,
25    estree_node_field_object, estree_node_field_str, estree_node_has_field, estree_node_type,
26    expression_identifier_name, modern_node_end, modern_node_span, modern_node_start,
27    walk_estree_node, walk_raw_value,
28};
29pub(crate) use scan::find_valid_legacy_closing_tag_start;
30pub use scan::parse_svelte_ignores;
31
32pub fn parse_css(source: &str) -> Result<CssAst, CompileError> {
33    css::parse_css_stylesheet(source)
34}
35
36pub fn parse_modern_css_nodes(source: &str, start: usize, end: usize) -> Vec<CssNode> {
37    css::parse_modern_css_nodes(source, start, end)
38}
39
40pub(crate) fn parse_modern_program_content_with_offsets(
41    snippet: &str,
42    global_start: usize,
43    start_line: usize,
44    start_column: usize,
45    end_line: usize,
46    end_column: usize,
47    is_ts: bool,
48) -> Option<crate::ast::modern::EstreeNode> {
49    oxc::SvelteOxcParser::new(snippet)
50        .with_offsets(oxc::OxcProgramOffsets {
51            global_start,
52            start_line,
53            start_column,
54            end_line,
55            end_column,
56        })
57        .parse_program_for_compile(is_ts)
58}
59
60pub(crate) fn parse_modern_expression_with_oxc(
61    expression: &str,
62    global_start: usize,
63    base_line: usize,
64    base_column: usize,
65) -> Option<crate::ast::modern::Expression> {
66    oxc::SvelteOxcParser::new(expression)
67        .with_offsets(oxc::OxcProgramOffsets {
68            global_start,
69            start_line: base_line,
70            start_column: base_column,
71            end_line: base_line,
72            end_column: base_column + expression.len(),
73        })
74        .parse_expression_for_template()
75}
76
77pub(crate) fn parse_modern_expression_error_with_oxc(
78    expression: &str,
79    global_start: usize,
80    base_line: usize,
81    base_column: usize,
82) -> Option<std::sync::Arc<str>> {
83    oxc::SvelteOxcParser::new(expression)
84        .with_offsets(oxc::OxcProgramOffsets {
85            global_start,
86            start_line: base_line,
87            start_column: base_column,
88            end_line: base_line,
89            end_column: base_column + expression.len(),
90        })
91        .parse_expression_error_for_template()
92}
93
94pub(crate) fn parse_modern_expression_error_detail_with_oxc(
95    expression: &str,
96    global_start: usize,
97    base_line: usize,
98    base_column: usize,
99) -> Option<(usize, std::sync::Arc<str>)> {
100    oxc::SvelteOxcParser::new(expression)
101        .with_offsets(oxc::OxcProgramOffsets {
102            global_start,
103            start_line: base_line,
104            start_column: base_column,
105            end_line: base_line,
106            end_column: base_column + expression.len(),
107        })
108        .parse_expression_error_detail_for_template()
109}