Skip to content

Commit 7e7c987

Browse files
committed
feat: add lower-priority language coverage
- add Racket metadata, exports, detection, tests, README/docs entries, and version checking - add Ada, Apex, awk, Clojure, D, Fennel, Gleam, Haxe, Nim, and Tcl/Tk - wire new languages into catalog, registry, package subpath exports, and root exports - add contract and detection tests for new language entries - update LANGUAGES checklist and supported-language README table - regenerate website language data - add automated/manual version checker coverage for the new languages - fix Apex logo URL and make the Haxe version parser handle linked version markup
1 parent d7e0efa commit 7e7c987

29 files changed

Lines changed: 919 additions & 13 deletions

LANGUAGES.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,16 @@
8383
- [x] OCaml (`ocaml`)
8484
- [x] Protocol Buffers (`protobuf`)
8585
- [x] Racket (`racket`)
86+
- [x] Ada (`ada`)
87+
- [x] Apex (`apex`)
88+
- [x] awk (`awk`)
89+
- [x] Clojure (`clojure`)
90+
- [x] D (`d`)
91+
- [x] Fennel (`fennel`)
92+
- [x] Gleam (`gleam`)
93+
- [x] Haxe (`haxe`)
94+
- [x] Nim (`nim`)
95+
- [x] Tcl/Tk (`tcl`)
8696

8797
## Pending
8898

@@ -91,24 +101,20 @@
91101
- [ ] Twig (`twig`)
92102
- [ ] XQuery (`xquery`)
93103
- [ ] XSLT (`xslt`)
94-
- [ ] Clojure (`clojure`)
95104

96105
## Lower Priority Languages
97106

98107
These languages and formats are valid candidates, but they are less important for the first
99108
coverage goals because they are niche, legacy, highly domain-specific, or already covered by a
100109
broader language entry.
101110

102-
- [ ] Ada (`ada`)
103111
- [ ] Agda (`agda`)
104112
- [ ] ANTLR Grammar (`antlr`)
105-
- [ ] Apex (`apex`)
106113
- [ ] APL (`apl`)
107114
- [ ] AppleScript (`applescript`)
108115
- [ ] Arduino Sketch (`arduino`)
109116
- [ ] AsciiDoc (`asciidoc`)
110117
- [ ] AutoHotkey (`autohotkey`)
111-
- [ ] awk (`awk`)
112118
- [ ] Bazel (`bazel`)
113119
- [ ] Blade (`blade`)
114120
- [ ] Carbon (`carbon`)
@@ -117,17 +123,13 @@ broader language entry.
117123
- [ ] ColdFusion (`coldfusion`)
118124
- [ ] Coq (`coq`)
119125
- [ ] Cython (`cython`)
120-
- [ ] D (`d`)
121126
- [ ] Dhall (`dhall`)
122127
- [ ] DITA (`dita`)
123128
- [ ] ERB (`erb`)
124-
- [ ] Fennel (`fennel`)
125129
- [ ] Forth (`forth`)
126130
- [ ] GDScript (`gdscript`)
127-
- [ ] Gleam (`gleam`)
128131
- [ ] Haml (`haml`)
129132
- [ ] Handlebars (`handlebars`)
130-
- [ ] Haxe (`haxe`)
131133
- [ ] Idris (`idris`)
132134
- [ ] Jinja (`jinja`)
133135
- [ ] Lean (`lean`)
@@ -137,7 +139,6 @@ broader language entry.
137139
- [ ] Mako (`mako`)
138140
- [ ] Mathematica (`mathematica`)
139141
- [ ] Mojo (`mojo`)
140-
- [ ] Nim (`nim`)
141142
- [ ] Odin (`odin`)
142143
- [ ] OpenCL (`opencl`)
143144
- [ ] Oracle PL/SQL (`plsql`)
@@ -154,7 +155,6 @@ broader language entry.
154155
- [ ] Smarty (`smarty`)
155156
- [ ] Starlark (`starlark`)
156157
- [ ] Stylus (`stylus`)
157-
- [ ] Tcl/Tk (`tcl`)
158158
- [ ] Thrift (`thrift`)
159159
- [ ] TLA+ (`tla-plus`)
160160
- [ ] Typst (`typst`)

README.md

Lines changed: 50 additions & 0 deletions
Large diffs are not rendered by default.

docs/data/languages.json

