fensu-cli 0.26.0__tar.gz → 0.28.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/Cargo.lock +2 -2
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/PKG-INFO +1 -1
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/Cargo.toml +1 -1
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/exceptions.rs +65 -4
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/exception_targets.rs +134 -5
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/exceptions.rs +36 -17
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/mod.rs +1 -0
- fensu_cli-0.28.0/crates/fensu-cli/src/configuration/main/rust_exception_symbols.rs +6 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/models.rs +7 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_rust.rs +9 -6
- fensu_cli-0.28.0/crates/fensu-cli/tests/command/test_check_rust_exceptions.rs +369 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_types.rs +12 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command.rs +2 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/Cargo.toml +1 -1
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/constants.rs +21 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/models.rs +11 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/hygiene.rs +1 -1
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/repository/project_checks.rs +16 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/mod.rs +1 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/placement.rs +42 -15
- fensu_cli-0.28.0/crates/fensu-rust/src/rules/_helpers/roles/proc_macro_entries.rs +349 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/sources/scanning.rs +6 -4
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/helpers.rs +28 -0
- fensu_cli-0.28.0/crates/fensu-rust/tests/rules/test_proc_macro_roots.rs +215 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules.rs +2 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/pyproject.toml +1 -1
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/Cargo.toml +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/README.md +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/build.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/analyzer.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/_helpers/arguments.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/_helpers/loading.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/_helpers/options.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/_helpers/policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/_helpers/rendering.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/data/catalogue.json +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/main/resolve_native_options.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/main/rule_catalogue.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/main/rule_metadata.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/main/rule_output.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/main/validate_config_selectors.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/catalogue/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/cache.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/cleanup.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/evaluation.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/execution.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/options.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/preparation.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/preparation_ownership.inc +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/project.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/repository_custom_facts.inc +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/rule_policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/web.inc +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/web_custom_facts.inc +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/_helpers/web_policy.inc +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/check_output_options.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/check_routing.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/clean_caches.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/discover_target_sources.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/execute_check.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/execute_structured_check.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/prepare_cleanup.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/python_version.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/render_check_results.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/repository_python_targets.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/main/required_thresholds.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/check/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/_helpers/check_partition/execution.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/_helpers/check_partition/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/_helpers/map/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/_helpers/map/parsing.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_check.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_dupes.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_help.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_init.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_map.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_rule.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_run_cli.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_skills.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/_target.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/execute_cli.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/command/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/discovery.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/loading.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/native_rules.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/parsing.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/roots.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/scopes.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/selectors.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/validation.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/configuration_directory.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/expand_path_pattern.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/is_rule_code.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/is_rule_selector.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/load_config_section.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/load_optional.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/load_repository_rule_config.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/load_repository_rule_policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/load_target.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/load_targets.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/render_target_config.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/resolve_target_root.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/validate_document.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/main/validate_exception_targets.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/contracts/classes.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/contracts/forced.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/contracts/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/inputs/arguments.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/inputs/changes.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/inputs/config.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/inputs/globs.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/inputs/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/inputs/sources.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/matching/clustering.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/matching/fingerprints.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/matching/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/matching/pairs.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/matching/sequence.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/report/build.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/report/diff.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/report/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/report/rendering.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/units/collection.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/units/lines.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/units/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/units/python.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/units/rust.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/_helpers/units/web.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/main/run_dupes.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/dupes/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/_helpers/authoring.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/_helpers/interpreter.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/_helpers/metadata_exchange.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/main/run_custom_check_host.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/main/run_repository_custom_rule_host.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/main/run_rust_custom_rule_host.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/main/run_skills_metadata_host.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/main/run_web_custom_rule_host.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/hosting/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/arguments.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/discovery.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/layout.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/packages.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/reporting.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/validation.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/_helpers/writing.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/data/python.gitignore +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/main/run_init.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/init/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/lib.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/main.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/cache.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/decoding.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/execution.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/identity.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/index.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/project.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/render.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/tree.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/_helpers/tree_policy.inc +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/main/map.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/mapping/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/_helpers/faults.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/_helpers/text.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/main/report.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/reporting/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/_helpers/files.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/main/acquire_operation_lock.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/main/open_repository.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/main/read_optional.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/main/relative_path.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/main/write_if_unchanged.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/repository_io/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/command/execution.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/command/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/discovery.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/fingerprint.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/option_rendering.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/rendering.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/rule_rendering.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/content/sections.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/build.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/exceptions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/identity.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/option_validation.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/options.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/context/selection.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/filesystem.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/freshness.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/install.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/plan.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/publication.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/installation/transaction.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/data/skills_invariant.json +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/main/catalogue.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/main/core_freshness.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/main/execute.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/main/skills.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/skills/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/_helpers/addition.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/_helpers/arguments.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/_helpers/paths.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/main/run_target.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/target_command/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/helpers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_analyzer.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_dupes.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_render.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_rule_catalogue.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests/test_web_analysis.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/tests.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/check/helpers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/check/test_dead_code.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/check/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/check.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/helpers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_cleanup.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_exceptions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_mixed_targets.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_repository_custom.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_validation.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_web.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_web_boundaries.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_web_custom.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_check_web_layout.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_rule.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/test_rust_file_placement.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/command/web_policy_fixtures.inc +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes/helpers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes/test_config.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes/test_contracts.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes/test_detection.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes/test_reporting.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/dupes.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/init/helpers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/init/test_commands.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/init/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/init.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/mapping/commands.inc +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/mapping/helpers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/mapping/test_commands.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/mapping/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/mapping.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/skills/commands.inc +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/skills/helpers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/skills/test_commands.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/skills/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/tests/skills.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/Cargo.toml +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/_helpers/graph.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/main/analyze.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/main/evaluate_graph.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/main/extract.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/dead_code/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/annotations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/contracts.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/declarations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/functions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/harness.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/hygiene.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/mapping.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/references.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/rule_authoring.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/conversion/state.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/facades/facades.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/gateway/bindings.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/gateway/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/gateway/model_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/gateway/repository_bindings.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/gateway/rule_authoring_bindings.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/_helpers/queries/owner_symbols.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/main/register_module.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/extension/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/annotations/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/annotations/visitor.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/contracts/category.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/contracts/display.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/contracts/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/contracts/returns.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/contracts/rows.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/control/conditionals.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/control/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/declarations/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/declarations/rows.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/harness/calls.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/harness/dimensions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/harness/functions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/harness/imports.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/harness/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/hygiene/checks.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/hygiene/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/metrics/functions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/metrics/lookups.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/metrics/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/metrics/mutations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/naming/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/naming/names.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/project/calls.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/project/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/references/events.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/references/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/references/test_shape.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/literals.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/mutations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/ownership.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/rule_authoring/references.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/state/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/state/resolution.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/state/scopes.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/wording/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/_helpers/wording/text.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/enumerate_nodes.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_annotations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_class_declarations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_comments.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_control_flow.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_dataclasses.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_evaluate_rule_calls.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_function_contracts.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_functions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_hygiene.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_module_declarations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_outer_state_mutations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutation_occurrences.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_project_facts.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_references.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_rule_calls.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_rule_references.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_test_functions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/extract_test_module.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/facts/types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/lib.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/_helpers/classes.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/_helpers/expressions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/_helpers/extraction.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/_helpers/functions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/_helpers/imports.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/main/extract_mapping_declarations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/main/extract_mapping_facts.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/main/extract_runtime_imports.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/mapping/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/_helpers/failures.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/main/parse_expression_strict.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/main/parse_strict.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/parsing/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/_helpers/line_index.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/main/index_lines.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/main/locate_offset.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/positions/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/_helpers/matching.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/_helpers/observation_index.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/_helpers/repository_observation_index.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/_helpers/repository_paths.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/main/build_repository_observation_index.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/main/hash_files.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/main/walk_python_files.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/snapshot/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/breadth.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/children.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/expression_children.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/nodes.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/references.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/spans.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/_helpers/statement_children.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/breadth_first_from.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/breadth_first_nodes.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/breadth_first_with_parents.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/children.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/kind_name.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/push_clause_orelse.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/span.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/start_of.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/main/strict_reference_parts.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/src/syntax/types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/dead_code/helpers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/dead_code/test_reachability.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/dead_code/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/dead_code.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/facts/test_enumerate.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/facts/test_mapping.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/facts/test_rule_authoring.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/facts/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/facts.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/parsing/test_strict.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/parsing/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/parsing.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/positions/test_locate.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/positions/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/positions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/snapshot/helpers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/snapshot/test_hashing.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/snapshot/test_observations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/snapshot/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/snapshot/test_walk.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-facts/tests/snapshot.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/Cargo.toml +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/bindings/bindings.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/bindings/generation_bindings.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/bindings/python_rows.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/generation/generation.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/generation/replay.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/persistence/database.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/persistence/storage.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/publication/publication.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/publication/publication_merge.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/records/records.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/records/schema.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/_helpers/records/schema_values.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/main/_dependency_kinds.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/main/_replay_generation.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/main/register_cache.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests/helpers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests/test_records.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests/test_replay.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests/test_storage.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests/test_subject_schema.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/tests.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/cache/types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/_helpers/evaluation/execution_planning.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/_helpers/evaluation/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/_helpers/evaluation/python_rows.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/_helpers/evaluation/reachability_bindings.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/_helpers/evaluation/rule_bindings.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/main/register_module.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/extension/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/lib.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/annotations/annotations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dagster/assets.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dagster/autoload.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dagster/boundaries.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dagster/dagster.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dagster/definitions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dagster/source.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/dead_code/dead_code.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/execution_planning/execution_planning.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/hygiene/hygiene.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/layers/layers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/layers/local.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/layers/project.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/naming/naming.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/naming_globs/naming_globs.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/policy/generated_policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/project_queries/project_queries.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/declarations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/paths.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/project_layout.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/project_layout_paths.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/project_layout_queries.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/roles.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/roles/surfaces.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/shape/shape.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/tests/function_conventions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/tests/layout.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/tests/names.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/_helpers/tests/tests.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/evaluate_core_rules.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/evaluate_dead_code.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/generated_policy_owners.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/parse_dead_code.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/plan_core_rule_queries.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/main/plan_execution_owners.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/src/rules/types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/fixtures/README.md +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/fixtures/core_rules.jsonl +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/fixtures/generated_rules.jsonl +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/fixtures/project_rules.jsonl +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/helpers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/test_contracts.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-native/tests/rules.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/README.md +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lib.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/cache.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/canonical.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/hosting.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/paths.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/skills.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/_helpers/suppressions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/errors.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/apply_suppressions.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/evaluate_batch.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/invalidate_cache.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/read_cache.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/render_owned_skill.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/report_summary.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/run_custom_host.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/serialize_findings.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/skill_freshness.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/sorted_findings.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/main/write_cache.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/lifecycle/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/_helpers/grammar.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/_helpers/resolution.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/errors.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/_code_matches_selector.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/resolve_catalogue_policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/resolve_policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/rule_code_is_exact.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/rule_selector_is_valid.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/validate_selector_group.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/main/validate_unique_implementations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/src/policy/types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/lifecycle/helpers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/lifecycle/test_consumer_fixture.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/lifecycle/test_lifecycle_contracts.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/lifecycle/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/lifecycle.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/policy/test_implementation_identity.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/policy/test_policy_resolution.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/policy/test_selector_grammar.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/policy/test_selector_validation.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/policy/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-policy/tests/policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/Cargo.toml +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/_helpers/option_values.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/_helpers/repository_policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/main/rule_options.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/main/validate_repository_policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/configuration/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/engine/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/engine/_helpers/repository_analysis.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/engine/main/analyze_repository.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/engine/main/analyze_repository_with_ownership_roots.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/engine/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/engine/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/facts/_helpers/collection.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/facts/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/facts/main/collect_workspace_facts.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/facts/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/facts/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/facts/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/lib.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/binding_clarity.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/comments.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/discarded_errors.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/naming.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/shape.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/shape_policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/functions/shape_project.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/imports/embedded_files.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/imports/layers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/imports/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/imports/reference_paths.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/imports/visibility.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/repository/configured_paths.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/repository/crate_contents.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/repository/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/repository/package_entries.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/repository/placement_observations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/containers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/domains.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/ownership.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/role_files.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/surfaces.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/roles/tooling.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/sources/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/test_case_arrays.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/test_mirroring.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/tests_layout.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/_helpers/test_conventions/tests_shape.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/check_repository_with_config.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/check_scanned_workspace.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/file_placement_observations.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/relative_display.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/scan_workspace.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/main/use_paths.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/rules/mod.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/src/types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/engine/test_engine.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/engine/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/engine.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_comments.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_configuration.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_containers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_domains.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_file_placement.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_hygiene.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_layers.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_naming.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_ownership.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_role_files.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_roles.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_shape.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_shape_policy.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_tests_layout.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_tests_shape.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_tooling_roles.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_tuple_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-rust/tests/rules/test_visibility.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/Cargo.toml +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/src/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/src/lib.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/src/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/src/parser.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/tests/parser/test_contracts.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/tests/parser/test_diagnostics.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/tests/parser/test_semantics.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/tests/parser/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-svelte/tests/parser.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/Cargo.toml +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/src/constants.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/src/lib.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/src/models.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/src/parser.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/tests/parser/test_contracts.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/tests/parser/test_diagnostics.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/tests/parser/test_semantics.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/tests/parser/test_types.rs +0 -0
- {fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-typescript/tests/parser.rs +0 -0
|
@@ -388,7 +388,7 @@ checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
|
|
|
388
388
|
|
|
389
389
|
[[package]]
|
|
390
390
|
name = "fensu-cli"
|
|
391
|
-
version = "0.
|
|
391
|
+
version = "0.28.0"
|
|
392
392
|
dependencies = [
|
|
393
393
|
"cap-fs-ext",
|
|
394
394
|
"cap-std",
|
|
@@ -458,7 +458,7 @@ dependencies = [
|
|
|
458
458
|
|
|
459
459
|
[[package]]
|
|
460
460
|
name = "fensu-policy"
|
|
461
|
-
version = "0.
|
|
461
|
+
version = "0.28.0"
|
|
462
462
|
dependencies = [
|
|
463
463
|
"command-group",
|
|
464
464
|
"globset",
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
use std::cmp::Reverse;
|
|
1
2
|
use std::collections::{HashMap, HashSet};
|
|
2
3
|
use std::path::Path;
|
|
3
4
|
|
|
4
|
-
use crate::
|
|
5
|
+
use crate::analyzer::AnalyzerId;
|
|
6
|
+
use crate::configuration::main::rust_exception_symbols::rust_exception_symbols;
|
|
7
|
+
use crate::models::{Config, Fault, RuleException, RustExceptionSymbol, ScopedSource};
|
|
8
|
+
|
|
9
|
+
const RUST_PATH_SEPARATOR: &str = "::";
|
|
5
10
|
|
|
6
11
|
type ExceptionKey = (String, String, Option<String>);
|
|
7
12
|
|
|
@@ -35,6 +40,7 @@ pub(crate) fn apply_exceptions(
|
|
|
35
40
|
.map(|source| (source.target_path.as_str(), source))
|
|
36
41
|
.collect::<HashMap<_, _>>();
|
|
37
42
|
let mut applied: HashSet<ExceptionKey> = HashSet::new();
|
|
43
|
+
let rust_symbols_by_path = rust_symbols_by_path(config, &source_by_path)?;
|
|
38
44
|
let mut retained: Vec<Fault> = Vec::new();
|
|
39
45
|
for fault in faults {
|
|
40
46
|
let directory = if fault.code == fensu_native::rules::constants::STALE_DEAD_CODE_ROOT_CODE {
|
|
@@ -58,9 +64,15 @@ pub(crate) fn apply_exceptions(
|
|
|
58
64
|
break;
|
|
59
65
|
}
|
|
60
66
|
if owner.is_none() {
|
|
61
|
-
owner =
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
owner = if config.analyzer == AnalyzerId::Rust {
|
|
68
|
+
rust_symbols_by_path
|
|
69
|
+
.get(reported.as_str())
|
|
70
|
+
.and_then(|symbols| rust_fault_owner(&fault, symbols))
|
|
71
|
+
} else {
|
|
72
|
+
source_by_path
|
|
73
|
+
.get(reported.as_str())
|
|
74
|
+
.and_then(|source| fault_owner(&fault, source))
|
|
75
|
+
};
|
|
64
76
|
}
|
|
65
77
|
matched_symbol = owner.as_ref().and_then(|owner| {
|
|
66
78
|
entry
|
|
@@ -151,6 +163,55 @@ fn fault_owner(fault: &Fault, source: &ScopedSource) -> Option<FaultOwner> {
|
|
|
151
163
|
)
|
|
152
164
|
}
|
|
153
165
|
|
|
166
|
+
fn rust_symbols_by_path(
|
|
167
|
+
config: &Config,
|
|
168
|
+
source_by_path: &HashMap<&str, &ScopedSource>,
|
|
169
|
+
) -> Result<HashMap<String, Vec<RustExceptionSymbol>>, String> {
|
|
170
|
+
let mut symbols_by_path: HashMap<String, Vec<RustExceptionSymbol>> = HashMap::new();
|
|
171
|
+
if config.analyzer != AnalyzerId::Rust {
|
|
172
|
+
return Ok(symbols_by_path);
|
|
173
|
+
}
|
|
174
|
+
for entry in config
|
|
175
|
+
.exceptions
|
|
176
|
+
.iter()
|
|
177
|
+
.filter(|entry| !entry.symbols.is_empty())
|
|
178
|
+
{
|
|
179
|
+
if symbols_by_path.contains_key(&entry.path) {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
let Some(source) = source_by_path.get(entry.path.as_str()) else {
|
|
183
|
+
continue;
|
|
184
|
+
};
|
|
185
|
+
let symbols = rust_exception_symbols(&String::from_utf8_lossy(&source.content)).map_err(
|
|
186
|
+
|message| {
|
|
187
|
+
format!(
|
|
188
|
+
"Could not inspect rule exception path {}: {message}",
|
|
189
|
+
entry.path
|
|
190
|
+
)
|
|
191
|
+
},
|
|
192
|
+
)?;
|
|
193
|
+
symbols_by_path.insert(entry.path.clone(), symbols);
|
|
194
|
+
}
|
|
195
|
+
Ok(symbols_by_path)
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
fn rust_fault_owner(fault: &Fault, symbols: &[RustExceptionSymbol]) -> Option<FaultOwner> {
|
|
199
|
+
let line = fault.line? as usize;
|
|
200
|
+
symbols
|
|
201
|
+
.iter()
|
|
202
|
+
.filter(|symbol| symbol.first_line <= line && line <= symbol.last_line)
|
|
203
|
+
.min_by_key(|symbol| {
|
|
204
|
+
(
|
|
205
|
+
symbol.last_line - symbol.first_line,
|
|
206
|
+
Reverse(symbol.name.matches(RUST_PATH_SEPARATOR).count()),
|
|
207
|
+
symbol.name.as_str(),
|
|
208
|
+
)
|
|
209
|
+
})
|
|
210
|
+
.map(|symbol| FaultOwner {
|
|
211
|
+
identities: vec![symbol.name.clone()],
|
|
212
|
+
})
|
|
213
|
+
}
|
|
214
|
+
|
|
154
215
|
fn web_fault_owner(source: &ScopedSource, line: usize, column: usize) -> Option<FaultOwner> {
|
|
155
216
|
let offset = source_offset(&source.content, line, column)?;
|
|
156
217
|
let mut candidates: Vec<(usize, Vec<String>)> = Vec::new();
|
|
@@ -5,10 +5,15 @@ use std::path::Path;
|
|
|
5
5
|
use fensu_facts::parsing::main::parse_strict::parse_strict;
|
|
6
6
|
use ruff_python_ast::visitor::{walk_stmt, Visitor};
|
|
7
7
|
use ruff_python_ast::Stmt;
|
|
8
|
+
use syn::ext::IdentExt;
|
|
9
|
+
use syn::spanned::Spanned;
|
|
8
10
|
|
|
9
11
|
use crate::analyzer::AnalyzerId;
|
|
10
12
|
use crate::check::main::python_version::python_version;
|
|
11
|
-
use crate::models::Config;
|
|
13
|
+
use crate::models::{Config, RustExceptionSymbol};
|
|
14
|
+
|
|
15
|
+
const RUST_PATH_SEPARATOR: &str = "::";
|
|
16
|
+
const UNNAMED_RUST_ITEM: &str = "_";
|
|
12
17
|
|
|
13
18
|
pub(crate) fn validate_targets(config: &Config, project_root: &Path) -> Result<(), String> {
|
|
14
19
|
for exception in &config.exceptions {
|
|
@@ -31,10 +36,10 @@ pub(crate) fn validate_targets(config: &Config, project_root: &Path) -> Result<(
|
|
|
31
36
|
if exception.symbols.is_empty() {
|
|
32
37
|
continue;
|
|
33
38
|
}
|
|
34
|
-
let symbols =
|
|
35
|
-
defined_symbols(&path)
|
|
36
|
-
|
|
37
|
-
defined_web_symbols(&path,
|
|
39
|
+
let symbols = match config.analyzer {
|
|
40
|
+
AnalyzerId::Python => defined_symbols(&path)?,
|
|
41
|
+
AnalyzerId::Rust => defined_rust_symbols(&path)?,
|
|
42
|
+
analyzer => defined_web_symbols(&path, analyzer)?,
|
|
38
43
|
};
|
|
39
44
|
for symbol in &exception.symbols {
|
|
40
45
|
match symbols.get(symbol).copied().unwrap_or_default() {
|
|
@@ -57,6 +62,26 @@ pub(crate) fn validate_targets(config: &Config, project_root: &Path) -> Result<(
|
|
|
57
62
|
Ok(())
|
|
58
63
|
}
|
|
59
64
|
|
|
65
|
+
fn defined_rust_symbols(path: &Path) -> Result<HashMap<String, usize>, String> {
|
|
66
|
+
let bytes = fs::read(path).map_err(|error| {
|
|
67
|
+
format!(
|
|
68
|
+
"Could not inspect rule exception path {}: {error}",
|
|
69
|
+
path.display()
|
|
70
|
+
)
|
|
71
|
+
})?;
|
|
72
|
+
let source = String::from_utf8_lossy(&bytes);
|
|
73
|
+
let mut symbols: HashMap<String, usize> = HashMap::new();
|
|
74
|
+
for symbol in rust_symbols(&source).map_err(|message| {
|
|
75
|
+
format!(
|
|
76
|
+
"Could not inspect rule exception path {}: {message}",
|
|
77
|
+
path.display()
|
|
78
|
+
)
|
|
79
|
+
})? {
|
|
80
|
+
*symbols.entry(symbol.name).or_default() += 1;
|
|
81
|
+
}
|
|
82
|
+
Ok(symbols)
|
|
83
|
+
}
|
|
84
|
+
|
|
60
85
|
fn defined_web_symbols(
|
|
61
86
|
path: &Path,
|
|
62
87
|
analyzer: AnalyzerId,
|
|
@@ -180,3 +205,107 @@ impl<'ast> Visitor<'ast> for SymbolCollector {
|
|
|
180
205
|
}
|
|
181
206
|
}
|
|
182
207
|
}
|
|
208
|
+
|
|
209
|
+
pub(crate) fn rust_symbols(source: &str) -> Result<Vec<RustExceptionSymbol>, String> {
|
|
210
|
+
let syntax = syn::parse_file(source).map_err(|error| error.to_string())?;
|
|
211
|
+
Ok(item_symbols(&syntax.items, ""))
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
fn item_symbols(items: &[syn::Item], prefix: &str) -> Vec<RustExceptionSymbol> {
|
|
215
|
+
let mut symbols: Vec<RustExceptionSymbol> = Vec::new();
|
|
216
|
+
for item in items {
|
|
217
|
+
match item {
|
|
218
|
+
syn::Item::Fn(inner) => symbols.extend(symbol(prefix, &inner.sig.ident, item)),
|
|
219
|
+
syn::Item::Struct(inner) => symbols.extend(symbol(prefix, &inner.ident, item)),
|
|
220
|
+
syn::Item::Enum(inner) => symbols.extend(symbol(prefix, &inner.ident, item)),
|
|
221
|
+
syn::Item::Union(inner) => symbols.extend(symbol(prefix, &inner.ident, item)),
|
|
222
|
+
syn::Item::Type(inner) => symbols.extend(symbol(prefix, &inner.ident, item)),
|
|
223
|
+
syn::Item::Const(inner) => symbols.extend(symbol(prefix, &inner.ident, item)),
|
|
224
|
+
syn::Item::Static(inner) => symbols.extend(symbol(prefix, &inner.ident, item)),
|
|
225
|
+
syn::Item::Trait(inner) => {
|
|
226
|
+
symbols.extend(symbol(prefix, &inner.ident, item));
|
|
227
|
+
symbols.extend(trait_symbols(inner, &qualified(prefix, &inner.ident)));
|
|
228
|
+
}
|
|
229
|
+
syn::Item::Impl(inner) => {
|
|
230
|
+
if let Some(self_type) = self_type_path(&inner.self_ty) {
|
|
231
|
+
symbols.extend(impl_symbols(inner, &join(prefix, &self_type)));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
syn::Item::Mod(inner) => {
|
|
235
|
+
if let Some((_, content)) = &inner.content {
|
|
236
|
+
symbols.extend(item_symbols(content, &qualified(prefix, &inner.ident)));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
_ => {}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
symbols
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
fn trait_symbols(item: &syn::ItemTrait, owner: &str) -> Vec<RustExceptionSymbol> {
|
|
246
|
+
let mut symbols: Vec<RustExceptionSymbol> = Vec::new();
|
|
247
|
+
for member in &item.items {
|
|
248
|
+
let ident = match member {
|
|
249
|
+
syn::TraitItem::Fn(inner) => &inner.sig.ident,
|
|
250
|
+
syn::TraitItem::Const(inner) => &inner.ident,
|
|
251
|
+
syn::TraitItem::Type(inner) => &inner.ident,
|
|
252
|
+
_ => continue,
|
|
253
|
+
};
|
|
254
|
+
symbols.extend(symbol(owner, ident, member));
|
|
255
|
+
}
|
|
256
|
+
symbols
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
fn impl_symbols(item: &syn::ItemImpl, owner: &str) -> Vec<RustExceptionSymbol> {
|
|
260
|
+
let mut symbols: Vec<RustExceptionSymbol> = Vec::new();
|
|
261
|
+
for member in &item.items {
|
|
262
|
+
let ident = match member {
|
|
263
|
+
syn::ImplItem::Fn(inner) => &inner.sig.ident,
|
|
264
|
+
syn::ImplItem::Const(inner) => &inner.ident,
|
|
265
|
+
syn::ImplItem::Type(inner) => &inner.ident,
|
|
266
|
+
_ => continue,
|
|
267
|
+
};
|
|
268
|
+
symbols.extend(symbol(owner, ident, member));
|
|
269
|
+
}
|
|
270
|
+
symbols
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
fn self_type_path(self_type: &syn::Type) -> Option<String> {
|
|
274
|
+
let syn::Type::Path(path) = self_type else {
|
|
275
|
+
return None;
|
|
276
|
+
};
|
|
277
|
+
if path.qself.is_some() {
|
|
278
|
+
return None;
|
|
279
|
+
}
|
|
280
|
+
let segments: Vec<String> = path
|
|
281
|
+
.path
|
|
282
|
+
.segments
|
|
283
|
+
.iter()
|
|
284
|
+
.map(|segment| segment.ident.unraw().to_string())
|
|
285
|
+
.collect();
|
|
286
|
+
Some(segments.join(RUST_PATH_SEPARATOR))
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
fn symbol(prefix: &str, ident: &syn::Ident, node: &impl Spanned) -> Option<RustExceptionSymbol> {
|
|
290
|
+
if ident == UNNAMED_RUST_ITEM {
|
|
291
|
+
return None;
|
|
292
|
+
}
|
|
293
|
+
let span = node.span();
|
|
294
|
+
Some(RustExceptionSymbol {
|
|
295
|
+
name: qualified(prefix, ident),
|
|
296
|
+
first_line: span.start().line,
|
|
297
|
+
last_line: span.end().line,
|
|
298
|
+
})
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
fn qualified(prefix: &str, ident: &syn::Ident) -> String {
|
|
302
|
+
join(prefix, &ident.unraw().to_string())
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
fn join(prefix: &str, name: &str) -> String {
|
|
306
|
+
if prefix.is_empty() {
|
|
307
|
+
name.to_owned()
|
|
308
|
+
} else {
|
|
309
|
+
format!("{prefix}{RUST_PATH_SEPARATOR}{name}")
|
|
310
|
+
}
|
|
311
|
+
}
|
{fensu_cli-0.26.0 → fensu_cli-0.28.0}/crates/fensu-cli/src/configuration/_helpers/exceptions.rs
RENAMED
|
@@ -5,6 +5,8 @@ use crate::configuration::_helpers::selectors::valid_code;
|
|
|
5
5
|
use crate::constants::CUSTOM_RULE_TEST_COVERAGE_CODE;
|
|
6
6
|
|
|
7
7
|
const RULE_EXCEPTION_SYMBOLS: &str = "symbols";
|
|
8
|
+
const CARGO_MANIFEST_SUFFIX: &str = "Cargo.toml";
|
|
9
|
+
const RUST_PATH_SEPARATOR: &str = "::";
|
|
8
10
|
|
|
9
11
|
pub(crate) fn validate(value: Option<&toml::Value>, analyzer: AnalyzerId) -> Result<(), String> {
|
|
10
12
|
validate_for(value, Some(analyzer))
|
|
@@ -46,21 +48,26 @@ fn validate_for(value: Option<&toml::Value>, analyzer: Option<AnalyzerId>) -> Re
|
|
|
46
48
|
));
|
|
47
49
|
}
|
|
48
50
|
validate_path(&path, analyzer, &rule)?;
|
|
49
|
-
if (
|
|
50
|
-
|| rule == CUSTOM_RULE_TEST_COVERAGE_CODE)
|
|
51
|
+
if (analyzer.is_none() || rule == CUSTOM_RULE_TEST_COVERAGE_CODE)
|
|
51
52
|
&& table.contains_key(RULE_EXCEPTION_SYMBOLS)
|
|
52
53
|
{
|
|
53
54
|
let owner = if rule == CUSTOM_RULE_TEST_COVERAGE_CODE {
|
|
54
55
|
"Custom-rule coverage"
|
|
55
|
-
} else if analyzer.is_none() {
|
|
56
|
-
"Repository"
|
|
57
56
|
} else {
|
|
58
|
-
"
|
|
57
|
+
"Repository"
|
|
59
58
|
};
|
|
60
59
|
return Err(format!(
|
|
61
60
|
"{owner} rule exceptions support file-level exceptions only."
|
|
62
61
|
));
|
|
63
62
|
}
|
|
63
|
+
if analyzer == Some(AnalyzerId::Rust)
|
|
64
|
+
&& path.ends_with(CARGO_MANIFEST_SUFFIX)
|
|
65
|
+
&& table.contains_key(RULE_EXCEPTION_SYMBOLS)
|
|
66
|
+
{
|
|
67
|
+
return Err(format!(
|
|
68
|
+
"Rust Cargo.toml rule exceptions support file-level exceptions only: {path}."
|
|
69
|
+
));
|
|
70
|
+
}
|
|
64
71
|
let symbols = match table.get(RULE_EXCEPTION_SYMBOLS) {
|
|
65
72
|
Some(value) => {
|
|
66
73
|
super::validation::required_strings(Some(value), "rule_exceptions.symbols")?
|
|
@@ -76,7 +83,12 @@ fn validate_for(value: Option<&toml::Value>, analyzer: Option<AnalyzerId>) -> Re
|
|
|
76
83
|
));
|
|
77
84
|
}
|
|
78
85
|
for symbol in symbols {
|
|
79
|
-
if
|
|
86
|
+
let valid = if analyzer == Some(AnalyzerId::Rust) {
|
|
87
|
+
valid_rust_symbol(&symbol)
|
|
88
|
+
} else {
|
|
89
|
+
valid_qualified_symbol(&symbol)
|
|
90
|
+
};
|
|
91
|
+
if !valid {
|
|
80
92
|
return Err(format!(
|
|
81
93
|
"Malformed qualified rule exception symbol: {symbol}."
|
|
82
94
|
));
|
|
@@ -105,16 +117,21 @@ fn exception_text(
|
|
|
105
117
|
|
|
106
118
|
fn valid_qualified_symbol(value: &str) -> bool {
|
|
107
119
|
let mut parts = value.split('.');
|
|
108
|
-
let
|
|
109
|
-
let mut characters = part.chars();
|
|
110
|
-
characters
|
|
111
|
-
.next()
|
|
112
|
-
.is_some_and(|item| item.is_ascii_alphabetic() || item == '_')
|
|
113
|
-
&& characters.all(|item| item.is_ascii_alphanumeric() || item == '_')
|
|
114
|
-
};
|
|
115
|
-
let first = parts.next().is_some_and(valid);
|
|
120
|
+
let first = parts.next().is_some_and(valid_identifier);
|
|
116
121
|
let second = parts.next();
|
|
117
|
-
first && second.is_none_or(
|
|
122
|
+
first && second.is_none_or(valid_identifier) && parts.next().is_none()
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
fn valid_rust_symbol(value: &str) -> bool {
|
|
126
|
+
value.split(RUST_PATH_SEPARATOR).all(valid_identifier)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
fn valid_identifier(part: &str) -> bool {
|
|
130
|
+
let mut characters = part.chars();
|
|
131
|
+
characters
|
|
132
|
+
.next()
|
|
133
|
+
.is_some_and(|item| item.is_ascii_alphabetic() || item == '_')
|
|
134
|
+
&& characters.all(|item| item.is_ascii_alphanumeric() || item == '_')
|
|
118
135
|
}
|
|
119
136
|
|
|
120
137
|
fn validate_path(path: &str, analyzer: Option<AnalyzerId>, rule: &str) -> Result<(), String> {
|
|
@@ -125,13 +142,15 @@ fn validate_path(path: &str, analyzer: Option<AnalyzerId>, rule: &str) -> Result
|
|
|
125
142
|
} else {
|
|
126
143
|
match analyzer {
|
|
127
144
|
Some(AnalyzerId::Python) => path.ends_with(".py"),
|
|
128
|
-
Some(AnalyzerId::Rust) =>
|
|
145
|
+
Some(AnalyzerId::Rust) => {
|
|
146
|
+
path.ends_with(".rs") || path.ends_with(CARGO_MANIFEST_SUFFIX)
|
|
147
|
+
}
|
|
129
148
|
Some(AnalyzerId::TypeScript) => web_source_path(path),
|
|
130
149
|
Some(AnalyzerId::Svelte) => path.ends_with(".svelte") || web_source_path(path),
|
|
131
150
|
None => {
|
|
132
151
|
path.ends_with(".py")
|
|
133
152
|
|| path.ends_with(".rs")
|
|
134
|
-
|| path.ends_with(
|
|
153
|
+
|| path.ends_with(CARGO_MANIFEST_SUFFIX)
|
|
135
154
|
|| path.ends_with(".svelte")
|
|
136
155
|
|| web_source_path(path)
|
|
137
156
|
}
|
|
@@ -167,6 +167,13 @@ pub(crate) struct RuleException {
|
|
|
167
167
|
pub(crate) symbols: Vec<String>,
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
+
#[derive(Clone, Debug)]
|
|
171
|
+
pub(crate) struct RustExceptionSymbol {
|
|
172
|
+
pub(crate) name: String,
|
|
173
|
+
pub(crate) first_line: usize,
|
|
174
|
+
pub(crate) last_line: usize,
|
|
175
|
+
}
|
|
176
|
+
|
|
170
177
|
#[derive(Clone, Debug, Default)]
|
|
171
178
|
pub(crate) struct RuleIgnore {
|
|
172
179
|
pub(crate) rules: Vec<String>,
|
|
@@ -183,12 +183,6 @@ fn given_invalid_rust_configuration_when_checking_then_configuration_fails_close
|
|
|
183
183
|
expected_exit_code: 2,
|
|
184
184
|
expected_error: "repository-relative POSIX paths",
|
|
185
185
|
},
|
|
186
|
-
InvalidCheckConfigTestCase {
|
|
187
|
-
description: "Rust exceptions reject symbol scope during configuration validation",
|
|
188
|
-
config: "[[targets.rust.rule_exceptions]]\nrule = \"FPRSS010\"\npath = \"src/lib.rs\"\nsymbols = [\"value\"]\nreason = \"Unsupported symbol scope.\"\n",
|
|
189
|
-
expected_exit_code: 2,
|
|
190
|
-
expected_error: "Rust rule exceptions support file-level exceptions only",
|
|
191
|
-
},
|
|
192
186
|
];
|
|
193
187
|
for test_case in test_cases {
|
|
194
188
|
let repository = tempfile::tempdir().expect("temporary repository");
|
|
@@ -928,6 +922,15 @@ fn given_custom_rust_policy_when_checking_then_warning_ignore_and_exception_sema
|
|
|
928
922
|
expected_present: "Applied 1 rule exception",
|
|
929
923
|
expected_absent: "XRS004 ",
|
|
930
924
|
},
|
|
925
|
+
RustCustomPolicyTestCase {
|
|
926
|
+
description: "symbol exception cannot suppress a line-less custom Rust finding",
|
|
927
|
+
selection: "select = [\"XRS004\"]\n",
|
|
928
|
+
policy: "[[targets.rust.rule_exceptions]]\nrule = \"XRS004\"\npath = \"src/lib.rs\"\nsymbols = [\"value\"]\nreason = \"Accepted adapter.\"\n",
|
|
929
|
+
arguments: &["--no-cache"],
|
|
930
|
+
expected_exit_code: 2,
|
|
931
|
+
expected_present: "Rule exception no longer matches a fault: XRS004 src/lib.rs::value.",
|
|
932
|
+
expected_absent: "Rust rule exceptions support file-level exceptions only",
|
|
933
|
+
},
|
|
931
934
|
];
|
|
932
935
|
for test_case in test_cases {
|
|
933
936
|
let repository = tempfile::tempdir().expect("temporary repository");
|