This commit is contained in:
Anna Fariha 2021-07-06 23:50:39 -07:00
Родитель 5a2d1ef2d5
Коммит 0d95fa3081
6 изменённых файлов: 36 добавлений и 36 удалений

2
.gitignore поставляемый
Просмотреть файл

@ -1,7 +1,7 @@
src/pytutor/out
src/pytutor/dist
src/pytutor/package-lock.json
node_modules
src/pytutor/node_modules
.vscode-test/
*.vsix
src/pytutor/tmp

Просмотреть файл

@ -11,5 +11,5 @@ export async function activate(context: vscode.ExtensionContext) {
"python",
tutorAction,
);
}

Просмотреть файл

@ -11,7 +11,7 @@ import { compiles, EXTENSION_NAME, getModeIcon } from './util';
const PYMACER_REQUEST_TIMEOUT = 10000;
const PYMACER_SERVER_URL = "http://127.0.0.1:5000/getfixes";
const PYTHON_PATH = "C://venv//pymacer//Scripts//python"
const PYTHON_PATH = "C://venv//pymacer//Scripts//python";
interface PyMacerEditSuggestion {
type: string; // type of edit operation - insert/ delete/ replace
@ -43,7 +43,7 @@ export class PyMacerRepairEngine implements RepairEngine {
context: vscode.ExtensionContext;
responses: PyMacerResponse[] = [];
diagnosticToCodeActionMap: Map<vscode.Diagnostic, vscode.CodeAction> = new Map();
constructor(context: vscode.ExtensionContext){
constructor(context: vscode.ExtensionContext) {
this.context = context;
}
async process(): Promise<boolean> {
@ -51,7 +51,7 @@ export class PyMacerRepairEngine implements RepairEngine {
this.diagnosticToCodeActionMap.clear();
let didCompile = await compiles(PYTHON_PATH);
if (didCompile === false) {
console.log('Syntax Error... Consulting PyMacer')
console.log('Syntax Error... Consulting PyMacer');
let data = {
source: vscode.window.activeTextEditor?.document.getText(),
lastEditLine: vscode.window.activeTextEditor?.selection.active.line
@ -75,22 +75,21 @@ export class PyMacerRepairEngine implements RepairEngine {
return true;
}
populateDiagnosticsAndCodeActions(){
populateDiagnosticsAndCodeActions() {
for (let i = 0; i < this.responses.length; i++) {
let response = this.responses[i];
let code = vscode.window.activeTextEditor?.document.getText();
if (code === undefined){
if (code === undefined) {
code = "";
}
let range = undefined;
let range = undefined;
try {
range = new vscode.Range(
new vscode.Position(response.lineNo, response.editDiffs[0].start),
new vscode.Position(response.lineNo, response.editDiffs[0].end + 1)
)
new vscode.Position(response.lineNo, response.editDiffs[0].start),
new vscode.Position(response.lineNo, response.editDiffs[0].end + 1)
);
}
catch(exception)
{
catch (exception) {
range = new vscode.Range(
new vscode.Position(response.lineNo, 0),
new vscode.Position(response.lineNo, code[response.lineNo].length)
@ -99,11 +98,11 @@ export class PyMacerRepairEngine implements RepairEngine {
let diagnosticMessage = "";
let actionMessage = "";
try{
try {
diagnosticMessage = response.feedback[0].msg1 + response.feedback[0].msg2;
actionMessage = response.feedback[0].fullText.split(response.feedback[0].msg2)[1].trim();
actionMessage = response.feedback[0].fullText.split(response.feedback[0].msg2)[1].trim();
}
catch{
catch {
diagnosticMessage = "";
actionMessage = "";
}
@ -111,8 +110,8 @@ export class PyMacerRepairEngine implements RepairEngine {
range: range,
message: diagnosticMessage,
severity: vscode.DiagnosticSeverity.Warning,
source: EXTENSION_NAME + getModeIcon(this.context)
}
source: EXTENSION_NAME + getModeIcon(this.context)
};
let action = new vscode.CodeAction(
actionMessage,
vscode.CodeActionKind.QuickFix

Просмотреть файл

@ -6,10 +6,10 @@
export const PYMACER = 1;
export enum RepairEngineTypes {
PyMacer = PYMACER,
PyMacer = PYMACER,
}
export interface RepairEngine{
diagnosticToCodeActionMap: Map<import("vscode").Diagnostic, import("vscode").CodeAction>;
process():Promise<boolean>;
export interface RepairEngine {
diagnosticToCodeActionMap: Map<import("vscode").Diagnostic, import("vscode").CodeAction>;
process(): Promise<boolean>;
}

Просмотреть файл

@ -12,13 +12,13 @@ export class TutorCodeActionProvider implements vscode.CodeActionProvider {
"PythonTutor"
);
public constructor(context: vscode.ExtensionContext, repairEngineType: RepairEngineTypes) {
if (repairEngineType === RepairEngineTypes.PyMacer){
this.repairEngine = new PyMacerRepairEngine(context);
public constructor(context: vscode.ExtensionContext, repairEngineType: RepairEngineTypes) {
if (repairEngineType === RepairEngineTypes.PyMacer) {
this.repairEngine = new PyMacerRepairEngine(context);
}
else{
else {
this.repairEngine = undefined!;
}
}
if (vscode.window.activeTextEditor) {
this.update(vscode.window.activeTextEditor.document);
}
@ -33,15 +33,15 @@ export class TutorCodeActionProvider implements vscode.CodeActionProvider {
public async update(document: vscode.TextDocument) {
let status = await this.repairEngine.process();
if (!status){
console.error('Consultation with repair engine failed.')
if (!status) {
console.error('Consultation with repair engine failed.');
}
let diagnostics = [];
for(let diagnostic of this.repairEngine.diagnosticToCodeActionMap.keys()){
for (let diagnostic of this.repairEngine.diagnosticToCodeActionMap.keys()) {
diagnostics.push(diagnostic);
}
this.diagnosticCollection.set(document.uri, diagnostics);
}
public provideCodeActions(

Просмотреть файл

@ -10,7 +10,7 @@ export const MODE_MEMENTO_NAME = "Python_Tutor_Mode";
export const EXTENSION_NAME = "Python Tutor";
export const BEGINNER_ICON = '👩‍🎓';
export const EXPERT_ICON = '🚀';
export const TEMP_FILE_NAME = 'temp.py'
export const TEMP_FILE_NAME = 'temp.py';
const fs = require('fs').promises;
const COMPILE_TIMEOUT = 100000;
@ -27,14 +27,14 @@ export function getModeIcon(context: vscode.ExtensionContext) {
return BEGINNER_ICON;
}
else {
return EXPERT_ICON
return EXPERT_ICON;
}
}
export async function compiles(pythonPath: string): Promise<boolean> {
let currentCodeSnapshot = vscode.window.activeTextEditor?.document.getText();
let tempFilePath = join(tmpdir(), TEMP_FILE_NAME);
await fs.writeFile(tempFilePath, currentCodeSnapshot);
try {
const execute = promisify(exec);
@ -45,10 +45,11 @@ export async function compiles(pythonPath: string): Promise<boolean> {
timeout: COMPILE_TIMEOUT,
}
);
} catch (exception) {
}
catch (exception) {
console.debug("Compilation failed: " + exception['message']);
return false;
}
console.debug("Compiled successfully.")
console.debug("Compiled successfully.");
return true;
}