feat(lsp): add canonical n6-lsp server (stdio JSON-RPC) #10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: lint | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| jobs: | |
| byte-canonical: | |
| name: Byte-canonical invariants | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Check UTF-8 validity | |
| run: | | |
| set -e | |
| fail=0 | |
| for f in examples/*.n6; do | |
| if ! iconv -f UTF-8 -t UTF-8 "$f" >/dev/null 2>&1; then | |
| echo "::error file=$f::not valid UTF-8" | |
| fail=1 | |
| fi | |
| done | |
| exit $fail | |
| - name: Check no BOM | |
| run: | | |
| set -e | |
| fail=0 | |
| for f in examples/*.n6; do | |
| if head -c 3 "$f" | od -An -tx1 | grep -q 'ef bb bf'; then | |
| echo "::error file=$f::BOM present" | |
| fail=1 | |
| fi | |
| done | |
| exit $fail | |
| - name: Check LF line endings only | |
| run: | | |
| set -e | |
| fail=0 | |
| for f in examples/*.n6; do | |
| if grep -lU $'\r' "$f" >/dev/null 2>&1; then | |
| echo "::error file=$f::CRLF or CR detected" | |
| fail=1 | |
| fi | |
| done | |
| exit $fail | |
| - name: Check no trailing whitespace | |
| run: | | |
| set -e | |
| fail=0 | |
| for f in examples/*.n6; do | |
| if grep -nE ' +$' "$f"; then | |
| echo "::error file=$f::trailing whitespace" | |
| fail=1 | |
| fi | |
| done | |
| exit $fail | |
| - name: Check entry-header well-formed | |
| run: | | |
| set -e | |
| fail=0 | |
| for f in examples/*.n6; do | |
| # Every @<type> line must have :: <domain> and [grade] | |
| bad=$(grep -nE '^@[PCLFRSXE?]' "$f" | grep -vE ' :: \S+ \[[0-9]+(\.[0-9]+)?[*!?]*\]\s*$' || true) | |
| if [ -n "$bad" ]; then | |
| echo "::error file=$f::malformed entry-header" | |
| echo "$bad" | |
| fail=1 | |
| fi | |
| done | |
| exit $fail |