[reword]
This commit is contained in:
@@ -4,9 +4,9 @@ import { bfVisitor } from './generated/bfVisitor';
|
||||
import { DiagnosticSeverity } from 'vscode-languageclient';
|
||||
import { getTree } from './BranFlakesParseRunner';
|
||||
import { RuleNode } from 'antlr4ts/tree/RuleNode';
|
||||
import InputStrategy from './input/InputStrategy';
|
||||
import type InputStrategy from './input/InputStrategy';
|
||||
|
||||
export default class BranFlakesExecutorVisitor
|
||||
export class BranFlakesExecutorVisitor
|
||||
extends AbstractParseTreeVisitor<Promise<void>>
|
||||
implements bfVisitor<Promise<void>>
|
||||
{
|
||||
|
4
client/src/command/BranFlakesCommand.ts
Normal file
4
client/src/command/BranFlakesCommand.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export interface BranFlakesCommand {
|
||||
getCommandName(): string;
|
||||
getCommandHandler(): (...args: any) => Promise<any>;
|
||||
}
|
@@ -1,5 +0,0 @@
|
||||
|
||||
export interface Command{
|
||||
getCommandName():string;
|
||||
getCommandHandler():(...args:any)=>Promise<any>;
|
||||
}
|
@@ -1,7 +1,6 @@
|
||||
import { window } from 'vscode';
|
||||
import { Command as BranFlakesCommand } from './Command';
|
||||
import type { BranFlakesCommand } from './BranFlakesCommand';
|
||||
import { VSCodePromptInputStrategy } from '../input/VSCodePromptInputStrategy';
|
||||
import BranFlakesExecutorVisitor from '../BranFlakesExecutorVisitor';
|
||||
|
||||
export class CompileBranFlakesCommand implements BranFlakesCommand {
|
||||
getCommandName() {
|
||||
@@ -14,6 +13,10 @@ export class CompileBranFlakesCommand implements BranFlakesCommand {
|
||||
const inputStrategy = new VSCodePromptInputStrategy(
|
||||
window.showInputBox
|
||||
);
|
||||
const { BranFlakesExecutorVisitor } = await import(
|
||||
'../BranFlakesExecutorVisitor'
|
||||
);
|
||||
|
||||
const output = await BranFlakesExecutorVisitor.run(
|
||||
text,
|
||||
fn,
|
@@ -4,14 +4,15 @@
|
||||
* ------------------------------------------------------------------------------------------ */
|
||||
|
||||
import * as path from 'path';
|
||||
import { ExtensionContext, commands, window } from 'vscode';
|
||||
import { commands } from 'vscode';
|
||||
import type { ExtensionContext } from 'vscode';
|
||||
import {
|
||||
LanguageClient,
|
||||
LanguageClientOptions,
|
||||
ServerOptions,
|
||||
TransportKind,
|
||||
} from 'vscode-languageclient';
|
||||
import { CompileBranFlakesCommand } from './command/CompileCommand';
|
||||
import { CompileBranFlakesCommand } from './command/CompileBranFlakesCommand';
|
||||
|
||||
let client: LanguageClient;
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import { CancellationToken, InputBoxOptions } from 'vscode';
|
||||
import InputStrategy from './InputStrategy';
|
||||
import type { CancellationToken, InputBoxOptions } from 'vscode';
|
||||
import type InputStrategy from './InputStrategy';
|
||||
|
||||
export class VSCodePromptInputStrategy implements InputStrategy {
|
||||
private inputQueue: string = '';
|
||||
|
@@ -5,9 +5,9 @@
|
||||
"author": "Atreya Bain",
|
||||
"license": "MIT",
|
||||
"publisher": "atreyabain",
|
||||
"version": "0.2.0",
|
||||
"version": "0.2.1",
|
||||
"icon": "assets/128.png",
|
||||
"categories": [],
|
||||
"categories": ["Programming Languages","Linters"],
|
||||
"keywords": [
|
||||
"multi-root ready",
|
||||
"brainfuck",
|
||||
|
@@ -15,19 +15,14 @@ import {
|
||||
TextDocumentPositionParams,
|
||||
TextDocumentSyncKind,
|
||||
InitializeResult,
|
||||
Position,
|
||||
} from 'vscode-languageserver';
|
||||
|
||||
|
||||
|
||||
import { TextDocument } from 'vscode-languageserver-textdocument';
|
||||
|
||||
|
||||
// Create a connection for the server. The connection uses Node's IPC as a transport.
|
||||
// Also include all preview / proposed LSP features.
|
||||
let connection = createConnection(ProposedFeatures.all);
|
||||
|
||||
|
||||
// Create a simple text document manager. The text document manager
|
||||
// supports full document sync only
|
||||
let documents: TextDocuments<TextDocument> = new TextDocuments(TextDocument);
|
||||
@@ -113,7 +108,9 @@ connection.onDidChangeConfiguration(change => {
|
||||
}
|
||||
|
||||
// Revalidate all open text documents
|
||||
documents.all().forEach(validateTextDocument);
|
||||
Promise.all(documents.all().map(validateTextDocument)).catch(e => {
|
||||
connection.console.log('Failed to validate text documents');
|
||||
});
|
||||
});
|
||||
|
||||
function getDocumentSettings(resource: string): Thenable<ExampleSettings> {
|
||||
@@ -139,7 +136,6 @@ documents.onDidClose(e => {
|
||||
// The content of a text document has changed. This event is emitted
|
||||
// when the text document first opened or when its content has changed.
|
||||
documents.onDidChangeContent(change => {
|
||||
//change.contentChanges;
|
||||
validateTextDocument(change.document);
|
||||
});
|
||||
|
||||
@@ -149,20 +145,25 @@ documents.onDidSave(change => {
|
||||
});
|
||||
|
||||
const validateBrackets = (text: string) => {
|
||||
let count = 0, lp: number[] = [],issues:number[]=[];
|
||||
let count = 0,
|
||||
lp: number[] = [],
|
||||
issues: number[] = [];
|
||||
const textsplit = text.split('');
|
||||
textsplit.forEach((x, i) => {
|
||||
if (x === '[' || x === ']') {
|
||||
|
||||
if (x === '[') {lp.push(i);}
|
||||
if (x === ']') {if(lp.length===0) {issues.push(i);}lp.pop();}
|
||||
|
||||
|
||||
if (x === '[') {
|
||||
lp.push(i);
|
||||
}
|
||||
if (x === ']') {
|
||||
if (lp.length === 0) {
|
||||
issues.push(i);
|
||||
}
|
||||
lp.pop();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return [...lp,...issues];
|
||||
return [...lp, ...issues];
|
||||
};
|
||||
|
||||
async function validateTextDocument(textDocument: TextDocument): Promise<void> {
|
||||
@@ -175,34 +176,17 @@ async function validateTextDocument(textDocument: TextDocument): Promise<void> {
|
||||
let diagnostics: Diagnostic[] = [];
|
||||
const issues = validateBrackets(text);
|
||||
|
||||
diagnostics.push(...issues.map<Diagnostic>(e => ({
|
||||
diagnostics.push(
|
||||
...issues.map<Diagnostic>(e => ({
|
||||
message: 'Brackets unmatched',
|
||||
range:{
|
||||
range: {
|
||||
start: textDocument.positionAt(e),
|
||||
end: textDocument.positionAt(e+1),
|
||||
end: textDocument.positionAt(e + 1),
|
||||
},
|
||||
severity:DiagnosticSeverity.Error,
|
||||
code:'[ and ]',
|
||||
})));
|
||||
|
||||
// diagnostics.push({
|
||||
// message: 'Brackets not matched',
|
||||
// range: {
|
||||
// start: { line: 0, character: 0 },
|
||||
// end: { line: 0, character: 0 },
|
||||
// },
|
||||
// });
|
||||
|
||||
// diagnostics.push(<Diagnostic>{
|
||||
// severity: DiagnosticSeverity.Information,
|
||||
// range: {
|
||||
// start: textDocument.positionAt(0),
|
||||
// end: textDocument.positionAt(1),
|
||||
// },
|
||||
// // message:`HI:(${text})(${result.hasErrors()},${result.hasWarnings()})`,
|
||||
// message: `Parsing Failed`,
|
||||
// source: 'test',
|
||||
// });
|
||||
severity: DiagnosticSeverity.Error,
|
||||
code: '[ and ]',
|
||||
}))
|
||||
);
|
||||
|
||||
// Send the computed diagnostics to VSCode.
|
||||
connection.sendDiagnostics({ uri: textDocument.uri, diagnostics });
|
||||
@@ -250,7 +234,6 @@ connection.onCompletion(
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
// Make the text document manager listen on the connection
|
||||
// for open, change and close text document events
|
||||
documents.listen(connection);
|
||||
|
Reference in New Issue
Block a user