equal
deleted
inserted
replaced
|
1 /* Title: Pure/Tools/check_source.scala |
|
2 Author: Makarius |
|
3 |
|
4 Some sanity checks for Isabelle sources. |
|
5 */ |
|
6 |
|
7 package isabelle |
|
8 |
|
9 |
|
10 object Check_Source |
|
11 { |
|
12 def check_file(path: Path) |
|
13 { |
|
14 val file_name = path.implode |
|
15 val file_pos = path.position |
|
16 def line_pos(i: Int) = Position.Line_File(i + 1, file_name) |
|
17 |
|
18 val content = File.read(path) |
|
19 |
|
20 for { (line, i) <- split_lines(content).iterator.zipWithIndex } |
|
21 { |
|
22 try { |
|
23 Symbol.decode_strict(line) |
|
24 |
|
25 for { c <- Word.codepoint_iterator(line); if c > 128 && !Character.isAlphabetic(c) } |
|
26 { |
|
27 Output.warning("Suspicious Unicode character " + quote(new String(Array(c), 0, 1)) + |
|
28 Position.here(line_pos(i))) |
|
29 } |
|
30 } |
|
31 catch { case ERROR(msg) => Output.error_message(msg + Position.here(line_pos(i))) } |
|
32 |
|
33 if (line.contains('\t')) |
|
34 Output.warning("TAB character " + Position.here(line_pos(i))) |
|
35 } |
|
36 |
|
37 if (content.contains('\r')) |
|
38 Output.warning("CR character " + Position.here(file_pos)) |
|
39 } |
|
40 } |
|
41 |