Compare commits
18 commits
1cfcc43469
...
2b2a75af43
Author | SHA1 | Date | |
---|---|---|---|
Bruno BELANYI | 2b2a75af43 | ||
Bruno BELANYI | 5862966ddf | ||
Bruno BELANYI | d6f624ebda | ||
Bruno BELANYI | a522aab9cd | ||
Bruno BELANYI | 7d0ab1f40c | ||
Bruno BELANYI | 2e08482c67 | ||
Bruno BELANYI | c9efe870ab | ||
Bruno BELANYI | 746c8d27b8 | ||
Bruno BELANYI | b1c2da4cb4 | ||
Bruno BELANYI | acb5765591 | ||
Bruno BELANYI | 065ad5f760 | ||
Bruno BELANYI | 9c51cbc93f | ||
Bruno BELANYI | 425890a6fc | ||
Bruno BELANYI | 555e10c736 | ||
Bruno BELANYI | 60804f0ff0 | ||
Bruno BELANYI | 21172e21e7 | ||
Bruno BELANYI | 869b0bf79a | ||
Bruno BELANYI | 572dab6f4b |
|
@ -1,7 +1,7 @@
|
||||||
[package]
|
[package]
|
||||||
name = "tree-sitter-tiger"
|
name = "tree-sitter-tiger"
|
||||||
description = "Tiger grammar for the tree-sitter parsing library"
|
description = "Tiger grammar for the tree-sitter parsing library"
|
||||||
version = "0.0.1"
|
version = "0.1.0"
|
||||||
keywords = ["incremental", "parsing", "tiger"]
|
keywords = ["incremental", "parsing", "tiger"]
|
||||||
categories = ["parsing", "text-editors"]
|
categories = ["parsing", "text-editors"]
|
||||||
repository = "https://gitea.belanyi.fr/ambroisie/tree-sitter-tiger"
|
repository = "https://gitea.belanyi.fr/ambroisie/tree-sitter-tiger"
|
||||||
|
|
11
README.md
Normal file
11
README.md
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# tree-sitter-tiger
|
||||||
|
|
||||||
|
Tiger grammar for [tree-sitter](https://github.com/tree-sitter/tree-sitter).
|
||||||
|
|
||||||
|
It includes extensions to the language that are specific to the EPITA dialect of
|
||||||
|
Tiger: meta-variables, and Object Oriented syntax.
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [EPITA's Tiger assignment website](https://assignments.lrde.epita.fr/)
|
||||||
|
- [Official website for A. W. Appel's book](https://www.cs.princeton.edu/~appel/modern/)
|
132
grammar.js
132
grammar.js
|
@ -7,12 +7,12 @@ function sepBy(sep, rule) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const PREC = {
|
const PREC = {
|
||||||
assign: 6,
|
multiplicative: 6,
|
||||||
multiplicative: 5,
|
additive: 5,
|
||||||
additive: 4,
|
comparative: 4,
|
||||||
comparative: 3,
|
and: 3,
|
||||||
and: 2,
|
or: 2,
|
||||||
or: 1,
|
assign: 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = grammar({
|
module.exports = grammar({
|
||||||
|
@ -25,10 +25,13 @@ module.exports = grammar({
|
||||||
$._type_identifier,
|
$._type_identifier,
|
||||||
$._field_identifier,
|
$._field_identifier,
|
||||||
$._function_declaration_common,
|
$._function_declaration_common,
|
||||||
|
$._class_declaration_common,
|
||||||
|
$._class_field,
|
||||||
],
|
],
|
||||||
|
|
||||||
conflicts: ($) => [
|
conflicts: ($) => [
|
||||||
[$._lvalue, $.array_expression],
|
[$._lvalue, $.array_expression],
|
||||||
|
[$._lvalue, $.record_expression],
|
||||||
[$._lvalue, $._type_identifier],
|
[$._lvalue, $._type_identifier],
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -73,6 +76,12 @@ module.exports = grammar({
|
||||||
$.for_expression,
|
$.for_expression,
|
||||||
$.break_expression,
|
$.break_expression,
|
||||||
$.let_expression,
|
$.let_expression,
|
||||||
|
|
||||||
|
$.new_expression,
|
||||||
|
$.method_call,
|
||||||
|
|
||||||
|
$.meta_cast,
|
||||||
|
$.meta_expression,
|
||||||
),
|
),
|
||||||
|
|
||||||
nil_literal: (_) => "nil",
|
nil_literal: (_) => "nil",
|
||||||
|
@ -88,7 +97,10 @@ module.exports = grammar({
|
||||||
// NOTE: includes reserved identifiers
|
// NOTE: includes reserved identifiers
|
||||||
identifier: (_) => /[_a-zA-Z0-9]+/,
|
identifier: (_) => /[_a-zA-Z0-9]+/,
|
||||||
|
|
||||||
_type_identifier: ($) => alias($.identifier, $.type_identifier),
|
_type_identifier: ($) => choice(
|
||||||
|
alias($.identifier, $.type_identifier),
|
||||||
|
$.meta_type_identifier,
|
||||||
|
),
|
||||||
|
|
||||||
_field_identifier: ($) => alias($.identifier, $.field_identifier),
|
_field_identifier: ($) => alias($.identifier, $.field_identifier),
|
||||||
|
|
||||||
|
@ -112,6 +124,7 @@ module.exports = grammar({
|
||||||
$.identifier,
|
$.identifier,
|
||||||
$.record_value,
|
$.record_value,
|
||||||
$.array_value,
|
$.array_value,
|
||||||
|
$.meta_lvalue,
|
||||||
),
|
),
|
||||||
|
|
||||||
record_value: ($) => seq(
|
record_value: ($) => seq(
|
||||||
|
@ -245,11 +258,17 @@ module.exports = grammar({
|
||||||
|
|
||||||
// Declarations {{{
|
// Declarations {{{
|
||||||
|
|
||||||
_declaration_chunks: ($) => repeat1($._declaration_chunk),
|
_declaration_chunks: ($) => repeat1(
|
||||||
|
choice(
|
||||||
|
$.meta_chunks,
|
||||||
|
$._declaration_chunk,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
_declaration_chunk: ($) => prec.left(
|
_declaration_chunk: ($) => prec.left(
|
||||||
choice(
|
choice(
|
||||||
repeat1($.type_declaration),
|
repeat1($.type_declaration),
|
||||||
|
repeat1($.class_declaration),
|
||||||
repeat1(choice($.function_declaration, $.primitive_declaration)),
|
repeat1(choice($.function_declaration, $.primitive_declaration)),
|
||||||
$.variable_declaration,
|
$.variable_declaration,
|
||||||
$.import_declaration,
|
$.import_declaration,
|
||||||
|
@ -267,6 +286,7 @@ module.exports = grammar({
|
||||||
$.type_alias,
|
$.type_alias,
|
||||||
$.record_type,
|
$.record_type,
|
||||||
$.array_type,
|
$.array_type,
|
||||||
|
$.class_type,
|
||||||
),
|
),
|
||||||
|
|
||||||
type_alias: ($) => $._type_identifier,
|
type_alias: ($) => $._type_identifier,
|
||||||
|
@ -335,6 +355,102 @@ module.exports = grammar({
|
||||||
),
|
),
|
||||||
|
|
||||||
// }}}
|
// }}}
|
||||||
|
|
||||||
|
// Object Oriented {{{
|
||||||
|
|
||||||
|
new_expression: ($) => seq(
|
||||||
|
"new",
|
||||||
|
field("class", $._type_identifier),
|
||||||
|
),
|
||||||
|
|
||||||
|
method_call: ($) => seq(
|
||||||
|
field("object", $._lvalue),
|
||||||
|
".",
|
||||||
|
field("method", $.identifier),
|
||||||
|
"(",
|
||||||
|
field("arguments", sepBy(",", $._expr)),
|
||||||
|
")",
|
||||||
|
),
|
||||||
|
|
||||||
|
class_declaration: ($) => seq(
|
||||||
|
"class",
|
||||||
|
field("name", $.identifier),
|
||||||
|
$._class_declaration_common,
|
||||||
|
),
|
||||||
|
|
||||||
|
class_type: ($) => seq(
|
||||||
|
"class",
|
||||||
|
$._class_declaration_common,
|
||||||
|
),
|
||||||
|
|
||||||
|
_class_declaration_common: ($) => seq(
|
||||||
|
optional($.extends_qualifier),
|
||||||
|
"{",
|
||||||
|
field("fields", repeat($._class_field)),
|
||||||
|
"}",
|
||||||
|
),
|
||||||
|
|
||||||
|
extends_qualifier: ($) => seq(
|
||||||
|
"extends",
|
||||||
|
field("super", $._type_identifier),
|
||||||
|
),
|
||||||
|
|
||||||
|
_class_field: ($) => choice(
|
||||||
|
$._field_declaration,
|
||||||
|
$.method_declaration,
|
||||||
|
),
|
||||||
|
|
||||||
|
_field_declaration: ($) => alias($.variable_declaration, $.field_declaration),
|
||||||
|
|
||||||
|
method_declaration: ($) => seq(
|
||||||
|
"method",
|
||||||
|
$._function_declaration_common,
|
||||||
|
"=",
|
||||||
|
field("body", $._expr),
|
||||||
|
),
|
||||||
|
|
||||||
|
// }}}
|
||||||
|
|
||||||
|
// Meta-variables {{{
|
||||||
|
|
||||||
|
meta_chunks: ($) => seq(
|
||||||
|
"_chunks",
|
||||||
|
"(",
|
||||||
|
field("index", $.integer_literal),
|
||||||
|
")",
|
||||||
|
),
|
||||||
|
|
||||||
|
meta_cast: ($) => seq(
|
||||||
|
"_cast",
|
||||||
|
"(",
|
||||||
|
field("expression", $._expr),
|
||||||
|
",",
|
||||||
|
field("type", $._type),
|
||||||
|
")",
|
||||||
|
),
|
||||||
|
|
||||||
|
meta_expression: ($) => seq(
|
||||||
|
"_exp",
|
||||||
|
"(",
|
||||||
|
field("index", $.integer_literal),
|
||||||
|
")",
|
||||||
|
),
|
||||||
|
|
||||||
|
meta_lvalue: ($) => seq(
|
||||||
|
"_lvalue",
|
||||||
|
"(",
|
||||||
|
field("index", $.integer_literal),
|
||||||
|
")",
|
||||||
|
),
|
||||||
|
|
||||||
|
meta_type_identifier: ($) => seq(
|
||||||
|
"_namety",
|
||||||
|
"(",
|
||||||
|
$.integer_literal,
|
||||||
|
")",
|
||||||
|
),
|
||||||
|
|
||||||
|
// }}}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "tree-sitter-tiger",
|
"name": "tree-sitter-tiger",
|
||||||
"version": "0.0.1",
|
"version": "0.1.0",
|
||||||
"description": "tiger grammar for tree-sitter",
|
"description": "tiger grammar for tree-sitter",
|
||||||
"main": "bindings/node",
|
"main": "bindings/node",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
(let_expression)
|
(let_expression)
|
||||||
(function_declaration)
|
(function_declaration)
|
||||||
(primitive_declaration)
|
(primitive_declaration)
|
||||||
|
|
||||||
|
(class_declaration)
|
||||||
|
(class_type)
|
||||||
|
(method_declaration)
|
||||||
] @fold
|
] @fold
|
||||||
|
|
||||||
[
|
[
|
||||||
|
|
|
@ -5,7 +5,11 @@
|
||||||
(#is-not? local))
|
(#is-not? local))
|
||||||
|
|
||||||
((type_identifier) @type.builtin
|
((type_identifier) @type.builtin
|
||||||
(#match? @type.builtin "^(int|string)$")
|
(#match? @type.builtin "^(int|string|Object)$")
|
||||||
|
(#is-not? local))
|
||||||
|
|
||||||
|
((identifier) @variable.builtin
|
||||||
|
(#match? @variable.builtin "^self$")
|
||||||
(#is-not? local))
|
(#is-not? local))
|
||||||
; }}}
|
; }}}
|
||||||
|
|
||||||
|
@ -22,6 +26,14 @@
|
||||||
"while"
|
"while"
|
||||||
] @keyword.repeat
|
] @keyword.repeat
|
||||||
|
|
||||||
|
[
|
||||||
|
"new"
|
||||||
|
] @keyword.constructor
|
||||||
|
|
||||||
|
[
|
||||||
|
"method"
|
||||||
|
] @keyword.method
|
||||||
|
|
||||||
[
|
[
|
||||||
"array"
|
"array"
|
||||||
(break_expression)
|
(break_expression)
|
||||||
|
@ -41,6 +53,17 @@
|
||||||
"type"
|
"type"
|
||||||
"var"
|
"var"
|
||||||
"while"
|
"while"
|
||||||
|
|
||||||
|
"class"
|
||||||
|
"extends"
|
||||||
|
"method"
|
||||||
|
"new"
|
||||||
|
|
||||||
|
"_cast"
|
||||||
|
"_chunks"
|
||||||
|
"_exp"
|
||||||
|
"_lvalue"
|
||||||
|
"_namety"
|
||||||
] @keyword
|
] @keyword
|
||||||
; }}}
|
; }}}
|
||||||
|
|
||||||
|
@ -64,7 +87,7 @@
|
||||||
] @punctuation.bracket
|
] @punctuation.bracket
|
||||||
; }}}
|
; }}}
|
||||||
|
|
||||||
; Functions {{{
|
; Functions and methods {{{
|
||||||
(function_call
|
(function_call
|
||||||
function: (identifier) @function)
|
function: (identifier) @function)
|
||||||
(function_declaration
|
(function_declaration
|
||||||
|
@ -72,6 +95,11 @@
|
||||||
(primitive_declaration
|
(primitive_declaration
|
||||||
name: (identifier) @function)
|
name: (identifier) @function)
|
||||||
|
|
||||||
|
(method_call
|
||||||
|
method: (identifier) @method)
|
||||||
|
(method_declaration
|
||||||
|
name: (identifier) @method)
|
||||||
|
|
||||||
(parameters
|
(parameters
|
||||||
name: (identifier) @variable.parameter)
|
name: (identifier) @variable.parameter)
|
||||||
; }}}
|
; }}}
|
||||||
|
|
|
@ -10,6 +10,13 @@
|
||||||
body: (_) @indent)
|
body: (_) @indent)
|
||||||
; }}}
|
; }}}
|
||||||
|
|
||||||
|
; Class {{{
|
||||||
|
(class_declaration
|
||||||
|
fields: (_)* @indent)
|
||||||
|
(class_type
|
||||||
|
fields: (_)* @indent)
|
||||||
|
; }}}
|
||||||
|
|
||||||
; Misc{{{
|
; Misc{{{
|
||||||
(comment) @ignore
|
(comment) @ignore
|
||||||
(string_literal) @ignore
|
(string_literal) @ignore
|
||||||
|
|
|
@ -8,4 +8,25 @@
|
||||||
function: (identifier) @name) @reference.call
|
function: (identifier) @name) @reference.call
|
||||||
; }}}
|
; }}}
|
||||||
|
|
||||||
|
; Class {{{
|
||||||
|
(class_declaration
|
||||||
|
name: (identifier) @name) @definition.class
|
||||||
|
(type_declaration
|
||||||
|
name: (identifier) @name
|
||||||
|
(class_type)) @definition.class
|
||||||
|
|
||||||
|
(new_expression
|
||||||
|
class: (type_identifier) @name) @reference.class
|
||||||
|
(extends_qualifier
|
||||||
|
super: (type_identifier) @name) @reference.class
|
||||||
|
; }}}
|
||||||
|
|
||||||
|
; Methods {{{
|
||||||
|
(method_declaration
|
||||||
|
name: (identifier) @name) @definition.method
|
||||||
|
|
||||||
|
(method_call
|
||||||
|
method: (identifier) @name) @reference.call
|
||||||
|
; }}}
|
||||||
|
|
||||||
; vim: sw=2 foldmethod=marker
|
; vim: sw=2 foldmethod=marker
|
||||||
|
|
|
@ -1,12 +1,19 @@
|
||||||
; Functions {{{
|
; Functions and methods {{{
|
||||||
(function_declaration
|
(function_declaration
|
||||||
parameters: ((_) @parameter.inner)* @parameter.outer
|
parameters: ((_) @parameter.inner)* @parameter.outer
|
||||||
body: (_) @function.inner) @function.outer
|
body: (_) @function.inner) @function.outer
|
||||||
(primitive_declaration
|
(primitive_declaration
|
||||||
parameters: ((_) @parameter.inner)* @parameter.outer) @function.outer
|
parameters: ((_) @parameter.inner)* @parameter.outer) @function.outer
|
||||||
|
|
||||||
|
(method_declaration
|
||||||
|
parameters: ((_) @parameter.inner)* @parameter.outer
|
||||||
|
body: (_) @function.inner) @function.outer
|
||||||
|
|
||||||
(function_call
|
(function_call
|
||||||
arguments: ((_) @call.inner)*) @call.outer
|
arguments: ((_) @call.inner)*) @call.outer
|
||||||
|
|
||||||
|
(method_call
|
||||||
|
arguments: ((_) @call.inner)*) @call.outer
|
||||||
; }}}
|
; }}}
|
||||||
|
|
||||||
; Control flow {{{
|
; Control flow {{{
|
||||||
|
@ -21,6 +28,13 @@
|
||||||
body: (_) @loop.inner) @loop.outer
|
body: (_) @loop.inner) @loop.outer
|
||||||
; }}}
|
; }}}
|
||||||
|
|
||||||
|
; Class {{{
|
||||||
|
(class_declaration
|
||||||
|
fields: (_)* @class.inner) @class.outer
|
||||||
|
(class_type
|
||||||
|
fields: (_)* @class.inner) @class.outer
|
||||||
|
; }}}
|
||||||
|
|
||||||
; Misc {{{
|
; Misc {{{
|
||||||
(comment) @comment.outer
|
(comment) @comment.outer
|
||||||
; }}}
|
; }}}
|
||||||
|
|
441
src/grammar.json
441
src/grammar.json
|
@ -89,6 +89,22 @@
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "let_expression"
|
"name": "let_expression"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "new_expression"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "method_call"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "meta_cast"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "meta_expression"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -134,13 +150,22 @@
|
||||||
"value": "[_a-zA-Z0-9]+"
|
"value": "[_a-zA-Z0-9]+"
|
||||||
},
|
},
|
||||||
"_type_identifier": {
|
"_type_identifier": {
|
||||||
"type": "ALIAS",
|
"type": "CHOICE",
|
||||||
"content": {
|
"members": [
|
||||||
"type": "SYMBOL",
|
{
|
||||||
"name": "identifier"
|
"type": "ALIAS",
|
||||||
},
|
"content": {
|
||||||
"named": true,
|
"type": "SYMBOL",
|
||||||
"value": "type_identifier"
|
"name": "identifier"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "type_identifier"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "meta_type_identifier"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_field_identifier": {
|
"_field_identifier": {
|
||||||
"type": "ALIAS",
|
"type": "ALIAS",
|
||||||
|
@ -245,6 +270,10 @@
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "array_value"
|
"name": "array_value"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "meta_lvalue"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -391,7 +420,7 @@
|
||||||
"members": [
|
"members": [
|
||||||
{
|
{
|
||||||
"type": "PREC_LEFT",
|
"type": "PREC_LEFT",
|
||||||
"value": 5,
|
"value": 6,
|
||||||
"content": {
|
"content": {
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
"members": [
|
"members": [
|
||||||
|
@ -438,7 +467,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "PREC_LEFT",
|
"type": "PREC_LEFT",
|
||||||
"value": 4,
|
"value": 5,
|
||||||
"content": {
|
"content": {
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
"members": [
|
"members": [
|
||||||
|
@ -485,7 +514,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "PREC_LEFT",
|
"type": "PREC_LEFT",
|
||||||
"value": 3,
|
"value": 4,
|
||||||
"content": {
|
"content": {
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
"members": [
|
"members": [
|
||||||
|
@ -548,7 +577,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "PREC_LEFT",
|
"type": "PREC_LEFT",
|
||||||
"value": 2,
|
"value": 3,
|
||||||
"content": {
|
"content": {
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
"members": [
|
"members": [
|
||||||
|
@ -586,7 +615,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "PREC_LEFT",
|
"type": "PREC_LEFT",
|
||||||
"value": 1,
|
"value": 2,
|
||||||
"content": {
|
"content": {
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
"members": [
|
"members": [
|
||||||
|
@ -809,7 +838,7 @@
|
||||||
},
|
},
|
||||||
"assignment_expression": {
|
"assignment_expression": {
|
||||||
"type": "PREC_RIGHT",
|
"type": "PREC_RIGHT",
|
||||||
"value": 6,
|
"value": 1,
|
||||||
"content": {
|
"content": {
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
"members": [
|
"members": [
|
||||||
|
@ -1063,8 +1092,17 @@
|
||||||
"_declaration_chunks": {
|
"_declaration_chunks": {
|
||||||
"type": "REPEAT1",
|
"type": "REPEAT1",
|
||||||
"content": {
|
"content": {
|
||||||
"type": "SYMBOL",
|
"type": "CHOICE",
|
||||||
"name": "_declaration_chunk"
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "meta_chunks"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_declaration_chunk"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"_declaration_chunk": {
|
"_declaration_chunk": {
|
||||||
|
@ -1080,6 +1118,13 @@
|
||||||
"name": "type_declaration"
|
"name": "type_declaration"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "REPEAT1",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "class_declaration"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "REPEAT1",
|
"type": "REPEAT1",
|
||||||
"content": {
|
"content": {
|
||||||
|
@ -1150,6 +1195,10 @@
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "array_type"
|
"name": "array_type"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "class_type"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -1513,6 +1562,360 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"new_expression": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "new"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "class",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_type_identifier"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"method_call": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "object",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_lvalue"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "method",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "identifier"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "("
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "arguments",
|
||||||
|
"content": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_expr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "REPEAT",
|
||||||
|
"content": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ","
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_expr"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "BLANK"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ")"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_declaration": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "class"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "name",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "identifier"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_class_declaration_common"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "class"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_class_declaration_common"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_class_declaration_common": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "extends_qualifier"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "BLANK"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "{"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "fields",
|
||||||
|
"content": {
|
||||||
|
"type": "REPEAT",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_class_field"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"extends_qualifier": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "extends"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "super",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_type_identifier"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_class_field": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_field_declaration"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "method_declaration"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_field_declaration": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "variable_declaration"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "field_declaration"
|
||||||
|
},
|
||||||
|
"method_declaration": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "method"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_function_declaration_common"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "body",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_expr"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"meta_chunks": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "_chunks"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "("
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "index",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "integer_literal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ")"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"meta_cast": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "_cast"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "("
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "expression",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_expr"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ","
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "type",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_type"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ")"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"meta_expression": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "_exp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "("
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "index",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "integer_literal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ")"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"meta_lvalue": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "_lvalue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "("
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "index",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "integer_literal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ")"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"meta_type_identifier": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "_namety"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "("
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "integer_literal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ")"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"extras": [
|
"extras": [
|
||||||
|
@ -1530,6 +1933,10 @@
|
||||||
"_lvalue",
|
"_lvalue",
|
||||||
"array_expression"
|
"array_expression"
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
"_lvalue",
|
||||||
|
"record_expression"
|
||||||
|
],
|
||||||
[
|
[
|
||||||
"_lvalue",
|
"_lvalue",
|
||||||
"_type_identifier"
|
"_type_identifier"
|
||||||
|
@ -1545,7 +1952,9 @@
|
||||||
"inline": [
|
"inline": [
|
||||||
"_type_identifier",
|
"_type_identifier",
|
||||||
"_field_identifier",
|
"_field_identifier",
|
||||||
"_function_declaration_common"
|
"_function_declaration_common",
|
||||||
|
"_class_declaration_common",
|
||||||
|
"_class_field"
|
||||||
],
|
],
|
||||||
"supertypes": []
|
"supertypes": []
|
||||||
}
|
}
|
||||||
|
|
1259
src/node-types.json
1259
src/node-types.json
File diff suppressed because it is too large
Load diff
12346
src/parser.c
12346
src/parser.c
File diff suppressed because it is too large
Load diff
65
test/corpus/meta-variables.txt
Normal file
65
test/corpus/meta-variables.txt
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
================================================================================
|
||||||
|
Meta chunks
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
_chunks(42)
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(meta_chunks
|
||||||
|
index: (integer_literal)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Cast
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
_cast(42, string)
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(meta_cast
|
||||||
|
expression: (integer_literal)
|
||||||
|
type: (type_alias
|
||||||
|
(type_identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Meta expression
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
_exp(42)
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(meta_expression
|
||||||
|
index: (integer_literal)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Meta lvalue
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
_lvalue(42)
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(meta_lvalue
|
||||||
|
index: (integer_literal)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Meta type identifier
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
var a : _namety(42) := "I'm So Meta Even This Acronym"
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(variable_declaration
|
||||||
|
name: (identifier)
|
||||||
|
type: (meta_type_identifier
|
||||||
|
(integer_literal))
|
||||||
|
(operator)
|
||||||
|
value: (string_literal)))
|
132
test/corpus/object-oriented.txt
Normal file
132
test/corpus/object-oriented.txt
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
================================================================================
|
||||||
|
New expression
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
new Object
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(new_expression
|
||||||
|
class: (type_identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Method call
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
object.method(12, "27")
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(method_call
|
||||||
|
object: (identifier)
|
||||||
|
method: (identifier)
|
||||||
|
arguments: (integer_literal)
|
||||||
|
arguments: (string_literal)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Class declaration
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
class A { }
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(class_declaration
|
||||||
|
name: (identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Class type
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
type A = class { }
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(type_declaration
|
||||||
|
(identifier)
|
||||||
|
(class_type)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Class declaration extends
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
class A extends Object { }
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(class_declaration
|
||||||
|
name: (identifier)
|
||||||
|
(extends_qualifier
|
||||||
|
super: (type_identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Class type
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
type A = class extends Object { }
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(type_declaration
|
||||||
|
name: (identifier)
|
||||||
|
value: (class_type
|
||||||
|
(extends_qualifier
|
||||||
|
super: (type_identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Class field
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
class A {
|
||||||
|
var a : int := 12
|
||||||
|
var b := 27
|
||||||
|
}
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(class_declaration
|
||||||
|
name: (identifier)
|
||||||
|
fields: (field_declaration
|
||||||
|
name: (identifier)
|
||||||
|
type: (type_identifier)
|
||||||
|
(operator)
|
||||||
|
value: (integer_literal))
|
||||||
|
fields: (field_declaration
|
||||||
|
name: (identifier)
|
||||||
|
(operator)
|
||||||
|
value: (integer_literal))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Class method
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
class A {
|
||||||
|
method m(a: int, b: string) : int = a
|
||||||
|
method n() = ()
|
||||||
|
}
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(class_declaration
|
||||||
|
name: (identifier)
|
||||||
|
fields: (method_declaration
|
||||||
|
name: (identifier)
|
||||||
|
parameters: (parameters
|
||||||
|
name: (identifier)
|
||||||
|
type: (type_identifier)
|
||||||
|
name: (identifier)
|
||||||
|
type: (type_identifier))
|
||||||
|
return_type: (type_identifier)
|
||||||
|
body: (identifier))
|
||||||
|
fields: (method_declaration
|
||||||
|
name: (identifier)
|
||||||
|
parameters: (parameters)
|
||||||
|
body: (sequence_expression))))
|
16
test/corpus/regressions.txt
Normal file
16
test/corpus/regressions.txt
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
================================================================================
|
||||||
|
Assignment precedence
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
a := b | c
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(assignment_expression
|
||||||
|
(identifier)
|
||||||
|
(operator)
|
||||||
|
(binary_expression
|
||||||
|
(identifier)
|
||||||
|
(operator)
|
||||||
|
(identifier))))
|
|
@ -13,10 +13,19 @@ let
|
||||||
|
|
||||||
var c : int := "This is an \"int\""
|
var c : int := "This is an \"int\""
|
||||||
/* ^ type.builtin (not sure why it isn't 'type')*/
|
/* ^ type.builtin (not sure why it isn't 'type')*/
|
||||||
|
|
||||||
|
var d : Object := nil
|
||||||
|
/* ^ type.builtin */
|
||||||
|
|
||||||
|
type Object = int
|
||||||
|
|
||||||
|
var self := "self"
|
||||||
in
|
in
|
||||||
let
|
let
|
||||||
var c : int := "This is an int"
|
var c : int := "This is an int"
|
||||||
/* ^ type.builtin (not sure why it isn't 'type')*/
|
/* ^ type.builtin (not sure why it isn't 'type')*/
|
||||||
|
var d : Object := "This is an object"
|
||||||
|
/* ^ type.builtin (not sure why it isn't 'type')*/
|
||||||
in
|
in
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -26,6 +35,9 @@ in
|
||||||
print("shadowing is fun");
|
print("shadowing is fun");
|
||||||
/* <- function.builtin */
|
/* <- function.builtin */
|
||||||
|
|
||||||
|
self;
|
||||||
|
/* <- variable */
|
||||||
|
|
||||||
b := print
|
b := print
|
||||||
/* ^ variable */
|
/* ^ variable */
|
||||||
end
|
end
|
||||||
|
|
13
test/highlight/meta-variables.tig
Normal file
13
test/highlight/meta-variables.tig
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
let
|
||||||
|
_chunks(42)
|
||||||
|
/* <- keyword */
|
||||||
|
|
||||||
|
in
|
||||||
|
_lvalue(12) : _namety(42) := _cast("I'm So Meta Even This Acronym", string);
|
||||||
|
/* <- keyword */
|
||||||
|
/* ^ keyword */
|
||||||
|
/* ^ keyword */
|
||||||
|
|
||||||
|
_exp(42)
|
||||||
|
/* <- keyword */
|
||||||
|
end
|
28
test/highlight/object-oriented.tig
Normal file
28
test/highlight/object-oriented.tig
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
let
|
||||||
|
class A extends Object {}
|
||||||
|
/* <- keyword */
|
||||||
|
/* ^ keyword */
|
||||||
|
/* ^ type.builtin */
|
||||||
|
|
||||||
|
type B = class extends A {
|
||||||
|
/* ^ keyword */
|
||||||
|
/* ^ keyword */
|
||||||
|
/* ^ type */
|
||||||
|
|
||||||
|
var a := 12
|
||||||
|
|
||||||
|
method meth() : int = self.a
|
||||||
|
/* <- keyword.method */
|
||||||
|
/* ^ method */
|
||||||
|
/* ^ variable.builtin */
|
||||||
|
}
|
||||||
|
|
||||||
|
var object := new B
|
||||||
|
/* ^ keyword.constructor */
|
||||||
|
in
|
||||||
|
object.a := 27;
|
||||||
|
/* ^ property */
|
||||||
|
|
||||||
|
object.meth()
|
||||||
|
/* ^ method */
|
||||||
|
end
|
9
test/tags/classes.tig
Normal file
9
test/tags/classes.tig
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
class A {}
|
||||||
|
/* ^ definition.class */
|
||||||
|
|
||||||
|
type B = class extends A {}
|
||||||
|
/* ^ definition.class */
|
||||||
|
/* ^ reference.class */
|
||||||
|
|
||||||
|
var object := new B
|
||||||
|
/* ^ reference.class */
|
11
test/tags/methods.tig
Normal file
11
test/tags/methods.tig
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
let
|
||||||
|
class A {
|
||||||
|
method meth() = ()
|
||||||
|
/* ^ definition.method */
|
||||||
|
}
|
||||||
|
|
||||||
|
object := new A
|
||||||
|
in
|
||||||
|
object.meth()
|
||||||
|
/* ^ reference.call */
|
||||||
|
end
|
Loading…
Reference in a new issue