Skip to content

Commit 84ee6e9

Browse files
authored
[v2] refactor language analysis into separate passes (#1457)
This PR splits the language v2 definition analysis into independent passes, rather than the monolith that existed in v1. It also fixes a bug in the v2 test runner, where it was picking up the v1 old tests, rather than running its own. > NOTE: this is a set of PRs to add the lexer v2, to make reviewing smaller chunks easier: > > 1. #1457 > 2. #1458 > 3. #1459 > 4. #1460 > 5. #1461 > 6. #1462
1 parent 0bcf8f0 commit 84ee6e9

File tree

53 files changed

+434
-177
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+434
-177
lines changed

Cargo.lock

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/language-v2/definition/src/compiler/analysis/mod.rs

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
1-
mod definitions;
2-
mod reachability;
3-
mod references;
4-
mod utils;
1+
mod p1_definitions;
2+
mod p2_version_specifiers;
3+
mod p3_references;
4+
mod p4_unreachabe_items;
5+
mod p5_unused_versions;
56

67
use std::rc::Rc;
78

89
use indexmap::IndexMap;
910
use proc_macro2::Span;
1011

11-
use crate::compiler::analysis::definitions::analyze_definitions;
12-
use crate::compiler::analysis::reachability::analyze_reachability;
13-
use crate::compiler::analysis::references::analyze_references;
14-
use crate::compiler::version_set::VersionSet;
12+
use crate::compiler::utils::version_set::VersionSet;
1513
use crate::internals::{ErrorsCollection, ParseOutput, Spanned};
1614
use crate::model::{Identifier, SpannedItem, SpannedLanguage};
1715

@@ -42,27 +40,21 @@ impl Analysis {
4240
metadata: IndexMap::new(),
4341
};
4442

45-
// Early return if there are already errors, to prevent producing noise from later analysis:
46-
if analysis.errors.has_errors() {
47-
return analysis;
43+
for pass in &[
44+
p1_definitions::run,
45+
p2_version_specifiers::run,
46+
p3_references::run,
47+
p4_unreachabe_items::run,
48+
p5_unused_versions::run,
49+
] {
50+
// Early return if there are already errors, to prevent producing noise from later analysis:
51+
if analysis.errors.has_errors() {
52+
return analysis;
53+
}
54+
55+
pass(&mut analysis);
4856
}
4957

50-
analyze_definitions(&mut analysis);
51-
52-
// Early return if there are already errors, to prevent producing noise from later analysis:
53-
if analysis.errors.has_errors() {
54-
return analysis;
55-
}
56-
57-
analyze_references(&mut analysis);
58-
59-
// Early return if there are already errors, to prevent producing noise from later analysis:
60-
if analysis.errors.has_errors() {
61-
return analysis;
62-
}
63-
64-
analyze_reachability(&mut analysis);
65-
6658
analysis
6759
}
6860
}

crates/language-v2/definition/src/compiler/analysis/definitions.rs renamed to crates/language-v2/definition/src/compiler/analysis/p1_definitions.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ use std::collections::HashSet;
22
use std::rc::Rc;
33

44
use crate::compiler::analysis::{Analysis, ItemMetadata};
5-
use crate::compiler::version_set::VersionSet;
5+
use crate::compiler::utils::version_set::VersionSet;
66
use crate::internals::Spanned;
77
use crate::model::{
88
Identifier, SpannedField, SpannedItem, SpannedOperatorModel, SpannedPrecedenceOperator,
99
SpannedVersionSpecifier,
1010
};
1111

12-
pub(crate) fn analyze_definitions(analysis: &mut Analysis) {
12+
pub(crate) fn run(analysis: &mut Analysis) {
1313
collect_top_level_items(analysis);
1414

1515
check_enum_items(analysis);
@@ -198,9 +198,9 @@ fn calculate_defined_in(analysis: &mut Analysis, item: &SpannedItem) -> VersionS
198198

199199
let mut try_add_specifier = |specifier: &Option<Spanned<SpannedVersionSpecifier>>| {
200200
if let Some(specifier) = specifier {
201-
analysis.add_specifier(&mut defined_in, specifier);
201+
defined_in.add_specifier(specifier, &analysis.language);
202202
} else {
203-
analysis.add_all_versions(&mut defined_in);
203+
defined_in.add_all_versions(&analysis.language);
204204
}
205205
};
206206

0 commit comments

Comments
 (0)