Skip to content

Commit e46aa52

Browse files
authored
Merge pull request #1243 from ruby/syntax
Update syntax.md
2 parents f6b9fff + b7923d3 commit e46aa52

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

docs/syntax.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

@@ -554,6 +560,32 @@ end
554560

555561
The `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

559591
Interface declaration can have parameters but allows only a few of the members.
@@ -696,6 +728,29 @@ type int_printer = PrettyPrint[Integer] # Type error
696728

697729
The 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

701756
You can write single line comments. Comments must be on their own line. Comments can lead with whitespace.

0 commit comments

Comments
 (0)