Skip to content

Commit 64c0995

Browse files
address review comment
1 parent dc336de commit 64c0995

16 files changed

Lines changed: 67 additions & 127 deletions

compiler-cli/src/compile_package.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use gleam_core::{
99
build::{
1010
Mode, NullTelemetry, PackageCompiler, StaleTracker, Target, TargetCodegenConfiguration,
1111
},
12-
config::PackageKind,
1312
metadata,
1413
paths::{self, ProjectPaths},
1514
type_::ModuleInterface,
@@ -39,7 +38,6 @@ pub fn command(options: CompilePackage) -> Result<()> {
3938
tracing::info!("Compiling package");
4039

4140
let mut compiler = PackageCompiler::new(
42-
PackageKind::Root,
4341
&config,
4442
Mode::Dev,
4543
&options.package_directory,

compiler-core/src/build/package_compiler.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ mod tests;
33

44
use crate::analyse::{ModuleAnalyzerConstructor, TargetSupport};
55
use crate::build::package_loader::CacheFiles;
6-
use crate::config::PackageKind;
6+
77
use crate::error::DefinedModuleOrigin;
88
use crate::inline;
99
use crate::io::files_with_extension;
@@ -54,7 +54,6 @@ pub struct PackageCompiler<'a, IO> {
5454
pub root: &'a Utf8Path,
5555
pub mode: Mode,
5656
pub target: &'a TargetCodegenConfiguration,
57-
pub package_kind: PackageKind,
5857
pub config: &'a PackageConfig,
5958
pub ids: UniqueIdGenerator,
6059
pub write_metadata: bool,
@@ -80,7 +79,6 @@ where
8079
IO: FileSystemReader + FileSystemWriter + CommandExecutor + BeamCompiler + Clone,
8180
{
8281
pub fn new(
83-
package_kind: PackageKind,
8482
config: &'a PackageConfig,
8583
mode: Mode,
8684
root: &'a Utf8Path,
@@ -97,7 +95,6 @@ where
9795
lib,
9896
root,
9997
mode,
100-
package_kind,
10198
config,
10299
target,
103100
write_metadata: true,
@@ -145,7 +142,6 @@ where
145142
self.io.clone(),
146143
self.ids.clone(),
147144
self.mode,
148-
self.package_kind.clone(),
149145
self.root,
150146
self.cached_warnings,
151147
warnings,

compiler-core/src/build/package_compiler/snapshots/gleam_core__build__package_compiler__tests__dependency_defining_same_module_as_another_dependency.snap renamed to compiler-core/src/build/package_compiler/snapshots/gleam_core__build__package_compiler__tests__different_packages_defining_duplicate_module.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ error: Duplicate module
66

77
The module `a_module` is defined multiple times.
88

9-
It is first defined by dependency `another_dependency`
10-
It is defined a second time by dependency `a_dependency`
9+
It is first defined by the package dep1
10+
It is defined a second time by the package a_package

compiler-core/src/build/package_compiler/snapshots/gleam_core__build__package_compiler__tests__dependency_defining_same_module_as_root_package.snap renamed to compiler-core/src/build/package_compiler/snapshots/gleam_core__build__package_compiler__tests__same_package_defining_duplicate_module.snap

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,5 @@ error: Duplicate module
66

77
The module `a_module` is defined multiple times.
88

9-
It is first defined by dependency `dep1`
10-
It is defined a second time at `/src/a_module.gleam`
11-
Hint: consider renaming the `a_module` module in your project
9+
It is first defined at a_package/a_module.gleam
10+
It is defined a second time at /src/a_module.gleam

compiler-core/src/build/package_compiler/tests.rs

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@ use crate::{
99
self, NullTelemetry, Outcome, PackageCompiler, StaleTracker, Target,
1010
TargetCodegenConfiguration, Telemetry, package_compiler::Compiled,
1111
},
12-
config::{PackageConfig, PackageKind},
12+
config::PackageConfig,
1313
error::DefinedModuleOrigin,
1414
io::{FileSystemWriter, memory::InMemoryFileSystem},
1515
uid::UniqueIdGenerator,
1616
warning::WarningEmitter,
1717
};
1818

1919
fn compile_modules(
20-
package_kind: PackageKind,
20+
package_name: &str,
2121
module: &str,
22-
dependency_modules: Vec<(&str, &str)>,
22+
existing_modules: Vec<(&str, &str)>,
2323
) -> Outcome<Compiled, Error> {
2424
let mut fs = InMemoryFileSystem::new();
2525
fs.write(
@@ -28,9 +28,10 @@ fn compile_modules(
2828
)
2929
.expect("write module");
3030

31-
let config = PackageConfig::default();
31+
let mut config = PackageConfig::default();
32+
config.name = package_name.into();
33+
3234
let compiler = PackageCompiler::new(
33-
package_kind,
3435
&config,
3536
build::Mode::Dev,
3637
Utf8Path::new("/"),
@@ -41,13 +42,15 @@ fn compile_modules(
4142
fs,
4243
);
4344

44-
let mut already_defined_modules = dependency_modules
45+
let mut already_defined_modules = existing_modules
4546
.into_iter()
4647
.map(|(package_name, module_name)| {
4748
(
4849
EcoString::from(module_name),
49-
DefinedModuleOrigin::Dependency {
50+
DefinedModuleOrigin {
5051
package_name: EcoString::from(package_name),
52+
path: Utf8Path::new(&format!("{package_name}/{module_name}.gleam"))
53+
.to_path_buf(),
5154
},
5255
)
5356
})
@@ -64,8 +67,8 @@ fn compile_modules(
6467
}
6568

6669
#[test]
67-
pub fn dependency_defining_same_module_as_root_package() {
68-
let output = compile_modules(PackageKind::Root, "a_module", vec![("dep1", "a_module")])
70+
pub fn different_packages_defining_duplicate_module() {
71+
let output = compile_modules("a_package", "a_module", vec![("dep1", "a_module")])
6972
.into_result()
7073
.expect_err("should produce an error")
7174
.pretty_string();
@@ -74,17 +77,11 @@ pub fn dependency_defining_same_module_as_root_package() {
7477
}
7578

7679
#[test]
77-
pub fn dependency_defining_same_module_as_another_dependency() {
78-
let output = compile_modules(
79-
PackageKind::Dependency {
80-
package_name: EcoString::from("a_dependency"),
81-
},
82-
"a_module",
83-
vec![("another_dependency", "a_module")],
84-
)
85-
.into_result()
86-
.expect_err("should produce an error")
87-
.pretty_string();
80+
pub fn same_package_defining_duplicate_module() {
81+
let output = compile_modules("a_package", "a_module", vec![("a_package", "a_module")])
82+
.into_result()
83+
.expect_err("should produce an error")
84+
.pretty_string();
8885

8986
insta::assert_snapshot!(insta::internals::AutoName, output);
9087
}

compiler-core/src/build/package_loader.rs

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use crate::{
1818
Error, Result,
1919
ast::SrcSpan,
2020
build::{Module, Origin, module_loader::ModuleLoader},
21-
config::{PackageConfig, PackageKind},
21+
config::PackageConfig,
2222
dep_tree,
2323
error::{DefinedModuleOrigin, FileIoAction, FileKind, ImportCycleLocationDetails},
2424
io::{self, CommandExecutor, FileSystemReader, FileSystemWriter, files_with_extension},
@@ -58,7 +58,6 @@ pub struct PackageLoader<'a, IO> {
5858
io: IO,
5959
ids: UniqueIdGenerator,
6060
mode: Mode,
61-
package_kind: PackageKind,
6261
paths: ProjectPaths,
6362
warnings: &'a WarningEmitter,
6463
codegen: CodegenRequired,
@@ -79,7 +78,6 @@ where
7978
io: IO,
8079
ids: UniqueIdGenerator,
8180
mode: Mode,
82-
package_kind: PackageKind,
8381
root: &'a Utf8Path,
8482
cached_warnings: CachedWarnings,
8583
warnings: &'a WarningEmitter,
@@ -95,7 +93,6 @@ where
9593
io,
9694
ids,
9795
mode,
98-
package_kind,
9996
paths: ProjectPaths::new(root.into()),
10097
warnings,
10198
codegen,
@@ -234,7 +231,7 @@ where
234231
let span = tracing::info_span!("load");
235232
let _enter = span.enter();
236233

237-
let mut inputs = Inputs::new(self.already_defined_modules);
234+
let mut inputs = Inputs::new(self.package_name.clone(), self.already_defined_modules);
238235

239236
let src = self.paths.src_directory();
240237
let mut loader = ModuleLoader {
@@ -254,7 +251,7 @@ where
254251
match file {
255252
Ok(file) => {
256253
let input = loader.load(file)?;
257-
inputs.insert(input, self.package_kind.clone())?;
254+
inputs.insert(input)?;
258255
}
259256
Err(warning) => self.warnings.emit(warning),
260257
}
@@ -269,7 +266,7 @@ where
269266
match file {
270267
Ok(file) => {
271268
let input = loader.load(file)?;
272-
inputs.insert(input, self.package_kind.clone())?;
269+
inputs.insert(input)?;
273270
}
274271
Err(warning) => self.warnings.emit(warning),
275272
}
@@ -282,7 +279,7 @@ where
282279
match file {
283280
Ok(file) => {
284281
let input = loader.load(file)?;
285-
inputs.insert(input, self.package_kind.clone())?;
282+
inputs.insert(input)?;
286283
}
287284
Err(warning) => self.warnings.emit(warning),
288285
}
@@ -1691,30 +1688,32 @@ impl StaleTracker {
16911688

16921689
#[derive(Debug)]
16931690
pub struct Inputs<'a> {
1691+
/// The name of the package for which we're loading the inputs.
1692+
package: EcoString,
16941693
collection: HashMap<EcoString, (DefinedModuleOrigin, Input)>,
16951694
already_defined_modules: &'a mut im::HashMap<EcoString, DefinedModuleOrigin>,
16961695
}
16971696

16981697
impl<'a> Inputs<'a> {
1699-
fn new(already_defined_modules: &'a mut im::HashMap<EcoString, DefinedModuleOrigin>) -> Self {
1698+
fn new(
1699+
package: EcoString,
1700+
already_defined_modules: &'a mut im::HashMap<EcoString, DefinedModuleOrigin>,
1701+
) -> Self {
17001702
Self {
1703+
package,
17011704
collection: Default::default(),
17021705
already_defined_modules,
17031706
}
17041707
}
17051708

17061709
/// Insert a module into the hashmap. If there is already a module with the
17071710
/// same name then an error is returned.
1708-
fn insert(&mut self, input: Input, origin: PackageKind) -> Result<()> {
1711+
fn insert(&mut self, input: Input) -> Result<()> {
17091712
let name = input.name().clone();
17101713

1711-
let origin = match origin {
1712-
PackageKind::Root => DefinedModuleOrigin::RootProject {
1713-
path: input.source_path().to_path_buf(),
1714-
},
1715-
PackageKind::Dependency { package_name } => {
1716-
DefinedModuleOrigin::Dependency { package_name }
1717-
}
1714+
let origin = DefinedModuleOrigin {
1715+
package_name: self.package.clone(),
1716+
path: input.source_path().to_path_buf(),
17181717
};
17191718

17201719
if let Some(first) = self

compiler-core/src/build/package_loader/tests.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use super::*;
55
use crate::{
66
Warning,
77
build::SourceFingerprint,
8-
config::PackageKind,
98
io::{FileSystemWriter, memory::InMemoryFileSystem},
109
line_numbers,
1110
parse::extra::ModuleExtra,
@@ -84,7 +83,6 @@ fn run_loader(fs: InMemoryFileSystem, root: &Utf8Path, artefact: &Utf8Path) -> L
8483
let (emitter, warnings) = WarningEmitter::vector();
8584

8685
let loader = PackageLoader {
87-
package_kind: PackageKind::Root,
8886
io: fs.clone(),
8987
ids,
9088
mode: Mode::Dev,

compiler-core/src/build/project_compiler.rs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::{
99
telemetry::Telemetry,
1010
},
1111
codegen::{self, ErlangApp},
12-
config::{PackageConfig, PackageKind},
12+
config::PackageConfig,
1313
dep_tree,
1414
error::{DefinedModuleOrigin, FileIoAction, FileKind, ShellCommandFailureReason},
1515
io::{BeamCompiler, Command, CommandExecutor, FileSystemReader, FileSystemWriter, Stdio},
@@ -584,16 +584,7 @@ where
584584
},
585585
};
586586

587-
let package_kind = if is_root {
588-
PackageKind::Root
589-
} else {
590-
PackageKind::Dependency {
591-
package_name: config.name.clone(),
592-
}
593-
};
594-
595587
let mut compiler = PackageCompiler::new(
596-
package_kind,
597588
config,
598589
mode,
599590
&root_path,

compiler-core/src/config.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,6 @@ pub struct PackageConfig {
188188
pub tools: Table,
189189
}
190190

191-
#[derive(Debug, Clone)]
192-
pub enum PackageKind {
193-
Root,
194-
Dependency { package_name: EcoString },
195-
}
196-
197191
pub fn serialise_gleam_version<S>(
198192
gleam_gersion: &Option<GleamVersion>,
199193
serializer: S,

compiler-core/src/docs/tests.rs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use crate::{
1414
self, Mode, NullTelemetry, Origin, PackageCompiler, StaleTracker,
1515
TargetCodegenConfiguration,
1616
},
17-
config::{DocsPage, PackageConfig, PackageKind, Repository},
17+
config::{DocsPage, PackageConfig, Repository},
1818
docs::{DocContext, search_item_for_module, search_item_for_type, search_item_for_value},
1919
io::{FileSystemWriter, memory::InMemoryFileSystem},
2020
paths::ProjectPaths,
@@ -69,17 +69,8 @@ fn compile_with_markdown_pages(
6969
let build = root.join("build");
7070
let lib = root.join("lib");
7171
let paths = ProjectPaths::new(root.clone());
72-
let mut compiler = PackageCompiler::new(
73-
PackageKind::Root,
74-
&config,
75-
Mode::Dev,
76-
&root,
77-
&build,
78-
&lib,
79-
&target,
80-
ids,
81-
fs,
82-
);
72+
let mut compiler =
73+
PackageCompiler::new(&config, Mode::Dev, &root, &build, &lib, &target, ids, fs);
8374
compiler.write_entrypoint = false;
8475
compiler.write_metadata = false;
8576
compiler.compile_beam_bytecode = true;

0 commit comments

Comments
 (0)