Lines changed: 213 additions & 3 deletions
Large diffs are not rendered by default.

package.json

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,56 @@
450450
"types": "./dist/languages/zsh.d.ts",
451451
"import": "./dist/languages/zsh.js",
452452
"require": "./dist/languages/zsh.cjs"
453+
},
454+
"./ada": {
455+
"types": "./dist/languages/ada.d.ts",
456+
"import": "./dist/languages/ada.js",
457+
"require": "./dist/languages/ada.cjs"
458+
},
459+
"./apex": {
460+
"types": "./dist/languages/apex.d.ts",
461+
"import": "./dist/languages/apex.js",
462+
"require": "./dist/languages/apex.cjs"
463+
},
464+
"./awk": {
465+
"types": "./dist/languages/awk.d.ts",
466+
"import": "./dist/languages/awk.js",
467+
"require": "./dist/languages/awk.cjs"
468+
},
469+
"./clojure": {
470+
"types": "./dist/languages/clojure.d.ts",
471+
"import": "./dist/languages/clojure.js",
472+
"require": "./dist/languages/clojure.cjs"
473+
},
474+
"./d": {
475+
"types": "./dist/languages/d.d.ts",
476+
"import": "./dist/languages/d.js",
477+
"require": "./dist/languages/d.cjs"
478+
},
479+
"./fennel": {
480+
"types": "./dist/languages/fennel.d.ts",
481+
"import": "./dist/languages/fennel.js",
482+
"require": "./dist/languages/fennel.cjs"
483+
},
484+
"./gleam": {
485+
"types": "./dist/languages/gleam.d.ts",
486+
"import": "./dist/languages/gleam.js",
487+
"require": "./dist/languages/gleam.cjs"
488+
},
489+
"./haxe": {
490+
"types": "./dist/languages/haxe.d.ts",
491+
"import": "./dist/languages/haxe.js",
492+
"require": "./dist/languages/haxe.cjs"
493+
},
494+
"./nim": {
495+
"types": "./dist/languages/nim.d.ts",
496+
"import": "./dist/languages/nim.js",
497+
"require": "./dist/languages/nim.cjs"
498+
},
499+
"./tcl": {
500+
"types": "./dist/languages/tcl.d.ts",
501+
"import": "./dist/languages/tcl.js",
502+
"require": "./dist/languages/tcl.cjs"
453503
}
454504
},
455505
"files": [

scripts/check-language-versions.mjs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ const manualChecks = {
88
abap: "ABAP Platform releases should be reviewed manually against SAP Help Portal because the source page is rendered dynamically.",
99
actionscript:
1010
"ActionScript is effectively stable at 3.0 and should be reviewed manually against Adobe AIR and Flash platform documentation.",
11+
ada: "Ada standards should be reviewed manually against ISO/IEC 8652 and Ada Resource Association publications.",
12+
apex: "Apex API versions are tied to Salesforce seasonal platform releases and should be reviewed manually against Salesforce release notes.",
1113
assembly:
1214
"Assembly versions are architecture-specific and should be reviewed manually against assembler and ISA documentation.",
1315
c: "ISO standards do not expose a stable free machine-readable latest-version endpoint.",
@@ -60,6 +62,17 @@ const checkers = {
6062
sourceUrl: "https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-framework",
6163
};
6264
},
65+
async awk() {
66+
const html = await fetchText("https://ftp.gnu.org/gnu/gawk/");
67+
const versions = [...html.matchAll(/gawk-(\d+\.\d+\.\d+)\.tar\.(?:gz|xz|lz)/g)].map(
68+
(match) => match[1],
69+
);
70+
71+
return {
72+
latestVersion: `GNU Awk ${latestSemver(versions)}`,
73+
sourceUrl: "https://ftp.gnu.org/gnu/gawk/",
74+
};
75+
},
6376
async bash() {
6477
const html = await fetchText("https://ftp.gnu.org/gnu/bash/");
6578
const versions = [...html.matchAll(/bash-(\d+\.\d+(?:\.\d+)?)\.tar\.gz/g)].map(
@@ -94,6 +107,15 @@ const checkers = {
94107
sourceUrl: "https://cmake.org/download/",
95108
};
96109
},
110+
async clojure() {
111+
const html = await fetchText("https://clojure.org/releases/downloads");
112+
const match = html.match(/Stable Release:\s+(\d+\.\d+\.\d+)/i);
113+
114+
return {
115+
latestVersion: match?.[1],
116+
sourceUrl: "https://clojure.org/releases/downloads",
117+
};
118+
},
97119
async cuda() {
98120
const html = await fetchText("https://developer.nvidia.com/cuda-toolkit-archive");
99121
const versions = [...html.matchAll(/CUDA Toolkit\s+(\d+\.\d+\.\d+)/g)].map((match) => match[1]);
@@ -131,6 +153,15 @@ const checkers = {
131153
"https://storage.googleapis.com/dart-archive/channels/stable/release/latest/VERSION",
132154
};
133155
},
156+
async d() {
157+
const html = await fetchText("https://dlang.org/index.html");
158+
const match = html.match(/Latest version:\s+(\d+\.\d+\.\d+)/i);
159+
160+
return {
161+
latestVersion: match?.[1],
162+
sourceUrl: "https://dlang.org/index.html",
163+
};
164+
},
134165
async elixir() {
135166
const json = await fetchJson("https://api.github.com/repos/elixir-lang/elixir/releases/latest");
136167

@@ -155,6 +186,14 @@ const checkers = {
155186
sourceUrl: "https://api.github.com/repos/erlang/otp/releases/latest",
156187
};
157188
},
189+
async fennel() {
190+
const json = await fetchJson("https://api.github.com/repos/bakpakin/Fennel/releases/latest");
191+
192+
return {
193+
latestVersion: normalizeVersion(json.tag_name),
194+
sourceUrl: "https://api.github.com/repos/bakpakin/Fennel/releases/latest",
195+
};
196+
},
158197
async fsharp() {
159198
const html = await fetchText("https://learn.microsoft.com/en-us/dotnet/fsharp/whats-new/");
160199
const versions = [...html.matchAll(/F#\s+(\d+)/g)].map((match) => match[1]);
@@ -173,6 +212,14 @@ const checkers = {
173212
sourceUrl: "https://git-scm.com/docs/git",
174213
};
175214
},
215+
async gleam() {
216+
const json = await fetchJson("https://api.github.com/repos/gleam-lang/gleam/releases/latest");
217+
218+
return {
219+
latestVersion: normalizeVersion(json.tag_name),
220+
sourceUrl: "https://api.github.com/repos/gleam-lang/gleam/releases/latest",
221+
};
222+
},
176223
async go() {
177224
const text = await fetchText("https://go.dev/VERSION?m=text");
178225
const match = text.match(/^go(\d+\.\d+(?:\.\d+)?)/m);
@@ -233,6 +280,15 @@ const checkers = {
233280
sourceUrl: "https://downloads.haskell.org/~ghc/latest/",
234281
};
235282
},
283+
async haxe() {
284+
const html = await fetchText("https://haxe.org/download/list/");
285+
const match = html.match(/current stable version is[\s\S]{0,120}?(\d+\.\d+\.\d+)/i);
286+
287+
return {
288+
latestVersion: match?.[1],
289+
sourceUrl: "https://haxe.org/download/list/",
290+
};
291+
},
236292
async hcl() {
237293
const json = await fetchJson("https://api.github.com/repos/hashicorp/hcl/releases/latest");
238294

@@ -349,6 +405,15 @@ const checkers = {
349405
sourceUrl: "https://nginx.org/en/download.html",
350406
};
351407
},
408+
async nim() {
409+
const html = await fetchText("https://nim-lang.org/");
410+
const match = html.match(/Nim version\s+(\d+\.\d+\.\d+)\s+released/i);
411+
412+
return {
413+
latestVersion: match?.[1],
414+
sourceUrl: "https://nim-lang.org/",
415+
};
416+
},
352417
async pascal() {
353418
const html = await fetchText("https://www.freepascal.org/download.html.en");
354419
const match = html.match(/latest release is[\s\S]{0,80}?(\d+\.\d+\.\d+)/i);
@@ -519,6 +584,15 @@ const checkers = {
519584
sourceUrl: "https://api.github.com/repos/swiftlang/swift/releases/latest",
520585
};
521586
},
587+
async tcl() {
588+
const html = await fetchText("https://www.tcl-lang.org/software/tcltk/9.0.html");
589+
const match = html.match(/Latest Release:\s+Tcl\/Tk\s+(\d+\.\d+\.\d+)/i);
590+
591+
return {
592+
latestVersion: match?.[1],
593+
sourceUrl: "https://www.tcl-lang.org/software/tcltk/9.0.html",
594+
};
595+
},
522596
async toml() {
523597
const json = await fetchJson("https://api.github.com/repos/toml-lang/toml/releases/latest");
524598

src/catalog.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
import { abap } from "./languages/abap";
22
import { actionscript } from "./languages/actionscript";
3+
import { ada } from "./languages/ada";
4+
import { apex } from "./languages/apex";
35
import { asp } from "./languages/asp";
46
import { assembly } from "./languages/assembly";
57
import { astro } from "./languages/astro";
8+
import { awk } from "./languages/awk";
69
import { bash } from "./languages/bash";
710
import { batch } from "./languages/batch";
811
import { c } from "./languages/c";
12+
import { clojure } from "./languages/clojure";
913
import { cmake } from "./languages/cmake";
1014
import { cobol } from "./languages/cobol";
1115
import { coffeescript } from "./languages/coffeescript";
@@ -14,20 +18,24 @@ import { crystal } from "./languages/crystal";
1418
import { csharp } from "./languages/csharp";
1519
import { css } from "./languages/css";
1620
import { cuda } from "./languages/cuda";
21+
import { d } from "./languages/d";
1722
import { dart } from "./languages/dart";
1823
import { dockerfile } from "./languages/dockerfile";
1924
import { elixir } from "./languages/elixir";
2025
import { elm } from "./languages/elm";
2126
import { erlang } from "./languages/erlang";
27+
import { fennel } from "./languages/fennel";
2228
import { fortran } from "./languages/fortran";
2329
import { fsharp } from "./languages/fsharp";
2430
import { git } from "./languages/git";
31+
import { gleam } from "./languages/gleam";
2532
import { glsl } from "./languages/glsl";
2633
import { go } from "./languages/go";
2734
import { gradle } from "./languages/gradle";
2835
import { graphql } from "./languages/graphql";
2936
import { groovy } from "./languages/groovy";
3037
import { haskell } from "./languages/haskell";
38+
import { haxe } from "./languages/haxe";
3139
import { hcl } from "./languages/hcl";
3240
import { html } from "./languages/html";
3341
import { ini } from "./languages/ini";
@@ -46,6 +54,7 @@ import { matlab } from "./languages/matlab";
4654
import { meson } from "./languages/meson";
4755
import { metal } from "./languages/metal";
4856
import { nginx } from "./languages/nginx";
57+
import { nim } from "./languages/nim";
4958
import { nix } from "./languages/nix";
5059
import { objectiveC } from "./languages/objective-c";
5160
import { ocaml } from "./languages/ocaml";
@@ -69,6 +78,7 @@ import { svelte } from "./languages/svelte";
6978
import { svg } from "./languages/svg";
7079
import { svn } from "./languages/svn";
7180
import { swift } from "./languages/swift";
81+
import { tcl } from "./languages/tcl";
7282
import { toml } from "./languages/toml";
7383
import { typescript } from "./languages/typescript";
7484
import { visualBasic } from "./languages/visual-basic";
@@ -84,34 +94,42 @@ import { zsh } from "./languages/zsh";
8494
export const languages = [
8595
abap,
8696
actionscript,
97+
ada,
98+
apex,
8799
asp,
88100
astro,
89101
assembly,
102+
awk,
90103
bash,
91104
batch,
92105
c,
93106
cmake,
107+
clojure,
94108
coffeescript,
95109
cobol,
96110
cpp,
97111
csharp,
98112
crystal,
99113
css,
100114
cuda,
115+
d,
101116
dart,
102117
dockerfile,
103118
elixir,
104119
elm,
105120
erlang,
121+
fennel,
106122
fortran,
107123
fsharp,
108124
git,
125+
gleam,
109126
go,
110127
gradle,
111128
glsl,
112129
graphql,
113130
groovy,
114131
haskell,
132+
haxe,
115133
hcl,
116134
html,
117135
ini,
@@ -131,6 +149,7 @@ export const languages = [
131149
metal,
132150
svn,
133151
nginx,
152+
nim,
134153
nix,
135154
ocaml,
136155
objectiveC,
@@ -153,6 +172,7 @@ export const languages = [
153172
svg,
154173
svelte,
155174
swift,
175+
tcl,
156176
toml,
157177
typescript,
158178
visualBasic,

0 commit comments

Comments
 (0)