@@ -11,6 +11,7 @@ var ToNoder = &native.ObjectToNoder{
1111 EndLineKey : "end_lineno" ,
1212 ColumnKey : "col_offset" ,
1313 EndColumnKey : "end_col_offset" ,
14+ PositionFill : native .OffsetFromLineCol ,
1415
1516 TokenKeys : map [string ]bool {
1617 "name" : true ,
@@ -78,25 +79,26 @@ var ToNoder = &native.ObjectToNoder{
7879 // FIXME: test[ast_type=Compare].comparators is a list?? (should be "right")
7980}
8081
81- func transformationParser (opts driver.ParserOptions ) (tr driver.Parser , err error ) {
82- parser , err := native .ExecParser (ToNoder , opts .NativeBin )
82+ // ParserBuilder creates a parser that transform source code files into *uast.Node.
83+ func ParserBuilder (opts driver.ParserOptions ) (parser driver.Parser , err error ) {
84+ psr , err := native .ExecParser (ToNoder , opts .NativeBin )
8385 if err != nil {
84- return tr , err
85- }
86-
87- tr = & driver.TransformationParser {
88- Parser : parser ,
89- Transformation : driver .FillOffsetFromLineCol ,
86+ return psr , err
9087 }
9188
92- return tr , nil
93- }
94-
95- // ParserBuilder creates a parser that transform source code files into *uast.Node.
96- func ParserBuilder (opts driver.ParserOptions ) (driver.Parser , error ) {
97- parser , err := transformationParser (opts )
98- if err != nil {
99- return nil , err
89+ switch ToNoder .PositionFill {
90+ case native .None :
91+ parser = psr
92+ case native .OffsetFromLineCol :
93+ parser = & driver.TransformationParser {
94+ Parser : psr ,
95+ Transformation : driver .FillOffsetFromLineCol ,
96+ }
97+ case native .LineColFromOffset :
98+ parser = & driver.TransformationParser {
99+ Parser : psr ,
100+ Transformation : driver .FillLineColFromOffset ,
101+ }
100102 }
101103
102104 return parser , nil
0 commit comments