Fork of daniellemaywood.uk/gleam — Wasm codegen work
2

Configure Feed

Select the types of activity you want to include in your feed.

1// SPDX-License-Identifier: Apache-2.0 2// SPDX-FileCopyrightText: 2026 The Gleam contributors 3 4use std::collections::HashSet; 5 6use camino::Utf8Path; 7use ecow::EcoString; 8 9use crate::{ 10 Error, 11 build::{ 12 self, NullTelemetry, Outcome, PackageCompiler, StaleTracker, Target, 13 TargetCodegenConfiguration, Telemetry, package_compiler::Compiled, 14 }, 15 config::PackageConfig, 16 error::DefinedModuleOrigin, 17 io::{FileSystemWriter, memory::InMemoryFileSystem}, 18 uid::UniqueIdGenerator, 19 warning::WarningEmitter, 20}; 21 22fn compile_modules( 23 package_name: &str, 24 module: &str, 25 existing_modules: Vec<(&str, &str)>, 26) -> Outcome<Compiled, Error> { 27 let mut fs = InMemoryFileSystem::new(); 28 fs.write( 29 Utf8Path::new(&format!("/src/{module}.gleam")), 30 "pub fn main() -> Nil { Nil }", 31 ) 32 .expect("write module"); 33 34 let mut config = PackageConfig::default(); 35 config.name = package_name.into(); 36 37 let compiler = PackageCompiler::new( 38 &config, 39 build::Mode::Dev, 40 Utf8Path::new("/"), 41 Utf8Path::new("/out"), 42 Utf8Path::new("/lib"), 43 &TargetCodegenConfiguration::Erlang { app_file: None }, 44 UniqueIdGenerator::new(), 45 fs, 46 ); 47 48 let mut already_defined_modules = existing_modules 49 .into_iter() 50 .map(|(package_name, module_name)| { 51 ( 52 EcoString::from(module_name), 53 DefinedModuleOrigin { 54 package_name: EcoString::from(package_name), 55 path: Utf8Path::new(&format!("{package_name}/{module_name}.gleam")) 56 .to_path_buf(), 57 }, 58 ) 59 }) 60 .collect(); 61 62 compiler.compile( 63 &WarningEmitter::null(), 64 &mut im::HashMap::new(), 65 &mut already_defined_modules, 66 &mut StaleTracker::default(), 67 &mut HashSet::new(), 68 &NullTelemetry, 69 ) 70} 71 72#[test] 73pub fn different_packages_defining_duplicate_module() { 74 let output = compile_modules("a_package", "a_module", vec![("dep1", "a_module")]) 75 .into_result() 76 .expect_err("should produce an error") 77 .pretty_string(); 78 79 insta::assert_snapshot!(insta::internals::AutoName, output); 80} 81 82#[test] 83pub fn same_package_defining_duplicate_module() { 84 let output = compile_modules("a_package", "a_module", vec![("a_package", "a_module")]) 85 .into_result() 86 .expect_err("should produce an error") 87 .pretty_string(); 88 89 insta::assert_snapshot!(insta::internals::AutoName, output); 90}