Skip to content

Commit 57fbc91

Browse files
olwangclaude
andcommitted
refactor(reir): factor repetitive Fact builders in package_review_to_facts (behavior-preserving)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 0258a6c commit 57fbc91

1 file changed

Lines changed: 118 additions & 83 deletions

File tree

crates/reir/src/adapters/rsscript.rs

Lines changed: 118 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -780,57 +780,28 @@ pub fn package_review_to_facts(input: &RsScriptPackageReviewInput) -> Vec<Fact>
780780
for dependency in &input.dependencies {
781781
let dependency_subject = dependency_subject(dependency);
782782
let dependency_slug = normalized_id(&dependency_subject.id);
783-
let value = dependency_risk_value(dependency);
784-
let unknown = matches!(value, FactValue::Unknown);
785-
facts.push(Fact {
786-
schema: FACT_SCHEMA.to_owned(),
787-
id: format!("fact.dependency.{}.risk", dependency_slug),
788-
kind: FactKind::DependencyRisk,
789-
role: None,
790-
subject: dependency_subject,
791-
capability: None,
792-
value,
793-
confidence: confidence(dependency_confidence(dependency), PACKAGE_REVIEW_SOURCE),
794-
acquisition_mode: AcquisitionMode::PackageMetadata,
795-
precision: Precision::Category,
796-
evidence: vec![package_metadata(
797-
&input.package_name,
798-
&input.version,
799-
dependency.requirement.clone(),
800-
Some(dependency_summary(dependency)),
801-
)],
802-
unknown_reason: unknown
803-
.then(|| "dependency source is unresolved by package review".to_owned()),
804-
});
783+
facts.push(build_dependency_risk_fact(
784+
format!("fact.dependency.{}.risk", dependency_slug),
785+
dependency_subject,
786+
dependency,
787+
&input.package_name,
788+
&input.version,
789+
));
805790
}
806791

