Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/components.json
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,10 @@
"title": "GNU Linker Script",
"owner": "RunDevelopment"
},
"gleam": {
"title": "Gleam",
"owner": "nikhilkalburgi45"
},
"go": {
"title": "Go",
"owner": "arnehormann"
Expand Down
36 changes: 36 additions & 0 deletions src/languages/gleam.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
Prism.languages.gleam = {
// doc comments first so /// isn't matched as //
'comment': [
/\/\/{3,4}.*/,
/\/\/.*/
],

'string': {
pattern: /"(?:\\.|[^"\\])*"/,
greedy: true
},

'attribute': {
pattern: /@\w+/,
alias: 'annotation'
},

'keyword': /\b(?:as|assert|case|const|echo|else|fn|if|import|let|opaque|panic|pub|todo|type|use)\b/,

'boolean': /\b(?:True|False)\b/,

// keep before class-name so builtins are highlighted correctly
'builtin': /\b(?:Int|Float|String|Bool|List|Result|Option|Nil)\b/,

// heuristic: matches types and constructors (no AST available)
'class-name': /\b[A-Z]\w*\b/,

'number': /\b(?:0b[01][01_]*|0o[0-7][0-7_]*|0x[\da-fA-F][\da-fA-F_]*|\d[\d_]*(?:\.[\d_]+)?(?:[eE][+-]?\d[\d_]*)?)\b/,

// best-effort: identifier followed by (
'function': /\b[a-z_]\w*(?=\s*\()/,

'operator': /\|>|<>|->|<-|\.\.|\+\.|-\.|\*\.|\/\.|==|!=|<=|>=|&&|\|\||[+\-*\/%<>=!]/,

'punctuation': /[{}[\](),.:;#]/
};
9 changes: 9 additions & 0 deletions tests/languages/gleam/attributes.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
======
Attributes
======
@external(erlang, "calendar", "local_time")
pub fn now() { Nil }
======
<span class="token attribute">@external</span><span class="token punctuation">(</span>erlang<span class="token punctuation">,</span> <span class="token string">"calendar"</span><span class="token punctuation">,</span> <span class="token string">"local_time"</span><span class="token punctuation">)</span>
<span class="token keyword">pub</span> <span class="token keyword">fn</span> <span class="token function">now</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token builtin">Nil</span> <span class="token punctuation">}</span>
======
11 changes: 11 additions & 0 deletions tests/languages/gleam/basic.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
======
Basic function
======
pub fn main() {
echo "hello"
}
======
<span class="token keyword">pub</span> <span class="token keyword">fn</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">echo</span> <span class="token string">"hello"</span>
<span class="token punctuation">}</span>
======
11 changes: 11 additions & 0 deletions tests/languages/gleam/numbers.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
======
Numbers
======
let x = 42
let y = 3.14
let z = 0xFF
======
<span class="token keyword">let</span> x <span class="token operator">=</span> <span class="token number">42</span>
<span class="token keyword">let</span> y <span class="token operator">=</span> <span class="token number">3.14</span>
<span class="token keyword">let</span> z <span class="token operator">=</span> <span class="token number">0xFF</span>
======
7 changes: 7 additions & 0 deletions tests/languages/gleam/operators.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
======
Operators
======
[1, 2] |> list.map(fn(x) { x + 1 })
======
<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">|&gt;</span> <span class="token function">list</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token keyword">fn</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token punctuation">{</span> x <span class="token operator">+</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">)</span>
======
9 changes: 9 additions & 0 deletions tests/languages/gleam/types.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
======
Types and constructors
======
type Result(a, b) { Ok(a) Error(b) }
Ok(42)
======
<span class="token keyword">type</span> <span class="token class-name">Result</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">Ok</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span> <span class="token class-name">Error</span><span class="token punctuation">(</span>b<span class="token punctuation">)</span> <span class="token punctuation">}</span>
<span class="token class-name">Ok</span><span class="token punctuation">(</span><span class="token number">42</span><span class="token punctuation">)</span>
======