Roughly in order of priority, non exhaustive
- Triple quote strings (multiline) e.g
""" abc """ - Templated strings
- Templated strings nested
- Simple Strings e.g
“abc” - Char literals e.g
'a' - Char unicode literals e.g
'\uabcd' - Char escaped sequences literals e.g
'\r' - All single character lex tokens e.g
} - All multi character lex tokens e.g
!== - Treat
\r\nas newline - Nested comments
- Doc comments
- Identifiers (potentially with unicode)
- Identifiers inside backticks e.g
`foo bar` - Keywords
- Don’t give out of bounds locations
- Newline-sensitive
- Annotations (e.g
@Timeout)
- Simple AST
- Math expressions e.g
1 + 3 - Strip comments, shebang, etc from ast before parsing
- Math
- Boolean logic e.g
1 > 2 != 3<4 - Newline-sensitive
- Range e.g
1..5 - If
- When
- When with subject
- Range test in when entry e.g
when {4 in 1..5 -> 99 else 0} - Type test in when entry e.g
when {4 is Int -> true else false} - Elvis operator
- As expression
- While
- Do while
- Val declaration e.g
val a = 1 - Var declaration e.g
var a = 1 - When with subject with binding e.g
when (val x = 1) {0 -> 1; 1 -> 2; 2 -> 4; else x * 2} - Do while with binding e.g
do {val a = 1} while (a < 10) - Explicit types e.g
val a: Long = 1 - Prefix increment/decrement operators e.g
--a; ++a; - Postfix increment/decrement operators e.g
a--; a++; - Variable assignement
- Break
- Continue
- Simple inline functions declaration without arguments e.g
fun add(): Int = a + b - Simple C-like functions declaration without arguments e.g
fun add(): Int { a + b; } - Function call without arguments e.g
add() - Simple inline functions declaration e.g
fun add(a: Int, b: Int): Int = a + b - Simple C-like functions declaration e.g
fun add(a: Int, b: Int): Unit { a + b; } - Function call e.g
add(1, 5) - Return in function e.g
fun add(a: Int, b: Int): Int { return a + b; } - Explicit type for function with block body (except Unit)
- In expression e.g
val a = 1 in 0..10 - Is expression e.g
val a = 1 is Int - Call function with named parameter
- Default value for parameter in function
- Tailrec function
- Variadic function
- Class
- Data class
- Enum
- Shebang
- Import
- Package declaration
- Try-catch
- Finally
- Annotations
- Infix function
- For
- Special syntax for last function call argument if it is a callable e.g
values.map { it * 2} - As expression
- Jump expression with label e.g
return@loop; break@foo; continue@bar; - Interface
- Type alias
- Visibility modifier
- Generic
- Contract
- Generic constraint
- Operator overloading
- Extension function
- Lambda
- Sealed class
- Inheritance
- Object (i.e singleton)
- Destructuring declaration
- Delegation
- Delegated properties
-
Shorttype -
UShorttype -
Bytetype -
UBytetype -
Nothingtype -
Anytype - Smart casts
- Nullable types
- Type check math
- Type check boolean logic
- Type inference
- Variable
- Function call
- Class resolver
- Out of order resolution
- Warning on shadowing
- Warning on unused
- Too many function arguments (255 for the JVM)
- Simplify CLI (align with kotlinc?)
- Add debug dump of the AST
- Add debug dump of resolution & types
- Show default paths of dependencies e.g stdlib
- Give on the CLI paths of dependencies e.g stdlib
- Ternary operator
- Missing parentheses around if, while, for, when clause
- Variations of a unicode literal
'\u{abcde}'or\uabcde - Show hints on error
- Show full line of source code on error
- Show the exact location on the line of the error with description
- Add AST sexp dump
- Write examples in rust
- Write one example in another language (C? Python? Java with JNI?) -> simple stats, kotlinfmt, remove unused, loc count
- Type inference
- Generics
- Java Byte Code
- Varargs
- Null safety
- Language server (?)
- IR (?)
- Lisp
- println
- int math
- long math
- float math
- double math
- hello world
- binary operators (
==,!=,<=,<, etc) - Test metadata
size()calculations - Test metadata serialization
- High level API to handle stack/locals/types
- boolean
- char
- Conversion between types (?)
- Track max stack/locals
- if-else
- while loop
- Locals
- Assignment
- Functions
- When
- Break
- Continue
- Lines debug information
- Local variables debug information
- Package
- Stack map frames (hard)
- println
- unique constants
- hello world
- int math
- long math
- Conversions between primitive types
- (In)Equality test
- While
- For
none at the moment
TODO