Skip to content

Commit a397eff

Browse files
committed
Add Decl#update and fix sorter
1 parent 3d4c7c1 commit a397eff

File tree

4 files changed

+52
-7
lines changed

4 files changed

+52
-7
lines changed

lib/rbs/ast/declarations.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,18 @@ def initialize(name:, type_params:, super_class:, members:, annotations:, locati
104104
@comment = comment
105105
end
106106

107+
def update(name: self.name, type_params: self.type_params, super_class: self.super_class, members: self.members, annotations: self.annotations, location: self.location, comment: self.comment)
108+
self.class.new(
109+
name: name,
110+
type_params: type_params,
111+
super_class: super_class,
112+
members: members,
113+
annotations: annotations,
114+
location: location,
115+
comment: comment
116+
)
117+
end
118+
107119
def ==(other)
108120
other.is_a?(Class) &&
109121
other.name == name &&
@@ -192,6 +204,19 @@ def initialize(name:, type_params:, members:, self_types:, annotations:, locatio
192204
@comment = comment
193205
end
194206

207+
def update(name: self.name, type_params: self.type_params, members: self.members, self_types: self.self_types, annotations: self.annotations, location: self.location, comment: self.comment)
208+
self.class.new(
209+
name: name,
210+
type_params: type_params,
211+
members: members,
212+
self_types: self_types,
213+
annotations: annotations,
214+
location: location,
215+
comment: comment
216+
)
217+
end
218+
219+
195220
def ==(other)
196221
other.is_a?(Module) &&
197222
other.name == name &&
@@ -239,6 +264,17 @@ def initialize(name:, type_params:, members:, annotations:, location:, comment:)
239264
@comment = comment
240265
end
241266

267+
def update(name: self.name, type_params: self.type_params, members: self.members, annotations: self.annotations, location: self.location, comment: self.comment)
268+
self.class.new(
269+
name: name,
270+
type_params: type_params,
271+
members: members,
272+
annotations: annotations,
273+
location: location,
274+
comment: comment
275+
)
276+
end
277+
242278
def ==(other)
243279
other.is_a?(Interface) &&
244280
other.name == name &&

lib/rbs/sorter.rb

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,18 @@ def run
1717
buffer = Buffer.new(name: path, content: path.read)
1818
_, _, sigs = Parser.parse_signature(buffer)
1919

20-
sigs.each do |m|
21-
sort_decl! m
20+
sigs = sigs.map do |m|
21+
sort_decl m
2222
end
2323

2424
stdout.puts "Writing #{path}..."
2525
path.open('w') do |out|
2626
writer = RBS::Writer.new(out: out)
27-
writer.write sigs
27+
writer.write _ = sigs
2828
end
2929
end
3030

31-
def sort_decl!(decl)
31+
def sort_decl(decl)
3232
case decl
3333
when Declarations::Class, Declarations::Module, Declarations::Interface
3434
partitioned = {
@@ -52,7 +52,8 @@ def sort_decl!(decl)
5252
private_instance_methods: [],
5353
} #: partitioned
5454

55-
decl.members.each { |m| sort_decl! m }
55+
members = decl.members.map { |m| sort_decl m }
56+
decl = decl.update(members: _ = members)
5657

5758
visibility_annotated_members = [] #: Array[member]
5859

@@ -188,7 +189,9 @@ def sort_decl!(decl)
188189

189190
members.push(*partitioned[:other_decls])
190191

191-
decl.members.replace(_ = members)
192+
decl.update(members: _ = members)
193+
else
194+
decl
192195
end
193196
end
194197
end

sig/declarations.rbs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ module RBS
7777

7878
def initialize: (name: TypeName, type_params: Array[TypeParam], members: Array[member], super_class: Super?, annotations: Array[Annotation], location: loc?, comment: Comment?) -> void
7979

80+
def update: (?name: TypeName, ?type_params: Array[TypeParam], ?members: Array[member], ?super_class: Super?, ?annotations: Array[Annotation], ?location: loc?, ?comment: Comment?) -> Declarations::Class
81+
8082
include _HashEqual
8183
include _ToJson
8284
end
@@ -131,6 +133,8 @@ module RBS
131133

132134
def initialize: (name: TypeName, type_params: Array[TypeParam], members: Array[member], location: loc?, annotations: Array[Annotation], self_types: Array[Self], comment: Comment?) -> void
133135

136+
def update: (?name: TypeName, ?type_params: Array[TypeParam], ?members: Array[member], ?location: loc?, ?annotations: Array[Annotation], ?self_types: Array[Self], ?comment: Comment?) -> Declarations::Module
137+
134138
include _HashEqual
135139
include _ToJson
136140
end
@@ -160,6 +164,8 @@ module RBS
160164

161165
def initialize: (name: TypeName, type_params: Array[TypeParam], members: Array[member], annotations: Array[Annotation], location: loc?, comment: Comment?) -> void
162166

167+
def update: (?name: TypeName, ?type_params: Array[TypeParam], ?members: Array[member], ?annotations: Array[Annotation], ?location: loc?, ?comment: Comment?) -> Declarations::Interface
168+
163169
include MixinHelper
164170

165171
include _HashEqual

sig/sorter.rbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,6 @@ module RBS
3636
other_decls: Array[member]
3737
}
3838

39-
def sort_decl!: (member decl) -> void
39+
def sort_decl: (member decl) -> member
4040
end
4141
end

0 commit comments

Comments
 (0)