Support for renaming declarations

This commit is contained in:
Emmanuel Briot 2022-10-24 09:54:37 +02:00
parent bf801ce20e
commit ad302a74a2
3 changed files with 253 additions and 5 deletions

79
corpus/access.txt Normal file
View File

@ -0,0 +1,79 @@
========
access types
========
package P is
type A is access Integer;
type B is access not null Integer;
type C is access constant Integer;
type D is access all Integer;
type E is access function return Boolean;
type F is access protected function return Boolean;
end;
-------
(compilation
(compilation_unit
(package_specification
(name
(identifier))
(type_declaration
(full_type_declaration
(identifier)
(type_definition
(access_type_definition
(access_to_object_definition
(subtype_indication
(name
(identifier))))))))
(type_declaration
(full_type_declaration
(identifier)
(type_definition
(access_type_definition
(access_to_object_definition
(subtype_indication
(null_exclusion)
(name
(identifier))))))))
(type_declaration
(full_type_declaration
(identifier)
(type_definition
(access_type_definition
(access_to_object_definition
(general_access_modifier)
(subtype_indication
(name
(identifier))))))))
(type_declaration
(full_type_declaration
(identifier)
(type_definition
(access_type_definition
(access_to_object_definition
(general_access_modifier)
(subtype_indication
(name
(identifier))))))))
(type_declaration
(full_type_declaration
(identifier)
(type_definition
(access_type_definition
(access_to_subprogram_definition
(parameter_and_result_profile
(result_profile
(name
(identifier)))))))))
(type_declaration
(full_type_declaration
(identifier)
(type_definition
(access_type_definition
(access_to_subprogram_definition
(parameter_and_result_profile
(result_profile
(name
(identifier))))))))))))

85
corpus/renames.txt Normal file
View File

@ -0,0 +1,85 @@
================================================================================
Renames object
================================================================================
procedure P is
Threshold renames Global_Threshold;
A : Integer renames B;
CE : exception renames Constraint_Error;
package TIO renames Ada.Text_IO;
procedure Proc (A : Integer) renames Process;
generic procedure Proc renames Generic_Process;
begin
null;
end P;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(proper_body
(subprogram_body
(subprogram_specification
(procedure_specification
(name
(identifier))))
(non_empty_declarative_part
(declarative_item_pragma
(renaming_declaration
(object_renaming_declaration
(identifier)
(name
(identifier)))))
(declarative_item_pragma
(renaming_declaration
(object_renaming_declaration
(identifier)
(name
(identifier))
(name
(identifier)))))
(declarative_item_pragma
(renaming_declaration
(exception_renaming_declaration
(identifier)
(name
(identifier)))))
(declarative_item_pragma
(renaming_declaration
(package_renaming_declaration
(name
(identifier))
(name
(identifier)
(identifier)))))
(declarative_item_pragma
(renaming_declaration
(subprogram_renaming_declaration
(subprogram_specification
(procedure_specification
(name
(identifier))
(non_empty_parameter_profile
(formal_part
(parameter_specification_list
(parameter_specification
(defining_identifier_list
(identifier))
(name
(identifier))))))))
(name
(identifier)))))
(declarative_item_pragma
(renaming_declaration
(generic_renaming_declaration
(name
(identifier))
(name
(identifier))))))
(handled_sequence_of_statements
(sequence_of_statements
(statement
(simple_statement
(null_statement)))))
(name
(identifier))))))

View File

@ -66,6 +66,13 @@ module.exports = grammar({
[$.attribute_definition_clause, $.attribute_reference], [$.attribute_definition_clause, $.attribute_reference],
// identifier . ':' ...
[$.defining_identifier_list, $.object_renaming_declaration,
$.exception_renaming_declaration],
// 'generic' . 'package' ...
[$.generic_formal_part, $.generic_renaming_declaration],
// 'type' identifier 'is' 'new' subtype_indication . 'with' // 'type' identifier 'is' 'new' subtype_indication . 'with'
// which could be either a record_extension_part or // which could be either a record_extension_part or
// an aspect_specification. // an aspect_specification.
@ -1369,11 +1376,88 @@ module.exports = grammar({
';', ';',
)), )),
renaming_declaration: $ => choice( renaming_declaration: $ => choice(
// $.object_renaming_declaration, $.object_renaming_declaration,
// $.exception_renaming_declaration, $.exception_renaming_declaration,
// $.package_renaming_declaration, $.package_renaming_declaration,
// $.subprogram_renaming_declaration, $.subprogram_renaming_declaration,
// $.generic_renaming_declaration, $.generic_renaming_declaration,
),
object_renaming_declaration: $ => choice(
seq(
$.identifier,
optional(seq(
':',
optional($.null_exclusion),
$.name,
)),
reservedWord('renames'),
$.name,
optional($.aspect_specification),
';',
),
seq(
$.identifier,
':',
$.access_definition,
reservedWord('renames'),
$.name,
optional($.aspect_specification),
';',
),
),
exception_renaming_declaration: $ => seq(
$.identifier,
':',
reservedWord('exception'),
reservedWord('renames'),
$.name,
optional($.aspect_specification),
';',
),
package_renaming_declaration: $ => seq(
reservedWord('package'),
$.name,
reservedWord('renames'),
$.name,
optional($.aspect_specification),
';',
),
subprogram_renaming_declaration: $ => seq(
optional($.overriding_indicator),
$.subprogram_specification,
reservedWord('renames'),
$.name,
optional($.aspect_specification),
';',
),
generic_renaming_declaration: $ => choice(
seq(
reservedWord('generic'),
reservedWord('package'),
$.name,
reservedWord('renames'),
$.name,
optional($.aspect_specification),
';',
),
seq(
reservedWord('generic'),
reservedWord('procedure'),
$.name,
reservedWord('renames'),
$.name,
optional($.aspect_specification),
';',
),
seq(
reservedWord('generic'),
reservedWord('function'),
$.name,
reservedWord('renames'),
$.name,
optional($.aspect_specification),
';',
),
), ),
result_profile: $ => seq( result_profile: $ => seq(
reservedWord('return'), reservedWord('return'),