author | wenzelm |
Fri, 16 Mar 2018 16:38:46 +0100 | |
changeset 67880 | e59220a075de |
parent 65827 | 3bba3856b56c |
child 73340 | 0ffcad1f6130 |
permissions | -rw-r--r-- |
59891
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
1 |
/* Title: Pure/Tools/check_keywords.scala |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
2 |
Author: Makarius |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
3 |
|
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
4 |
Check theory sources for conflicts with proposed keywords. |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
5 |
*/ |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
6 |
|
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
7 |
package isabelle |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
8 |
|
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
9 |
|
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
10 |
object Check_Keywords |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
11 |
{ |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
12 |
def conflicts( |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
13 |
keywords: Keyword.Keywords, |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
14 |
check: Set[String], |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
15 |
input: CharSequence, |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
16 |
start: Token.Pos): List[(Token, Position.T)] = |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
17 |
{ |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
18 |
object Parser extends Parse.Parser |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
19 |
{ |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
20 |
private val conflict = |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
21 |
position(token("token", tok => !(tok.is_command || tok.is_keyword) && check(tok.source))) |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
22 |
private val other = token("token", _ => true) |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
23 |
private val item = conflict ^^ (x => Some(x)) | other ^^ (_ => None) |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
24 |
|
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
25 |
val result = |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
26 |
parse_all(rep(item), Token.reader(Token.explode(keywords, input), start)) match { |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
27 |
case Success(res, _) => for (Some(x) <- res) yield x |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
28 |
case bad => error(bad.toString) |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
29 |
} |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
30 |
} |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
31 |
Parser.result |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
32 |
} |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
33 |
|
59895 | 34 |
def check_keywords( |
61276 | 35 |
progress: Progress, |
59895 | 36 |
keywords: Keyword.Keywords, |
37 |
check: Set[String], |
|
38 |
paths: List[Path]) |
|
39 |
{ |
|
40 |
val parallel_args = paths.map(path => (File.read(path), Token.Pos.file(path.expand.implode))) |
|
41 |
||
42 |
val bad = |
|
43 |
Par_List.map((arg: (String, Token.Pos)) => { |
|
67880 | 44 |
progress.expose_interrupt() |
59895 | 45 |
conflicts(keywords, check, arg._1, arg._2) |
46 |
}, parallel_args).flatten |
|
47 |
||
48 |
for ((tok, pos) <- bad) { |
|
65827 | 49 |
progress.echo_warning( |
50 |
"keyword conflict: " + tok.kind.toString + " " + quote(tok.content) + Position.here(pos)) |
|
59895 | 51 |
} |
52 |
} |
|
59891
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
53 |
} |