Skip to content

Commit 151dbe0

Browse files
preview: Improved SQL completions, linting, and hover (#5938)
## 📝 Summary <!-- Provide a concise summary of what this pull request is addressing. If this PR fixes any issues, list them here by number (e.g., Fixes #123). --> Adds the integration under a feature flag. https://github.com/user-attachments/assets/2dad658f-cb58-4fcb-adcc-f4122db3c945 ## 🔍 Description of Changes <!-- Detail the specific changes made in this pull request. Explain the problem addressed and how it was resolved. If applicable, provide before and after comparisons, screenshots, or any relevant details to help reviewers understand the changes easily. --> ## 📋 Checklist - [x] I have read the [contributor guidelines](https://github.com/marimo-team/marimo/blob/main/CONTRIBUTING.md). - [ ] For large changes, or changes that affect the public API: this change was discussed or approved through an issue, on [Discord](https://marimo.io/discord?ref=pr), or the community [discussions](https://github.com/marimo-team/marimo/discussions) (Please provide a link if applicable). - [ ] I have added tests for the changes made. - [x] I have run the code and verified that it works as expected. --------- Co-authored-by: Myles Scolnick <myles@marimo.io>
1 parent 310e3a3 commit 151dbe0

File tree

22 files changed

+609
-619
lines changed

22 files changed

+609
-619
lines changed

frontend/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"@marimo-team/codemirror-languageserver": "^1.15.24",
5454
"@marimo-team/codemirror-mcp": "^0.1.5",
5555
"@marimo-team/llm-info": "workspace:*",
56+
"@marimo-team/codemirror-sql": "^0.1.3",
5657
"@marimo-team/marimo-api": "workspace:*",
5758
"@marimo-team/react-slotz": "^0.2.0",
5859
"@mui/material": "^6.4.12",
@@ -170,7 +171,7 @@
170171
"start": "vite",
171172
"dev": "vite",
172173
"build:watch": "vite build --watch --outDir ../marimo/_static",
173-
"build": "cross-env NODE_OPTIONS=--max-old-space-size=4096 vite build",
174+
"build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build",
174175
"test": "vitest",
175176
"typecheck": "tsc",
176177
"lint": "run-s lint:biome lint:eslint lint:stylelint",

frontend/src/components/app-config/user-config-form.tsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1254,6 +1254,31 @@ export const UserConfigForm: React.FC = () => {
12541254
</div>
12551255
)}
12561256
/>
1257+
<FormField
1258+
control={form.control}
1259+
name="experimental.sql_linter"
1260+
render={({ field }) => (
1261+
<div className="flex flex-col gap-y-1">
1262+
<FormItem className={formItemClasses}>
1263+
<FormLabel className="font-normal">SQL Linter</FormLabel>
1264+
<FormControl>
1265+
<Checkbox
1266+
data-testid="sql-linter-checkbox"
1267+
checked={field.value === true}
1268+
onCheckedChange={field.onChange}
1269+
/>
1270+
</FormControl>
1271+
</FormItem>
1272+
<IsOverridden
1273+
userConfig={config}
1274+
name="experimental.sql_linter"
1275+
/>
1276+
<FormDescription>
1277+
Enable experimental SQL linting and autocompletion.
1278+
</FormDescription>
1279+
</div>
1280+
)}
1281+
/>
12571282
</SettingGroup>
12581283
);
12591284
}

frontend/src/components/chat/markdown-renderer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { maybeAddMarimoImport } from "@/core/cells/add-missing-import";
1212
import { useCellActions } from "@/core/cells/cells";
1313
import { useLastFocusedCellId } from "@/core/cells/focus";
1414
import { MarkdownLanguageAdapter } from "@/core/codemirror/language/languages/markdown";
15-
import { SQLLanguageAdapter } from "@/core/codemirror/language/languages/sql";
15+
import { SQLLanguageAdapter } from "@/core/codemirror/language/languages/sql/sql";
1616
import { autoInstantiateAtom } from "@/core/config/config";
1717
import { LazyAnyLanguageCodeMirror } from "@/plugins/impl/code/LazyAnyLanguageCodeMirror";
1818
import { useTheme } from "@/theme/useTheme";

