Skip to content

Commit e67e3c5

Browse files
Removed package interface from cache and made cached modules be recompiled on export. Removed redundant traits
1 parent 09d3e9e commit e67e3c5

File tree

40 files changed

+201
-247
lines changed

40 files changed

+201
-247
lines changed

compiler-cli/src/export.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ pub fn package_interface(path: Utf8PathBuf) -> Result<()> {
130130
// Build the project
131131
let mut built = crate::build::main(
132132
Options {
133-
mode: Mode::Prod,
133+
mode: Mode::PackageInterface,
134134
target: None,
135135
codegen: Codegen::All,
136136
compile: Compile::All,

compiler-core/src/build.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ pub enum Mode {
185185
Dev,
186186
Prod,
187187
Lsp,
188+
PackageInterface,
188189
}
189190

190191
impl Mode {
@@ -193,7 +194,7 @@ impl Mode {
193194
pub fn includes_tests(&self) -> bool {
194195
match self {
195196
Self::Dev | Self::Lsp => true,
196-
Self::Prod => false,
197+
Self::Prod | Self::PackageInterface => false,
197198
}
198199
}
199200
}
@@ -209,7 +210,6 @@ fn mode_includes_tests() {
209210
pub struct Package {
210211
pub config: PackageConfig,
211212
pub modules: Vec<Module>,
212-
pub cached_metadata: Vec<package_compiler::CacheMetadata>,
213213
}
214214

215215
impl Package {
@@ -227,7 +227,7 @@ impl Package {
227227
}
228228
}
229229

230-
#[derive(Debug, Clone)]
230+
#[derive(Debug)]
231231
pub struct Module {
232232
pub name: EcoString,
233233
pub code: EcoString,

compiler-core/src/build/module_loader.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ where
8484
}
8585
}
8686

87-
Ok(Input::Cached(self.cached(name, meta.clone()), meta))
87+
Ok(Input::Cached(self.cached(name, meta)))
8888
}
8989

9090
/// Read the timestamp file from the artefact directory for the given

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

-2
Original file line numberDiff line numberDiff line change
@@ -213,13 +213,11 @@ fn write_cache(
213213
) {
214214
let line_numbers = LineNumbers::new(source);
215215
let cache_metadata = CacheMetadata {
216-
name: "".into(),
217216
mtime: SystemTime::UNIX_EPOCH + Duration::from_secs(seconds),
218217
codegen_performed,
219218
dependencies: vec![],
220219
fingerprint: SourceFingerprint::new(source),
221220
line_numbers,
222-
interface: package_interface::ModuleInterface::default(),
223221
};
224222
let path = Utf8Path::new(path);
225223
fs.write_bytes(&path, &cache_metadata.to_binary()).unwrap();

compiler-core/src/build/package_compiler.rs

+10-18
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ where
106106
stale_modules: &mut StaleTracker,
107107
incomplete_modules: &mut HashSet<EcoString>,
108108
telemetry: &dyn Telemetry,
109-
) -> Outcome<(Vec<Module>, Vec<CacheMetadata>), Error> {
109+
) -> Outcome<Vec<Module>, Error> {
110110
let span = tracing::info_span!("compile", package = %self.config.name.as_str());
111111
let _enter = span.enter();
112112

@@ -186,9 +186,7 @@ where
186186

187187
let mut modules = match outcome {
188188
Outcome::Ok(modules) => modules,
189-
Outcome::PartialFailure(modules, err) => {
190-
return Outcome::PartialFailure((modules, loaded.cached_metadata), err)
191-
}
189+
Outcome::PartialFailure(modules, err) => return Outcome::PartialFailure(modules, err),
192190
Outcome::TotalFailure(err) => return Outcome::TotalFailure(err),
193191
};
194192

@@ -202,7 +200,7 @@ where
202200
return error.into();
203201
}
204202

205-
Outcome::Ok((modules, loaded.cached_metadata))
203+
Outcome::Ok(modules)
206204
}
207205

208206
fn compile_erlang_to_beam(&mut self, modules: &HashSet<Utf8PathBuf>) -> Result<(), Error> {
@@ -309,13 +307,11 @@ where
309307
let name = format!("{}.cache_meta", &module_name);
310308
let path = artefact_dir.join(name);
311309
let info = CacheMetadata {
312-
name: module.name.clone(),
313310
mtime: module.mtime,
314311
codegen_performed: self.perform_codegen,
315312
dependencies: module.dependencies.clone(),
316313
fingerprint: SourceFingerprint::new(&module.code),
317314
line_numbers: module.ast.type_info.line_numbers.clone(),
318-
interface: package_interface::ModuleInterface::from_module(module),
319315
};
320316
self.io.write_bytes(&path, &info.to_binary())?;
321317

@@ -601,28 +597,28 @@ pub(crate) fn module_name(package_path: &Utf8Path, full_module_path: &Utf8Path)
601597
#[derive(Debug)]
602598
pub(crate) enum Input {
603599
New(UncompiledModule),
604-
Cached(CachedModule, CacheMetadata),
600+
Cached(CachedModule),
605601
}
606602

607603
impl Input {
608604
pub fn name(&self) -> &EcoString {
609605
match self {
610606
Input::New(m) => &m.name,
611-
Input::Cached(m, _) => &m.name,
607+
Input::Cached(m) => &m.name,
612608
}
613609
}
614610

615611
pub fn source_path(&self) -> &Utf8Path {
616612
match self {
617613
Input::New(m) => &m.path,
618-
Input::Cached(m, _) => &m.source_path,
614+
Input::Cached(m) => &m.source_path,
619615
}
620616
}
621617

622618
pub fn dependencies(&self) -> Vec<EcoString> {
623619
match self {
624620
Input::New(m) => m.dependencies.iter().map(|(n, _)| n.clone()).collect(),
625-
Input::Cached(m, _) => m.dependencies.iter().map(|(n, _)| n.clone()).collect(),
621+
Input::Cached(m) => m.dependencies.iter().map(|(n, _)| n.clone()).collect(),
626622
}
627623
}
628624

@@ -652,15 +648,13 @@ pub(crate) struct CachedModule {
652648
pub line_numbers: LineNumbers,
653649
}
654650

655-
#[derive(Debug, serde::Serialize, serde::Deserialize, Clone)]
651+
#[derive(Debug, serde::Serialize, serde::Deserialize)]
656652
pub struct CacheMetadata {
657-
pub name: EcoString,
658653
pub mtime: SystemTime,
659654
pub codegen_performed: bool,
660655
pub dependencies: Vec<(EcoString, SrcSpan)>,
661656
pub fingerprint: SourceFingerprint,
662657
pub line_numbers: LineNumbers,
663-
pub interface: package_interface::ModuleInterface,
664658
}
665659

666660
impl CacheMetadata {
@@ -673,24 +667,22 @@ impl CacheMetadata {
673667
}
674668
}
675669

676-
#[derive(Debug, Default)]
670+
#[derive(Debug, Default, PartialEq, Eq)]
677671
pub(crate) struct Loaded {
678672
pub to_compile: Vec<UncompiledModule>,
679673
pub cached: Vec<type_::ModuleInterface>,
680-
pub cached_metadata: Vec<CacheMetadata>,
681674
}
682675

683676
impl Loaded {
684677
fn empty() -> Self {
685678
Self {
686679
to_compile: vec![],
687680
cached: vec![],
688-
cached_metadata: vec![],
689681
}
690682
}
691683
}
692684

693-
#[derive(Debug, PartialEq, Eq, Clone)]
685+
#[derive(Debug, PartialEq, Eq)]
694686
pub(crate) struct UncompiledModule {
695687
pub path: Utf8PathBuf,
696688
pub name: EcoString,

compiler-core/src/build/package_loader.rs

+14-8
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ where
148148
// A cached module with dependencies that are stale must be
149149
// recompiled as the changes in the dependencies may have affect
150150
// the output, making the cache invalid.
151-
Input::Cached(info, _) if self.stale_modules.includes_any(&info.dependencies) => {
151+
Input::Cached(info) if self.stale_modules.includes_any(&info.dependencies) => {
152152
tracing::debug!(module = %info.name, "module_to_be_compiled");
153153
self.stale_modules.add(info.name.clone());
154154
let module = self.load_and_parse(info)?;
@@ -157,12 +157,18 @@ where
157157

158158
// A cached module with no stale dependencies can be used as-is
159159
// and does not need to be recompiled.
160-
Input::Cached(info, meta) => {
161-
tracing::debug!(module = %info.name, "module_to_load_from_cache");
162-
let module = self.load_cached_module(info)?;
163-
loaded.cached.push(module);
164-
loaded.cached_metadata.push(meta);
165-
}
160+
Input::Cached(info) => match self.mode {
161+
Mode::PackageInterface => {
162+
tracing::debug!(module = %info.name, "module_to_be_compiled");
163+
let module = self.load_and_parse(info)?;
164+
loaded.to_compile.push(module);
165+
}
166+
_ => {
167+
tracing::debug!(module = %info.name, "module_to_load_from_cache");
168+
let module = self.load_cached_module(info)?;
169+
loaded.cached.push(module);
170+
}
171+
},
166172
}
167173
}
168174

@@ -325,7 +331,7 @@ where
325331
src: module.code.clone(),
326332
}
327333
}
328-
Input::Cached(cached_module, _) => {
334+
Input::Cached(cached_module) => {
329335
let (_, location) = cached_module
330336
.dependencies
331337
.iter()

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

-2
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,11 @@ fn write_cache(
3939
let line_numbers = line_numbers::LineNumbers::new(src);
4040
let mtime = SystemTime::UNIX_EPOCH + Duration::from_secs(seconds);
4141
let cache_metadata = CacheMetadata {
42-
name: name.into(),
4342
mtime,
4443
codegen_performed: true,
4544
dependencies: deps,
4645
fingerprint: SourceFingerprint::new(src),
4746
line_numbers: line_numbers.clone(),
48-
interface: package_interface::ModuleInterface::default(),
4947
};
5048
let path = Utf8Path::new("/artefact").join(format!("{name}.cache_meta"));
5149
fs.write_bytes(&path, &cache_metadata.to_binary()).unwrap();

compiler-core/src/build/project_compiler.rs

+4-10
Original file line numberDiff line numberDiff line change
@@ -208,11 +208,7 @@ where
208208
pub fn compile_root_package(&mut self) -> Outcome<Package, Error> {
209209
let config = self.config.clone();
210210
self.compile_gleam_package(&config, true, self.paths.root().to_path_buf())
211-
.map(|(modules, cached_metadata)| Package {
212-
config,
213-
modules,
214-
cached_metadata,
215-
})
211+
.map(|modules| Package { config, modules })
216212
}
217213

218214
/// Checks that version file found in the build directory matches the
@@ -292,9 +288,7 @@ where
292288
// longer need to have the package borrowed from self.packages.
293289
let package = self.packages.get(name).expect("Missing package").clone();
294290
let result = match usable_build_tools(&package)?.as_slice() {
295-
&[BuildTool::Gleam] => self
296-
.compile_gleam_dep_package(&package)
297-
.map(|(modules, _)| modules),
291+
&[BuildTool::Gleam] => self.compile_gleam_dep_package(&package),
298292
&[BuildTool::Rebar3] => self.compile_rebar3_dep_package(&package).map(|_| vec![]),
299293
&[BuildTool::Mix] => self.compile_mix_dep_package(&package).map(|_| vec![]),
300294
&[BuildTool::Mix, BuildTool::Rebar3] => self
@@ -495,7 +489,7 @@ where
495489
fn compile_gleam_dep_package(
496490
&mut self,
497491
package: &ManifestPackage,
498-
) -> Result<(Vec<Module>, Vec<package_compiler::CacheMetadata>), Error> {
492+
) -> Result<Vec<Module>, Error> {
499493
// TODO: Test
500494
let package_root = match &package.source {
501495
// If the path is relative it is relative to the root of the
@@ -526,7 +520,7 @@ where
526520
config: &PackageConfig,
527521
is_root: bool,
528522
root_path: Utf8PathBuf,
529-
) -> Outcome<(Vec<Module>, Vec<package_compiler::CacheMetadata>), Error> {
523+
) -> Outcome<(Vec<Module>), Error> {
530524
let out_path =
531525
self.paths
532526
.build_directory_for_package(self.mode(), self.target(), &config.name);

compiler-core/src/config.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ impl PackageConfig {
137137
pub fn dependencies_for(&self, mode: Mode) -> Result<Dependencies> {
138138
match mode {
139139
Mode::Dev | Mode::Lsp => self.all_drect_dependencies(),
140-
Mode::Prod => Ok(self.dependencies.clone()),
140+
Mode::Prod | Mode::PackageInterface => Ok(self.dependencies.clone()),
141141
}
142142
}
143143

compiler-core/src/docs/tests.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ fn compile_with_markdown_pages(
6363
)
6464
.unwrap();
6565

66-
for module in &mut modules.0 {
66+
for module in &mut modules {
6767
module.attach_doc_and_module_comments();
6868
}
6969

@@ -79,7 +79,7 @@ fn compile_with_markdown_pages(
7979
super::generate_html(
8080
&paths,
8181
&config,
82-
&modules.0,
82+
&modules,
8383
&docs_pages,
8484
pages_fs,
8585
SystemTime::UNIX_EPOCH,

0 commit comments

Comments
 (0)