on master help sign in
Add Racket syntax
commitd04a83de7b9ed1ed8ff23f505b08212fea6086a3 authorGeorgy Komarov <jubnzv@gmail.com> dateSun 3 Oct 2021, 17:09 (5 years ago) parentb622a4d
6 files changed+169
.gitmodules+3 CHANGELOG.md+1 assets/syntaxes/02_Extra/Racket+1 assets/syntaxes/02_Extra/Racket.sublime-syntax+52 tests/syntax-tests/highlighted/Racket/test.rkt+56 tests/syntax-tests/source/Racket/test.rkt+56
.gitmodules+3
@@ -230,3 +230,6 @@
230230[submodule "assets/syntaxes/02_Extra/Slim"]
231231 path = assets/syntaxes/02_Extra/Slim
232232 url = https://github.com/slim-template/ruby-slim.tmbundle.git
233+[submodule "assets/syntaxes/02_Extra/Racket"]
234+ path = assets/syntaxes/02_Extra/Racket
235+ url = https://github.com/follesoe/sublime-racket.git
CHANGELOG.md+1
@@ -28,6 +28,7 @@
2828- Highlight for `vimrc` and `gvimrc` files, see #1763 (@SuperSandro2000)
2929- Syslog highlighting improvements, see #1793 (@scop)
3030- Added support for `slim` syntax, see #1693 (@mfinelli)
31+- Racket, see #1884 (@jubnzv)
3132
3233## New themes
3334
assets/syntaxes/02_Extra/Racketnew file+1

Submodule changed.