807792
for export in &input.exports {
808793
let export_subject = public_contract_subject(&input.package_name, export);
809-
let export_value = public_contract_value(export);
810-
let export_unknown = matches!(export_value, FactValue::Unknown);
811-
facts.push(Fact {
812-
schema: FACT_SCHEMA.to_owned(),
813-
id: format!(
794+
facts.push(build_public_contract_fact(
795+
format!(
814796
"fact.public_contract.{}.{}",
815797
package_slug,
816798
normalized_id(&export_subject.id)
817799
),
818-
kind: FactKind::PublicContract,
819-
role: None,
820-
subject: export_subject.clone(),
821-
capability: None,
822-
value: export_value,
823-
confidence: confidence(public_contract_confidence(export), PACKAGE_REVIEW_SOURCE),
824-
acquisition_mode: AcquisitionMode::CompilerContract,
825-
precision: Precision::Exact,
826-
evidence: vec![package_metadata(
827-
&input.package_name,
828-
&input.version,
829-
Some(export.kind.clone()),
830-
Some(package_export_summary(export)),
831-
)],
832-
unknown_reason: export_unknown.then(|| public_contract_unknown_reason(export)),
833-
});
800+
export_subject.clone(),
801+
export,
802+
&input.package_name,
803+
&input.version,
804+
));
834805
if let Some(protocol_fact) = protocol_impl_fact(
835806
export,
836807
&export_subject,
@@ -878,52 +849,26 @@ pub fn package_review_to_facts(input: &RsScriptPackageReviewInput) -> Vec<Fact>
878849

879850
for boundary in &input.native_boundaries {
880851
let boundary_subject = native_boundary_subject(&input.package_name, &boundary.module_name);
881-
facts.push(Fact {
882-
schema: FACT_SCHEMA.to_owned(),
883-
id: format!(
852+
facts.push(build_native_boundary_fact(
853+
format!(
884854
"fact.native_module_declaration.{}",
885855
normalized_id(&boundary_subject.id)
886856
),
887-
kind: FactKind::NativeModuleDeclaration,
888-
role: None,
889-
subject: boundary_subject.clone(),
890-
capability: None,
891-
value: FactValue::True,
892-
confidence: confidence(ConfidenceLevel::Authoritative, PACKAGE_REVIEW_SOURCE),
893-
acquisition_mode: AcquisitionMode::CompilerContract,
894-
precision: Precision::Exact,
895-
evidence: vec![source_span(
896-
&boundary.file,
897-
boundary.line,
898-
&boundary.module_name,
899-
Some(native_module_declaration_reason(boundary)),
900-
PACKAGE_REVIEW_SOURCE,
901-
)],
902-
unknown_reason: None,
903-
});
904-
facts.push(Fact {
905-
schema: FACT_SCHEMA.to_owned(),
906-
id: format!(
857+
FactKind::NativeModuleDeclaration,
858+
boundary_subject.clone(),
859+
boundary,
860+
native_module_declaration_reason(boundary),
861+
));
862+
facts.push(build_native_boundary_fact(
863+
format!(
907864
"fact.native_boundary.{}",
908865
normalized_id(&boundary_subject.id)
909866
),
910-
kind: FactKind::NativeBoundary,
911-
role: None,
912-
subject: boundary_subject,
913-
capability: None,
914-
value: FactValue::True,
915-
confidence: confidence(ConfidenceLevel::Authoritative, PACKAGE_REVIEW_SOURCE),
916-
acquisition_mode: AcquisitionMode::CompilerContract,
917-
precision: Precision::Exact,
918-
evidence: vec![source_span(
919-
&boundary.file,
920-
boundary.line,
921-
&boundary.module_name,
922-
Some(native_boundary_reason(boundary)),
923-
PACKAGE_REVIEW_SOURCE,
924-
)],
925-
unknown_reason: None,
926-
});
867+
FactKind::NativeBoundary,
868+
boundary_subject,
869+
boundary,
870+
native_boundary_reason(boundary),
871+
));
927872
}
928873

929874
facts
@@ -3611,6 +3556,96 @@ fn capability_fact(
36113556
}
36123557
}
36133558

3559+
fn build_dependency_risk_fact(
3560+
id: String,
3561+
subject: Subject,
3562+
dependency: &RsScriptPackageDependency,
3563+
package_name: &str,
3564+
version: &str,
3565+
) -> Fact {
3566+
let value = dependency_risk_value(dependency);
3567+
let unknown = matches!(value, FactValue::Unknown);
3568+
Fact {
3569+
schema: FACT_SCHEMA.to_owned(),
3570+
id,
3571+
kind: FactKind::DependencyRisk,
3572+
role: None,
3573+
subject,
3574+
capability: None,
3575+
value,
3576+
confidence: confidence(dependency_confidence(dependency), PACKAGE_REVIEW_SOURCE),
3577+
acquisition_mode: AcquisitionMode::PackageMetadata,
3578+
precision: Precision::Category,
3579+
evidence: vec![package_metadata(
3580+
package_name,
3581+
version,
3582+
dependency.requirement.clone(),
3583+
Some(dependency_summary(dependency)),
3584+
)],
3585+
unknown_reason: unknown
3586+
.then(|| "dependency source is unresolved by package review".to_owned()),
3587+
}
3588+
}
3589+
3590+
fn build_public_contract_fact(
3591+
id: String,
3592+
subject: Subject,
3593+
export: &RsScriptPackageExport,
3594+
package_name: &str,
3595+
version: &str,
3596+
) -> Fact {
3597+
let value = public_contract_value(export);
3598+
let unknown = matches!(value, FactValue::Unknown);
3599+
Fact {
3600+
schema: FACT_SCHEMA.to_owned(),
3601+
id,
3602+
kind: FactKind::PublicContract,
3603+
role: None,
3604+
subject,
3605+
capability: None,
3606+
value,
3607+
confidence: confidence(public_contract_confidence(export), PACKAGE_REVIEW_SOURCE),
3608+
acquisition_mode: AcquisitionMode::CompilerContract,
3609+
precision: Precision::Exact,
3610+
evidence: vec![package_metadata(
3611+
package_name,
3612+
version,
3613+
Some(export.kind.clone()),
3614+
Some(package_export_summary(export)),
3615+
)],
3616+
unknown_reason: unknown.then(|| public_contract_unknown_reason(export)),
3617+
}
3618+
}
3619+
3620+
fn build_native_boundary_fact(
3621+
id: String,
3622+
kind: FactKind,
3623+
subject: Subject,
3624+
boundary: &RsScriptNativeBoundary,
3625+
reason: String,
3626+
) -> Fact {
3627+
Fact {
3628+
schema: FACT_SCHEMA.to_owned(),
3629+
id,
3630+
kind,
3631+
role: None,
3632+
subject,
3633+
capability: None,
3634+
value: FactValue::True,
3635+
confidence: confidence(ConfidenceLevel::Authoritative, PACKAGE_REVIEW_SOURCE),
3636+
acquisition_mode: AcquisitionMode::CompilerContract,
3637+
precision: Precision::Exact,
3638+
evidence: vec![source_span(
3639+
&boundary.file,
3640+
boundary.line,
3641+
&boundary.module_name,
3642+
Some(reason),
3643+
PACKAGE_REVIEW_SOURCE,
3644+
)],
3645+
unknown_reason: None,
3646+
}
3647+
}
3648+
36143649
fn native_edge(
36153650
id: String,
36163651
from: Subject,

0 commit comments

Comments
 (0)