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