assets/syntaxes/02_Extra/Racket.sublime-syntaxnew file+52
@@ -0,0 +1,52 @@
1+%YAML 1.2
2+---
3+# http://www.sublimetext.com/docs/3/syntax.html
4+name: Racket
5+file_extensions:
6+ - rkt
7+scope: source.racket
8+contexts:
9+ main:
10+ - match: '[^\\](\"[^\"]*\")'
11+ captures:
12+ 1: string.quoted.double.source.racket
13+ - match: '\((define)\s+([a-zA-Z0-9_\-?\+^]+)\s*'
14+ scope: meta.variable.source.racket
15+ captures:
16+ 1: keyword.source.racket
17+ 2: entity.name.variable.source.racket
18+ - match: '\((define)\s+\(([a-zA-Z0-9_\-?\+^]+)\s*'
19+ scope: meta.function.source.racket
20+ captures:
21+ 1: keyword.source.racket
22+ 2: entity.name.function
23+ - match: '\((struct)\s+([a-zA-Z0-9_\-?\+^]+)\s+'
24+ scope: meta.struct.source.racket
25+ captures:
26+ 1: keyword.source.racket
27+ 2: entity.name.type
28+ - match: '[\s\(](if|lambda|cond|define|type-case|let|letrec|let!|\#lang|require|test|else|first|rest|define-type|define-type-alias|define-struct|not|local|error|lang)[\s\)]'
29+ scope: meta.keywords.source.racket
30+ captures:
31+ 1: keyword.source.racket
32+ - match: '[\s\(](true|false|empty|null)[\s\)]'
33+ captures:
34+ 1: constant.language.source.racket
35+ - match: '[\s\(\[\{](#t|#true|#f|#false)[\s\)\]\}]'
36+ captures:
37+ 1: constant.language.source.racket
38+ - match: '(#\\[a-zA-Z0-9_\-?\+\.\!\"]+)'
39+ captures:
40+ 1: constant.language.source.racket
41+ - match: '\b(0|([1-9][0-9_]*))\b'
42+ scope: constant.numeric.integer.source.racket
43+ - match: ;
44+ push:
45+ - meta_scope: comment.line.documentation.source.racket
46+ - match: $\n
47+ pop: true
48+ - match: '#\|'
49+ push:
50+ - meta_scope: comment.block.source.racket
51+ - match: '\|#'
52+ pop: true
tests/syntax-tests/highlighted/Racket/test.rktnew file+56
@@ -0,0 +1,56 @@
1+#lang racket
2+
3+(require "main.rkt" rackunit)
4+
5+;; Helper for test cases with multiple outputs
6+;; See: https://stackoverflow.com/questions/41081395/unit-testing-in-racket-with-multiple-outputs
7+(define-syntax check-values-equal?
8+ (syntax-rules ()
9+ [(_ a b) (check-equal? (call-with-values (thunk a) list) b)]))
10+
11+
12+;; Named POSIX semaphores
13+(test-begin
14+ (define test-sem-name "/test-nix-1")
15+
16+ ;; Unlink if already exists
17+ (sem-unlink test-sem-name)
18+
19+ ;; Open and unlink
20+ (define test-sem-p (sem-open test-sem-name (+ O_CREAT O_EXCL)))
21+ (check-not-false test-sem-p)
22+ (check-not-equal? test-sem-p (void))
23+ (check-exn exn:fail?
24+ (lambda () (sem-open test-sem-name (+ O_CREAT O_EXCL)))
25+ "Permission denied")
26+ (check-exn exn:fail?
27+ (lambda () (sem-open test-sem-name (+ O_CREAT O_EXCL))))
28+
29+ ;; Change values
30+ (check-equal? (sem-getvalue test-sem-p) 0)
31+ (sem-post test-sem-p)
32+ (check-equal? (sem-getvalue test-sem-p) 1)
33+ (sem-wait test-sem-p)
34+ (check-equal? (sem-getvalue test-sem-p) 0)
35+ (sem-post test-sem-p)
36+ (check-equal? (sem-getvalue test-sem-p) 1)
37+ (sem-post test-sem-p)
38+ (check-equal? (sem-getvalue test-sem-p) 2)
39+ (sem-trywait test-sem-p)
40+ (check-equal? (sem-getvalue test-sem-p) 2)
41+
42+ ;; Can't unlink twice
43+ (check-not-false (sem-unlink test-sem-name))
44+ (check-false (sem-unlink test-sem-name)))
45+
46+
47+;; Named POSIX shared memory
48+(test-begin
49+ (define test-shm-name "test-nix-mem-1")
50+
51+ ;; Open and unlink
52+ (shm-unlink test-shm-name)
53+ (define test-shm-fd (shm-open test-shm-name (+ O_EXCL O_CREAT O_RDWR) #o644))
54+ (check > test-shm-fd 0)
55+ (check-not-false (shm-unlink test-shm-name))
56+ (check-false (shm-unlink test-shm-name)))
tests/syntax-tests/source/Racket/test.rktnew file+56
@@ -0,0 +1,56 @@
1+#lang racket
2+
3+(require "main.rkt" rackunit)
4+
5+;; Helper for test cases with multiple outputs
6+;; See: https://stackoverflow.com/questions/41081395/unit-testing-in-racket-with-multiple-outputs
7+(define-syntax check-values-equal?
8+ (syntax-rules ()
9+ [(_ a b) (check-equal? (call-with-values (thunk a) list) b)]))
10+
11+
12+;; Named POSIX semaphores
13+(test-begin
14+ (define test-sem-name "/test-nix-1")
15+
16+ ;; Unlink if already exists
17+ (sem-unlink test-sem-name)
18+
19+ ;; Open and unlink
20+ (define test-sem-p (sem-open test-sem-name (+ O_CREAT O_EXCL)))
21+ (check-not-false test-sem-p)
22+ (check-not-equal? test-sem-p (void))
23+ (check-exn exn:fail?
24+ (lambda () (sem-open test-sem-name (+ O_CREAT O_EXCL)))
25+ "Permission denied")
26+ (check-exn exn:fail?
27+ (lambda () (sem-open test-sem-name (+ O_CREAT O_EXCL))))
28+
29+ ;; Change values
30+ (check-equal? (sem-getvalue test-sem-p) 0)
31+ (sem-post test-sem-p)
32+ (check-equal? (sem-getvalue test-sem-p) 1)
33+ (sem-wait test-sem-p)
34+ (check-equal? (sem-getvalue test-sem-p) 0)
35+ (sem-post test-sem-p)
36+ (check-equal? (sem-getvalue test-sem-p) 1)
37+ (sem-post test-sem-p)
38+ (check-equal? (sem-getvalue test-sem-p) 2)
39+ (sem-trywait test-sem-p)
40+ (check-equal? (sem-getvalue test-sem-p) 2)
41+
42+ ;; Can't unlink twice
43+ (check-not-false (sem-unlink test-sem-name))
44+ (check-false (sem-unlink test-sem-name)))
45+
46+
47+;; Named POSIX shared memory
48+(test-begin
49+ (define test-shm-name "test-nix-mem-1")
50+
51+ ;; Open and unlink
52+ (shm-unlink test-shm-name)
53+ (define test-shm-fd (shm-open test-shm-name (+ O_EXCL O_CREAT O_RDWR) #o644))
54+ (check > test-shm-fd 0)
55+ (check-not-false (shm-unlink test-shm-name))
56+ (check-false (shm-unlink test-shm-name)))