fensu-cli 0.4.0__tar.gz → 0.5.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.4.0 → fensu_cli-0.5.0}/Cargo.lock +1 -1
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/PKG-INFO +1 -1
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/Cargo.toml +1 -1
- fensu_cli-0.5.0/crates/fensu-cli/src/command/constants.rs +19 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/map_parsing.rs +14 -2
- fensu_cli-0.5.0/crates/fensu-cli/src/command/main/help.rs +3 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/loading.rs +3 -1
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/parsing.rs +5 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/validation.rs +15 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_evaluation.rs +21 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_policy.rs +1 -1
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/rule.rs +75 -2
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/constants.rs +2 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/execution.rs +7 -2
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/tree_policy.inc +230 -9
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/models.rs +8 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/models.rs +34 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/fingerprint.rs +3 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/mod.rs +1 -0
- fensu_cli-0.5.0/crates/fensu-cli/src/skills/helpers/content/option_rendering.rs +83 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/rendering.rs +3 -1
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/mod.rs +1 -0
- fensu_cli-0.5.0/crates/fensu-cli/src/skills/helpers/context/option_validation.rs +123 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/selection.rs +12 -5
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/check_policy.rs +95 -3
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/test_types.rs +9 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping/commands.inc +153 -2
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping/helpers.rs +29 -1
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/commands.inc +63 -10
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/core_rule_bindings.rs +2 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/constants.rs +1 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/main/evaluate_core_rules.rs +26 -1
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/models.rs +9 -1
- fensu_cli-0.5.0/crates/fensu-native/tests/rules/contracts.rs +82 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules/helpers.rs +1 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules/test_types.rs +9 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/pyproject.toml +1 -1
- fensu_cli-0.4.0/crates/fensu-cli/src/command/constants.rs +0 -19
- fensu_cli-0.4.0/crates/fensu-cli/src/command/main/help.rs +0 -3
- fensu_cli-0.4.0/crates/fensu-native/tests/rules/contracts.rs +0 -21
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/Cargo.toml +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/README.md +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/assets/catalogue.json +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/assets/python.gitignore +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/assets/skills_invariant.json +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/build.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_execution.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_graph_rendering.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_help.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_human_rendering.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_parsing.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_structured_rendering.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/memory_values.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/check.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/init.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/map.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/memory.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/rule.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/run_cli.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/main/skills.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/command/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/discovery.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/exceptions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/custom_rules.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/load.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/load_optional.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/constants.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/cache.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_cleanup.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_execution.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/check_project.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/init.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/process.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/helpers/render.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/lib.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/main.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/cache.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/decoding.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/identity.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/index.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/project.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/render.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/helpers/tree.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/main/map.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/mapping/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/command/execution.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/command/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/discovery.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/content/sections.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/build.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/exceptions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/identity.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/context/options.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/filesystem.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/freshness.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/install.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/plan.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/publication.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/installation/transaction.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/catalogue.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/core_freshness.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/execute.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/main/skills.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/skills/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/check_cleanup.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/commands.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command/helpers.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/command.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping/commands.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/mapping.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/commands.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/helpers.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/tests/skills.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/Cargo.toml +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/constants.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/annotations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/contracts.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/declarations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/functions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/harness.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/hygiene.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/mapping.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/references.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/rule_authoring.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/conversion/state.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/bindings.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/model_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/repository_bindings.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/gateway/rule_authoring_bindings.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/main/register_module.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/extension/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/annotations/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/annotations/visitor.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/category.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/display.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/returns.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/contracts/rows.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/control/conditionals.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/control/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/declarations/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/declarations/rows.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/calls.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/dimensions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/functions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/imports.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/harness/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/hygiene/checks.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/hygiene/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/functions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/lookups.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/metrics/mutations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/naming/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/naming/names.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/project/calls.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/project/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/references/events.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/references/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/references/test_shape.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/literals.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/mutations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/ownership.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/rule_authoring/references.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/breadth.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/children.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/expression_children.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/nodes.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/spans.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/shape/statement_children.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/state/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/state/resolution.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/state/scopes.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/wording/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/helpers/wording/text.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/enumerate_nodes.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_annotations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_class_declarations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_comments.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_control_flow.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_dataclasses.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_evaluate_rule_calls.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_function_contracts.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_functions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_hygiene.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_module_declarations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_outer_state_mutations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutation_occurrences.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_parameter_mutations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_project_facts.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_references.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_rule_calls.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_rule_references.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_test_functions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/extract_test_module.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/constants.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/classes.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/expressions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/extraction.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/functions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/imports.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/main/extract_mapping_declarations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/main/extract_mapping_facts.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mapping/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/facts/types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/lib.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/helpers/failures.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/main/parse_expression_strict.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/main/parse_strict.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/parsing/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/helpers/line_index.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/main/index_lines.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/main/locate_offset.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/positions/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/constants.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/matching.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/observation_index.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/repository_observation_index.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/helpers/repository_paths.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/build_repository_observation_index.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/hash_files.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/main/walk_python_files.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/src/snapshot/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/enumerate.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/mapping.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/rule_authoring.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/facts.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/parsing/strict.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/parsing/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/parsing.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/positions/locate.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/positions/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/positions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/hashing.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/helpers.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/observations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot/walk.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-facts/tests/snapshot.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/Cargo.toml +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/helpers/loading.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/main/load_discovered_memory_corpus.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/main/load_memory_corpus.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/corpus/types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/constants.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/errors.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/archival/archive.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/archival/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/database.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/documents.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/lists.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/references.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/sections.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/skills.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/streaming.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/publication/values.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/graph_loading.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/graphs.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/overviews.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/queries.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/querying/query_values.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/diagnostics.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_core.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_markdown.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_metadata.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_skill_view.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/schema_views.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/summaries.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/helpers/reporting/synchronization.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/archive_memory.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/check_memory.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_overview.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_relation_schema.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_schema.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/memory_schema_sql.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/probe_dependencies.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/query_memory_graph.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/query_memory_index.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/rebuild_memory_index.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/summarize_memory.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/main/sync_memory_index.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/engine/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/cycles.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/dependencies.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/document_targets.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/heading_targets.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/link_resolution.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/main/resolve_memory_graph.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/graph/types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/lib.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/constants.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/assembly.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/blocks.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/headings.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/line_index.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/links.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/lists.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/obsidian.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/helpers/text.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/main/parse_markdown.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/markdown/types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/constants.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/bootstrap.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/collisions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/discovery.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/documents.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/filesystem.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/git_tracking.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/skills.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/tree.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/helpers/validation.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/main/bootstrap_memory.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/main/discover_memory.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/src/source/types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus/helpers.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus/loading.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/corpus.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/archive.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/bootstrap.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/check.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/dependencies.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/graph_query.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/helpers.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/list_batch/list_batches.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/list_batch/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/overview.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/performance.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/query.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/schema.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/streaming/helpers.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/streaming.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/summary.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/sync.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/engine.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/dependencies.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/helpers.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/resolution.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/graph.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/code_blocks.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/links.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/lists.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/structure.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/markdown.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/collisions.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/discovery.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/git_worktrees.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/helpers.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/symlinks.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-memory/tests/source.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/Cargo.toml +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/constants.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/bindings.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/database.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/generation.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/publication.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/publication_merge.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/records.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/replay.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/schema.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/schema_values.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/helpers/storage.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/main/register_cache.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/main/replay_generation.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/models.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/helpers.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/records.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/storage.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/tests.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/cache/types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/constants.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/execution_planning.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/memory_bindings.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/memory_conversion.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/memory_registration.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/main/register_module.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/extension/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/lib.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/annotations/annotations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/hygiene/hygiene.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/layers/layers.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/layers/local.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/layers/project.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/naming/naming.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/naming_globs/naming_globs.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/project_queries/project_queries.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/declarations.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/paths.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/project_layout.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/project_layout_paths.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/project_layout_queries.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/roles.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/roles/surfaces.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/shape/shape.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/tests/layout.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/tests/names.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/helpers/tests/tests.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/main/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/main/plan_core_rule_queries.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/src/rules/mod.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/tests/extension/memory_conversion.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/tests/extension/test_types.rs +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules/fixtures/core_rules.jsonl +0 -0
- {fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-native/tests/rules.rs +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
pub(crate) const MEMORY_SCHEMA_PREFIX: &str = "memory.";
|
|
2
|
+
pub(crate) const OPTION_TERMINATOR: &str = "--";
|
|
3
|
+
pub(crate) const MAP_SHORT_HELP: &str = "-h";
|
|
4
|
+
pub(crate) const LONG_OPTION_PREFIX: &str = "--";
|
|
5
|
+
pub(crate) const QUERY_FORMAT_LONG: &str = "long";
|
|
6
|
+
pub(crate) const QUERY_FORMAT_TABLE: &str = "table";
|
|
7
|
+
pub(crate) const QUERY_FORMAT_JSON: &str = "json";
|
|
8
|
+
pub(crate) const QUERY_FORMAT_CSV: &str = "csv";
|
|
9
|
+
pub(crate) const RELATION_KIND_TABLE: &str = "table";
|
|
10
|
+
pub(crate) const RELATION_KIND_VIEW: &str = "view";
|
|
11
|
+
pub(crate) const ARCHIVE_STATE_ARCHIVED: &str = "archived";
|
|
12
|
+
pub(crate) const RESOLUTION_STATUS_RESOLVED: &str = "resolved";
|
|
13
|
+
pub(crate) const DEFAULT_QUERY_LIMIT: usize = 20;
|
|
14
|
+
pub(crate) const MAX_QUERY_LIMIT: usize = 1000;
|
|
15
|
+
pub(crate) const MAP_USAGE: &str = "usage: fensu map [-h] [--direction {downstream,upstream}] [--depth DEPTH]\n [--root ROOTS] [--paths {absolute,relative,compact,none}]\n [--color {auto,always,never}] [--cache | --no-cache]\n [--cache-stats]\n symbol";
|
|
16
|
+
pub(crate) const MAP_HELP: &str = "usage: fensu map [-h] [--direction {downstream,upstream}] [--depth DEPTH]\n [--root ROOTS] [--paths {absolute,relative,compact,none}]\n [--color {auto,always,never}] [--cache | --no-cache]\n [--cache-stats]\n symbol\n\npositional arguments:\n symbol bare, dotted, or path::function project symbol\n\noptions:\n -h, --help show this help message and exit\n --direction {downstream,upstream}\n --depth DEPTH maximum call depth\n --root ROOTS Python import root to map; repeat for multiple roots\n --paths {absolute,relative,compact,none}\n path display style\n --color {auto,always,never}\n ANSI color behavior\n --cache enable map index caching\n --no-cache disable map index caching\n --cache-stats write map cache operation counts to stderr\n";
|
|
17
|
+
pub(crate) const DEFAULT_GRAPH_DEPTH: usize = 2;
|
|
18
|
+
pub(crate) const DEFAULT_GRAPH_NODES: usize = 50;
|
|
19
|
+
pub(crate) const DEFAULT_GRAPH_EDGES: usize = 100;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
use crate::command::constants::{LONG_OPTION_PREFIX, MAP_SHORT_HELP, MAP_USAGE, OPTION_TERMINATOR};
|
|
2
|
-
use crate::mapping::
|
|
2
|
+
use crate::mapping::constants::{MAP_DIRECTION_DOWNSTREAM, MAP_DIRECTION_UPSTREAM};
|
|
3
|
+
use crate::mapping::models::{MapDirection, MapOptions, PathMode};
|
|
3
4
|
|
|
4
5
|
const LONG_OPTIONS: &[&str] = &[
|
|
5
6
|
"--help",
|
|
@@ -15,6 +16,7 @@ const LONG_OPTIONS: &[&str] = &[
|
|
|
15
16
|
|
|
16
17
|
pub(crate) fn parse(arguments: &[String]) -> Result<Option<MapOptions>, String> {
|
|
17
18
|
let mut symbol = None;
|
|
19
|
+
let mut direction = MapDirection::Downstream;
|
|
18
20
|
let mut depth = 3;
|
|
19
21
|
let mut roots = Vec::new();
|
|
20
22
|
let mut path_mode = PathMode::Relative;
|
|
@@ -49,7 +51,16 @@ pub(crate) fn parse(arguments: &[String]) -> Result<Option<MapOptions>, String>
|
|
|
49
51
|
"-h" | "--help" => return Ok(None),
|
|
50
52
|
"--direction" => {
|
|
51
53
|
let value = option_value(arguments, &mut position, resolved, inline)?;
|
|
52
|
-
choice(
|
|
54
|
+
choice(
|
|
55
|
+
resolved,
|
|
56
|
+
value,
|
|
57
|
+
&[MAP_DIRECTION_DOWNSTREAM, MAP_DIRECTION_UPSTREAM],
|
|
58
|
+
)?;
|
|
59
|
+
direction = if value == MAP_DIRECTION_UPSTREAM {
|
|
60
|
+
MapDirection::Upstream
|
|
61
|
+
} else {
|
|
62
|
+
MapDirection::Downstream
|
|
63
|
+
};
|
|
53
64
|
}
|
|
54
65
|
"--depth" => {
|
|
55
66
|
let value = option_value(arguments, &mut position, resolved, inline)?;
|
|
@@ -117,6 +128,7 @@ pub(crate) fn parse(arguments: &[String]) -> Result<Option<MapOptions>, String>
|
|
|
117
128
|
symbol.ok_or_else(|| parser_error("the following arguments are required: symbol"))?;
|
|
118
129
|
Ok(Some(MapOptions {
|
|
119
130
|
symbol,
|
|
131
|
+
direction,
|
|
120
132
|
depth,
|
|
121
133
|
roots,
|
|
122
134
|
path_mode,
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
pub(crate) fn help() -> String {
|
|
2
|
+
"Usage: fensu {init,check,rule,map,skills,memory} ...\n\nCommands:\n init Initialize Fensu configuration for a repository.\n check Evaluate repository architecture rules.\n rule Show details for one rule.\n map Render a directional project call map.\n skills Generate and install agent guidance.\n memory Synchronize, inspect, and query persistent repository memory.\n\nRun `fensu <command> --help` for command-specific options.\n".to_owned()
|
|
3
|
+
}
|
|
@@ -38,5 +38,7 @@ pub(crate) fn load_optional(start: &Path) -> Result<Option<(PathBuf, Config)>, S
|
|
|
38
38
|
|
|
39
39
|
pub(crate) fn custom_rules_are_configured(start: &Path) -> Result<bool, String> {
|
|
40
40
|
let (_, config) = load(start)?;
|
|
41
|
-
Ok(!config.rule_paths.is_empty()
|
|
41
|
+
Ok(!config.rule_paths.is_empty()
|
|
42
|
+
|| !config.rule_modules.is_empty()
|
|
43
|
+
|| !config.rule_options.is_empty())
|
|
42
44
|
}
|
|
@@ -30,6 +30,11 @@ pub(crate) fn build(
|
|
|
30
30
|
ignore: strings(table.get("ignore")),
|
|
31
31
|
rule_paths: strings(table.get("rule_paths")),
|
|
32
32
|
rule_modules: strings(table.get("rule_modules")),
|
|
33
|
+
rule_options: table
|
|
34
|
+
.get("rule_options")
|
|
35
|
+
.and_then(toml::Value::as_table)
|
|
36
|
+
.cloned()
|
|
37
|
+
.unwrap_or_default(),
|
|
33
38
|
cache_enabled: cache
|
|
34
39
|
.and_then(|values| values.get("enabled"))
|
|
35
40
|
.and_then(toml::Value::as_bool)
|
{fensu_cli-0.4.0 → fensu_cli-0.5.0}/crates/fensu-cli/src/configuration/helpers/validation.rs
RENAMED
|
@@ -19,6 +19,7 @@ pub(crate) fn validate(table: &toml::map::Map<String, toml::Value>) -> Result<()
|
|
|
19
19
|
"ignore",
|
|
20
20
|
"rule_paths",
|
|
21
21
|
"rule_modules",
|
|
22
|
+
"rule_options",
|
|
22
23
|
"thresholds",
|
|
23
24
|
"roles",
|
|
24
25
|
"contracts",
|
|
@@ -37,6 +38,7 @@ pub(crate) fn validate(table: &toml::map::Map<String, toml::Value>) -> Result<()
|
|
|
37
38
|
validate_optional_table(table, "cache", &["enabled", "require_cacheable"])?;
|
|
38
39
|
validate_optional_table(table, "evaluation", &["include", "exclude"])?;
|
|
39
40
|
validate_optional_table(table, "skills", &["name"])?;
|
|
41
|
+
validate_rule_options(table.get("rule_options"))?;
|
|
40
42
|
for name in [
|
|
41
43
|
"tests",
|
|
42
44
|
"tooling",
|
|
@@ -63,6 +65,19 @@ pub(crate) fn validate(table: &toml::map::Map<String, toml::Value>) -> Result<()
|
|
|
63
65
|
Ok(())
|
|
64
66
|
}
|
|
65
67
|
|
|
68
|
+
fn validate_rule_options(value: Option<&toml::Value>) -> Result<(), String> {
|
|
69
|
+
let Some(value) = value else {
|
|
70
|
+
return Ok(());
|
|
71
|
+
};
|
|
72
|
+
let rules = value
|
|
73
|
+
.as_table()
|
|
74
|
+
.ok_or_else(|| "Config key rule_options must be a table.".to_owned())?;
|
|
75
|
+
if rules.values().any(|options| !options.is_table()) {
|
|
76
|
+
return Err("Config key rule_options must contain rule-code tables.".to_owned());
|
|
77
|
+
}
|
|
78
|
+
Ok(())
|
|
79
|
+
}
|
|
80
|
+
|
|
66
81
|
fn validate_nested_roots(roots: Vec<String>) -> Result<(), String> {
|
|
67
82
|
for (index, first) in roots.iter().enumerate() {
|
|
68
83
|
let first = first.split('/').collect::<Vec<_>>();
|
|
@@ -78,6 +78,7 @@ pub(crate) fn evaluate_and_render(
|
|
|
78
78
|
observations: HashMap::new(),
|
|
79
79
|
custom_registrations: Vec::new(),
|
|
80
80
|
repo_root: root.to_string_lossy().into_owned(),
|
|
81
|
+
rule_options: native_rule_options(codes)?,
|
|
81
82
|
};
|
|
82
83
|
let plans = plan_core_rule_queries(program(source), codes, &context);
|
|
83
84
|
context.observations = observe(root, &plans, &program_by_path, &program_by_module);
|
|
@@ -156,6 +157,26 @@ pub(crate) fn evaluate_and_render(
|
|
|
156
157
|
Ok((output, i32::from(!blocking_faults.is_empty())))
|
|
157
158
|
}
|
|
158
159
|
|
|
160
|
+
fn native_rule_options(
|
|
161
|
+
codes: &[String],
|
|
162
|
+
) -> Result<HashMap<String, HashMap<String, String>>, String> {
|
|
163
|
+
let mut by_code = HashMap::new();
|
|
164
|
+
for code in codes {
|
|
165
|
+
let rule = rule::rule(code).ok_or_else(|| format!("Unknown native rule code: {code}"))?;
|
|
166
|
+
let mut values = HashMap::new();
|
|
167
|
+
for option in &rule.options {
|
|
168
|
+
values.insert(
|
|
169
|
+
option.name.clone(),
|
|
170
|
+
serde_json::to_string(&option.current_value).map_err(|error| error.to_string())?,
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
if !values.is_empty() {
|
|
174
|
+
by_code.insert(rule.code.clone(), values);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
Ok(by_code)
|
|
178
|
+
}
|
|
179
|
+
|
|
159
180
|
pub(crate) fn selected_rules(select: &[String], ignore: &[String]) -> Vec<&'static RuleMetadata> {
|
|
160
181
|
rule::catalogue()
|
|
161
182
|
.iter()
|
|
@@ -270,7 +270,7 @@ pub(crate) fn check_identity(
|
|
|
270
270
|
warnings: bool,
|
|
271
271
|
) -> String {
|
|
272
272
|
let mut digest = Sha256::new();
|
|
273
|
-
digest.update(b"fensu-native-check-
|
|
273
|
+
digest.update(b"fensu-native-check-v3\0");
|
|
274
274
|
digest.update(env!("CARGO_PKG_VERSION").as_bytes());
|
|
275
275
|
digest.update(&config.raw);
|
|
276
276
|
digest.update([u8::from(warnings)]);
|
|
@@ -5,7 +5,7 @@ use std::sync::OnceLock;
|
|
|
5
5
|
|
|
6
6
|
use crate::configuration::main::load;
|
|
7
7
|
use crate::constants::{COLOR_ALWAYS, COLOR_AUTO, COLOR_NEVER, OPTION_COLOR};
|
|
8
|
-
use crate::models::{Config, RuleMetadata};
|
|
8
|
+
use crate::models::{Config, RuleMetadata, RuleOptionMetadata, RuleOptionValue};
|
|
9
9
|
use crate::skills::main::catalogue::load_rule_catalogue;
|
|
10
10
|
|
|
11
11
|
static CATALOGUE: OnceLock<Vec<RuleMetadata>> = OnceLock::new();
|
|
@@ -24,7 +24,10 @@ pub(crate) fn rule_output(arguments: &[String]) -> Result<String, String> {
|
|
|
24
24
|
let project_root = config_path
|
|
25
25
|
.parent()
|
|
26
26
|
.ok_or_else(|| "Configuration has no parent directory.".to_owned())?;
|
|
27
|
-
let catalogue = if loaded.rule_paths.is_empty()
|
|
27
|
+
let catalogue = if loaded.rule_paths.is_empty()
|
|
28
|
+
&& loaded.rule_modules.is_empty()
|
|
29
|
+
&& loaded.rule_options.is_empty()
|
|
30
|
+
{
|
|
28
31
|
catalogue().to_vec()
|
|
29
32
|
} else {
|
|
30
33
|
load_rule_catalogue(&loaded, project_root)?
|
|
@@ -91,11 +94,81 @@ fn render(metadata: &RuleMetadata, config: &Config, color: bool) -> String {
|
|
|
91
94
|
};
|
|
92
95
|
let mut output = format!("{header}\n");
|
|
93
96
|
render_metadata(&mut output, metadata, color);
|
|
97
|
+
render_options(&mut output, metadata);
|
|
94
98
|
render_exceptions(&mut output, metadata, config);
|
|
95
99
|
render_rule_ignores(&mut output, metadata, config);
|
|
96
100
|
output
|
|
97
101
|
}
|
|
98
102
|
|
|
103
|
+
fn render_options(output: &mut String, metadata: &RuleMetadata) {
|
|
104
|
+
if metadata.options.is_empty() {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
let mut options = metadata.options.iter().collect::<Vec<_>>();
|
|
108
|
+
options.sort_by(|left, right| left.name.cmp(&right.name));
|
|
109
|
+
output.push_str("\nOptions:\n");
|
|
110
|
+
for option in options {
|
|
111
|
+
output.push_str(&format!(" {}\n", option.name));
|
|
112
|
+
for (label, value) in option_lines(option) {
|
|
113
|
+
output.push_str(&format!(" {label}: {value}\n"));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
fn option_lines(option: &RuleOptionMetadata) -> [(&'static str, String); 9] {
|
|
119
|
+
[
|
|
120
|
+
("Type", option_type(&option.kind).to_owned()),
|
|
121
|
+
("Required", option.required.to_string()),
|
|
122
|
+
(
|
|
123
|
+
"Default",
|
|
124
|
+
if option.required {
|
|
125
|
+
"required".to_owned()
|
|
126
|
+
} else {
|
|
127
|
+
option_value(option.default.as_ref())
|
|
128
|
+
},
|
|
129
|
+
),
|
|
130
|
+
("Current value", option_value(Some(&option.current_value))),
|
|
131
|
+
(
|
|
132
|
+
"Description",
|
|
133
|
+
option
|
|
134
|
+
.description
|
|
135
|
+
.clone()
|
|
136
|
+
.unwrap_or_else(|| "None".to_owned()),
|
|
137
|
+
),
|
|
138
|
+
(
|
|
139
|
+
"Choices",
|
|
140
|
+
serde_json::to_string(&option.choices).unwrap_or_else(|_| "null".to_owned()),
|
|
141
|
+
),
|
|
142
|
+
("Minimum", optional_number(option.minimum)),
|
|
143
|
+
("Maximum", optional_number(option.maximum)),
|
|
144
|
+
(
|
|
145
|
+
"Minimum items",
|
|
146
|
+
option
|
|
147
|
+
.minimum_items
|
|
148
|
+
.map_or_else(|| "None".to_owned(), |value| value.to_string()),
|
|
149
|
+
),
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
fn option_type(kind: &str) -> &str {
|
|
154
|
+
match kind {
|
|
155
|
+
"string_list" => "list[string]",
|
|
156
|
+
"integer_list" => "list[integer]",
|
|
157
|
+
other => other,
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
fn option_value(value: Option<&RuleOptionValue>) -> String {
|
|
162
|
+
value.map_or_else(
|
|
163
|
+
|| "None".to_owned(),
|
|
164
|
+
|value| serde_json::to_string(value).unwrap_or_else(|_| "null".to_owned()),
|
|
165
|
+
)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
fn optional_number(value: Option<i64>) -> String {
|
|
169
|
+
value.map_or_else(|| "None".to_owned(), |value| value.to_string())
|
|
170
|
+
}
|
|
171
|
+
|
|
99
172
|
fn render_metadata(output: &mut String, metadata: &RuleMetadata, color: bool) {
|
|
100
173
|
let enabled = if metadata.enabled_by_default {
|
|
101
174
|
"yes"
|
|
@@ -5,6 +5,8 @@ pub(crate) const EXPRESSION_STRING: &str = "string";
|
|
|
5
5
|
pub(crate) const EXPRESSION_SUBSCRIPT: &str = "subscript";
|
|
6
6
|
pub(crate) const INIT_MODULE_FILE: &str = "__init__.py";
|
|
7
7
|
pub(crate) const INIT_MODULE: &str = "__init__";
|
|
8
|
+
pub(crate) const MAP_DIRECTION_DOWNSTREAM: &str = "downstream";
|
|
9
|
+
pub(crate) const MAP_DIRECTION_UPSTREAM: &str = "upstream";
|
|
8
10
|
pub(crate) const SELF_RECEIVER: &str = "self";
|
|
9
11
|
pub(crate) const CLASS_RECEIVER: &str = "cls";
|
|
10
12
|
pub(crate) const MAX_COMPACT_PATH_PARTS: usize = 4;
|
|
@@ -3,7 +3,9 @@ use std::io::{self, IsTerminal};
|
|
|
3
3
|
use std::path::Path;
|
|
4
4
|
|
|
5
5
|
use crate::mapping::helpers::{cache, index, project, render, tree};
|
|
6
|
-
use crate::mapping::models::{
|
|
6
|
+
use crate::mapping::models::{
|
|
7
|
+
MapCacheStats, MapDirection, MapOptions, ProjectIndex, SourceSnapshot,
|
|
8
|
+
};
|
|
7
9
|
use crate::models::CliOutput;
|
|
8
10
|
|
|
9
11
|
pub(crate) fn execute(options: MapOptions) -> Result<CliOutput, String> {
|
|
@@ -19,7 +21,10 @@ pub(crate) fn execute(options: MapOptions) -> Result<CliOutput, String> {
|
|
|
19
21
|
(index::build(&snapshots)?, None)
|
|
20
22
|
};
|
|
21
23
|
let root = index::select(&project_index.functions, &options.symbol)?;
|
|
22
|
-
let call_tree =
|
|
24
|
+
let call_tree = match options.direction {
|
|
25
|
+
MapDirection::Downstream => tree::build_tree(root, &project_index, options.depth),
|
|
26
|
+
MapDirection::Upstream => tree::build_upstream_tree(root, &project_index, options.depth),
|
|
27
|
+
};
|
|
23
28
|
let use_color = env::var_os("NO_COLOR").is_none()
|
|
24
29
|
&& match options.color.as_str() {
|
|
25
30
|
"always" => true,
|
|
@@ -10,8 +10,16 @@ use crate::mapping::models::{
|
|
|
10
10
|
MappingExpression, MappingStatement, ProjectIndex, ResolvedCallable, UnresolvedCall,
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
type
|
|
13
|
+
type CallableStateKey = (String, Option<String>);
|
|
14
|
+
type MethodCache = BTreeMap<(String, String, bool), Option<String>>;
|
|
14
15
|
type ReceiverState = BTreeMap<String, Option<String>>;
|
|
16
|
+
type IncomingCallers = BTreeMap<CallableStateKey, BTreeMap<CallableStateKey, CallableState>>;
|
|
17
|
+
|
|
18
|
+
#[derive(Clone)]
|
|
19
|
+
struct CallableState {
|
|
20
|
+
definition_key: String,
|
|
21
|
+
dispatch_class_key: Option<String>,
|
|
22
|
+
}
|
|
15
23
|
|
|
16
24
|
pub(crate) fn build_tree(
|
|
17
25
|
root: FunctionDefinition,
|
|
@@ -32,6 +40,216 @@ pub(crate) fn build_tree(
|
|
|
32
40
|
)
|
|
33
41
|
}
|
|
34
42
|
|
|
43
|
+
pub(crate) fn build_upstream_tree(
|
|
44
|
+
root: FunctionDefinition,
|
|
45
|
+
index: &ProjectIndex,
|
|
46
|
+
depth: usize,
|
|
47
|
+
) -> CallMapNode {
|
|
48
|
+
let dispatch = root
|
|
49
|
+
.owning_class
|
|
50
|
+
.as_deref()
|
|
51
|
+
.map(|class| build_class_key(&root.module_name, class));
|
|
52
|
+
let callers = incoming_callers(index);
|
|
53
|
+
build_upstream_node(
|
|
54
|
+
root,
|
|
55
|
+
dispatch,
|
|
56
|
+
index,
|
|
57
|
+
&callers,
|
|
58
|
+
depth,
|
|
59
|
+
&BTreeSet::new(),
|
|
60
|
+
true,
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
fn build_upstream_node(
|
|
65
|
+
definition: FunctionDefinition,
|
|
66
|
+
dispatch_class_key: Option<String>,
|
|
67
|
+
index: &ProjectIndex,
|
|
68
|
+
callers: &IncomingCallers,
|
|
69
|
+
remaining_depth: usize,
|
|
70
|
+
ancestors: &BTreeSet<CallableStateKey>,
|
|
71
|
+
aggregate_dispatch: bool,
|
|
72
|
+
) -> CallMapNode {
|
|
73
|
+
let key = (definition.key(), dispatch_class_key.clone());
|
|
74
|
+
let dispatch_class_name =
|
|
75
|
+
dispatch_class_name(&definition, dispatch_class_key.as_deref(), index);
|
|
76
|
+
if ancestors.contains(&key) {
|
|
77
|
+
return CallMapNode {
|
|
78
|
+
definition,
|
|
79
|
+
entries: Vec::new(),
|
|
80
|
+
dispatch_class_name,
|
|
81
|
+
cycle: true,
|
|
82
|
+
truncated: false,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
let incoming = incoming_states(&key, callers, aggregate_dispatch);
|
|
86
|
+
if remaining_depth == 0 {
|
|
87
|
+
return CallMapNode {
|
|
88
|
+
definition,
|
|
89
|
+
entries: Vec::new(),
|
|
90
|
+
dispatch_class_name,
|
|
91
|
+
cycle: false,
|
|
92
|
+
truncated: !incoming.is_empty(),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
let mut next_ancestors = ancestors.clone();
|
|
96
|
+
next_ancestors.insert(key);
|
|
97
|
+
let entries = incoming
|
|
98
|
+
.into_iter()
|
|
99
|
+
.filter_map(|caller| {
|
|
100
|
+
let caller_definition = index.functions.get(&caller.definition_key)?.clone();
|
|
101
|
+
Some(CallMapEntry::Node(Box::new(build_upstream_node(
|
|
102
|
+
caller_definition,
|
|
103
|
+
caller.dispatch_class_key.clone(),
|
|
104
|
+
index,
|
|
105
|
+
callers,
|
|
106
|
+
remaining_depth - 1,
|
|
107
|
+
&next_ancestors,
|
|
108
|
+
false,
|
|
109
|
+
))))
|
|
110
|
+
})
|
|
111
|
+
.collect();
|
|
112
|
+
CallMapNode {
|
|
113
|
+
definition,
|
|
114
|
+
entries,
|
|
115
|
+
dispatch_class_name,
|
|
116
|
+
cycle: false,
|
|
117
|
+
truncated: false,
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
fn incoming_states<'a>(
|
|
122
|
+
target: &CallableStateKey,
|
|
123
|
+
callers: &'a IncomingCallers,
|
|
124
|
+
aggregate_dispatch: bool,
|
|
125
|
+
) -> Vec<&'a CallableState> {
|
|
126
|
+
let mut states = BTreeMap::new();
|
|
127
|
+
if aggregate_dispatch {
|
|
128
|
+
for ((definition_key, _), incoming) in callers {
|
|
129
|
+
if definition_key == &target.0 {
|
|
130
|
+
states.extend(incoming.iter().map(|(key, state)| (key.clone(), state)));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
} else if let Some(incoming) = callers.get(target) {
|
|
134
|
+
states.extend(incoming.iter().map(|(key, state)| (key.clone(), state)));
|
|
135
|
+
}
|
|
136
|
+
states.into_values().collect()
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
fn incoming_callers(index: &ProjectIndex) -> IncomingCallers {
|
|
140
|
+
let mut callers = IncomingCallers::new();
|
|
141
|
+
let mut method_cache = MethodCache::new();
|
|
142
|
+
for caller in callable_states(index, &mut method_cache) {
|
|
143
|
+
let Some(definition) = index.functions.get(&caller.definition_key) else {
|
|
144
|
+
continue;
|
|
145
|
+
};
|
|
146
|
+
for entry in call_entries(
|
|
147
|
+
definition,
|
|
148
|
+
caller.dispatch_class_key.as_deref(),
|
|
149
|
+
index,
|
|
150
|
+
&mut method_cache,
|
|
151
|
+
) {
|
|
152
|
+
let PendingEntry::Resolved(target) = entry else {
|
|
153
|
+
continue;
|
|
154
|
+
};
|
|
155
|
+
let target_key = (target.definition.key(), target.dispatch_class_key);
|
|
156
|
+
let caller_key = (
|
|
157
|
+
caller.definition_key.clone(),
|
|
158
|
+
caller.dispatch_class_key.clone(),
|
|
159
|
+
);
|
|
160
|
+
callers
|
|
161
|
+
.entry(target_key)
|
|
162
|
+
.or_default()
|
|
163
|
+
.insert(caller_key, caller.clone());
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
callers
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
fn callable_states(index: &ProjectIndex, method_cache: &mut MethodCache) -> Vec<CallableState> {
|
|
170
|
+
let descendants = inheritance_descendants(index);
|
|
171
|
+
let mut states = BTreeMap::new();
|
|
172
|
+
for definition in index.functions.values() {
|
|
173
|
+
let Some(owner) = definition.owning_class.as_deref() else {
|
|
174
|
+
let state = CallableState {
|
|
175
|
+
definition_key: definition.key(),
|
|
176
|
+
dispatch_class_key: None,
|
|
177
|
+
};
|
|
178
|
+
states.insert((definition.key(), None), state);
|
|
179
|
+
continue;
|
|
180
|
+
};
|
|
181
|
+
let owner_key = build_class_key(&definition.module_name, owner);
|
|
182
|
+
for class_key in descendants.get(&owner_key).into_iter().flatten() {
|
|
183
|
+
let Some(class) = index.classes.get(class_key) else {
|
|
184
|
+
continue;
|
|
185
|
+
};
|
|
186
|
+
let resolved = method_definition(
|
|
187
|
+
class,
|
|
188
|
+
&definition.name,
|
|
189
|
+
index,
|
|
190
|
+
method_cache,
|
|
191
|
+
&mut BTreeSet::new(),
|
|
192
|
+
false,
|
|
193
|
+
);
|
|
194
|
+
if resolved.as_ref().map(FunctionDefinition::key) != Some(definition.key()) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
let dispatch_class_key = Some(class.key());
|
|
198
|
+
states.insert(
|
|
199
|
+
(definition.key(), dispatch_class_key.clone()),
|
|
200
|
+
CallableState {
|
|
201
|
+
definition_key: definition.key(),
|
|
202
|
+
dispatch_class_key,
|
|
203
|
+
},
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
states.into_values().collect()
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
fn inheritance_descendants(index: &ProjectIndex) -> BTreeMap<String, BTreeSet<String>> {
|
|
211
|
+
let mut descendants = index
|
|
212
|
+
.classes
|
|
213
|
+
.keys()
|
|
214
|
+
.map(|key| (key.clone(), BTreeSet::from([key.clone()])))
|
|
215
|
+
.collect::<BTreeMap<_, _>>();
|
|
216
|
+
for class_key in index.classes.keys() {
|
|
217
|
+
let mut ancestors = BTreeSet::new();
|
|
218
|
+
collect_class_ancestors(
|
|
219
|
+
class_key,
|
|
220
|
+
index,
|
|
221
|
+
&mut BTreeSet::new(),
|
|
222
|
+
&mut ancestors,
|
|
223
|
+
);
|
|
224
|
+
for ancestor in ancestors {
|
|
225
|
+
descendants
|
|
226
|
+
.entry(ancestor)
|
|
227
|
+
.or_default()
|
|
228
|
+
.insert(class_key.clone());
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
descendants
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
fn collect_class_ancestors(
|
|
235
|
+
class_key: &str,
|
|
236
|
+
index: &ProjectIndex,
|
|
237
|
+
active: &mut BTreeSet<String>,
|
|
238
|
+
ancestors: &mut BTreeSet<String>,
|
|
239
|
+
) {
|
|
240
|
+
if !active.insert(class_key.to_owned()) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if let Some(class) = index.classes.get(class_key) {
|
|
244
|
+
for base_key in &class.base_keys {
|
|
245
|
+
if index.classes.contains_key(base_key) && ancestors.insert(base_key.clone()) {
|
|
246
|
+
collect_class_ancestors(base_key, index, active, ancestors);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
active.remove(class_key);
|
|
251
|
+
}
|
|
252
|
+
|
|
35
253
|
fn build_node(
|
|
36
254
|
definition: FunctionDefinition,
|
|
37
255
|
dispatch_class_key: Option<String>,
|
|
@@ -416,7 +634,10 @@ fn method_definition(
|
|
|
416
634
|
) -> Option<FunctionDefinition> {
|
|
417
635
|
let cache_key = (class.key(), method_name.to_owned(), exclude_protocol_bases);
|
|
418
636
|
if let Some(cached) = cache.get(&cache_key) {
|
|
419
|
-
return cached
|
|
637
|
+
return cached
|
|
638
|
+
.as_deref()
|
|
639
|
+
.and_then(|key| index.functions.get(key))
|
|
640
|
+
.cloned();
|
|
420
641
|
}
|
|
421
642
|
let active_key = (class.key(), method_name.to_owned());
|
|
422
643
|
if !active.insert(active_key.clone()) {
|
|
@@ -424,11 +645,11 @@ fn method_definition(
|
|
|
424
645
|
}
|
|
425
646
|
let direct_key = build_function_key(&class.module_name, method_name, Some(&class.name));
|
|
426
647
|
if let Some(direct) = index.functions.get(&direct_key).cloned() {
|
|
427
|
-
cache.insert(cache_key, Some(
|
|
648
|
+
cache.insert(cache_key, Some(direct_key));
|
|
428
649
|
active.remove(&active_key);
|
|
429
650
|
return Some(direct);
|
|
430
651
|
}
|
|
431
|
-
let mut candidates =
|
|
652
|
+
let mut candidates = BTreeSet::new();
|
|
432
653
|
for base in &class.bases {
|
|
433
654
|
let owner = class_as_function(class);
|
|
434
655
|
let Some(base_class) = resolve_class_expression(base, &owner, index, false) else {
|
|
@@ -445,15 +666,15 @@ fn method_definition(
|
|
|
445
666
|
active,
|
|
446
667
|
exclude_protocol_bases,
|
|
447
668
|
) {
|
|
448
|
-
candidates.insert(inherited.key()
|
|
669
|
+
candidates.insert(inherited.key());
|
|
449
670
|
}
|
|
450
671
|
}
|
|
451
672
|
active.remove(&active_key);
|
|
452
|
-
let
|
|
453
|
-
.then(|| candidates.
|
|
673
|
+
let result_key = (candidates.len() == 1)
|
|
674
|
+
.then(|| candidates.into_iter().next())
|
|
454
675
|
.flatten();
|
|
455
|
-
cache.insert(cache_key,
|
|
456
|
-
|
|
676
|
+
cache.insert(cache_key, result_key.clone());
|
|
677
|
+
result_key.and_then(|key| index.functions.get(&key).cloned())
|
|
457
678
|
}
|
|
458
679
|
|
|
459
680
|
fn resolve_class_expression(
|
|
@@ -184,6 +184,13 @@ pub(crate) enum PathMode {
|
|
|
184
184
|
None,
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
+
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
|
|
188
|
+
pub(crate) enum MapDirection {
|
|
189
|
+
#[default]
|
|
190
|
+
Downstream,
|
|
191
|
+
Upstream,
|
|
192
|
+
}
|
|
193
|
+
|
|
187
194
|
#[derive(Clone, Copy, Debug, Default)]
|
|
188
195
|
pub(crate) struct MapCacheStats {
|
|
189
196
|
pub(crate) manifest_hit: bool,
|
|
@@ -197,6 +204,7 @@ pub(crate) struct MapCacheStats {
|
|
|
197
204
|
#[derive(Debug)]
|
|
198
205
|
pub(crate) struct MapOptions {
|
|
199
206
|
pub(crate) symbol: String,
|
|
207
|
+
pub(crate) direction: MapDirection,
|
|
200
208
|
pub(crate) depth: usize,
|
|
201
209
|
pub(crate) roots: Vec<String>,
|
|
202
210
|
pub(crate) path_mode: PathMode,
|