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