Skip to main content

omena_parser/
lib.rs

1//! Green-field parser substrate for omena-css.
2//!
3//! This crate owns the cstree parser track and publishes parser facts for the
4//! product query, bridge, LSP, and transform consumers.
5
6#[cfg(test)]
7pub(crate) use omena_syntax::SyntaxKind;
8pub use omena_syntax::{CssKeywordText, StyleDialect, css_keyword};
9
10mod closed_world;
11mod cst;
12mod extension;
13mod facts;
14mod instrumentation;
15mod language;
16mod lex;
17mod parse;
18mod parse_tree_contract_idl_generated;
19// R1 narrow public surface: `public_product` is private; only this curated set
20// of V0 contract types + summary fns is re-exported (no wildcard). Reuse of
21// omena-parser as a building block goes through these names — keep the list
22// explicit and minimal rather than widening to `pub use public_product::*`.
23mod public_product;
24mod recovery;
25mod spans;
26mod summaries;
27mod syntax_helpers;
28mod value_names;
29pub use closed_world::{
30    ClosedWorldBundleBuildErrorV0, ClosedWorldBundleV0, ClosedWorldInterfaceHashAvailabilityV0,
31    ClosedWorldInterfaceHashEntryV0, ClosedWorldInterfaceHashSetV0, ClosedWorldLinkedModuleV0,
32    ClosedWorldModuleMetadataV0, ClosedWorldReachabilityBitsetParityReportV0,
33    ClosedWorldSourcePrecisionSummaryV0, ConfigurationHashV0, ModuleIdV0, ModuleInstanceKeyV0,
34    ModuleQualifiedSymbolSetV0, OpenWorldSnapshotV0, ReachabilityIndexV0,
35    summarize_closed_world_reachability_bitset_parity_v0,
36};
37pub use cst::{
38    AtRuleCstNode, BogusCstNode, CommaSeparatedComponentValueListCstNode, ComponentValueCstNode,
39    ComponentValueListCstNode, CustomPropertyValueCstNode, DeclarationCstNode,
40    DeclarationListCstNode, ParsedCst, RuleCstNode, SelectorCstNode, SimpleBlockCstNode,
41    StylesheetCstNode, TypedCstNode, UrlValueCstNode, ValueCstNode, is_at_rule_node_kind,
42};
43pub use extension::{BuiltinDialectExtension, DialectExtension, TemplatePlaceholderMode};
44pub(crate) use extension::{at_rule_spec, scss_at_rule_spec};
45pub use facts::{
46    ParsedAnimationFact, ParsedAnimationFactKind, ParsedAtRuleFact,
47    ParsedCssModuleComposesEdgeFact, ParsedCssModuleComposesEdgeKind, ParsedCssModuleComposesFact,
48    ParsedCssModuleComposesFactKind, ParsedCssModuleValueDefinitionEdgeFact,
49    ParsedCssModuleValueFact, ParsedCssModuleValueFactKind, ParsedCssModuleValueImportEdgeFact,
50    ParsedExtendTargetFact, ParsedExtendTargetFactKind, ParsedIcssExportEdgeFact, ParsedIcssFact,
51    ParsedIcssFactKind, ParsedIcssImportEdgeFact, ParsedSassCallableParameterFact,
52    ParsedSassCallableSignatureFact, ParsedSassIncludeFact, ParsedSassModuleEdgeFact,
53    ParsedSassModuleEdgeFactKind, ParsedSassPlaceholderDefinitionFact, ParsedSassSymbolFact,
54    ParsedSassSymbolFactKind, ParsedSelectorFact, ParsedSelectorFactKind, ParsedStyleFacts,
55    ParsedVariableFact, ParsedVariableFactKind, collect_icss_export_values_from_cst,
56    collect_style_facts_with_extension, facts_from_cst,
57};
58pub(crate) use facts::{
59    SelectorBranch, collect_class_selector_names_from_header,
60    css_module_block_scope_marker_in_header, css_module_header_is_global_only,
61    product_facts_from_cst, resolve_selector_header, split_selector_groups,
62};
63pub(crate) use facts::{
64    collect_css_module_value_definition_edge_names, css_module_value_reference_token_can_be_name,
65    css_module_value_source_name, css_module_value_statement_end, declaration_colon_index,
66};
67pub use instrumentation::{
68    OmenaParserLexInstrumentationSnapshotV0, OmenaParserParseInstrumentationSnapshotV0,
69    with_omena_parser_lex_instrumentation, with_omena_parser_parse_instrumentation,
70};
71#[cfg(test)]
72pub(crate) use instrumentation::{
73    omena_parser_syntax_root_materialization_count,
74    reset_omena_parser_syntax_root_materialization_count,
75};
76pub(crate) use instrumentation::{
77    record_omena_parser_lex_materialization, record_omena_parser_parse_materialization,
78    record_omena_parser_syntax_root_materialization,
79};
80pub use language::StyleLanguage;
81pub use lex::{LexResult, LexedToken};
82pub(crate) use lex::{Token, Tokenizer, public_token_text};
83pub use parse::{
84    HirId, ParseEntryPoint, ParseError, ParseErrorCode, ParseResult, ParseReuseCache, SyntaxNodeId,
85    collect_style_facts, hir_id_for_syntax_node, lex, lex_with_extension, parse, parse_entry_point,
86    parse_entry_point_with_extension, parse_entry_point_with_extension_and_reuse_cache,
87    parse_entry_point_with_reuse_cache, parse_only, parse_with_extension, parse_with_reuse_cache,
88    syntax_node_id,
89};
90pub(crate) use parse::{Parser, tokenize};
91pub use parse_tree_contract_idl_generated::ParseTreeNodeV0;
92pub use public_product::{
93    ParserCanonicalCandidateBundleV0, ParserCanonicalProducerSignalV0, ParserEvaluatorCandidatesV0,
94    ParserIndexSummaryV0, dialect_for_path, summarize_css_modules_intermediate,
95    summarize_parser_canonical_candidate, summarize_parser_canonical_producer_signal,
96    summarize_parser_evaluator_candidates,
97};
98pub use recovery::{RECOVERY_DECLARATION, RECOVERY_SELECTOR, RECOVERY_TOP, TokenSet};
99pub use spans::{ParserByteSpanV0, ParserPositionV0, ParserRangeV0};
100pub use summaries::{
101    OmenaParserAtRuleKindCountsV0, OmenaParserCssModuleComposesEdgeFactV0,
102    OmenaParserCssModuleValueDefinitionEdgeFactV0, OmenaParserCssModuleValueImportEdgeFactV0,
103    OmenaParserDeclarationKindCountsV0, OmenaParserIcssExportEdgeFactV0,
104    OmenaParserIcssImportEdgeFactV0, OmenaParserLexSummaryV0, OmenaParserLexTokenV0,
105    OmenaParserParityLiteSummaryV0, OmenaParserSassModuleEdgeFactV0, OmenaParserSassSymbolFactV0,
106    OmenaParserSassSymbolResolutionCapabilitiesV0, OmenaParserSassSymbolResolutionEdgeV0,
107    OmenaParserSassSymbolResolutionV0, OmenaParserStyleFactsSummaryV0, ParserBoundarySummary,
108    ParserCstEquivalenceSummaryV0, ParserPrattValueCoverageSummaryV0,
109    ParserRecursiveDescentCoverageSummaryV0, ParserSemanticNameConsumptionSummaryV0,
110    summarize_omena_parser_lex, summarize_omena_parser_parity_lite,
111    summarize_omena_parser_style_facts, summarize_parser_boundary,
112    summarize_parser_cst_equivalence, summarize_parser_semantic_name_consumption,
113    summarize_pratt_value_parser_coverage, summarize_recursive_descent_parser_coverage,
114};
115#[cfg(test)]
116pub(crate) use syntax_helpers::infix_binding_power;
117pub(crate) use syntax_helpers::{
118    UNARY_PREFIX_RIGHT_BINDING_POWER, at_rule_prelude_head_is_custom_ident,
119    at_rule_prelude_head_is_custom_property_name, attribute_name_token_can_continue,
120    attribute_name_token_can_start, attribute_value_token_can_start, bracketed_value_recovery,
121    comma_separated_component_value_list_item_recovery, containing_at_rule_header_name,
122    css_module_scope_function_kind, dialect_allows_value_logical_operators,
123    find_block_after_header, find_selector_block_after_header, function_argument_count_is_valid,
124    function_argument_recovery, function_requires_filled_top_level_arguments,
125    interpolation_end_kind, is_at_rule_prelude_boundary, is_attribute_matcher, is_combinator,
126    is_component_value_atom_start, is_css_module_from_source_token,
127    is_dynamic_function_argument_head, is_interpolation_start, is_nth_pseudo_class,
128    is_scss_control_rule_kind, is_scss_module_namespace_token, is_scss_module_source_token,
129    is_scss_module_visibility_name_token, is_selector_boundary, is_selector_boundary_until,
130    is_selector_combinator_kind, is_selector_list_pseudo_class, is_statement_end,
131    keyframe_selector_token_is_valid, language_tag_token_can_start, matches_ignore_ascii_case,
132    matching_right_brace, matching_right_paren_from_range, matching_simple_block_close,
133    namespace_selector_target_can_start, next_non_trivia_token, next_non_trivia_token_after_range,
134    next_non_trivia_token_index_until, next_non_trivia_token_until, previous_non_trivia_token,
135    previous_non_trivia_token_index, selector_component_can_end, selector_component_can_start,
136    selector_item_token_is_recoverable, simple_block_recovery,
137    skip_statement_or_unmatched_boundary, skip_trivia_tokens, specialized_function_kind,
138    style_wrapper_at_rule, token_index_by_range, top_level_token_kind_index,
139    top_level_token_text_index, value_infix_operator_binding, value_list_item_recovery,
140    variable_declaration_node_kind,
141};
142
143#[cfg(test)]
144mod tests;