Skip to main content

svelte_syntax/parse/
mod.rs

1mod 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}