Initial commit
This commit is contained in:
		
							
								
								
									
										73
									
								
								src/connections.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								src/connections.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
import { ExtensionContext, TreeDataProvider, EventEmitter, TreeItem, Event, window, TreeItemCollapsibleState, Uri, commands, workspace, TextDocumentContentProvider, CancellationToken, ProviderResult } from 'vscode';
 | 
			
		||||
import * as path from 'path';
 | 
			
		||||
 | 
			
		||||
interface IEntry {
 | 
			
		||||
	name: string;
 | 
			
		||||
	type: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export class ConnectionNode {
 | 
			
		||||
 | 
			
		||||
	constructor(private _name:string, private _uri:string) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public get name(): string {
 | 
			
		||||
		return this._name;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public get uri(): string {
 | 
			
		||||
		return this._name;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export class ConnectionModel {
 | 
			
		||||
 | 
			
		||||
	public get roots(): Thenable<ConnectionNode[]> {
 | 
			
		||||
        let list : ConnectionNode[] = [
 | 
			
		||||
            new ConnectionNode("swdev", "foobar"),
 | 
			
		||||
            new ConnectionNode("swint", "foobar")
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        return new Promise((c, e) => c(list));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public getChildren(node: ConnectionNode): Thenable<ConnectionNode[]> {
 | 
			
		||||
        return new Promise((c, e) => []);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export class ConnectionProvider implements TreeDataProvider<ConnectionNode>, TextDocumentContentProvider {
 | 
			
		||||
 | 
			
		||||
	private _onDidChangeTreeData: EventEmitter<any> = new EventEmitter<any>();
 | 
			
		||||
	readonly onDidChangeTreeData: Event<any> = this._onDidChangeTreeData.event;
 | 
			
		||||
 | 
			
		||||
	private model: ConnectionModel;
 | 
			
		||||
 | 
			
		||||
	public getTreeItem(element: ConnectionNode): TreeItem {
 | 
			
		||||
		return {
 | 
			
		||||
			label: element.name,
 | 
			
		||||
			collapsibleState: void 0,
 | 
			
		||||
			command: {
 | 
			
		||||
				command: 'openConnection',
 | 
			
		||||
				arguments: [element.uri],
 | 
			
		||||
				title: 'Open Connection'
 | 
			
		||||
			}
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public getChildren(element?: ConnectionNode): ConnectionNode[] | Thenable<ConnectionNode[]> {
 | 
			
		||||
		if (!element) {
 | 
			
		||||
			if (!this.model) {
 | 
			
		||||
				this.model = new ConnectionModel();
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return this.model.roots;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return [];
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public provideTextDocumentContent(uri: Uri, token: CancellationToken): ProviderResult<string> {
 | 
			
		||||
		return "nix";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										69
									
								
								src/extension.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/extension.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
// The module 'vscode' contains the VS Code extensibility API
 | 
			
		||||
// Import the module and reference it with the alias vscode in your code below
 | 
			
		||||
import * as vscode from 'vscode';
 | 
			
		||||
import { ConnectionProvider, ConnectionNode } from './connections'
 | 
			
		||||
const { spawn } = require('child_process');
 | 
			
		||||
 | 
			
		||||
var dbSession = null;
 | 
			
		||||
 | 
			
		||||
// this method is called when your extension is activated
 | 
			
		||||
// your extension is activated the very first time the command is executed
 | 
			
		||||
export function activate(context: vscode.ExtensionContext) {
 | 
			
		||||
    const connectionProvider = new ConnectionProvider();
 | 
			
		||||
 | 
			
		||||
    vscode.window.registerTreeDataProvider('connections', connectionProvider);
 | 
			
		||||
 | 
			
		||||
    // Use the console to output diagnostic information (console.log) and errors (console.error)
 | 
			
		||||
    // This line of code will only be executed once when your extension is activated
 | 
			
		||||
    console.log('Congratulations, your extension "frog" is now active!');
 | 
			
		||||
 | 
			
		||||
    // The command has been defined in the package.json file
 | 
			
		||||
    // Now provide the implementation of the command with  registerCommand
 | 
			
		||||
    // The commandId parameter must match the command field in package.json
 | 
			
		||||
    let disposable = vscode.commands.registerCommand('extension.executeSnippet', () => {
 | 
			
		||||
        // The code you place here will be executed every time your command is executed
 | 
			
		||||
 | 
			
		||||
        let editor = vscode.window.activeTextEditor;
 | 
			
		||||
 | 
			
		||||
        if (!editor) return;
 | 
			
		||||
 | 
			
		||||
        let selection = editor.selection;
 | 
			
		||||
 | 
			
		||||
        if (selection.isEmpty) return;
 | 
			
		||||
 | 
			
		||||
        let text = editor.document.getText(selection);
 | 
			
		||||
 | 
			
		||||
        var myOutputChannel = vscode.window.createOutputChannel('SQL Query Results');
 | 
			
		||||
 | 
			
		||||
        if (!dbSession) {
 | 
			
		||||
            dbSession = spawn("dbc", ['-q', 'scint']);
 | 
			
		||||
 | 
			
		||||
            dbSession.stdout.on('data', (data) => {
 | 
			
		||||
                myOutputChannel.show();
 | 
			
		||||
                myOutputChannel.append(data.toString());
 | 
			
		||||
            });
 | 
			
		||||
              
 | 
			
		||||
            dbSession.stderr.on('data', (data) => {
 | 
			
		||||
                myOutputChannel.show();
 | 
			
		||||
                myOutputChannel.append(data.toString());
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!text) {
 | 
			
		||||
            vscode.window.showInformationMessage('No text selected');
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        myOutputChannel.append("Executing: '" + text + "'\n");
 | 
			
		||||
        dbSession.stdin.write(text + "\n");
 | 
			
		||||
        
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    context.subscriptions.push(disposable);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// this method is called when your extension is deactivated
 | 
			
		||||
export function deactivate() {
 | 
			
		||||
    if (dbSession) dbSession.stdin.end();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								src/test/extension.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/test/extension.test.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
//
 | 
			
		||||
// Note: This example test is leveraging the Mocha test framework.
 | 
			
		||||
// Please refer to their documentation on https://mochajs.org/ for help.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// The module 'assert' provides assertion methods from node
 | 
			
		||||
import * as assert from 'assert';
 | 
			
		||||
 | 
			
		||||
// You can import and use all API from the 'vscode' module
 | 
			
		||||
// as well as import your extension to test it
 | 
			
		||||
import * as vscode from 'vscode';
 | 
			
		||||
import * as myExtension from '../extension';
 | 
			
		||||
 | 
			
		||||
// Defines a Mocha test suite to group tests of similar kind together
 | 
			
		||||
suite("Extension Tests", () => {
 | 
			
		||||
 | 
			
		||||
    // Defines a Mocha unit test
 | 
			
		||||
    test("Something 1", () => {
 | 
			
		||||
        assert.equal(-1, [1, 2, 3].indexOf(5));
 | 
			
		||||
        assert.equal(-1, [1, 2, 3].indexOf(0));
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										22
									
								
								src/test/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/test/index.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
//
 | 
			
		||||
// PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING
 | 
			
		||||
//
 | 
			
		||||
// This file is providing the test runner to use when running extension tests.
 | 
			
		||||
// By default the test runner in use is Mocha based.
 | 
			
		||||
//
 | 
			
		||||
// You can provide your own test runner if you want to override it by exporting
 | 
			
		||||
// a function run(testRoot: string, clb: (error:Error) => void) that the extension
 | 
			
		||||
// host can call to run the tests. The test runner is expected to use console.log
 | 
			
		||||
// to report the results back to the caller. When the tests are finished, return
 | 
			
		||||
// a possible error to the callback or null if none.
 | 
			
		||||
 | 
			
		||||
import * as testRunner from 'vscode/lib/testrunner';
 | 
			
		||||
 | 
			
		||||
// You can directly control Mocha options by uncommenting the following lines
 | 
			
		||||
// See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info
 | 
			
		||||
testRunner.configure({
 | 
			
		||||
    ui: 'tdd', 		// the TDD UI is being used in extension.test.ts (suite, test, etc.)
 | 
			
		||||
    useColors: true // colored output from test results
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
module.exports = testRunner;
 | 
			
		||||
		Reference in New Issue
	
	Block a user