frontend/src/components/editor/ai/add-cell-with-ai.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import {
3737
import { toast } from "@/components/ui/use-toast";
3838
import { resourceExtension } from "@/core/codemirror/ai/resources";
3939
import { customPythonLanguageSupport } from "@/core/codemirror/language/languages/python";
40-
import { SQLLanguageAdapter } from "@/core/codemirror/language/languages/sql";
40+
import { SQLLanguageAdapter } from "@/core/codemirror/language/languages/sql/sql";
4141
import { useRuntimeManager } from "@/core/runtime/config";
4242
import { type ResolvedTheme, useTheme } from "@/theme/useTheme";
4343
import { cn } from "@/utils/cn";

frontend/src/components/editor/cell/CreateCellButton.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
import { maybeAddMarimoImport } from "@/core/cells/add-missing-import";
1111
import { useCellActions } from "@/core/cells/cells";
1212
import { MarkdownLanguageAdapter } from "@/core/codemirror/language/languages/markdown";
13-
import { SQLLanguageAdapter } from "@/core/codemirror/language/languages/sql";
13+
import { SQLLanguageAdapter } from "@/core/codemirror/language/languages/sql/sql";
1414
import {
1515
getConnectionTooltip,
1616
isAppInteractionDisabled,

frontend/src/components/editor/cell/code/language-toggle.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { Button } from "@/components/ui/button";
88
import { Tooltip } from "@/components/ui/tooltip";
99
import { switchLanguage } from "@/core/codemirror/language/extension";
1010
import { MarkdownLanguageAdapter } from "@/core/codemirror/language/languages/markdown";
11-
import { SQLLanguageAdapter } from "@/core/codemirror/language/languages/sql";
11+
import { SQLLanguageAdapter } from "@/core/codemirror/language/languages/sql/sql";
1212
import type { LanguageAdapter } from "@/core/codemirror/language/types";
1313
import { Functions } from "@/utils/functions";
1414
import { MarkdownIcon, PythonIcon } from "./icons";

frontend/src/components/editor/renderers/CellArray.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { Button } from "@/components/ui/button";
2020
import { Tooltip } from "@/components/ui/tooltip";
2121
import { maybeAddMarimoImport } from "@/core/cells/add-missing-import";
2222
import { MarkdownLanguageAdapter } from "@/core/codemirror/language/languages/markdown";
23-
import { SQLLanguageAdapter } from "@/core/codemirror/language/languages/sql";
23+
import { SQLLanguageAdapter } from "@/core/codemirror/language/languages/sql/sql";
2424
import { aiEnabledAtom } from "@/core/config/config";
2525
import { isConnectedAtom } from "@/core/network/connection";
2626
import { useBoolean } from "@/hooks/useBoolean";

frontend/src/core/codemirror/language/LanguageAdapters.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import { MarkdownLanguageAdapter } from "./languages/markdown";
44
import { PythonLanguageAdapter } from "./languages/python";
5-
import { SQLLanguageAdapter } from "./languages/sql";
5+
import { SQLLanguageAdapter } from "./languages/sql/sql";
66
import type { LanguageAdapter, LanguageAdapterType } from "./types";
77

88
export const LanguageAdapters: Record<LanguageAdapterType, LanguageAdapter> = {

frontend/src/core/codemirror/language/__tests__/sql.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type {
66
} from "@codemirror/autocomplete";
77
import { PostgreSQL } from "@codemirror/lang-sql";
88
import { EditorState, type Extension } from "@codemirror/state";
9+
import { DuckDBDialect } from "@marimo-team/codemirror-sql/dialects";
910
import { afterEach, beforeEach, describe, expect, it } from "vitest";
1011
import type { DataSourceConnection } from "@/core/datasets/data-source-connections";
1112
import {
@@ -16,12 +17,11 @@ import { type ConnectionName, DUCKDB_ENGINE } from "@/core/datasets/engines";
1617
import { datasetsAtom } from "@/core/datasets/state";
1718
import type { DatasetsState } from "@/core/datasets/types";
1819
import { store } from "@/core/state/jotai";
20+
import { TestSQLCompletionStore } from "../languages/sql/completion-store";
1921
import {
20-
SQLCompletionStore,
2122
SQLLanguageAdapter,
2223
type SQLLanguageAdapterMetadata,
23-
} from "../languages/sql";
24-
import { DuckDBDialect } from "../languages/sql-dialects/duckdb";
24+
} from "../languages/sql/sql";
2525
import { languageMetadataField } from "../metadata";
2626

2727
const adapter = new SQLLanguageAdapter();
@@ -618,7 +618,7 @@ _df = mo.sql(
618618

619619
describe("tablesCompletionSource", () => {
620620
const mockStore = store;
621-
const completionStore = new SQLCompletionStore();
621+
const completionStore = new TestSQLCompletionStore();
622622

623623
beforeEach(() => {
624624
// Reset the adapter engine
@@ -1184,7 +1184,7 @@ describe("tablesCompletionSource", () => {
11841184
];
11851185

11861186
describe("SQL Completions", () => {
1187-
const completionStore = new SQLCompletionStore();
1187+
const completionStore = new TestSQLCompletionStore();
11881188

11891189
beforeEach(() => {
11901190
// Reset state

frontend/src/core/codemirror/language/extension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { historyCompartment } from "../editing/extensions";
2828
import { formattingChangeEffect } from "../format";
2929
import { createPanel } from "../react-dom/createPanel";
3030
import { getLanguageAdapters, LanguageAdapters } from "./LanguageAdapters";
31-
import { initializeSQLDialect } from "./languages/sql";
31+
import { initializeSQLDialect } from "./languages/sql/sql";
3232
import type { LanguageMetadata } from "./metadata";
3333
import { languageMetadataField, setLanguageMetadata } from "./metadata";
3434
import { LanguagePanelComponent } from "./panel/panel";

0 commit comments

Comments
 (0)