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