Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
a6f6c04
chore: establish vNext quality foundation (#170)
Light2Dark Jul 24, 2026
c96bbeb
docs: define vNext language-service contracts (#171)
Light2Dark Jul 24, 2026
846c90b
feat(vnext): add atomic document sessions (#172)
Light2Dark Jul 24, 2026
359cc18
feat(vnext): add source coordinate primitives (#173)
Light2Dark Jul 24, 2026
aa846cf
feat(vnext): add dialect-aware statement index (#174)
Light2Dark Jul 24, 2026
99dbd84
feat(vnext): add incremental statement indexing (#175)
Light2Dark Jul 24, 2026
9e9e17e
feat(vnext): define normalized syntax contract (#176)
Light2Dark Jul 24, 2026
79dc271
feat(vnext): add bounded node-sql-parser adapter (#177)
Light2Dark Jul 24, 2026
a775bf4
test(vnext): prove isolated parser worker placement (#178)
Light2Dark Jul 24, 2026
6e0e234
refactor(vnext): extract realm-neutral parser backend (#179)
Light2Dark Jul 24, 2026
a5c4e86
feat(vnext): add private parser worker protocol (#180)
Light2Dark Jul 24, 2026
873c926
feat(vnext): add bounded browser parser executor (#181)
Light2Dark Jul 24, 2026
88f9c6f
docs(vnext): accept parser-independent relation completion (#182)
Light2Dark Jul 24, 2026
1ee9a05
feat(vnext): sketch relation completion contracts (#183)
Light2Dark Jul 24, 2026
1ca5751
feat(vnext): make embedded regions atomic session inputs (#184)
Light2Dark Jul 24, 2026
ef47c7f
refactor(vnext): share bounded SQL lexical primitives
Light2Dark Jul 24, 2026
8347817
feat(vnext): recognize bounded relation query sites (#186)
Light2Dark Jul 25, 2026
7397e60
refactor(vnext): share bounded SQL lexer (#187)
Light2Dark Jul 25, 2026
d6ed03a
feat(vnext): index bounded CTE visibility (#188)
Light2Dark Jul 25, 2026
19bbded
feat(vnext): unify built-in relation dialect policy (#189)
Light2Dark Jul 25, 2026
1dc15d8
feat(vnext): authenticate CTE main query sites (#190)
Light2Dark Jul 25, 2026
9b7851c
feat(vnext): prepare local relation evidence (#191)
Light2Dark Jul 25, 2026
b77db7c
feat(vnext): validate relation catalog data (#192)
Light2Dark Jul 25, 2026
ffa8229
feat(vnext): coordinate catalog epochs (#193)
Light2Dark Jul 25, 2026
5ad22fd
feat(vnext): prepare catalog epoch transitions (#194)
Light2Dark Jul 25, 2026
d39d908
feat(vnext): coordinate bounded catalog search work (#195)
Light2Dark Jul 25, 2026
f0f4d5e
feat(vnext): add catalog search cache policy (#196)
Light2Dark Jul 25, 2026
0f350ef
feat(vnext): expose session relation completion (#197)
Light2Dark Jul 25, 2026
1b4c1af
feat(vnext): correlate completion refresh intent (#198)
Light2Dark Jul 25, 2026
246fa6f
feat(vnext): add CodeMirror completion adapter (#199)
Light2Dark Jul 25, 2026
e052af6
feat(vnext): add disposable completion info (#200)
Light2Dark Jul 25, 2026
b0a76da
feat(vnext): expose statement boundaries (#201)
Light2Dark Jul 25, 2026
e95be82
feat(vnext): complete SQL editor overhaul (#202)
Light2Dark Jul 26, 2026
377b53a
mainify
Light2Dark Jul 26, 2026
dda8cd3
feat: stabilize the standard SQL editor
Light2Dark Jul 26, 2026
b96c934
fix: resolve final SQL editor review findings
Light2Dark Jul 26, 2026
4d98494
test: gate large-document completion performance
Light2Dark Jul 26, 2026
9c0e585
test: calibrate degraded editing budget
Light2Dark Jul 26, 2026
8773014
fix: resolve CodeQL cursor marker alert
Light2Dark Jul 26, 2026
8dc5984
feat: add bounded semantic SQL completion (#205)
Light2Dark Jul 27, 2026
fcd1846
feat: add bounded SQL language intelligence
Light2Dark Jul 27, 2026
91f6bd1
docs: link final overhaul pull request
Light2Dark Jul 27, 2026
e5bee95
docs: remove ADR trailing whitespace
Light2Dark Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .cursorrules
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
- Avoid using `any` or `unknown` types unless absolutely necessary.
- Do not use type assertions; instead, define or refine types as needed.
- Create and use explicit types or interfaces for complex structures.
- Prefer using node-sql-parser's API and types for SQL parsing and analysis.
- Prefer using the package's public session and dialect APIs for consumers.
- Prefer the internal node-sql-parser adapter contracts for parser work.

# Code Style

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/autofix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: autofix.ci # needed to securely identify the workflow

on:
push:
branches: [main]
branches: [main, dev-refactor]
pull_request:

permissions:
Expand Down
55 changes: 51 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,39 @@ on:
- 'v*'

jobs:
compatibility:
env:
EXPECTED_PNPM_VERSION: "10.28.2"
npm_config_manage_package_manager_versions: "false"
npm_config_package_manager_strict_version: "false"
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: ⎔ Setup pnpm
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6
with:
package_json_file: test/package-smoke/package.json
version: 10.28.2

- name: ⎔ Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: 20.19.0
cache: pnpm

- name: 🔒 Verify pnpm version
shell: bash
run: test "$(pnpm --version)" = "10.28.2"

- name: 📥 Install dependencies
run: pnpm install --ignore-scripts --frozen-lockfile

- name: 📦 Packed Package Smoke Test
run: pnpm run test:package

build:
runs-on: ubuntu-latest
steps:
Expand All @@ -27,11 +60,26 @@ jobs:
- name: 📥 Install dependencies
run: pnpm install --ignore-scripts --frozen-lockfile

- name: 🧹 Lint
run: pnpm exec oxlint

- name: 🧪 Test Integrity
run: pnpm run test:integrity

- name: 🔍 Type Check
run: pnpm run typecheck

- name: 🧪 Test
run: pnpm run test
- name: 🧪 Unit Tests and Coverage
run: pnpm run test:coverage

- name: 🎭 Install Chromium
run: pnpm exec playwright install --with-deps chromium

- name: 🧪 Browser Tests
run: pnpm run test:browser

- name: 📦 Packed Package Smoke Test
run: pnpm run test:package

- name: 🏗️ Build
run: pnpm run build
Expand Down Expand Up @@ -66,7 +114,6 @@ jobs:
name: package
path: |
dist/
src/data/
package.json
README.md
LICENSE
Expand All @@ -76,7 +123,7 @@ jobs:
contents: read

publish:
needs: build
needs: [build, compatibility]
runs-on: ubuntu-latest
permissions:
id-token: write
Expand Down
119 changes: 116 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,16 @@ on:
push:
branches:
- main
- dev-refactor

pull_request:
branches:
- main
- dev-refactor

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

env:
CLICOLOR: 1
Expand All @@ -22,6 +28,8 @@ jobs:

steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 0

- name: ⎔ Setup pnpm
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6
Expand All @@ -38,18 +46,123 @@ jobs:
- name: 🧹 Lint
run: pnpm exec oxlint

- name: 🧪 Test Integrity
run: pnpm run test:integrity

- name: 🔍 Type Check
run: pnpm run typecheck

- name: 🧪 Test
run: pnpm run test
- name: 🧪 Unit Tests and Coverage
run: pnpm run test:coverage

- name: ⚡ Performance Gates
run: pnpm run test:performance

- name: 🧬 Mutation Pilot
run: pnpm run test:mutation

- name: 📈 Changed-Code Coverage
if: github.event_name == 'pull_request' || github.event_name == 'push'
env:
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
run: >-
pnpm run test:coverage:changed
"${{ github.event.pull_request.base.sha || github.event.before }}"

- name: 📊 Report Coverage
if: always()
if: >-
always() &&
github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.full_name == github.repository
uses: davelosert/vitest-coverage-report-action@3c50566c523e04813df28de8f7c48dd97d663f1c # v2
with:
pr-number: auto

browser:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
browser:
- chromium
- firefox
- webkit

permissions:
contents: read

steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: ⎔ Setup pnpm
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6

- name: ⎔ Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: 24
cache: pnpm

- name: 📥 Install dependencies
run: pnpm install --ignore-scripts --frozen-lockfile

- name: 🎭 Install ${{ matrix.browser }}
run: pnpm exec playwright install --with-deps "${{ matrix.browser }}"

- name: 🧪 Browser Tests (${{ matrix.browser }})
env:
VITEST_BROWSER: ${{ matrix.browser }}
run: pnpm run test:browser

- name: 🧵 Worker Placement Evidence
if: matrix.browser == 'chromium'
run: pnpm run test:worker-placement

package:
env:
EXPECTED_PNPM_VERSION: ${{ matrix.pnpm-version }}
npm_config_manage_package_manager_versions: "false"
npm_config_package_manager_strict_version: "false"
strategy:
fail-fast: false
matrix:
include:
- node-version: "20.19.0"
pnpm-manifest: "test/package-smoke/package.json"
pnpm-version: "10.28.2"
- node-version: "24"
pnpm-manifest: "package.json"
pnpm-version: "11.4.0"
runs-on: ubuntu-latest

permissions:
contents: read

steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: ⎔ Setup pnpm
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6
with:
package_json_file: ${{ matrix.pnpm-manifest }}
version: ${{ matrix.pnpm-version }}

- name: ⎔ Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: ${{ matrix.node-version }}
cache: pnpm

- name: 🔒 Verify pnpm version
shell: bash
run: test "$(pnpm --version)" = "${{ matrix.pnpm-version }}"

- name: 📥 Install dependencies
run: pnpm install --ignore-scripts --frozen-lockfile

- name: 📦 Packed Package Smoke Test
run: pnpm run test:package

security:
runs-on: ubuntu-latest
steps:
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ scripts/**.js
dist
.DS_Store
!.vscode
__marimo__
__marimo__
.pnpm-store
5 changes: 4 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# codemirror-sql

CodeMirror 6 extension for SQL: real-time linting, gutter indicators, hover tooltips, and schema-aware autocomplete (DuckDB, BigQuery, Dremio dialects). Published to npm as `@marimo-team/codemirror-sql` and used by marimo's editor.
SQL language service for document sessions, dialects, and schema-aware analysis.
Published to npm as `@marimo-team/codemirror-sql` and used by marimo.

## Development

Expand All @@ -12,6 +13,8 @@ pnpm run lint # oxlint --fix (autofix.ci runs this on PRs)
pnpm exec oxlint # non-mutating lint CI enforces
pnpm run typecheck # tsc --noEmit
pnpm run demo # vite build of demo/
pnpm run test:package # pack + consumer smoke
pnpm run test:worker-placement # browser worker placement budgets
```

- Browser tests need Playwright browsers installed first: `pnpm exec playwright install`.
Expand Down
Loading
Loading