scripts/update-highlight-queries.sh
51 lines · 2986 bytes · executable
1#!/bin/sh
2# Fetches the pinned grammars' highlight queries into Sources/OrgHighlight/Queries.swift.
3# Usage: scripts/update-highlight-queries.sh
4set -eu
5cd "$(dirname "$0")/.."
6python3 - <<'PY'
7import urllib.request
8
9# language: [(repository, ref, query path), ...]; several files are concatenated in order.
10QUERIES = {
11 "bash": [("tree-sitter/tree-sitter-bash", "v0.25.1", "queries/highlights.scm")],
12 "c": [("tree-sitter/tree-sitter-c", "v0.24.2", "queries/highlights.scm")],
13 "clojure": [("sogaiu/tree-sitter-clojure", "v0.0.13", "queries/highlights.scm")],
14 "cpp": [("tree-sitter/tree-sitter-c", "v0.24.2", "queries/highlights.scm"),
15 ("tree-sitter/tree-sitter-cpp", "v0.23.4", "queries/highlights.scm")],
16 "elisp": [("Wilfred/tree-sitter-elisp", "0cbf0906d9ee707c8c109422fba9cdd17ae13dcf", "queries/highlights.scm")],
17 "go": [("tree-sitter/tree-sitter-go", "v0.25.0", "queries/highlights.scm")],
18 "haskell": [("tree-sitter/tree-sitter-haskell", "v0.24.1", "queries/highlights.scm")],
19 "java": [("tree-sitter/tree-sitter-java", "v0.23.5", "queries/highlights.scm")],
20 "javascript": [("tree-sitter/tree-sitter-javascript", "v0.25.0", "queries/highlights.scm")],
21 "json": [("tree-sitter/tree-sitter-json", "v0.24.8", "queries/highlights.scm")],
22 "lua": [("tree-sitter-grammars/tree-sitter-lua", "v0.5.0", "queries/highlights.scm")],
23 "python": [("tree-sitter/tree-sitter-python", "v0.25.0", "queries/highlights.scm")],
24 "r": [("r-lib/tree-sitter-r", "v1.3.0", "queries/highlights.scm")],
25 "ruby": [("tree-sitter/tree-sitter-ruby", "v0.23.1", "queries/highlights.scm")],
26 "rust": [("tree-sitter/tree-sitter-rust", "v0.24.2", "queries/highlights.scm")],
27 "scheme": [("6cdh/tree-sitter-scheme", "v0.24.7-1", "queries/highlights.scm")],
28 # Orgstar's own query, in scripts/queries.
29 "toml": [("local", None, "scripts/queries/toml.scm")],
30 "yaml": [("tree-sitter-grammars/tree-sitter-yaml", "v0.7.2", "queries/highlights.scm")],
31}
32
33out = ["// Generated by scripts/update-highlight-queries.sh from the grammars' own highlight",
34 "// queries, at the versions Package.swift pins. Do not edit.", "",
35 "enum HighlightQueries {", " static let source: [String: String] = ["]
36for language, files in sorted(QUERIES.items()):
37 text = ""
38 for repo, ref, path in files:
39 if repo == "local":
40 text += open(path, encoding="utf-8").read() + "\n"
41 continue
42 url = f"https://raw.githubusercontent.com/{repo}/{ref}/{path}"
43 text += urllib.request.urlopen(url).read().decode("utf-8") + "\n"
44 assert '"""####' not in text
45 out.append(f' "{language}": ####"""')
46 # Multi-line string lines are indented as far as the closing delimiter.
47 out.extend((" " + line) if line else "" for line in text.rstrip("\n").split("\n"))
48 out.append(' """####,')
49out += [" ]", "}", ""]
50open("Sources/OrgHighlight/Queries.swift", "w").write("\n".join(out))
51PY