@@ -501,6 +501,8 @@ private alias foo bar # Syntax error
501501``` markdown
502502_ decl_ ::= _ class-decl_ # Class declaration
503503 | _ module-decl_ # Module declaration
504+ | _ class-alias-decl_ # Class alias declaration
505+ | _ module-alias-decl_ # Module alias declaration
504506 | _ interface-decl_ # Interface declaration
505507 | _ type-alias-decl_ # Type alias declaration
506508 | _ const-decl_ # Constant declaration
@@ -512,6 +514,10 @@ _class-decl_ ::= `class` _class-name_ _module-type-parameters_ _members_ `end`
512514_ module-decl_ ::= ` module ` _ module-name_ _ module-type-parameters_ _ members_ ` end `
513515 | ` module ` _ module-name_ _ module-type-parameters_ ` : ` _ module-self-types_ _ members_ ` end `
514516
517+ _ class-alias-decl_ ::= ` class ` _ class-name_ ` = ` _ class-name_
518+
519+ _ module-alias-decl_ ::= ` module ` _ module-name_ ` = ` _ module-name_
520+
515521_ module-self-types_ ::= _ class-name_ _ type-arguments_ ` , ` _ module-self-types_ (Class instance)
516522 | _ interface-name_ _ type-arguments_ ` , ` _ module-self-types_ (Interface)
517523
554560
555561The ` Enumerable ` module above requires ` each ` method for enumerating objects.
556562
563+ ### Class/module alias declaration
564+
565+ An alias of a class or module can be defined in RBS.
566+
567+ ``` rbs
568+ module Foo = Kernel
569+
570+ class Bar = Array
571+ ```
572+
573+ The syntax defines a class and the definition is equivalent to the right-hand-side.
574+
575+ ```
576+ class Baz < Bar[String] # Class alias can be inherited
577+ include Foo # Module alias can be included
578+ end
579+ ```
580+
581+ This is a definition corresponding to the following Ruby code.
582+
583+ ``` ruby
584+ Foo = Kernel
585+
586+ Bar = Array
587+ ```
588+
557589### Interface declaration
558590
559591Interface declaration can have parameters but allows only a few of the members.
@@ -696,6 +728,29 @@ type int_printer = PrettyPrint[Integer] # Type error
696728
697729The upper bound must be one of a class instance type, interface type, or class singleton type.
698730
731+ ### Directives
732+
733+ Directives are placed at the top of a file and provides per-file-basis features.
734+
735+ ```
736+ _use-directive_ ::= `use` _use-clauses_
737+
738+ _use-clauses_ ::= _use-clause_ `,` ... `,` _use-clause_
739+
740+ _use-clause_ ::= _type-name_ # Single use clause
741+ | _type-name_ `as` _simple-type-name_ # Single use clause with alias
742+ | _namespace_ # Wildcard use clause
743+ ```
744+
745+ The * use directive* defines relative type names that is an alias of other type names.
746+ We can use the simple type names if it is declared with * use* .
747+
748+ ```
749+ use RBS::Namespace # => Defines `Namespace`
750+ use RBS::TypeName as TN # => Defines `TN`
751+ use RBS::AST::* # => Defines modules under `::RBS::AST::` namespace
752+ ```
753+
699754### Comments
700755
701756You can write single line comments. Comments must be on their own line. Comments can lead with whitespace.
0 commit comments