diff options
author | Nate Sesti <33237525+sestinj@users.noreply.github.com> | 2023-08-07 15:09:15 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-07 15:09:15 -0700 |
commit | 863b483259ae404d1071bfd1d640e9fbd94c64eb (patch) | |
tree | ec816a427171ad7c02adc8bee6e6da93487dfc8a | |
parent | e8f06f81a00c05b2d2c93d614666b2298a1273a5 (diff) | |
parent | 0d1963628c7a5f998aeaf1cf63d8abab2e8923ea (diff) | |
download | sncontinue-863b483259ae404d1071bfd1d640e9fbd94c64eb.tar.gz sncontinue-863b483259ae404d1071bfd1d640e9fbd94c64eb.tar.bz2 sncontinue-863b483259ae404d1071bfd1d640e9fbd94c64eb.zip |
Merge pull request #352 from bra1nDump/setup-experience
Improved 2 click setup experience for new devs
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | .vscode/launch.json | 42 | ||||
-rw-r--r-- | .vscode/settings.json | 3 | ||||
-rw-r--r-- | .vscode/tasks.json | 61 | ||||
-rwxr-xr-x | continuedev/install-dependencies.sh | 16 | ||||
-rw-r--r-- | extension/manual-testing-sandbox/example.ts | 3 | ||||
-rw-r--r-- | extension/manual-testing-sandbox/readme.md | 3 | ||||
-rw-r--r-- | extension/package.json | 14 | ||||
-rw-r--r-- | extension/scripts/install_from_source.py | 35 | ||||
-rw-r--r-- | extension/src/activation/environmentSetup.ts | 23 | ||||
-rw-r--r-- | extension/src/bridge.ts | 11 | ||||
-rwxr-xr-x | install-dependencies.sh | 18 |
12 files changed, 180 insertions, 50 deletions
@@ -131,7 +131,6 @@ dmypy.json **/node_modules **/out -**/.vscode/settings.json notes.txt cached_embeddings.pkl .ruff_cache diff --git a/.vscode/launch.json b/.vscode/launch.json index cc7b1ce4..c598750f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,15 +3,47 @@ // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", + "compounds": [ + { + "name": "Server + Extension (VSCode)", + "stopAll": true, + "configurations": [ + "Server", + "Extension (VSCode)" + ] + } + ], "configurations": [ { - "name": "Python: Module", + "name": "Server", "type": "python", "request": "launch", "module": "continuedev.src.continuedev.server.main", - "args": ["--port", "8001"], + "args": [ + "--port", + "8001" + ], "justMyCode": false, - "subProcess": false - } + "subProcess": false, + // Does it need a build task? + // What about a watch task? - type errors? + }, + { + "name": "Extension (VSCode)", + "type": "extensionHost", + "request": "launch", + "cwd": "${workspaceFolder}/extension", + "args": [ + "${workspaceFolder}/extension/manual-testing-sandbox", + "--extensionDevelopmentPath=${workspaceFolder}/extension", + ], + "outFiles": [ + "${workspaceFolder}/extension/out/**/*.js" + ], + "preLaunchTask": "vscode-extension:build", + "env": { + "CONTINUE_SERVER_URL": "http://localhost:8001" + } + }, ] -} +}
\ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..2195200a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.defaultInterpreterPath": "${workspaceFolder}/continuedev/.venv/bin/python", +}
\ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..64e18f28 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,61 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "vscode-extension:build", + "dependsOn": [ + // To detect compile errors + "vscode-extension:tsc", + // To bundle the code the same way we do for publishing + "vscode-extension:esbuild" + ], + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "label": "vscode-extension:esbuild", + "type": "npm", + "script": "esbuild", + "path": "extension", + "problemMatcher": [ + { + "pattern": [ + { + "regexp": "> (.*?):([0-9]+):([0-9]+): (warning|error): (.+)$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "message": 5 + } + ], + } + ], + }, + // Tsc currently errors out due to testing setup issues, will be resolved in a different PR + // This will be useful for preventing debugging if there are compile errors + { + "label": "vscode-extension:tsc", + "type": "shell", + "command": "echo lol", + // "script": "tsc", + // "path": "extension", + "problemMatcher": [ + "$tsc" + ], + "presentation": { + "revealProblems": "onProblem", + "clear": true, + }, + }, + // Install or update all dependencies for all projects in the monrepo + { + "label": "install-all-dependencies", + "type": "shell", + "command": "./install-dependencies.sh", + "problemMatcher": [], // Empty so users are not promted to select progress reporting + }, + ] +}
\ No newline at end of file diff --git a/continuedev/install-dependencies.sh b/continuedev/install-dependencies.sh new file mode 100755 index 00000000..8f1b5d27 --- /dev/null +++ b/continuedev/install-dependencies.sh @@ -0,0 +1,16 @@ + +#!/bin/bash + +# Check if Poetry is installed +if ! command -v poetry &> /dev/null +then + echo "Poetry not found, installing..." + curl -sSL https://install.python-poetry.org | python3 - +fi + +# Install or update dependencies & create .venv if it doesn't exist +echo "Installing dependencies..." +poetry install + +echo "Running type generation..." +poetry run typegen diff --git a/extension/manual-testing-sandbox/example.ts b/extension/manual-testing-sandbox/example.ts new file mode 100644 index 00000000..0633beaf --- /dev/null +++ b/extension/manual-testing-sandbox/example.ts @@ -0,0 +1,3 @@ +function mergeSortAlgorithm() { + // TODO: implement +}
\ No newline at end of file diff --git a/extension/manual-testing-sandbox/readme.md b/extension/manual-testing-sandbox/readme.md new file mode 100644 index 00000000..5b25d31e --- /dev/null +++ b/extension/manual-testing-sandbox/readme.md @@ -0,0 +1,3 @@ +The sole purpose of this folder is to open it when debugging the extension. +It is not used by the extension itself. +You can add more files that can be useful when manually testing the extension.
\ No newline at end of file diff --git a/extension/package.json b/extension/package.json index 06957198..a1be66e1 100644 --- a/extension/package.json +++ b/extension/package.json @@ -183,19 +183,19 @@ ] }, "scripts": { + "esbuild-base": "rm -rf ./out && node esbuild.mjs", "vscode:prepublish": "npm run esbuild-base -- --minify", - "esbuild-base": "rm -rf ./out && esbuild ./src/extension.ts --bundle --outfile=out/extension.js --external:vscode --format=cjs --platform=node", - "esbuild": "rm -rf ./out && node esbuild.mjs", + "esbuild": "npm run esbuild-base -- --sourcemap", "esbuild-watch": "npm run esbuild-base -- --sourcemap --watch", - "test-compile": "tsc -p ./", + "tsc": "tsc -p ./", + "tsc-watch": "tsc -watch -p ./", + "typegen": "node scripts/typegen.js", "clientgen": "rm -rf src/client/ && npx @openapitools/openapi-generator-cli generate -i ../schema/openapi.json -g typescript-fetch -o src/client/ --additional-properties=supportsES6=true,npmVersion=8.19.2,typescriptThreePlus=true", "rebuild": "electron-rebuild -v 19.1.8 node-pty", - "watch": "tsc -watch -p ./", - "pretest": "npm run compile && npm run lint", + "pretest": "npm run tsc && npm run lint", "lint": "eslint src --ext ts", "test": "node ./out/test/runTest.js", "jest": "jest --config ./jest.config.js", - "typegen": "node scripts/typegen.js", "package": "npm install && npm run typegen && npm run clientgen && cd react-app && npm install && npm run build && cd .. && mkdir -p ./build && vsce package --out ./build" }, "devDependencies": { @@ -244,4 +244,4 @@ "optionalDependencies": { "@esbuild/android-arm": "^0.18.17" } -} +}
\ No newline at end of file diff --git a/extension/scripts/install_from_source.py b/extension/scripts/install_from_source.py index 5e16bf21..cd8f5cde 100644 --- a/extension/scripts/install_from_source.py +++ b/extension/scripts/install_from_source.py @@ -1,3 +1,5 @@ +# Run from extension/scripts directory + import os import subprocess @@ -5,23 +7,22 @@ import subprocess def run(cmd: str): return subprocess.run(cmd, shell=True, capture_output=False) - def get_latest_version() -> str: - latest = None - latest_major = 0 - latest_minor = 0 - latest_patch = 0 - for file in os.listdir("../build"): - if file.endswith(".vsix"): - version = file.split("-")[1].split(".vsix")[0] - major, minor, patch = list( - map(lambda x: int(x), version.split("."))) - if latest is None or (major >= latest_major and minor >= latest_minor and patch > latest_patch): - latest = file - latest_major = major - latest_minor = minor - latest_patch = patch - + # Ensure build directory exists + if not os.path.exists("../build"): + os.mkdir("../build") + + def version_tuple(filename): + version = filename.split("-")[1].split(".vsix")[0] + return tuple(map(int, version.split("."))) + + versions = [file for file in os.listdir("../build") if file.endswith(".vsix")] + + # Ensure we have at least one version + if len(versions) == 0: + return None + + return max(versions, key=version_tuple) def main(): # Clear out old stuff @@ -62,7 +63,7 @@ def main(): latest = get_latest_version() resp = run(f"cd ..; code --install-extension ./build/{latest}") - + print("Continue VS Code extension installed successfully. Please restart VS Code to use it.") diff --git a/extension/src/activation/environmentSetup.ts b/extension/src/activation/environmentSetup.ts index 3c8220c0..81d58afe 100644 --- a/extension/src/activation/environmentSetup.ts +++ b/extension/src/activation/environmentSetup.ts @@ -1,7 +1,7 @@ import { getExtensionUri } from "../util/vscode"; -const util = require("util"); -const exec = util.promisify(require("child_process").exec); -const { spawn } = require("child_process"); +import { promisify } from "util"; +import { exec as execCb } from "child_process"; +import { spawn } from "child_process"; import * as path from "path"; import * as fs from "fs"; import { getContinueServerUrl } from "../bridge"; @@ -10,11 +10,13 @@ import * as vscode from "vscode"; import * as os from "os"; import fkill from "fkill"; import { finished } from "stream/promises"; -const request = require("request"); +import request = require("request"); + +const exec = promisify(execCb); async function runCommand(cmd: string): Promise<[string, string | undefined]> { - var stdout: any = ""; - var stderr: any = ""; + var stdout = ""; + var stderr = ""; try { var { stdout, stderr } = await exec(cmd, { shell: process.platform === "win32" ? "powershell.exe" : undefined, @@ -23,14 +25,9 @@ async function runCommand(cmd: string): Promise<[string, string | undefined]> { stderr = e.stderr; stdout = e.stdout; } - if (stderr === "") { - stderr = undefined; - } - if (typeof stdout === "undefined") { - stdout = ""; - } - return [stdout, stderr]; + const stderrOrUndefined = stderr === "" ? undefined : stderr; + return [stdout, stderrOrUndefined]; } async function checkServerRunning(serverUrl: string): Promise<boolean> { diff --git a/extension/src/bridge.ts b/extension/src/bridge.ts index 0d665826..e4c74771 100644 --- a/extension/src/bridge.ts +++ b/extension/src/bridge.ts @@ -1,14 +1,11 @@ import * as vscode from "vscode"; -import { extensionContext } from "./activation/activate"; export function getContinueServerUrl() { - // If in debug mode, always use 8001 - if ( - extensionContext && - extensionContext.extensionMode === vscode.ExtensionMode.Development - ) { - return "http://localhost:8001"; + // Passed in from launch.json + if (process.env.CONTINUE_SERVER_URL) { + return process.env.CONTINUE_SERVER_URL; } + return ( vscode.workspace.getConfiguration("continue").get<string>("serverUrl") || "http://localhost:65432" diff --git a/install-dependencies.sh b/install-dependencies.sh new file mode 100755 index 00000000..a913f971 --- /dev/null +++ b/install-dependencies.sh @@ -0,0 +1,18 @@ + +#!/bin/bash +# This is used in a task in .vscode/tasks.json +# Start developing with: +# - Run Task -> Install Dependencies +# - Debug -> Server + Extension + +# Server +echo "Installing server dependencies..." +pushd continuedev || exit +./install-dependencies.sh +popd || exit + +# VSCode Extension (will also package GUI) +echo "Installing VSCode extension dependencies..." +pushd extension || exit +# This does way too many things inline but is the common denominator between many of the scripts +npm run package
\ No newline at end of file |