author | wenzelm |
Mon, 04 Apr 2022 23:33:14 +0200 | |
changeset 75405 | b13ab7d11b90 |
parent 75394 | 42267c650205 |
child 76883 | 186e07be32c3 |
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 |
|
75393 | 10 |
object Check_Keywords { |
59891
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
11 |
def conflicts( |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
12 |
keywords: Keyword.Keywords, |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
13 |
check: Set[String], |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
14 |
input: CharSequence, |
75393 | 15 |
start: Token.Pos |
16 |
): List[(Token, Position.T)] = { |
|
75405 | 17 |
object Parsers extends Parse.Parsers { |
59891
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
18 |
private val conflict = |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
19 |
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
|
20 |
private val other = token("token", _ => true) |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
21 |
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
|
22 |
|
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
23 |
val result = |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
24 |
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
|
25 |
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
|
26 |
case bad => error(bad.toString) |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
27 |
} |
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
28 |
} |
75405 | 29 |
Parsers.result |
59891
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 |
|
59895 | 32 |
def check_keywords( |
61276 | 33 |
progress: Progress, |
59895 | 34 |
keywords: Keyword.Keywords, |
35 |
check: Set[String], |
|
75393 | 36 |
paths: List[Path] |
37 |
): Unit = { |
|
59895 | 38 |
val parallel_args = paths.map(path => (File.read(path), Token.Pos.file(path.expand.implode))) |
39 |
||
40 |
val bad = |
|
75394 | 41 |
Par_List.map({ (arg: (String, Token.Pos)) => |
67880 | 42 |
progress.expose_interrupt() |
59895 | 43 |
conflicts(keywords, check, arg._1, arg._2) |
44 |
}, parallel_args).flatten |
|
45 |
||
46 |
for ((tok, pos) <- bad) { |
|
65827 | 47 |
progress.echo_warning( |
48 |
"keyword conflict: " + tok.kind.toString + " " + quote(tok.content) + Position.here(pos)) |
|
59895 | 49 |
} |
50 |
} |
|
59891
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
51 |
} |