e1d10e4c5aae
accept mainstream build profiles and project markers
- time
- 2026-10-09 17:48 UTC · 3 days ago
- machine
- Junes-MacBook-Pro.local
- agent
- gpt-5.6-sol
- session
- add mainstream build languages
- parent
- f55debb9a051
↓ koh-e1d10e4c.tar.gzatlas at this save
files changed2 files
src/build/build.v+36 −3src/build/build_test.v+54 −0src/build/build.v+36 −3
@@ -23,18 +23,31 @@2323 // hold a release forever.2424 const build_timeout = 10 * time.minute2525 26-const lang_names = 'zig, rust, go, c, node, swift, python, shell, make, gradle'26+const lang_names = 'v, zig, rust, go, c, cpp, c++, node, javascript, typescript, java, kotlin, scala, csharp, c#, cs, swift, python, ruby, php, dart, elixir, lua, r, shell, make, gradle'2727 28-// Lang picks the cross-compile variables a build gets. `gradle` sets none.28+// Lang picks the cross-compile variables a build gets. Most profiles set only29+// Koh's target names; the build command owns toolchain-specific translation.2930 pub enum Lang {3031 unknown32+ v3133 zig3234 rust3335 go3436 c37+ cpp3538 node39+ java40+ kotlin41+ scala42+ csharp3643 swift3744 python45+ ruby46+ php47+ dart48+ elixir49+ lua50+ r3851 shell3952 make4053 gradle@@ -118,13 +131,25 @@118131 // refused rather than quietly guessed at.119132 fn lang_of(name string) ?Lang {120133 return match name.to_lower() {134+ 'v' { Lang.v }121135 'zig' { Lang.zig }122136 'rust' { Lang.rust }123137 'go' { Lang.go }124138 'c' { Lang.c }125- 'node' { Lang.node }139+ 'cpp', 'c++' { Lang.cpp }140+ 'node', 'javascript', 'typescript' { Lang.node }141+ 'java' { Lang.java }142+ 'kotlin' { Lang.kotlin }143+ 'scala' { Lang.scala }144+ 'csharp', 'c#', 'cs' { Lang.csharp }126145 'swift' { Lang.swift }127146 'python' { Lang.python }147+ 'ruby' { Lang.ruby }148+ 'php' { Lang.php }149+ 'dart' { Lang.dart }150+ 'elixir' { Lang.elixir }151+ 'lua' { Lang.lua }152+ 'r' { Lang.r }128153 'shell' { Lang.shell }129154 'make' { Lang.make }130155 'gradle' { Lang.gradle }@@ -137,6 +162,7 @@137162 fn detect(root string) Lang {138163 for probe in [139164 Probe{'build.sh', Lang.shell},165+ Probe{'v.mod', Lang.v},140166 Probe{'build.zig', Lang.zig},141167 Probe{'Cargo.toml', Lang.rust},142168 Probe{'go.mod', Lang.go},@@ -144,6 +170,13 @@144170 Probe{'pyproject.toml', Lang.python},145171 Probe{'setup.py', Lang.python},146172 Probe{'package.json', Lang.node},173+ Probe{'pom.xml', Lang.java},174+ Probe{'build.sbt', Lang.scala},175+ Probe{'Gemfile', Lang.ruby},176+ Probe{'composer.json', Lang.php},177+ Probe{'pubspec.yaml', Lang.dart},178+ Probe{'mix.exs', Lang.elixir},179+ Probe{'DESCRIPTION', Lang.r},147180 Probe{'app/build.gradle.kts', Lang.gradle},148181 Probe{'app/build.gradle', Lang.gradle},149182 Probe{'build.gradle.kts', Lang.gradle},src/build/build_test.v+54 −0
@@ -170,6 +170,60 @@170170 assert read_config(root)!.lang == .shell171171 }172172 173+fn test_every_defined_build_language_and_alias_is_accepted() {174+ profiles := map[string]Lang{175+ 'v': .v176+ 'zig': .zig177+ 'rust': .rust178+ 'go': .go179+ 'c': .c180+ 'cpp': .cpp181+ 'c++': .cpp182+ 'node': .node183+ 'javascript': .node184+ 'typescript': .node185+ 'java': .java186+ 'kotlin': .kotlin187+ 'scala': .scala188+ 'csharp': .csharp189+ 'c#': .csharp190+ 'cs': .csharp191+ 'swift': .swift192+ 'python': .python193+ 'ruby': .ruby194+ 'php': .php195+ 'dart': .dart196+ 'elixir': .elixir197+ 'lua': .lua198+ 'r': .r199+ 'shell': .shell200+ 'make': .make201+ 'gradle': .gradle202+ }203+ for name, want in profiles {204+ assert lang_of(name)? == want, name205+ }206+}207+208+fn test_mainstream_project_markers_are_detected() {209+ markers := map[string]Lang{210+ 'v.mod': .v211+ 'pom.xml': .java212+ 'build.sbt': .scala213+ 'Gemfile': .ruby214+ 'composer.json': .php215+ 'pubspec.yaml': .dart216+ 'mix.exs': .elixir217+ 'DESCRIPTION': .r218+ }219+ for file, want in markers {220+ root := scratch('detect_marker')!221+ write(root, file, '')!222+ assert detect(root) == want, file223+ os.rmdir_all(root) or {}224+ }225+}226+173227 fn test_read_config_refuses_what_it_cannot_build() {174228 root := scratch('config_bad')!175229 defer {