From 18c5b3a7cdb87b4097374c826901f3f565650754 Mon Sep 17 00:00:00 2001 From: Eric Traut Date: Wed, 29 Apr 2026 13:58:14 -0700 Subject: [PATCH] codex: address PR review feedback (#20179) --- .github/scripts/verify_tui_core_boundary.py | 44 +++++++++++++++++---- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/.github/scripts/verify_tui_core_boundary.py b/.github/scripts/verify_tui_core_boundary.py index 4b101dfcd7..eb915debe6 100644 --- a/.github/scripts/verify_tui_core_boundary.py +++ b/.github/scripts/verify_tui_core_boundary.py @@ -336,8 +336,12 @@ def protocol_reference_offsets( offsets = [] for crate_name in expanded_crate_aliases(text, codex_protocol_names): crate_name_pattern = rf"(?:r#)?{re.escape(normalize_identifier(crate_name))}" + qualified_crate_name_pattern = ( + rf"(?:(?:self|crate){TOKEN_SEPARATOR}::{TOKEN_SEPARATOR})?" + rf"{crate_name_pattern}" + ) pattern = re.compile( - rf"\b{crate_name_pattern}{TOKEN_SEPARATOR}::{TOKEN_SEPARATOR}" + rf"\b{qualified_crate_name_pattern}{TOKEN_SEPARATOR}::{TOKEN_SEPARATOR}" rf"{PROTOCOL_IDENTIFIER}\b" ) offsets.extend(match.start() for match in pattern.finditer(text)) @@ -372,7 +376,7 @@ def expanded_crate_aliases(text: str, crate_names: set[str]) -> set[str]: while True: previous_count = len(aliases) for source, alias in crate_alias_pairs(text): - if source in aliases: + if use_path_matches_alias(source, aliases): aliases.add(alias) if len(aliases) == previous_count: return aliases @@ -396,7 +400,7 @@ def crate_alias_pairs(text: str) -> list[tuple[str, str]]: if source == "self": source = group_source else: - source = f"{group_source}::{source}" + source = join_paths(group_source, source) pairs.append((source, normalize_identifier(alias_match.group(2)))) for statement in use_statements(text): pairs.extend(use_tree_alias_pairs(statement.tree)) @@ -490,14 +494,20 @@ def use_tree_imports_root_glob(tree: str, aliases: set[str]) -> bool: tree, ) if direct_glob_match: - return normalize_path(direct_glob_match.group(1)) in aliases + return use_path_matches_alias(normalize_path(direct_glob_match.group(1)), aliases) grouped = grouped_use_tree(tree) if grouped is None: return False group_source, body, _body_offset = grouped - return group_source in aliases and any( - item_without_alias(item).strip() == "*" for item, _ in split_root_items(body) + items = split_root_items(body) + if use_path_matches_alias(group_source, aliases) and any( + item_without_alias(item).strip() == "*" for item, _ in items + ): + return True + return any( + use_tree_imports_root_glob(join_paths(group_source, item), aliases) + for item, _ in items ) @@ -515,9 +525,15 @@ def use_tree_imports_protocol_at_root(tree: str, aliases: set[str]) -> bool: if grouped is None: return False group_source, body, _body_offset = grouped - return group_source in aliases and any( + items = split_root_items(body) + if use_path_matches_alias(group_source, aliases) and any( first_path_segment(item_without_alias(item)) == "protocol" - for item, _ in split_root_items(body) + for item, _ in items + ): + return True + return any( + use_tree_imports_protocol_at_root(join_paths(group_source, item), aliases) + for item, _ in items ) @@ -620,6 +636,18 @@ def join_paths(prefix: str, suffix: str) -> str: return f"{prefix}::{suffix}" +def use_path_matches_alias(path: str, aliases: set[str]) -> bool: + normalized_path = normalize_path(path) + return normalized_path in aliases or strip_root_qualifier(normalized_path) in aliases + + +def strip_root_qualifier(path: str) -> str: + parts = path.split("::") + if parts and parts[0] in ("self", "crate"): + return "::".join(parts[1:]) + return path + + def item_without_alias(item: str) -> str: return re.split(rf"\b{REQUIRED_TOKEN_SEPARATOR}as{REQUIRED_TOKEN_SEPARATOR}\b", item, 1)[ 0