156 lines
3.2 KiB
Plaintext
156 lines
3.2 KiB
Plaintext
;; filepath tests
|
|
require:
|
|
library
|
|
./awesome
|
|
./variable/greatness/file
|
|
|
|
|
|
;; Strings
|
|
"Hello World!"
|
|
"Hello!\nWorld!"
|
|
'sasadads\ssdasdasd{ @method variable }'
|
|
var dstring = .dotted-string
|
|
|
|
key-dash
|
|
but-can-it-do-ops +
|
|
yes-it-can:
|
|
100 +
|
|
print "So cool!"
|
|
100
|
|
{that = "is awesome", you = "are hilarious"} +
|
|
jiminy-crickets:
|
|
oliver-twist each mr-bojangles +
|
|
kittens =
|
|
12
|
|
|
|
check-it:
|
|
still-works:
|
|
{1, 2, 3}.reversed.reversed.awesome{}.that.sort().what.map with
|
|
x -> x * x
|
|
(1, 2, 3) + this
|
|
|
|
if total awesomeness > great stupidity:
|
|
print "You've won!"
|
|
not-sure-what-this-does @@ but-it-wont-capture
|
|
else:
|
|
print "Keep trying!"
|
|
needs-work ++ you
|
|
|
|
;; with tests
|
|
needs-obj('awesome') with {"greatness values"}
|
|
object.field.method with {1, 2, 3}
|
|
|
|
;; object assignment
|
|
obj = {
|
|
key = "oh yeah"
|
|
tree = "schmoh cheah"
|
|
}
|
|
obj.field = {
|
|
that = super cool: "wowzers!"
|
|
thatFunc = {x} -> x
|
|
}
|
|
|
|
;; match statements
|
|
match @awesome.great:
|
|
{head, *tail} -> [print head; tail]
|
|
Array[] -> convert(.arr)
|
|
String? -> convert(.str)
|
|
else -> throw E.error("This is an error!")
|
|
|
|
unimpl-func = -> pass
|
|
|
|
;; if / elif / else test
|
|
if coolness > 11:
|
|
add something: something-else
|
|
elif true:
|
|
add nothing: something-else
|
|
else:
|
|
add everything: the-castle
|
|
|
|
;; nested if / elif / else test
|
|
mad-function = bananas ->
|
|
if bananas > 5:
|
|
print "You've got a lot of bananas!"
|
|
elif bananas == 5:
|
|
print "You might want to consider getting more bananas"
|
|
else:
|
|
print "Go get more bananas now!"
|
|
|
|
;; class test
|
|
class Dog:
|
|
constructor(@name, @breed) =
|
|
this.awesomesauce = 100
|
|
|
|
unimpl-meth = -> pass
|
|
|
|
bark(@, sd)
|
|
|
|
;; error test
|
|
try:
|
|
throw E.test.my-error("This is my error.")
|
|
catch TypeError? e:
|
|
print "There was a type error."
|
|
catch E.my-error? e:
|
|
print "My error!"
|
|
catch e:
|
|
print "Some other error."
|
|
finally:
|
|
print "We are done."
|
|
|
|
;; method shorthand operator
|
|
stream-of-twos = *->
|
|
while [true]: yield 2 ;; need to fix literals with colons after them.
|
|
|
|
;; gen shorthand operator
|
|
full-name = @->
|
|
'{@first-name} {@last-name}'
|
|
|
|
name-method = @->
|
|
@name.parents.full-name()
|
|
|
|
;; Keyword highlight test
|
|
key x
|
|
key +x; key @x; key .x ; key "x"; key 0; .asdasd
|
|
key (x); key [x]; key {x}
|
|
nokey.x(); nokey{x}
|
|
key x + y
|
|
key key x
|
|
x + key y
|
|
x - key y
|
|
nokey + x
|
|
nokey
|
|
key: x
|
|
key nokey: y
|
|
key x > nokey: z
|
|
x + key nokey: z
|
|
x and {y, z}
|
|
x + nokey: y
|
|
x mod nokey: y
|
|
x = key: y ;; comments work after keywords!
|
|
x each key: y
|
|
x each* k ;;
|
|
a.b{c.d, e.f}
|
|
a.bad-method(c.d, e.f)
|
|
#a{}
|
|
nokey mod: y ;; do not highlight nokey
|
|
;; because mod is an operator
|
|
|
|
;; Highlight all of these:
|
|
await; break; chain; continue; else:; expr-value
|
|
match; return; yield
|
|
|
|
;; Edge-case highlighting test
|
|
key-word: xyz
|
|
nokey - x: yz
|
|
|
|
;; Some keywords may contain operators as a subpart. If your regexp
|
|
;; uses \b to single out operators like each, is or in, you may
|
|
;; fail to highlight these properly:
|
|
beaches ;; Do not highlight each inside the word beaches
|
|
each-thing ;; Do not highlight each
|
|
sleep-in ;; Do not highlight in
|
|
before-each: xyz ;; Highlight before-each as a keyword
|
|
is-great: xyz ;; Highlight is-great as a keyword
|
|
|
|
send()
|