medvednikov

/

vqPublic
0 commits21 issue12 pull requests0 contributorsDiscussionsProjectsCI

scanner: refactor new_plain_scanner to accept file_path, file_base an… #16

Openwhisky-jbwants to mergepr/27199intomaster· last May 19
2 files changed+19-23
vlib/v/scanner/scanner.v+7-17

@@ -131,19 +131,8 @@ pub fn new_scanner_file(file_path string, file_idx i16, comments_mode CommentsMo

131131 return error('${file_path} is not a .v file')

132132 }

133133 raw_text := util.read_file(file_path) or { return err }

134- mut s := &Scanner{

135- pref: pref_

136- text: raw_text

137- all_tokens: []token.Token{cap: raw_text.len / 3}

138- is_print_line_on_error: true

139- is_print_colored_error: true

140- is_print_rel_paths_on_error: true

141- is_fmt: pref_.is_fmt

142- comments_mode: comments_mode

143- file_path: file_path

144- file_base: os.base(file_path)

145- file_idx: file_idx

146- }

134+ mut s := new_plain_scanner(raw_text, comments_mode, pref_, file_path, os.base(file_path))

135+ s.file_idx = file_idx

147136 s.scan_all_tokens_in_buffer()

148137 return s

149138}

@@ -152,12 +141,13 @@ const internally_generated_v_code = 'internally_generated_v_code'

152141

153142// new scanner from string.

154143pub fn new_scanner(text string, comments_mode CommentsMode, pref_ &pref.Preferences) &Scanner {

155- mut s := new_plain_scanner(text, comments_mode, pref_)

144+ mut s := new_plain_scanner(text, comments_mode, pref_, internally_generated_v_code,

145+ internally_generated_v_code)

156146 s.scan_all_tokens_in_buffer()

157147 return s

158148}

159149

160-fn new_plain_scanner(text string, comments_mode CommentsMode, pref_ &pref.Preferences) &Scanner {

150+fn new_plain_scanner(text string, comments_mode CommentsMode, pref_ &pref.Preferences, file_path string, file_base string) &Scanner {

161151 return &Scanner{

162152 pref: pref_

163153 text: text

@@ -167,8 +157,8 @@ fn new_plain_scanner(text string, comments_mode CommentsMode, pref_ &pref.Prefer

167157 is_print_rel_paths_on_error: true

168158 is_fmt: pref_.is_fmt

169159 comments_mode: comments_mode

170- file_path: internally_generated_v_code

171- file_base: internally_generated_v_code

160+ file_path: file_path

161+ file_base: file_base

172162 }

173163}

174164

vlib/v/scanner/scanner_test.v+12-6

@@ -5,7 +5,8 @@ import v.token

55import v.pref

66

77fn scan_kinds(text string) []token.Kind {

8- mut scanner := new_plain_scanner(text, .skip_comments, &pref.Preferences{})

8+ mut scanner := new_plain_scanner(text, .skip_comments, &pref.Preferences{},

9+ internally_generated_v_code, internally_generated_v_code)

910 mut token_kinds := []token.Kind{}

1011 for {

1112 tok := scanner.text_scan()

@@ -18,7 +19,8 @@ fn scan_kinds(text string) []token.Kind {

1819}

1920

2021fn scan_tokens(text string) []token.Token {

21- mut scanner := new_plain_scanner(text, .parse_comments, &pref.Preferences{})

22+ mut scanner := new_plain_scanner(text, .parse_comments, &pref.Preferences{},

23+ internally_generated_v_code, internally_generated_v_code)

2224 mut tokens := []token.Token{}

2325 for {

2426 tok := scanner.text_scan()

@@ -315,7 +317,8 @@ fn test_escape_string() {

315317

316318fn assert_str_interpolation_works(mlen int, text string) {

317319 mut max_len := 0

318- mut scanner := new_plain_scanner(text, .skip_comments, &pref.Preferences{})

320+ mut scanner := new_plain_scanner(text, .skip_comments, &pref.Preferences{},

321+ internally_generated_v_code, internally_generated_v_code)

319322 for {

320323 tok := scanner.text_scan()

321324 if scanner.str_helper_tokens.len > max_len {

@@ -369,7 +372,8 @@ fn test_truncated_escape_at_eof_does_not_read_past_end() {

369372 // Buggy scanner reads [3]='a', [4]='b' — valid hex — and reports NO \x error.

370373 buf_x := r'"\xab"'.bytes()

371374 text_x := unsafe { tos(buf_x.data, 3) }

372- mut s := new_plain_scanner(text_x, .skip_comments, prefs)

375+ mut s := new_plain_scanner(text_x, .skip_comments, prefs, internally_generated_v_code,

376+ internally_generated_v_code)

373377 _ = s.text_scan()

374378 assert s.errors.any(it.message.contains('used without two following hex digits')), r'scanner must report \x error for "\xab" truncated after "\x"'

375379

@@ -377,7 +381,8 @@ fn test_truncated_escape_at_eof_does_not_read_past_end() {

377381 // Buggy scanner reads [3]...[6] — all valid hex — and reports NO \u error.

378382 buf_u := r'"\u1234"'.bytes()

379383 text_u := unsafe { tos(buf_u.data, 3) }

380- mut s2 := new_plain_scanner(text_u, .skip_comments, prefs)

384+ mut s2 := new_plain_scanner(text_u, .skip_comments, prefs, internally_generated_v_code,

385+ internally_generated_v_code)

381386 _ = s2.text_scan()

382387 assert s2.errors.any(it.message.contains('incomplete 16 bit unicode')), r'scanner must report \u error for "\u1234" truncated after "\u"'

383388

@@ -385,7 +390,8 @@ fn test_truncated_escape_at_eof_does_not_read_past_end() {

385390 // Buggy scanner reads [3]...[10] — all valid hex — and reports NO \U error.

386391 buf_uu := r'"\U12345678"'.bytes()

387392 text_uu := unsafe { tos(buf_uu.data, 3) }

388- mut s3 := new_plain_scanner(text_uu, .skip_comments, prefs)

393+ mut s3 := new_plain_scanner(text_uu, .skip_comments, prefs, internally_generated_v_code,

394+ internally_generated_v_code)

389395 _ = s3.text_scan()

390396 assert s3.errors.any(it.message.contains('incomplete 32 bit unicode')), r'scanner must report \U error for "\U12345678" truncated after "\U"'

391397}