tree-sitter-c-sharp/corpus/classes.txt
2024-03-25 23:16:07 +01:00

664 lines
20 KiB
Plaintext

================================================================================
Global empty class
================================================================================
public class F {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
body: (declaration_list)))
================================================================================
Class base is dynamic
================================================================================
public class F : dynamic { }
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
bases: (base_list
(identifier))
body: (declaration_list)))
================================================================================
Class base is object with interfaces
================================================================================
public class F : object, IAlpha, IOmega { }
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
bases: (base_list
(predefined_type)
(identifier)
(identifier))
body: (declaration_list)))
================================================================================
Partial class
================================================================================
public partial class F {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
(modifier)
name: (identifier)
body: (declaration_list)))
================================================================================
Class with a single type parameter
================================================================================
class F<T> {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
type_parameters: (type_parameter_list
(type_parameter
name: (identifier)))
body: (declaration_list)))
================================================================================
Class with multiple type parameters
================================================================================
internal class F<T1, T2> {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
type_parameters: (type_parameter_list
(type_parameter
name: (identifier))
(type_parameter
name: (identifier)))
body: (declaration_list)))
================================================================================
Class with co-variant and contra-variant type parameters
================================================================================
internal class F<in T1, out T2> {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
type_parameters: (type_parameter_list
(type_parameter
name: (identifier))
(type_parameter
name: (identifier)))
body: (declaration_list)))
================================================================================
Class with a type parameter struct constraint
================================================================================
public class F<T> where T:struct {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
type_parameters: (type_parameter_list
(type_parameter
name: (identifier)))
(type_parameter_constraints_clause
target: (identifier)
constraints: (type_parameter_constraint))
body: (declaration_list)))
================================================================================
Class with a type parameter unmanaged constraint
================================================================================
public class F<T> where T:unmanaged {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
type_parameters: (type_parameter_list
(type_parameter
name: (identifier)))
(type_parameter_constraints_clause
target: (identifier)
constraints: (type_parameter_constraint))
body: (declaration_list)))
================================================================================
Class with a type parameter class constraint
================================================================================
public class F<T> where T:class {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
type_parameters: (type_parameter_list
(type_parameter
name: (identifier)))
(type_parameter_constraints_clause
target: (identifier)
constraints: (type_parameter_constraint))
body: (declaration_list)))
================================================================================
Class with a type parameter and nullable constraints
================================================================================
public class F<T> where T:class?, notnull, Mine? {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
type_parameters: (type_parameter_list
(type_parameter
name: (identifier)))
(type_parameter_constraints_clause
target: (identifier)
constraints: (type_parameter_constraint)
constraints: (type_parameter_constraint)
constraints: (type_parameter_constraint
(type_constraint
type: (nullable_type
type: (identifier)))))
body: (declaration_list)))
================================================================================
Class with type parameter new constraint
================================================================================
public class F<T> where T: new() {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
type_parameters: (type_parameter_list
(type_parameter
name: (identifier)))
(type_parameter_constraints_clause
target: (identifier)
constraints: (type_parameter_constraint
(constructor_constraint)))
body: (declaration_list)))
================================================================================
Class with type parameter identifier constraint
================================================================================
public class F<T> where T: I {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
type_parameters: (type_parameter_list
(type_parameter
name: (identifier)))
(type_parameter_constraints_clause
target: (identifier)
constraints: (type_parameter_constraint
(type_constraint
type: (identifier))))
body: (declaration_list)))
================================================================================
Class with type parameter identifier and new constraints
================================================================================
public class F<T> where T: I, new() {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
type_parameters: (type_parameter_list
(type_parameter
name: (identifier)))
(type_parameter_constraints_clause
target: (identifier)
constraints: (type_parameter_constraint
(type_constraint
type: (identifier)))
constraints: (type_parameter_constraint
(constructor_constraint)))
body: (declaration_list)))
================================================================================
Class with multiple type parameter constraints
================================================================================
private class F<T1,T2> where T1 : I1, I2, new() where T2 : I2 { }
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
type_parameters: (type_parameter_list
(type_parameter
name: (identifier))
(type_parameter
name: (identifier)))
(type_parameter_constraints_clause
target: (identifier)
constraints: (type_parameter_constraint
(type_constraint
type: (identifier)))
constraints: (type_parameter_constraint
(type_constraint
type: (identifier)))
constraints: (type_parameter_constraint
(constructor_constraint)))
(type_parameter_constraints_clause
target: (identifier)
constraints: (type_parameter_constraint
(type_constraint
type: (identifier))))
body: (declaration_list)))
================================================================================
Class with public constructor
================================================================================
class Foo {
public Foo() {}
}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
body: (declaration_list
(constructor_declaration
(modifier)
name: (identifier)
parameters: (parameter_list)
body: (block)))))
================================================================================
Class with expression bodied constructor
================================================================================
class Foo {
public Foo(string name) => Name = name;
}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
body: (declaration_list
(constructor_declaration
(modifier)
name: (identifier)
parameters: (parameter_list
(parameter
type: (predefined_type)
name: (identifier)))
body: (arrow_expression_clause
(assignment_expression
left: (identifier)
(assignment_operator)
right: (identifier)))))))
================================================================================
Class with static constructor
================================================================================
class Foo {
static Foo() {}
static extern Foo() {}
extern static Foo() {}
}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
body: (declaration_list
(constructor_declaration
(modifier)
name: (identifier)
parameters: (parameter_list)
body: (block))
(constructor_declaration
(modifier)
(modifier)
name: (identifier)
parameters: (parameter_list)
body: (block))
(constructor_declaration
(modifier)
(modifier)
name: (identifier)
parameters: (parameter_list)
body: (block)))))
================================================================================
Class with extern destructor
================================================================================
class Foo {
extern ~Foo() {}
}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
body: (declaration_list
(destructor_declaration
name: (identifier)
parameters: (parameter_list)
body: (block)))))
================================================================================
Class with expression bodied destructor
================================================================================
class Foo {
~Foo() => DoSomething();
}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
body: (declaration_list
(destructor_declaration
name: (identifier)
parameters: (parameter_list)
body: (arrow_expression_clause
(invocation_expression
function: (identifier)
arguments: (argument_list)))))))
================================================================================
Class with constants
================================================================================
class Foo {
private const int a = 1;
const string b = $"hello";
}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
body: (declaration_list
(field_declaration
(modifier)
(modifier)
(variable_declaration
type: (predefined_type)
(variable_declarator
name: (identifier)
(equals_value_clause
(integer_literal)))))
(field_declaration
(modifier)
(variable_declaration
type: (predefined_type)
(variable_declarator
name: (identifier)
(equals_value_clause
(interpolated_string_expression
(interpolated_string_text)))))))))
================================================================================
Class with indexer
================================================================================
class Foo {
public bool this[int index] {
get { return a; }
set { a = value; }
}
}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
body: (declaration_list
(indexer_declaration
(modifier)
type: (predefined_type)
parameters: (bracketed_parameter_list
(parameter
type: (predefined_type)
name: (identifier)))
accessors: (accessor_list
(accessor_declaration
body: (block
(return_statement
(identifier))))
(accessor_declaration
body: (block
(expression_statement
(assignment_expression
left: (identifier)
(assignment_operator)
right: (identifier))))))))))
================================================================================
Class with expression bodied indexer
================================================================================
class Foo {
public bool this[int index] => a[index];
}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
body: (declaration_list
(indexer_declaration
(modifier)
type: (predefined_type)
parameters: (bracketed_parameter_list
(parameter
type: (predefined_type)
name: (identifier)))
value: (arrow_expression_clause
(element_access_expression
expression: (identifier)
subscript: (bracketed_argument_list
(argument
(identifier)))))))))
================================================================================
Class with expression bodied indexer accessors
================================================================================
class Foo {
public string this[int index]
{
get => a[index];
set => a[index] = value;
}
}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
body: (declaration_list
(indexer_declaration
(modifier)
type: (predefined_type)
parameters: (bracketed_parameter_list
(parameter
type: (predefined_type)
name: (identifier)))
accessors: (accessor_list
(accessor_declaration
body: (arrow_expression_clause
(element_access_expression
expression: (identifier)
subscript: (bracketed_argument_list
(argument
(identifier))))))
(accessor_declaration
body: (arrow_expression_clause
(assignment_expression
left: (element_access_expression
expression: (identifier)
subscript: (bracketed_argument_list
(argument
(identifier))))
(assignment_operator)
right: (identifier)))))))))
================================================================================
Class with varargs indexer
================================================================================
class A {
public int this[params string[] arguments] {
get { return 1; }
}
}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
body: (declaration_list
(indexer_declaration
(modifier)
type: (predefined_type)
parameters: (bracketed_parameter_list
type: (array_type
type: (predefined_type)
rank: (array_rank_specifier))
name: (identifier))
accessors: (accessor_list
(accessor_declaration
body: (block
(return_statement
(integer_literal)))))))))
================================================================================
Method with qualified return type
================================================================================
class A {
B.C d() {
return null;
}
}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
body: (declaration_list
(method_declaration
type: (qualified_name
qualifier: (identifier)
name: (identifier))
name: (identifier)
parameters: (parameter_list)
body: (block
(return_statement
(null_literal)))))))
================================================================================
Class and methods with Unicode identifiers
================================================================================
class Ωµ {
B.C d() {
return null;
}
}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
name: (identifier)
body: (declaration_list
(method_declaration
type: (qualified_name
qualifier: (identifier)
name: (identifier))
name: (identifier)
parameters: (parameter_list)
body: (block
(return_statement
(null_literal)))))))
================================================================================
File scoped class
================================================================================
file class A {}
--------------------------------------------------------------------------------
(compilation_unit
(class_declaration
(modifier)
name: (identifier)
body: (declaration_list)))