Skip to content

Commit 9b52c9e

Browse files
committed
feat(linters): add shellcheck_ebuild
a custom setup for shellcheck that allows shellcheck to parse ebuilds without false SC2034 and SC2154 flags
1 parent b3292aa commit 9b52c9e

4 files changed

Lines changed: 1040 additions & 0 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.html
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#!/usr/bin/sh
2+
3+
scriptDir="$(realpath --canonicalize-missing "$0/..")"
4+
5+
regenHTML="$1"
6+
7+
ebuildHTML="$scriptDir/ebuild-vars.html"
8+
9+
endingTagSearch=false
10+
{
11+
[ ! -f "$ebuildHTML" ] || [ "$regenHTML" = true ]
12+
} &&
13+
curl --silent 'https://devmanual.gentoo.org/ebuild-writing/variables/index.html' > "$ebuildHTML"
14+
15+
echo "return [[" > "$scriptDir/ebuild-vars.lua"
16+
17+
while IFS='' read -r line; do
18+
$endingTagSearch && {
19+
case "$line" in
20+
'</table>')
21+
endingTagSearch=false
22+
;;
23+
*)
24+
echo "$line"
25+
;;
26+
esac
27+
} || {
28+
case "$line" in
29+
'<h2 id="predefined-read-only-variables">'*)
30+
echo "$line"
31+
endingTagSearch=true
32+
;;
33+
'<h2 id="ebuild-defined-variables">'*)
34+
echo "$line"
35+
endingTagSearch=true
36+
;;
37+
'<h2 id="user-environment">'*)
38+
echo "$line"
39+
endingTagSearch=true
40+
;;
41+
esac
42+
}
43+
done < "$ebuildHTML" |
44+
sed -nE 's|^\s*<td><code class="docutils literal"><span class="pre">([A-Z][^<]*)</span></code></td>$|export \1|p' >> "$scriptDir/ebuild-vars.lua"
45+
46+
eclassParse(){
47+
eclassHTML="$scriptDir/$1-eclass.html"
48+
49+
endingTagSearch=false
50+
{
51+
[ ! -f "$eclassHTML" ] || [ "$regenHTML" = true ]
52+
} &&
53+
curl --silent "https://devmanual.gentoo.org/eclass-reference/$1.eclass/index.html" > "$eclassHTML"
54+
55+
while IFS='' read -r line; do
56+
$endingTagSearch && {
57+
case "$line" in
58+
'<H2'*)
59+
endingTagSearch=false
60+
;;
61+
*)
62+
echo "$line"
63+
;;
64+
esac
65+
} || {
66+
case "$line" in
67+
'<H2 ID="'*'">ECLASS VARIABLES</H2>')
68+
echo "$line"
69+
endingTagSearch=true
70+
;;
71+
esac
72+
}
73+
done < "$eclassHTML" |
74+
sed -nE 's|^<DT><B>([^<]*)<.+|export \1|p' >> "$scriptDir/ebuild-vars.lua"
75+
}
76+
77+
eclassGroupsHTML="$scriptDir/eclass-list.html"
78+
79+
endingTagSearch=false
80+
{
81+
[ ! -f "$eclassGroupsHTML" ] || [ "$regenHTML" = true ]
82+
} &&
83+
curl --silent "https://devmanual.gentoo.org/eclass-reference/index.html" > "$eclassGroupsHTML"
84+
85+
sed -nE 's|<li class="list-group-item"><a href="([^"]+)\.eclass.*|\1|p' "$eclassGroupsHTML" | while IFS='' read -r eclass; do
86+
eclassParse "$eclass"
87+
done
88+
89+
echo "]]" >> "$scriptDir/ebuild-vars.lua"
90+
91+
sed -i -E '/^export .*[&;].*/d' "$scriptDir/ebuild-vars.lua"

0 commit comments

Comments
 (0)