@@ -10,6 +10,14 @@ struct Config {
1010struct NodeField {
1111 name : String ,
1212 c_type : String ,
13+ c_name : Option < String > ,
14+ }
15+
16+ impl NodeField {
17+ fn c_name ( & self ) -> & str {
18+ let name = self . c_name . as_ref ( ) . unwrap_or ( & self . name ) ;
19+ if name == "type" { "type_" } else { name }
20+ }
1321}
1422
1523#[ derive( Debug , Deserialize ) ]
@@ -108,7 +116,7 @@ fn generate(config: &Config) -> Result<(), Box<dyn Error>> {
108116 writeln ! (
109117 file,
110118 " RBSString::new(unsafe {{ &(*self.pointer).{} }})" ,
111- field. name
119+ field. c_name ( )
112120 ) ?;
113121 writeln ! ( file, " }}" ) ?;
114122 }
@@ -122,7 +130,7 @@ fn generate(config: &Config) -> Result<(), Box<dyn Error>> {
122130 writeln ! (
123131 file,
124132 " CommentNode {{ parser: self.parser, pointer: unsafe {{ (*self.pointer).{} }} }}" ,
125- field. name
133+ field. c_name ( )
126134 ) ?;
127135 writeln ! ( file, " }}" ) ?;
128136 }
@@ -135,7 +143,7 @@ fn generate(config: &Config) -> Result<(), Box<dyn Error>> {
135143 writeln ! (
136144 file,
137145 " ClassSuperNode {{ parser: self.parser, pointer: unsafe {{ (*self.pointer).{} }} }}" ,
138- field. name
146+ field. c_name ( )
139147 ) ?;
140148 writeln ! ( file, " }}" ) ?;
141149 }
@@ -144,7 +152,7 @@ fn generate(config: &Config) -> Result<(), Box<dyn Error>> {
144152 writeln ! (
145153 file,
146154 " RBSSymbol::new(unsafe {{ (*self.pointer).{} }}, self.parser)" ,
147- field. name
155+ field. c_name ( )
148156 ) ?;
149157 writeln ! ( file, " }}" ) ?;
150158 }
@@ -153,7 +161,7 @@ fn generate(config: &Config) -> Result<(), Box<dyn Error>> {
153161 writeln ! (
154162 file,
155163 " RBSLocation::new(unsafe {{ (*self.pointer).{} }}, self.parser)" ,
156- field. name
164+ field. c_name ( )
157165 ) ?;
158166 writeln ! ( file, " }}" ) ?;
159167 }
@@ -166,7 +174,16 @@ fn generate(config: &Config) -> Result<(), Box<dyn Error>> {
166174 writeln ! (
167175 file,
168176 " RBSLocationList::new(unsafe {{ (*self.pointer).{} }}, self.parser)" ,
169- field. name
177+ field. c_name( )
178+ ) ?;
179+ writeln ! ( file, " }}" ) ?;
180+ }
181+ "rbs_namespace" => {
182+ writeln ! ( file, " pub fn {}(&self) -> NamespaceNode {{" , field. name) ?;
183+ writeln ! (
184+ file,
185+ " NamespaceNode {{ parser: self.parser, pointer: unsafe {{ (*self.pointer).{} }} }}" ,
186+ field. c_name( )
170187 ) ?;
171188 writeln ! ( file, " }}" ) ?;
172189 }
@@ -181,7 +198,7 @@ fn generate(config: &Config) -> Result<(), Box<dyn Error>> {
181198 writeln ! (
182199 file,
183200 " unsafe {{ Node::new(self.parser, (*self.pointer).{}) }}" ,
184- name
201+ field . c_name ( )
185202 ) ?;
186203 writeln ! ( file, " }}" ) ?;
187204 }
@@ -190,7 +207,7 @@ fn generate(config: &Config) -> Result<(), Box<dyn Error>> {
190207 writeln ! (
191208 file,
192209 " NodeList::new(self.parser, unsafe {{ (*self.pointer).{} }})" ,
193- field. name
210+ field. c_name ( )
194211 ) ?;
195212 writeln ! ( file, " }}" ) ?;
196213 }
@@ -199,7 +216,7 @@ fn generate(config: &Config) -> Result<(), Box<dyn Error>> {
199216 writeln ! (
200217 file,
201218 " RBSKeyword::new(self.parser, unsafe {{ (*self.pointer).{} }})" ,
202- field. name
219+ field. c_name ( )
203220 ) ?;
204221 writeln ! ( file, " }}" ) ?;
205222 }
0 commit comments