Skip to content

Commit e9d0f83

Browse files
authored
Minimize imports via lake shake and add import lint/stats (#1020)
## Summary Run `lake shake` to minimize the import graph across all 293 Strata modules, reducing average transitive Strata imports by 32% (56 → 38) and total transitive imports (including Lean/Std) by 40% (1379 → 831). Add CI linting to ensure `Strata.lean` transitively imports every module, and add an import statistics script for ongoing measurement. ## Changes - **Import lint driver (`Scripts/CheckImports.lean`)**: Verifies that all `.lean` files under `Strata/` are transitively imported by `Strata.lean`. Registered as `lintDriver` in `lakefile.toml` so `lake lint` runs it automatically. Supports `-- noimport: Strata.Foo` comments in `Strata.lean` to allowlist intentionally excluded modules. - **Import statistics script (`Scripts/ImportStats.lean`)**: Computes per-module transitive import counts (both total and Strata-only), reporting average, median, min, max, top/bottom lists, and histograms. Run via `lake exe ImportStats`. - **`lake shake Strata --fix`**: Applied shake's suggestions to remove unnecessary imports across 225 files (net -185 lines). This is the bulk of the change. - **Aggregator modules use `-- shake: keep`**: Pure aggregator modules (`CBMC.lean`, `GOTO.lean`, `B3.lean`, `Dyn.lean`, `Python.lean`, `Imperative.lean`, `Lambda.lean`, `DDM.lean`, `LExprType.lean`, `B3/Verifier.lean`) intentionally re-export their submodules and are annotated with `-- shake: keep` so `lake shake --fix` won't strip them. - **DDM elaboration imports use `-- shake: keep`**: Files using `#dialect`, `#strata`, `#strata_gen`, and related macros have elaboration-time import dependencies that shake cannot detect. These are annotated with `-- shake: keep` to prevent breakage. - **Renamed aggregator files**: `Dyn/Dyn.lean` → `Dyn.lean`, `Python/Python.lean` → `Python.lean`, `Imperative/Imperative.lean` → `Imperative.lean` — the `Foo/Foo.lean` pattern is unnecessary now that these are proper `module` files. - **Orphaned modules added to `Strata.lean`**: When shake stripped re-exports from real code files (e.g. `ProgramWF.lean` no longer re-exports `StatementWF`), the orphaned modules were added directly to `Strata.lean` to maintain full coverage. ## Results | Metric | Before | After | Change | |---|---|---|---| | Avg transitive imports (Strata-only) | 56.2 | 38.2 | -32% | | Median transitive imports (Strata-only) | 38 | 22 | -42% | | Avg transitive imports (all) | 1379 | 831 | -40% | | Total import edges (Strata-only) | 16,455 | 11,194 | -32% | | Clean build time | 3m 02s | 2m 58s | -2% | By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
1 parent beb9b9c commit e9d0f83

221 files changed

Lines changed: 408 additions & 855 deletions

File tree

Some content is hidden

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

Strata.lean

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ import Strata.DDM.Integration.Lean
1212
import Strata.DDM.Ion
1313

1414
/- Dialect Library -/
15-
import Strata.DL.SMT.SMT
15+
import Strata.DL.SMT
1616
import Strata.DL.Lambda.Lambda
17-
import Strata.DL.Imperative.Imperative
17+
import Strata.DL.Imperative
1818

1919
/- Utilities -/
2020
import Strata.Util.NameProofs
@@ -25,6 +25,8 @@ import Strata.Languages.Core.FactoryWF
2525
import Strata.Languages.Core.SeqModel
2626
import Strata.Languages.Core.StatementSemantics
2727
import Strata.Languages.Core.SarifOutput
28+
29+
import Strata.Languages.Laurel.Grammar
2830
import Strata.Languages.Laurel.LaurelCompilationPipeline
2931

3032
/- Code Transforms -/
@@ -71,4 +73,28 @@ import Strata.SimpleAPI
7173
/- Pipeline -/
7274
import Strata.Pipeline.PyAnalyzeLaurel
7375

74-
-- noimport: Strata.Util.Random -- deletion candidate: nothing imports this module
76+
-- deletion candidates: nothing imports these modules:
77+
78+
-- noimport:
79+
import Strata.DL.Imperative.CFGSemantics
80+
import Strata.DL.Imperative.SemanticsProps
81+
import Strata.DL.Lambda.Denote.Assumptions
82+
import Strata.DL.Lambda.Denote.CallOfLFuncDenote
83+
import Strata.DL.Lambda.Denote.LExprDenote
84+
import Strata.DL.Lambda.Denote.LExprDenoteConstrs
85+
import Strata.DL.Lambda.Denote.LExprDenoteEq
86+
import Strata.DL.Lambda.Denote.LExprDenoteProps
87+
import Strata.DL.Lambda.Denote.LExprDenoteSubst
88+
import Strata.DL.Lambda.Denote.LExprDenoteTySubst
89+
import Strata.DL.Lambda.Denote.LExprSemanticsConsistent
90+
import Strata.DL.Lambda.LExprTypeSpec
91+
import Strata.DL.Lambda.MetaData
92+
import Strata.DL.Lambda.Reflect
93+
import Strata.DL.Lambda.Semantics
94+
import Strata.DL.Lambda.TypeFactoryWF
95+
import Strata.DL.Util.HList
96+
import Strata.Languages.Core.ProgramWF
97+
import Strata.Languages.Core.StatementWF
98+
import Strata.Languages.Dyn.DDMTransform.Parse
99+
import Strata.Languages.Dyn.DDMTransform.Translate
100+
import Strata.Util.Random

Strata/Backends/CBMC/CProver.lean

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,3 @@ module
77

88
-------------------------------------------------------------------------------
99

10-
public import Strata.Backends.CBMC.GOTO.Program
11-
public import Strata.Backends.CBMC.GOTO.InstToJson

Strata/Backends/CBMC/CollectSymbols.lean

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66
module
77

88
public import Strata.Backends.CBMC.GOTO.InstToJson
9-
public import Strata.Backends.CBMC.GOTO.LambdaToCProverGOTO
10-
import Strata.DL.Lambda.TypeConstructor
11-
import Strata.DL.Lambda.TypeFactory
129
public import Strata.Languages.Core.Program
10+
import Strata.Backends.CBMC.GOTO.LambdaToCProverGOTO
1311

1412
namespace Strata
1513

Strata/Backends/CBMC/Common.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
-/
66
module
77

8-
public import Lean.Data.Json
98
public import Strata.DL.Util.Map
9+
public import Lean.Data.Json.FromToJson.Basic
1010

1111
public section
1212

Strata/Backends/CBMC/CoreToCBMC.lean

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,9 @@ module
88
public import Strata.Backends.CBMC.Common
99
public import Strata.Languages.Core.Procedure
1010

11-
import Lean.Data.Json
12-
import Lean.Parser.Types
13-
import Strata.DDM.Integration.Lean.HashCommands
14-
import Strata.Languages.Core.Env
15-
import Strata.Languages.Core.DDMTransform.Grammar
11+
public import Strata.DDM.AST
12+
import Strata.DDM.Integration.Lean.HashCommands -- shake: keep
1613
import Strata.Languages.Core.DDMTransform.Translate
17-
import Strata.DL.Util.Map
18-
import Strata.Languages.Core.Core
19-
import Strata.Util.Tactics
2014

2115
public section
2216

Strata/Backends/CBMC/GOTO/Code.lean

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
module
77

88
public import Strata.Backends.CBMC.GOTO.Expr
9-
public import Strata.Backends.CBMC.GOTO.SourceLocation
109
import Strata.Util.Tactics
1110

1211
namespace CProverGOTO

Strata/Backends/CBMC/GOTO/CoreToCProverGOTO.lean

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
-/
66
module
77

8-
public import Strata.Backends.CBMC.GOTO.InstToJson
9-
public import Strata.Backends.CBMC.GOTO.DefaultSymbols
108
public import Strata.Backends.CBMC.GOTO.LambdaToCProverGOTO
119
public import Strata.DL.Imperative.ToCProverGOTO
12-
public import Strata.Languages.Core.Verifier
13-
import Lean.Parser.Types
10+
public import Strata.Backends.CBMC.GOTO.Program
11+
public import Strata.Languages.Core.Program
12+
import Strata.Backends.CBMC.GOTO.DefaultSymbols
13+
import Strata.Languages.Core.DDMTransform.Translate
14+
import Strata.Languages.Core.ProgramType
15+
import Strata.Util.Json
1416

1517
public section
1618

Strata/Backends/CBMC/GOTO/CoreToGOTOPipeline.lean

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,13 @@
55
-/
66
module
77

8-
public import Strata.Backends.CBMC.CollectSymbols
98
public import Strata.Backends.CBMC.GOTO.CoreToCProverGOTO
109
import Strata.Transform.ProcedureInlining
10+
public import Strata.Languages.Core.Factory
11+
import Strata.Backends.CBMC.CollectSymbols
12+
import Strata.Backends.CBMC.GOTO.DefaultSymbols
13+
import Strata.Languages.Core.ProgramType
14+
import Strata.Util.Json
1115

1216
/-! ## Core-to-GOTO translation pipeline
1317

Strata/Backends/CBMC/GOTO/Expr.lean

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
module
77

88
public import Strata.Backends.CBMC.GOTO.Type
9-
public import Strata.Backends.CBMC.GOTO.SourceLocation
109
import Strata.Util.Tactics
1110

1211
namespace CProverGOTO

Strata/Backends/CBMC/GOTO/InstToJson.lean

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55
-/
66
module
77

8-
public import Strata.Backends.CBMC.Common
9-
public import Strata.Util.Json
108
public import Strata.Backends.CBMC.GOTO.Program
119

1210
import Strata.Util.Tactics
11+
public import Strata.DL.Util.Map
12+
import Strata.Backends.CBMC.Common
13+
import Strata.Util.Json
1314

1415
public section
1516

0 commit comments

Comments
 (0)