Skip to content

Commit 774127f

Browse files
feat: Export to language VSCODE-296 (#366)
* feat: export to language VSCODE-296 * feat: include imports, driver syntax, and builders * refactor: clean up types * refactor: use enum for export to languages * fix: separate evaluation type and results language * refactor: replace temp variables with query functions * refactor: improve performance and coupling
1 parent 01a600b commit 774127f

27 files changed

+1131
-222
lines changed

package-lock.json

Lines changed: 62 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@
226226
"command": "mdb.changeActiveConnection",
227227
"title": "MongoDB: Change Active Connection"
228228
},
229+
{
230+
"command": "mdb.changeExportToLanguageAddons",
231+
"title": "MongoDB: Change Export To Language Addons"
232+
},
229233
{
230234
"command": "mdb.runSelectedPlaygroundBlocks",
231235
"title": "MongoDB: Run Selected Lines From Playground"
@@ -246,6 +250,22 @@
246250
"dark": "images/dark/play.svg"
247251
}
248252
},
253+
{
254+
"command": "mdb.exportToPython",
255+
"title": "MongoDB: Export To Python 3"
256+
},
257+
{
258+
"command": "mdb.exportToJava",
259+
"title": "MongoDB: Export To Java"
260+
},
261+
{
262+
"command": "mdb.exportToCsharp",
263+
"title": "MongoDB: Export To C#"
264+
},
265+
{
266+
"command": "mdb.exportToNode",
267+
"title": "MongoDB: Export To Node"
268+
},
249269
{
250270
"command": "mdb.addConnection",
251271
"title": "Add MongoDB Connection",
@@ -613,6 +633,10 @@
613633
"command": "mdb.changeActiveConnection",
614634
"when": "false"
615635
},
636+
{
637+
"command": "mdb.changeExportToLanguageAddons",
638+
"when": "false"
639+
},
616640
{
617641
"command": "mdb.copyConnectionString",
618642
"when": "false"
@@ -876,6 +900,7 @@
876900
"@mongosh/shell-api": "^1.0.4",
877901
"analytics-node": "^5.0.0",
878902
"bson": "^4.4.1",
903+
"bson-transpilers": "^1.2.0",
879904
"classnames": "^2.3.1",
880905
"debug": "^4.3.2",
881906
"dotenv": "^8.2.0",
@@ -928,6 +953,7 @@
928953
"chai-json-schema": "^1.5.1",
929954
"chalk": "^4.1.2",
930955
"cli-ux": "^5.6.3",
956+
"context-map-webpack-plugin": "^0.1.0",
931957
"cross-env": "^7.0.3",
932958
"css-loader": "^3.4.2",
933959
"depcheck": "^1.4.2",

src/commands/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ enum EXTENSION_COMMANDS {
1414
MDB_RUN_ALL_PLAYGROUND_BLOCKS = 'mdb.runAllPlaygroundBlocks',
1515
MDB_RUN_ALL_OR_SELECTED_PLAYGROUND_BLOCKS = 'mdb.runPlayground',
1616

17+
MDB_EXPORT_TO_PYTHON = 'mdb.exportToPython',
18+
MDB_EXPORT_TO_JAVA = 'mdb.exportToJava',
19+
MDB_EXPORT_TO_CSHARP = 'mdb.exportToCsharp',
20+
MDB_EXPORT_TO_NODE = 'mdb.exportToNode',
21+
MDB_CHANGE_EXPORT_TO_LANGUAGE_ADDONS = 'mdb.changeExportToLanguageAddons',
22+
1723
MDB_OPEN_MONGODB_DOCUMENT_FROM_CODE_LENS = 'mdb.openMongoDBDocumentFromCodeLens',
1824
MDB_OPEN_MONGODB_DOCUMENT_FROM_TREE = 'mdb.openMongoDBDocumentFromTree',
1925
MDB_SAVE_MONGODB_DOCUMENT = 'mdb.saveMongoDBDocument',

src/editors/codeActionProvider.ts

Lines changed: 58 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,78 @@
11
import * as vscode from 'vscode';
2+
23
import EXTENSION_COMMANDS from '../commands';
3-
import PlaygroundController from './playgroundController';
4+
import { ExportToLanguageMode } from '../types/playgroundType';
45

56
export default class CodeActionProvider implements vscode.CodeActionProvider {
6-
_playgroundController: PlaygroundController;
7+
_onDidChangeCodeCodeAction: vscode.EventEmitter<void> = new vscode.EventEmitter<void>();
8+
selection?: vscode.Selection;
9+
mode?: ExportToLanguageMode;
710

811
static readonly providedCodeActionKinds = [vscode.CodeActionKind.QuickFix];
912

10-
constructor(playgroundController: PlaygroundController) {
11-
this._playgroundController = playgroundController;
13+
constructor() {
14+
vscode.workspace.onDidChangeConfiguration(() => {
15+
this._onDidChangeCodeCodeAction.fire();
16+
});
17+
}
18+
19+
readonly onDidChangeCodeLenses: vscode.Event<void> = this
20+
._onDidChangeCodeCodeAction.event;
21+
22+
refresh({ selection, mode }: { selection?: vscode.Selection, mode?: ExportToLanguageMode }): void {
23+
this.selection = selection;
24+
this.mode = mode;
25+
this._onDidChangeCodeCodeAction.fire();
1226
}
1327

1428
provideCodeActions(): vscode.CodeAction[] | undefined {
15-
if (!this._playgroundController._selectedText) {
29+
if (!this.selection) {
1630
return;
1731
}
1832

19-
const commandAction = new vscode.CodeAction('Run selected playground blocks', vscode.CodeActionKind.Empty);
20-
21-
commandAction.command = {
33+
const codeActions: vscode.CodeAction[] = [];
34+
const runSelectedPlaygroundBlockCommand = new vscode.CodeAction('Run selected playground blocks', vscode.CodeActionKind.Empty);
35+
runSelectedPlaygroundBlockCommand.command = {
2236
command: EXTENSION_COMMANDS.MDB_RUN_SELECTED_PLAYGROUND_BLOCKS,
2337
title: 'Run selected playground blocks',
2438
tooltip: 'Run selected playground blocks'
2539
};
40+
codeActions.push(runSelectedPlaygroundBlockCommand);
41+
42+
if (this.mode === ExportToLanguageMode.QUERY || this.mode === ExportToLanguageMode.AGGREGATION) {
43+
const exportToPythonCommand = new vscode.CodeAction('Export To Python 3', vscode.CodeActionKind.Empty);
44+
exportToPythonCommand.command = {
45+
command: EXTENSION_COMMANDS.MDB_EXPORT_TO_PYTHON,
46+
title: 'Export To Python 3',
47+
tooltip: 'Export To Python 3'
48+
};
49+
codeActions.push(exportToPythonCommand);
50+
51+
const exportToJavaCommand = new vscode.CodeAction('Export To Java', vscode.CodeActionKind.Empty);
52+
exportToJavaCommand.command = {
53+
command: EXTENSION_COMMANDS.MDB_EXPORT_TO_JAVA,
54+
title: 'Export To Java',
55+
tooltip: 'Export To Java'
56+
};
57+
codeActions.push(exportToJavaCommand);
58+
59+
const exportToCsharpCommand = new vscode.CodeAction('Export To C#', vscode.CodeActionKind.Empty);
60+
exportToCsharpCommand.command = {
61+
command: EXTENSION_COMMANDS.MDB_EXPORT_TO_CSHARP,
62+
title: 'Export To C#',
63+
tooltip: 'Export To C#'
64+
};
65+
codeActions.push(exportToCsharpCommand);
66+
67+
const exportToJSCommand = new vscode.CodeAction('Export To Node', vscode.CodeActionKind.Empty);
68+
exportToJSCommand.command = {
69+
command: EXTENSION_COMMANDS.MDB_EXPORT_TO_NODE,
70+
title: 'Export To Node',
71+
tooltip: 'Export To Node'
72+
};
73+
codeActions.push(exportToJSCommand);
74+
}
2675

27-
return [commandAction];
76+
return codeActions;
2877
}
2978
}

src/editors/editorsController.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import * as vscode from 'vscode';
22
import { EJSON } from 'bson';
33

44
import ActiveConnectionCodeLensProvider from './activeConnectionCodeLensProvider';
5+
import ExportToLanguageCodeLensProvider from './exportToLanguageCodeLensProvider';
56
import CodeActionProvider from './codeActionProvider';
67
import ConnectionController from '../connectionController';
78
import CollectionDocumentsCodeLensProvider from './collectionDocumentsCodeLensProvider';
@@ -95,6 +96,7 @@ export default class EditorsController {
9596
_telemetryService: TelemetryService;
9697
_playgroundResultViewProvider: PlaygroundResultProvider;
9798
_activeConnectionCodeLensProvider: ActiveConnectionCodeLensProvider;
99+
_exportToLanguageCodeLensProvider: ExportToLanguageCodeLensProvider;
98100
_editDocumentCodeLensProvider: EditDocumentCodeLensProvider;
99101
_collectionDocumentsCodeLensProvider: CollectionDocumentsCodeLensProvider;
100102

@@ -106,6 +108,7 @@ export default class EditorsController {
106108
telemetryService: TelemetryService,
107109
playgroundResultViewProvider: PlaygroundResultProvider,
108110
activeConnectionCodeLensProvider: ActiveConnectionCodeLensProvider,
111+
exportToLanguageCodeLensProvider: ExportToLanguageCodeLensProvider,
109112
codeActionProvider: CodeActionProvider,
110113
editDocumentCodeLensProvider: EditDocumentCodeLensProvider
111114
) {
@@ -135,6 +138,7 @@ export default class EditorsController {
135138
);
136139
this._playgroundResultViewProvider = playgroundResultViewProvider;
137140
this._activeConnectionCodeLensProvider = activeConnectionCodeLensProvider;
141+
this._exportToLanguageCodeLensProvider = exportToLanguageCodeLensProvider;
138142
this._collectionDocumentsCodeLensProvider = new CollectionDocumentsCodeLensProvider(
139143
this._collectionDocumentsOperationsStore
140144
);
@@ -399,6 +403,14 @@ export default class EditorsController {
399403
this._activeConnectionCodeLensProvider
400404
)
401405
);
406+
this._context.subscriptions.push(
407+
vscode.languages.registerCodeLensProvider(
408+
{
409+
scheme: PLAYGROUND_RESULT_SCHEME
410+
},
411+
this._exportToLanguageCodeLensProvider
412+
)
413+
);
402414
this._context.subscriptions.push(
403415
vscode.languages.registerCodeLensProvider(
404416
{

0 commit comments

Comments
 (0)