author | haftmann |
Thu, 19 Jun 2025 17:15:40 +0200 | |
changeset 82734 | 89347c0cc6a3 |
parent 80886 | 5d562dd387ae |
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 { |
80886
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
11 |
/* session theories for keyword conflicts */ |
59891
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
12 |
|
59895 | 13 |
def check_keywords( |
80886
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
14 |
options: Options, |
59895 | 15 |
check: Set[String], |
80886
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
16 |
dirs: List[Path] = Nil, |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
17 |
progress: Progress, |
75393 | 18 |
): Unit = { |
80886
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
19 |
val deps = Sessions.deps(Sessions.load_structure(options, dirs = dirs), progress = progress) |
59895 | 20 |
|
21 |
val bad = |
|
80886
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
22 |
Par_List.maps[(Keyword.Keywords, String, Token.Pos), (Token, Position.T)]( |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
23 |
{ case (keywords, input, start) => |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
24 |
progress.expose_interrupt() |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
25 |
|
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
26 |
object Parsers extends Parse.Parsers { |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
27 |
private val conflict = |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
28 |
position(token("token", tok => !(tok.is_command || tok.is_keyword) && check(tok.source))) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
29 |
private val other = token("token", _ => true) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
30 |
private val item = conflict ^^ (x => Some(x)) | other ^^ (_ => None) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
31 |
|
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
32 |
val result: List[(Token, Position.T)] = |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
33 |
parse_all(rep(item), Token.reader(Token.explode(keywords, input), start)) match { |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
34 |
case Success(res, _) => for (case Some(x) <- res) yield x |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
35 |
case bad => error(bad.toString) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
36 |
} |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
37 |
} |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
38 |
Parsers.result |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
39 |
}, |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
40 |
List.from( |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
41 |
for { |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
42 |
session <- deps.sessions_structure.imports_topological_order.iterator |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
43 |
base = deps(session) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
44 |
node_name <- base.proper_session_theories |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
45 |
} yield { |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
46 |
val path = node_name.path |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
47 |
val input = File.read(path) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
48 |
val start = Token.Pos.file(File.standard_path(path)) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
49 |
(base.overall_syntax.keywords, input, start) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
50 |
}) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
51 |
) |
59895 | 52 |
|
53 |
for ((tok, pos) <- bad) { |
|
65827 | 54 |
progress.echo_warning( |
55 |
"keyword conflict: " + tok.kind.toString + " " + quote(tok.content) + Position.here(pos)) |
|
59895 | 56 |
} |
57 |
} |
|
80886
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
58 |
|
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
59 |
|
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
60 |
/* Isabelle tool wrapper */ |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
61 |
|
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
62 |
val isabelle_tool = |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
63 |
Isabelle_Tool("check_keywords", "check theory sources for conflicts with proposed keywords", |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
64 |
Scala_Project.here, |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
65 |
{ args => |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
66 |
var dirs: List[Path] = Nil |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
67 |
var options = Options.init() |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
68 |
var verbose = false |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
69 |
|
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
70 |
val getopts = Getopts(""" |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
71 |
Usage: isabelle check_keywords [OPTIONS] KEYWORDS |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
72 |
|
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
73 |
Options are: |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
74 |
-d DIR include session directory |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
75 |
-o OPTION override Isabelle system OPTION (via NAME=VAL or NAME) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
76 |
-v verbose |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
77 |
|
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
78 |
Check theory sources from all session directories for conflicts with |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
79 |
newly proposed keywords (outer syntax). This reveals occurrences of |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
80 |
identifiers that would have to be quoted. |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
81 |
""", |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
82 |
"d:" -> (arg => dirs = dirs ::: List(Path.explode(arg))), |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
83 |
"o:" -> (arg => options = options + arg), |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
84 |
"v" -> (_ => verbose = true)) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
85 |
|
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
86 |
val keywords = getopts(args) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
87 |
if (keywords.isEmpty) getopts.usage() |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
88 |
|
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
89 |
val progress = new Console_Progress(verbose = verbose) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
90 |
|
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
91 |
progress.interrupt_handler { |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
92 |
check_keywords(options, keywords.toSet, dirs = dirs, progress = progress) |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
93 |
} |
5d562dd387ae
discontinued "isabelle build -k": superseded by admin-tool "isabelle check_keywords";
wenzelm
parents:
80884
diff
changeset
|
94 |
}) |
59891
9ce697050455
added isabelle build option -k, for fast off-line checking of theory sources;
wenzelm
parents:
diff
changeset
|
95 |
} |