Skip to content
This repository was archived by the owner on Oct 25, 2023. It is now read-only.

Commit d15f8fd

Browse files
committed
fix: make root module "private" to the package
1 parent 1501702 commit d15f8fd

File tree

4 files changed

+22
-8
lines changed

4 files changed

+22
-8
lines changed

Diff for: Lake/Build/Info.lean

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ inductive BuildInfo
3636
/-! ### Build Key Helper Constructors -/
3737

3838
abbrev Module.mkBuildKey (facet : WfName) (self : Module) : ModuleBuildKey facet :=
39-
⟨⟨none, self.name, facet⟩, rfl, rfl⟩
39+
⟨⟨none, self.keyName, facet⟩, rfl, rfl⟩
4040

4141
abbrev Package.mkBuildKey (facet : WfName) (self : Package) : PackageBuildKey facet :=
4242
⟨⟨self.name, none, facet⟩, rfl, rfl⟩

Diff for: Lake/Config/LeanExe.lean

+5-3
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ with a single module (the root).
3434
-/
3535
def LeanExeConfig.toLeanLibConfig (self : LeanExeConfig) : LeanLibConfig where
3636
name := self.name
37-
roots := #[self.root]
37+
roots := #[]
3838
libName := self.exeName
3939
toLeanConfig := self.toLeanConfig
4040

@@ -49,8 +49,10 @@ namespace LeanExe
4949
⟨self.pkg, self.config.toLeanLibConfig⟩
5050

5151
/-- The executable's root module. -/
52-
@[inline] def root (self : LeanExe) : Module :=
53-
⟨self.toLeanLib, WfName.ofName self.config.root⟩
52+
@[inline] def root (self : LeanExe) : Module where
53+
lib := self.toLeanLib
54+
name := WfName.ofName self.config.root
55+
keyName := WfName.ofName self.pkg.name |>.appendName self.config.root
5456

5557
/- Return the the modules root if the name matches, otherwise return none. -/
5658
def isRoot? (name : Name) (self : LeanExe) : Option Module :=

Diff for: Lake/Config/Module.lean

+7-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ open Std System
1313
structure Module where
1414
lib : LeanLib
1515
name : WfName
16+
/--
17+
The name of the module as a key.
18+
Used to create private modules (e.g., executable roots).
19+
-/
20+
keyName : WfName := name
1621
deriving Inhabited
1722

1823
abbrev ModuleSet := RBTree Module (·.name.quickCmp ·.name)
@@ -24,14 +29,14 @@ abbrev ModuleMap (α) := RBMap Module α (·.name.quickCmp ·.name)
2429
/-- Locate the named module in the library (if it is buildable and local to it). -/
2530
def LeanLib.findModule? (mod : Name) (self : LeanLib) : Option Module :=
2631
let mod := WfName.ofName mod
27-
if self.isBuildableModule mod then some self, mod else none
32+
if self.isBuildableModule mod then some {lib := self, name := mod} else none
2833

2934
/-- Get an `Array` of the library's modules. -/
3035
def LeanLib.getModuleArray (self : LeanLib) : IO (Array Module) :=
3136
(·.2) <$> StateT.run (s := #[]) do
3237
self.config.globs.forM fun glob => do
3338
glob.forEachModuleIn self.srcDir fun mod => do
34-
modify (·.push self, mod)
39+
modify (·.push {lib := self, name := mod})
3540

3641
namespace Module
3742

Diff for: Lake/Util/Name.lean

+9-2
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,17 @@ instance : ToString WfName := ⟨(·.toString)⟩
174174
def isPrefixOf : WfName → WfName → Bool
175175
| ⟨n, _⟩, ⟨n', _⟩ => n.isPrefixOf n'
176176

177-
def append : WfName → WfName → WfName
177+
protected def append : WfName → WfName → WfName
178178
| ⟨n, w⟩, ⟨n', w'⟩ => ⟨n.append n', Name.wf_of_append w w'⟩
179179

180-
instance : Append WfName := ⟨append⟩
180+
instance : Append WfName := ⟨WfName.append⟩
181+
182+
def appendName (n : WfName) : Name → WfName
183+
| .anonymous => n
184+
| .str p s _ => mkStr (appendName n p) s
185+
| .num p v _ => mkNum (appendName n p) v
186+
187+
instance : HAppend WfName Name WfName := ⟨appendName⟩
181188

182189
@[inline] protected def hash : WfName → UInt64
183190
| ⟨n, _⟩ => n.hash

0 commit comments

Comments
 (0)