plum
git clone https://git.pyrossh.dev/plum
A statically typed, imperative programming language inspired by rust, python
plum-tooling/tree-sitter-plum/test/corpus/function.txt
| 4bd2c1c | 1 | ================================================================================ |
| f997bee | 2 | function - no return |
| 4bd2c1c | 3 | ================================================================================ |
| 4bd2c1c | 4 | |
| c06ddba | 5 | fun sum(a: Int, b: Int) = |
| f997bee | 6 | todo |
| 4bd2c1c | 7 | |
| efe15db | 8 | -------------------------------------------------------------------------------- |
| 4bd2c1c | 9 | |
| efe15db | 10 | (source |
| efe15db | 11 | (fn |
| f997bee | 12 | (fn_identifier) |
| efe15db | 13 | (param |
| 9e7927c | 14 | (var_identifier) |
| efe15db | 15 | (type |
| f997bee | 16 | (type_identifier))) |
| efe15db | 17 | (param |
| 9e7927c | 18 | (var_identifier) |
| efe15db | 19 | (type |
| f997bee | 20 | (type_identifier))) |
| f997bee | 21 | (body |
| f997bee | 22 | (todo)))) |
| 4bd2c1c | 23 | |
| efe15db | 24 | ================================================================================ |
| f997bee | 25 | function - return |
| efe15db | 26 | ================================================================================ |
| 4bd2c1c | 27 | |
| c06ddba | 28 | fun sum(a: Int, b: Int) -> Int = |
| f997bee | 29 | todo |
| 4bd2c1c | 30 | |
| 4bd2c1c | 31 | -------------------------------------------------------------------------------- |
| 4bd2c1c | 32 | |
| 4bd2c1c | 33 | (source |
| 4bd2c1c | 34 | (fn |
| f997bee | 35 | (fn_identifier) |
| 4bd2c1c | 36 | (param |
| 9e7927c | 37 | (var_identifier) |
| 4bd2c1c | 38 | (type |
| f997bee | 39 | (type_identifier))) |
| 4bd2c1c | 40 | (param |
| 9e7927c | 41 | (var_identifier) |
| 4bd2c1c | 42 | (type |
| f997bee | 43 | (type_identifier))) |
| 8f91d27 | 44 | (type |
| f997bee | 45 | (type_identifier)) |
| f997bee | 46 | (body |
| f997bee | 47 | (todo)))) |
| efe15db | 48 | |
| efe15db | 49 | ================================================================================ |
| f997bee | 50 | function - default value |
| efe15db | 51 | ================================================================================ |
| efe15db | 52 | |
| c06ddba | 53 | fun random(a: Int = 10) = |
| f997bee | 54 | todo |
| efe15db | 55 | |
| efe15db | 56 | -------------------------------------------------------------------------------- |
| efe15db | 57 | |
| efe15db | 58 | (source |
| 4bd2c1c | 59 | (fn |
| f997bee | 60 | (fn_identifier) |
| 4bd2c1c | 61 | (param |
| 9e7927c | 62 | (var_identifier) |
| 4bd2c1c | 63 | (type |
| f997bee | 64 | (type_identifier)) |
| efe15db | 65 | (expression |
| efe15db | 66 | (primary_expression |
| efe15db | 67 | (integer)))) |
| f997bee | 68 | (body |
| f997bee | 69 | (todo)))) |
| efe15db | 70 | |
| efe15db | 71 | ================================================================================ |
| f997bee | 72 | function - generics |
| efe15db | 73 | ================================================================================ |
| efe15db | 74 | |
| c06ddba | 75 | fun add(param: T, param2: List[U]) -> List[U] = |
| f997bee | 76 | todo |
| efe15db | 77 | |
| efe15db | 78 | -------------------------------------------------------------------------------- |
| efe15db | 79 | |
| efe15db | 80 | (source |
| 4bd2c1c | 81 | (fn |
| f997bee | 82 | (fn_identifier) |
| f997bee | 83 | (param |
| 9e7927c | 84 | (var_identifier) |
| f997bee | 85 | (type |
| 8f91d27 | 86 | (generic))) |
| 4bd2c1c | 87 | (param |
| 9e7927c | 88 | (var_identifier) |
| 4bd2c1c | 89 | (type |
| f997bee | 90 | (type_identifier) |
| f997bee | 91 | (type |
| 8f91d27 | 92 | (generic)))) |
| 8f91d27 | 93 | (type |
| f997bee | 94 | (type_identifier) |
| 8f91d27 | 95 | (type |
| 8f91d27 | 96 | (generic))) |
| f997bee | 97 | (body |
| f997bee | 98 | (todo)))) |
| efe15db | 99 | |
| efe15db | 100 | ================================================================================ |
| 6b5d9db | 101 | function - bare self param (top-level, not a method receiver annotation) |
| efe15db | 102 | ================================================================================ |
| efe15db | 103 | |
| 6b5d9db | 104 | fun remove(self, v: T) = |
| f997bee | 105 | todo |
| efe15db | 106 | |
| efe15db | 107 | -------------------------------------------------------------------------------- |
| efe15db | 108 | |
| efe15db | 109 | (source |
| 4bd2c1c | 110 | (fn |
| 9e7927c | 111 | (fn_identifier) |
| 141de54 | 112 | (self) |
| 141de54 | 113 | (param |
| 141de54 | 114 | (var_identifier) |
| 141de54 | 115 | (type |
| 8f91d27 | 116 | (generic))) |
| 141de54 | 117 | (body |
| 141de54 | 118 | (todo)))) |
| 141de54 | 119 | |
| 96ec67f | 120 | ================================================================================ |
| 96ec67f | 121 | function - variant construction call (positional args on a capitalized name) |
| 96ec67f | 122 | ================================================================================ |
| 96ec67f | 123 | |
| c06ddba | 124 | fun makeSome(v: Int) -> Option = |
| 96ec67f | 125 | Some(v) |
| 96ec67f | 126 | |
| 96ec67f | 127 | -------------------------------------------------------------------------------- |
| 96ec67f | 128 | |
| 96ec67f | 129 | (source |
| 96ec67f | 130 | (fn |
| 96ec67f | 131 | (fn_identifier) |
| 96ec67f | 132 | (param |
| 96ec67f | 133 | (var_identifier) |
| 96ec67f | 134 | (type |
| 96ec67f | 135 | (type_identifier))) |
| 8f91d27 | 136 | (type |
| 96ec67f | 137 | (type_identifier)) |
| 96ec67f | 138 | (body |
| aeaba6f | 139 | (expression |
| aeaba6f | 140 | (primary_expression |
| aeaba6f | 141 | (fn_call |
| aeaba6f | 142 | (type_identifier) |
| aeaba6f | 143 | (fn_argument_list |
| aeaba6f | 144 | (expression |
| aeaba6f | 145 | (primary_expression |
| aeaba6f | 146 | (var_identifier)))))))))) |
| aeaba6f | 147 | |
| aeaba6f | 148 | ================================================================================ |
| aeaba6f | 149 | function - bare comparison as body's trailing statement |
| aeaba6f | 150 | ================================================================================ |
| aeaba6f | 151 | |
| c06ddba | 152 | fun isNone(o: Option) -> Bool = |
| aeaba6f | 153 | o == None |
| aeaba6f | 154 | |
| aeaba6f | 155 | -------------------------------------------------------------------------------- |
| aeaba6f | 156 | |
| aeaba6f | 157 | (source |
| aeaba6f | 158 | (fn |
| aeaba6f | 159 | (fn_identifier) |
| aeaba6f | 160 | (param |
| aeaba6f | 161 | (var_identifier) |
| aeaba6f | 162 | (type |
| aeaba6f | 163 | (type_identifier))) |
| 8f91d27 | 164 | (type |
| aeaba6f | 165 | (type_identifier)) |
| aeaba6f | 166 | (body |
| aeaba6f | 167 | (expression |
| aeaba6f | 168 | (comparison_operator |
| aeaba6f | 169 | (primary_expression |
| aeaba6f | 170 | (var_identifier)) |
| aeaba6f | 171 | (primary_expression |
| aeaba6f | 172 | (type_identifier))))))) |
| aeaba6f | 173 | |
| aeaba6f | 174 | ================================================================================ |
| aeaba6f | 175 | function - bare boolean-operator as body's trailing statement |
| aeaba6f | 176 | ================================================================================ |
| aeaba6f | 177 | |
| c06ddba | 178 | fun bothTrue(a: Bool, b: Bool) -> Bool = |
| aeaba6f | 179 | a && b |
| aeaba6f | 180 | |
| aeaba6f | 181 | -------------------------------------------------------------------------------- |
| aeaba6f | 182 | |
| aeaba6f | 183 | (source |
| aeaba6f | 184 | (fn |
| aeaba6f | 185 | (fn_identifier) |
| aeaba6f | 186 | (param |
| aeaba6f | 187 | (var_identifier) |
| aeaba6f | 188 | (type |
| aeaba6f | 189 | (type_identifier))) |
| aeaba6f | 190 | (param |
| aeaba6f | 191 | (var_identifier) |
| aeaba6f | 192 | (type |
| aeaba6f | 193 | (type_identifier))) |
| 8f91d27 | 194 | (type |
| aeaba6f | 195 | (type_identifier)) |
| aeaba6f | 196 | (body |
| aeaba6f | 197 | (expression |
| aeaba6f | 198 | (boolean_operator |
| aeaba6f | 199 | (expression |
| aeaba6f | 200 | (primary_expression |
| aeaba6f | 201 | (var_identifier))) |
| aeaba6f | 202 | (expression |
| aeaba6f | 203 | (primary_expression |
| aeaba6f | 204 | (var_identifier)))))))) |
| aeaba6f | 205 | |
| aeaba6f | 206 | ================================================================================ |
| aeaba6f | 207 | function - bare ternary as body's trailing statement |
| aeaba6f | 208 | ================================================================================ |
| aeaba6f | 209 | |
| c06ddba | 210 | fun pick(cond: Bool, a: Int, b: Int) -> Int = |
| aeaba6f | 211 | cond ? a : b |
| aeaba6f | 212 | |
| aeaba6f | 213 | -------------------------------------------------------------------------------- |
| aeaba6f | 214 | |
| aeaba6f | 215 | (source |
| aeaba6f | 216 | (fn |
| aeaba6f | 217 | (fn_identifier) |
| aeaba6f | 218 | (param |
| aeaba6f | 219 | (var_identifier) |
| aeaba6f | 220 | (type |
| aeaba6f | 221 | (type_identifier))) |
| aeaba6f | 222 | (param |
| aeaba6f | 223 | (var_identifier) |
| aeaba6f | 224 | (type |
| aeaba6f | 225 | (type_identifier))) |
| aeaba6f | 226 | (param |
| aeaba6f | 227 | (var_identifier) |
| aeaba6f | 228 | (type |
| aeaba6f | 229 | (type_identifier))) |
| 8f91d27 | 230 | (type |
| aeaba6f | 231 | (type_identifier)) |
| aeaba6f | 232 | (body |
| aeaba6f | 233 | (expression |
| aeaba6f | 234 | (ternary_expression |
| aeaba6f | 235 | (expression |
| aeaba6f | 236 | (primary_expression |
| aeaba6f | 237 | (var_identifier))) |
| aeaba6f | 238 | (expression |
| aeaba6f | 239 | (primary_expression |
| aeaba6f | 240 | (var_identifier))) |
| aeaba6f | 241 | (expression |
| aeaba6f | 242 | (primary_expression |
| aeaba6f | 243 | (var_identifier)))))))) |
| 906b92e | 244 | |
| 906b92e | 245 | ================================================================================ |
| 906b92e | 246 | function - closure literal in expression position |
| 906b92e | 247 | ================================================================================ |
| 906b92e | 248 | |
| c06ddba | 249 | fun useClosure() -> Bool = |
| 906b92e | 250 | cb = |v| |
| 906b92e | 251 | True |
| 906b92e | 252 | cb(5) |
| 906b92e | 253 | |
| 906b92e | 254 | -------------------------------------------------------------------------------- |
| 906b92e | 255 | |
| 906b92e | 256 | (source |
| 906b92e | 257 | (fn |
| 906b92e | 258 | (fn_identifier) |
| 8f91d27 | 259 | (type |
| 906b92e | 260 | (type_identifier)) |
| 906b92e | 261 | (body |
| 906b92e | 262 | (assign |
| 906b92e | 263 | (var_identifier) |
| 906b92e | 264 | (expression |
| 906b92e | 265 | (closure |
| 906b92e | 266 | (var_identifier) |
| 906b92e | 267 | (body |
| 906b92e | 268 | (expression |
| 906b92e | 269 | (primary_expression |
| 906b92e | 270 | (type_identifier))))))) |
| 906b92e | 271 | (expression |
| 906b92e | 272 | (primary_expression |
| 906b92e | 273 | (fn_call |
| 906b92e | 274 | (var_identifier) |
| 906b92e | 275 | (fn_argument_list |
| 906b92e | 276 | (expression |
| 906b92e | 277 | (primary_expression |
| 906b92e | 278 | (integer)))))))))) |
| 906b92e | 279 | |
| 906b92e | 280 | ================================================================================ |
| 906b92e | 281 | function - closure literal with no params |
| 906b92e | 282 | ================================================================================ |
| 906b92e | 283 | |
| c06ddba | 284 | fun useClosure() -> Bool = |
| 906b92e | 285 | cb = || |
| 906b92e | 286 | True |
| 906b92e | 287 | cb() |
| 906b92e | 288 | |
| 906b92e | 289 | -------------------------------------------------------------------------------- |
| 906b92e | 290 | |
| 906b92e | 291 | (source |
| 906b92e | 292 | (fn |
| 906b92e | 293 | (fn_identifier) |
| 8f91d27 | 294 | (type |
| 906b92e | 295 | (type_identifier)) |
| 906b92e | 296 | (body |
| 906b92e | 297 | (assign |
| 906b92e | 298 | (var_identifier) |
| 906b92e | 299 | (expression |
| 906b92e | 300 | (closure |
| 906b92e | 301 | (body |
| 906b92e | 302 | (expression |
| 906b92e | 303 | (primary_expression |
| 906b92e | 304 | (type_identifier))))))) |
| 906b92e | 305 | (expression |
| 906b92e | 306 | (primary_expression |
| 906b92e | 307 | (fn_call |
| 906b92e | 308 | (var_identifier) |
| 906b92e | 309 | (fn_argument_list))))))) |
| 906b92e | 310 | |
| 04d2270 | 311 | ================================================================================ |
| 04d2270 | 312 | function - closure with an inline ternary body |
| 04d2270 | 313 | ================================================================================ |
| 04d2270 | 314 | |
| 04d2270 | 315 | fun useClosure() -> Str = |
| 04d2270 | 316 | f = |n| n > 0 ? "pos" : "nonpos" |
| 04d2270 | 317 | f(5) |
| 04d2270 | 318 | |
| 04d2270 | 319 | -------------------------------------------------------------------------------- |
| 04d2270 | 320 | |
| 04d2270 | 321 | (source |
| 04d2270 | 322 | (fn |
| 04d2270 | 323 | (fn_identifier) |
| 04d2270 | 324 | (type |
| 04d2270 | 325 | (type_identifier)) |
| 04d2270 | 326 | (body |
| 04d2270 | 327 | (assign |
| 04d2270 | 328 | (var_identifier) |
| 04d2270 | 329 | (expression |
| 04d2270 | 330 | (closure |
| 04d2270 | 331 | (var_identifier) |
| 04d2270 | 332 | (expression |
| 04d2270 | 333 | (ternary_expression |
| 04d2270 | 334 | (expression |
| 04d2270 | 335 | (comparison_operator |
| 04d2270 | 336 | (primary_expression |
| 04d2270 | 337 | (var_identifier)) |
| 04d2270 | 338 | (primary_expression |
| 04d2270 | 339 | (integer)))) |
| 04d2270 | 340 | (expression |
| 04d2270 | 341 | (primary_expression |
| 04d2270 | 342 | (string |
| 04d2270 | 343 | (string_start) |
| 04d2270 | 344 | (string_content) |
| 04d2270 | 345 | (string_end)))) |
| 04d2270 | 346 | (expression |
| 04d2270 | 347 | (primary_expression |
| 04d2270 | 348 | (string |
| 04d2270 | 349 | (string_start) |
| 04d2270 | 350 | (string_content) |
| 04d2270 | 351 | (string_end))))))))) |
| 04d2270 | 352 | (expression |
| 04d2270 | 353 | (primary_expression |
| 04d2270 | 354 | (fn_call |
| 04d2270 | 355 | (var_identifier) |
| 04d2270 | 356 | (fn_argument_list |
| 04d2270 | 357 | (expression |
| 04d2270 | 358 | (primary_expression |
| 04d2270 | 359 | (integer)))))))))) |
| 04d2270 | 360 | |
| 906b92e | 361 | ================================================================================ |
| 906b92e | 362 | function - function-value type param annotation |
| 906b92e | 363 | ================================================================================ |
| 906b92e | 364 | |
| c06ddba | 365 | fun each(cb: fn(Int)) -> Bool = |
| 906b92e | 366 | True |
| 906b92e | 367 | |
| 906b92e | 368 | -------------------------------------------------------------------------------- |
| 906b92e | 369 | |
| 906b92e | 370 | (source |
| 906b92e | 371 | (fn |
| 906b92e | 372 | (fn_identifier) |
| 906b92e | 373 | (param |
| 906b92e | 374 | (var_identifier) |
| 906b92e | 375 | (fn_value_type |
| 906b92e | 376 | (type |
| 906b92e | 377 | (type_identifier)))) |
| 8f91d27 | 378 | (type |
| 906b92e | 379 | (type_identifier)) |
| 906b92e | 380 | (body |
| 906b92e | 381 | (expression |
| 906b92e | 382 | (primary_expression |
| 906b92e | 383 | (type_identifier)))))) |
| 906b92e | 384 | |
| 906b92e | 385 | ================================================================================ |
| 906b92e | 386 | function - function-value type param annotation with generic types and return |
| 906b92e | 387 | ================================================================================ |
| 906b92e | 388 | |
| c06ddba | 389 | fun each(cb: fn(T) -> U) -> Bool = |
| 906b92e | 390 | True |
| 906b92e | 391 | |
| 906b92e | 392 | -------------------------------------------------------------------------------- |
| 906b92e | 393 | |
| 906b92e | 394 | (source |
| 906b92e | 395 | (fn |
| 906b92e | 396 | (fn_identifier) |
| 906b92e | 397 | (param |
| 906b92e | 398 | (var_identifier) |
| 906b92e | 399 | (fn_value_type |
| 906b92e | 400 | (type |
| 8f91d27 | 401 | (generic)) |
| 906b92e | 402 | (type |
| 8f91d27 | 403 | (generic)))) |
| 8f91d27 | 404 | (type |
| 906b92e | 405 | (type_identifier)) |
| 906b92e | 406 | (body |
| 906b92e | 407 | (expression |
| 906b92e | 408 | (primary_expression |
| 906b92e | 409 | (type_identifier)))))) |
| 4ba0db3 | 410 | |
| 4ba0db3 | 411 | ================================================================================ |
| 4ba0db3 | 412 | function - inline closure literal as a call argument |
| 4ba0db3 | 413 | ================================================================================ |
| 4ba0db3 | 414 | |
| c06ddba | 415 | fun main() -> Int = |
| 4ba0db3 | 416 | each(|v| v) |
| 4ba0db3 | 417 | |
| 4ba0db3 | 418 | -------------------------------------------------------------------------------- |
| 4ba0db3 | 419 | |
| 4ba0db3 | 420 | (source |
| 4ba0db3 | 421 | (fn |
| 4ba0db3 | 422 | name: (fn_identifier) |
| 8f91d27 | 423 | returns: (type |
| 4ba0db3 | 424 | (type_identifier)) |
| 4ba0db3 | 425 | body: (body |
| 4ba0db3 | 426 | (expression |
| 4ba0db3 | 427 | (primary_expression |
| 4ba0db3 | 428 | (fn_call |
| 4ba0db3 | 429 | function: (var_identifier) |
| 4ba0db3 | 430 | arguments: (fn_argument_list |
| 4ba0db3 | 431 | (expression |
| 4ba0db3 | 432 | (closure |
| 4ba0db3 | 433 | parameters: (var_identifier) |
| 4ba0db3 | 434 | body: (expression |
| 4ba0db3 | 435 | (primary_expression |
| 4ba0db3 | 436 | (var_identifier)))))))))))) |
| 35af6cf | 437 | |
| 35af6cf | 438 | ================================================================================ |
| 35af6cf | 439 | function - multi-line closure literal call argument, closing paren on same line as body |
| 35af6cf | 440 | ================================================================================ |
| 35af6cf | 441 | |
| c06ddba | 442 | fun main() -> Int = |
| 35af6cf | 443 | each(|v| |
| 35af6cf | 444 | v) |
| 35af6cf | 445 | |
| 35af6cf | 446 | -------------------------------------------------------------------------------- |
| 35af6cf | 447 | |
| 35af6cf | 448 | (source |
| 35af6cf | 449 | (fn |
| 35af6cf | 450 | name: (fn_identifier) |
| 8f91d27 | 451 | returns: (type |
| 35af6cf | 452 | (type_identifier)) |
| 35af6cf | 453 | body: (body |
| 35af6cf | 454 | (expression |
| 35af6cf | 455 | (primary_expression |
| 35af6cf | 456 | (fn_call |
| 35af6cf | 457 | function: (var_identifier) |
| 35af6cf | 458 | arguments: (fn_argument_list |
| 35af6cf | 459 | (expression |
| 35af6cf | 460 | (closure |
| 35af6cf | 461 | parameters: (var_identifier) |
| 35af6cf | 462 | body: (body |
| 35af6cf | 463 | (expression |
| 35af6cf | 464 | (primary_expression |
| 35af6cf | 465 | (var_identifier))))))))))))) |