Skip to content

Commit

Permalink
Merge branch 'master' into feat/dbtcorecommand
Browse files Browse the repository at this point in the history
  • Loading branch information
anandgupta42 authored Aug 1, 2024
2 parents 1acb7ae + 9e3812e commit a317855
Show file tree
Hide file tree
Showing 9 changed files with 180 additions and 39 deletions.
38 changes: 23 additions & 15 deletions new_lineage_panel/src/Lineage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import {
bfsTraversal,
calculateMinLevel,
calculateNodeCount,
expandTableLineage,
expandTableLineageLevelWise,
highlightTableConnections,
layoutElementsOnCanvas,
} from "./graph";
Expand Down Expand Up @@ -214,9 +214,23 @@ export const Lineage = () => {
>();
const [selectCheck, setSelectCheck] = useState(true);
const [nonSelectCheck, setNonSelectCheck] = useState(true);
const [defaultExpansion, setDefaultExpansion] = useState(5);
const [defaultExpansion, setDefaultExpansion] = useState(1);
const [nodeCount, setNodeCount] = useState(0);
const [minRange, setMinRange] = useState<[number, number]>([0, 0]);
// hack for default expansion
const defaultExpansionRef = useRef(defaultExpansion);

const applySettings = useCallback(async () => {
const settings = await getLineageSettings();
setSelectCheck(settings.showSelectEdges);
setNonSelectCheck(settings.showNonSelectEdges);
setDefaultExpansion(settings.defaultExpansion);
defaultExpansionRef.current = settings.defaultExpansion;
}, []);

useEffect(() => {
applySettings();
}, [applySettings]);

const setupLineage = useCallback(async () => {
const render = async (args: {
Expand Down Expand Up @@ -256,12 +270,14 @@ export const Lineage = () => {
}
let nodes: Node[] = [];
let edges: Edge[] = [];
const addNodesEdges = async (table: string, right: boolean) => {
[nodes, edges] = await expandTableLineage(nodes, edges, table, right);
};
nodes = [createTableNode(node, 0, "")];
if (node.upstreamCount > 0) await addNodesEdges(node.table, true);
if (node.downstreamCount > 0) await addNodesEdges(node.table, false);
[nodes, edges] = await expandTableLineageLevelWise(
nodes,
edges,
node.table,
-defaultExpansionRef.current,
defaultExpansionRef.current
);
setSelectedTable(node.table);
setSelectedColumn({ table: "", name: "" });
setCollectColumns({});
Expand Down Expand Up @@ -290,13 +306,6 @@ export const Lineage = () => {
rerender();
};

const applySettings = async () => {
const settings = await getLineageSettings();
setSelectCheck(settings.showSelectEdges);
setNonSelectCheck(settings.showNonSelectEdges);
setDefaultExpansion(settings.defaultExpansion);
};

const commandMap = new Map(
Object.entries({
render,
Expand Down Expand Up @@ -329,7 +338,6 @@ export const Lineage = () => {
window.addEventListener("message", executeHostCommands);
console.log("lineage:onload");
init();
applySettings();
}, []);

useEffect(() => {
Expand Down
13 changes: 9 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "vscode-dbt-power-user",
"displayName": "Power User for dbt Core™",
"description": "a.k.a. dbt power user makes vscode seamlessly work with dbt™: auto-complete, preview, column lineage, AI docs generation, health checks, cost estimation etc",
"displayName": "Power User for dbt",
"description": "a.k.a. dbt power user makes vscode work seamlessly with dbt™ core and dbt™ cloud: auto-complete, preview, column lineage, AI docs generation, health checks, cost estimation etc",
"icon": "media/images/dbt.png",
"publisher": "innoverio",
"license": "MIT",
Expand All @@ -13,7 +13,7 @@
"bugs": {
"url": "https://github.com/AltimateAI/vscode-dbt-power-user/issues"
},
"version": "0.42.6",
"version": "0.43.1",
"engines": {
"vscode": "^1.81.0"
},
Expand Down Expand Up @@ -79,7 +79,7 @@
"dbt.enableQueryBookmarks": {
"type": "boolean",
"description": "Enable Query history and bookmarks feature",
"default": false
"default": true
},
"dbt.lineage.showSelectEdges": {
"type": "boolean",
Expand Down Expand Up @@ -629,6 +629,11 @@
"title": "Visualize SQL (Beta)",
"category": "dbt Power User",
"icon": "$(eye)"
},
{
"command": "dbtPowerUser.showDocumentation",
"title": "Show documentation",
"category": "dbt Power User"
}
],
"keybindings": [
Expand Down
88 changes: 88 additions & 0 deletions src/code_lens_provider/documentationCodeLensProvider.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import {
CancellationToken,
CodeLens,
CodeLensProvider,
Event,
EventEmitter,
ProviderResult,
Range,
TextDocument,
} from "vscode";
import { provideSingleton } from "../utils";
import { CST, LineCounter, Parser } from "yaml";

@provideSingleton(DocumentationCodeLensProvider)
export class DocumentationCodeLensProvider implements CodeLensProvider {
private _onDidChangeCodeLenses: EventEmitter<void> = new EventEmitter<void>();
public readonly onDidChangeCodeLenses: Event<void> =
this._onDidChangeCodeLenses.event;

provideCodeLenses(
document: TextDocument,
token: CancellationToken,
): ProviderResult<CodeLens[]> {
const codeLenses: CodeLens[] = [];
if (document.fileName.endsWith(".sql")) {
codeLenses.push(
new CodeLens(new Range(0, 0, 1, 1), {
title: "Add documentation or tests",
tooltip: "Add documentation or tests for this model",
command: "dbtPowerUser.DocsEdit.focus",
arguments: [],
}),
);
return codeLenses;
}
const lineCounter = new LineCounter();
for (const token of new Parser(lineCounter.addNewLine).parse(
document.getText(),
)) {
if (!(token.type === "document" && CST.isCollection(token.value))) {
continue;
}
for (const item of token.value.items) {
if (
!(
CST.isScalar(item.key) &&
item.key.source === "models" &&
CST.isCollection(item.value)
)
) {
continue;
}
// inside models
for (const modelItem of item.value.items) {
if (!CST.isCollection(modelItem.value)) {
continue;
}
for (const properties of modelItem.value.items) {
if (
CST.isScalar(properties.key) &&
CST.isScalar(properties.value) &&
properties.key.source === "name"
) {
const position = lineCounter.linePos(properties.key.offset);
codeLenses.push(
new CodeLens(
new Range(
position.line - 1,
position.col,
position.line - 1,
position.col,
),
{
title: "Add documentation or tests",
tooltip: "Add documentation or tests for this model",
command: "dbtPowerUser.showDocumentation",
arguments: [properties.value.source],
},
),
);
}
}
}
}
}
return codeLenses;
}
}
14 changes: 14 additions & 0 deletions src/code_lens_provider/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@ import { DBTPowerUserExtension } from "../dbtPowerUserExtension";
import { provideSingleton } from "../utils";
import { SourceModelCreationCodeLensProvider } from "./sourceModelCreationCodeLensProvider";
import { VirtualSqlCodeLensProvider } from "./virtualSqlCodeLensProvider";
import { DocumentationCodeLensProvider } from "./documentationCodeLensProvider";

@provideSingleton(CodeLensProviders)
export class CodeLensProviders implements Disposable {
private disposables: Disposable[] = [];
constructor(
private sourceModelCreationCodeLensProvider: SourceModelCreationCodeLensProvider,
private virtualSqlCodeLensProvider: VirtualSqlCodeLensProvider,
private documentationCodeLensProvider: DocumentationCodeLensProvider,
) {
this.disposables.push(
languages.registerCodeLensProvider(
Expand All @@ -23,6 +25,18 @@ export class CodeLensProviders implements Disposable {
this.virtualSqlCodeLensProvider,
),
);
this.disposables.push(
languages.registerCodeLensProvider(
DBTPowerUserExtension.DBT_YAML_SELECTOR,
this.documentationCodeLensProvider,
),
);
this.disposables.push(
languages.registerCodeLensProvider(
DBTPowerUserExtension.DBT_SQL_SELECTOR,
this.documentationCodeLensProvider,
),
);
}

dispose() {
Expand Down
21 changes: 21 additions & 0 deletions src/commands/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -654,6 +654,27 @@ export class VSCodeCommands implements Disposable {
},
);
}),
commands.registerCommand(
"dbtPowerUser.showDocumentation",
async (modelName) => {
const result = queryManifestService.getEventByCurrentProject();
if (!result) {
return;
}
const { event } = result;
if (!event) {
return;
}
const { nodeMetaMap } = event;
const model = nodeMetaMap.get(modelName);
if (!model?.path) {
return;
}
const doc = await workspace.openTextDocument(Uri.file(model.path));
await window.showTextDocument(doc);
await commands.executeCommand("dbtPowerUser.DocsEdit.focus");
},
),
);
}

Expand Down
2 changes: 1 addition & 1 deletion src/webview_provider/queryResultPanel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -640,7 +640,7 @@ export class QueryResultPanel extends AltimateWebviewProvider {
columnTypes: result.columnTypes,
modelName,
});
this._queryHistory = this._queryHistory.splice(0, 100);
this._queryHistory = this._queryHistory.splice(0, 10);
this._bottomPanel?.webview.postMessage({
command: "queryHistory",
args: {
Expand Down
18 changes: 6 additions & 12 deletions webview_panels/src/modules/queryPanel/QueryPanelDefaultView.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { Alert, Stack } from "@uicore";
import { Stack } from "@uicore";
import HelpContent from "./components/help/HelpContent";
import QueryLimit from "./components/queryLimit/QueryLimit";
import useQueryPanelState from "./useQueryPanelState";

const QueryPanelDefaultView = (): JSX.Element => {
const { queryBookmarksEnabled } = useQueryPanelState();
return (
<Stack style={{ gap: 30, paddingTop: "1rem" }}>
<div>
Expand All @@ -22,16 +20,12 @@ const QueryPanelDefaultView = (): JSX.Element => {
and share them with your team.
<br />
You can also rerun queries directly from your history or bookmarks.
<br />
For more information, check out the{" "}
<a href="https://docs.myaltimate.com/govern/querybookmarks/">
documentation
</a>
</p>
{!queryBookmarksEnabled ? (
<p>
<Alert color="warning">
This feature is in private beta. If you are interested, please{" "}
<a href="https://app.myaltimate.com/contactus">contact us</a> to
try it out!
</Alert>
</p>
) : null}
</div>
<HelpContent />
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,16 @@ const QueryPanelTitle = ({
</NewFeatureIndicator>
</NavItem>
<NavItem>
<NavLink
active={QueryPanelTitleTabState.Bookmarks === tabState}
onClick={() => toggleTabState(QueryPanelTitleTabState.Bookmarks)}
>
Bookmarks
</NavLink>
<NewFeatureIndicator featureKey="query-results-bookmarks-clicked">
<NavLink
active={QueryPanelTitleTabState.Bookmarks === tabState}
onClick={() =>
toggleTabState(QueryPanelTitleTabState.Bookmarks)
}
>
Bookmarks
</NavLink>
</NewFeatureIndicator>
</NavItem>
</>
) : null,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import styles from "../../querypanel.module.scss";
import { Stack, CodeBlock, Label, IconButton } from "@uicore";
import { Stack, CodeBlock, Label, IconButton, Alert } from "@uicore";
import { useEffect, useState } from "react";
import { QueryBookmark } from "@modules/queryPanel/context/types";
import { ChevronRightIcon, OpenNewIcon } from "@assets/icons";
Expand Down Expand Up @@ -46,6 +46,13 @@ const QueryPanelBookmarks = (): JSX.Element => {
className={`${styles.queryTwoCol} ${tabState === QueryPanelTitleTabState.Bookmarks ? "" : "d-none"}`}
>
<Stack direction="column" className={styles.limitWidth}>
<Alert color="warning">
Check out the{" "}
<a href="https://docs.myaltimate.com/govern/querybookmarks/">
documentation
</a>{" "}
to learn more about Query Bookmarks.
</Alert>
<BookmarkAccordion
onSelect={onSelect}
privacy="private"
Expand Down

0 comments on commit a317855

Please sign in to comment.