mirror of
https://github.com/godotengine/godot-vscode-plugin.git
synced 2026-01-04 10:09:58 +03:00
Import docdata from godot editor
Better unused variable checking
This commit is contained in:
86
src/docdata.ts
Normal file
86
src/docdata.ts
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
"use strict";
|
||||||
|
import * as fs from 'fs';
|
||||||
|
import requestGodot from './request';
|
||||||
|
import * as vscode from 'vscode';
|
||||||
|
import * as path from 'path';
|
||||||
|
|
||||||
|
let version: string;
|
||||||
|
let storageDir: string;
|
||||||
|
let docdata: Object = null;
|
||||||
|
|
||||||
|
class DocDataManager {
|
||||||
|
|
||||||
|
constructor(dir: string) {
|
||||||
|
version = "";
|
||||||
|
storageDir = dir;
|
||||||
|
console.log(dir);
|
||||||
|
// Load documents
|
||||||
|
DocDataManager.getDocData().then(doc=>{
|
||||||
|
docdata = doc;
|
||||||
|
console.log("Godot Documentations loaded.");
|
||||||
|
// vscode.window.showInformationMessage("Godot Documentations loaded.");
|
||||||
|
}).catch(e=>{
|
||||||
|
console.log(e);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static checkversion():Promise<string> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if (version != "")
|
||||||
|
resolve(version)
|
||||||
|
else {
|
||||||
|
requestGodot({action: "editor", command: "version"}).then((res:any)=>{
|
||||||
|
version = res.version;
|
||||||
|
resolve(version);
|
||||||
|
}).catch(e=>{
|
||||||
|
reject(e);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static getDocData() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if(docdata)
|
||||||
|
resolve(docdata);
|
||||||
|
else {
|
||||||
|
DocDataManager.checkversion().then((version: string)=> {
|
||||||
|
try {
|
||||||
|
const dir = path.join(storageDir, "docs");
|
||||||
|
if(!(fs.existsSync(dir)))
|
||||||
|
fs.mkdirSync(dir)
|
||||||
|
// Load docdata from file
|
||||||
|
const loadDocdata = (docfile) => {
|
||||||
|
const content = fs.readFileSync(docfile, "utf-8");
|
||||||
|
if(content && content.length > 0) {
|
||||||
|
docdata = JSON.parse(content);
|
||||||
|
resolve(docdata);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
reject(new Error("Load Docdata failed!"));
|
||||||
|
};
|
||||||
|
const docfile: string = path.join(dir, version+".json")
|
||||||
|
if(fs.existsSync(docfile) && fs.statSync(docfile).isFile())
|
||||||
|
loadDocdata(docfile);
|
||||||
|
else {
|
||||||
|
requestGodot({action: "editor", command: "gendoc", path: docfile}).then((res:any)=>{
|
||||||
|
if(res && res.done)
|
||||||
|
loadDocdata(docfile);
|
||||||
|
else
|
||||||
|
reject(new Error("Generate Docdata failed!"));
|
||||||
|
}).catch(e=>{
|
||||||
|
reject(new Error("Generate Docdata failed!"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
reject(new Error("Generate Docdata failed!"));
|
||||||
|
}
|
||||||
|
}).catch(e=> {
|
||||||
|
reject(new Error("Get Docdata failed: cannot get version of your godot editor!"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DocDataManager;
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { workspace, Disposable, ExtensionContext } from 'vscode';
|
import { workspace, Disposable, ExtensionContext } from 'vscode';
|
||||||
import * as vscode from "vscode";
|
|
||||||
import WindowWatch from "./window_watcher";
|
import WindowWatch from "./window_watcher";
|
||||||
|
import ToolManager from './tool_manager';
|
||||||
|
|
||||||
|
let tool: ToolManager = null;
|
||||||
|
|
||||||
export function activate(context: ExtensionContext) {
|
export function activate(context: ExtensionContext) {
|
||||||
|
tool = new ToolManager(context);
|
||||||
|
context.subscriptions.push(tool);
|
||||||
context.subscriptions.push(new WindowWatch());
|
context.subscriptions.push(new WindowWatch());
|
||||||
console.log("[GodotTools]: Extension Activated");
|
console.log("[GodotTools]: Extension Activated");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,8 +54,11 @@ class GDParser {
|
|||||||
});
|
});
|
||||||
// Unused variables
|
// Unused variables
|
||||||
const checker = (name:string, line: number) => {
|
const checker = (name:string, line: number) => {
|
||||||
if(request.text.indexOf(name) == request.text.lastIndexOf(name))
|
const lines = request.text.split(/\r?\n/);
|
||||||
diagnostics.push(new vscode.Diagnostic(new vscode.Range(line-1, 4, line-1, 30), `${name} is never used.`, DiagnosticSeverity.Warning));
|
const pattern = `[\\s\\+\\-\\*/%\\^\\(]${name}[^a-zA-Z_\\$]`;
|
||||||
|
var matchs = request.text.match(new RegExp(pattern, 'gi'));
|
||||||
|
if(matchs.length <= 1)
|
||||||
|
diagnostics.push(new vscode.Diagnostic(new vscode.Range(line-1, lines[line-1].indexOf(name), line-1, lines[line-1].indexOf(name) + name.length), `${name} is never used.`, DiagnosticSeverity.Warning));
|
||||||
};
|
};
|
||||||
for (let key of Object.keys(script.members.variables))
|
for (let key of Object.keys(script.members.variables))
|
||||||
checker(key, script.members.variables[key]);
|
checker(key, script.members.variables[key]);
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ function requestGodot(body : Object) {
|
|||||||
body
|
body
|
||||||
};
|
};
|
||||||
let promise = new Promise((resolve, reject) => {
|
let promise = new Promise((resolve, reject) => {
|
||||||
var req = http.request(options, (res) => {
|
try {
|
||||||
|
var req = http.request(options, (res) => {
|
||||||
let resultString = "";
|
let resultString = "";
|
||||||
res.setEncoding('utf8');
|
res.setEncoding('utf8');
|
||||||
res.on('data', (chunk) => {
|
res.on('data', (chunk) => {
|
||||||
@@ -27,9 +28,12 @@ function requestGodot(body : Object) {
|
|||||||
req.on('error', (e) => {
|
req.on('error', (e) => {
|
||||||
reject(e);
|
reject(e);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
req.write(postString);
|
req.write(postString);
|
||||||
req.end();
|
req.end();
|
||||||
|
} catch (error) {
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return promise;
|
return promise;
|
||||||
}
|
}
|
||||||
|
|||||||
37
src/tool_manager.ts
Normal file
37
src/tool_manager.ts
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import * as vscode from 'vscode';
|
||||||
|
import DocDataManager from './docdata';
|
||||||
|
import godotRequest from './request';
|
||||||
|
|
||||||
|
class ToolManager {
|
||||||
|
|
||||||
|
private workspaceDir: string = "";
|
||||||
|
private docs: DocDataManager = null;
|
||||||
|
|
||||||
|
constructor(context: vscode.ExtensionContext) {
|
||||||
|
this.workspaceDir = vscode.workspace.rootPath;
|
||||||
|
this.validate();
|
||||||
|
this.docs = new DocDataManager(context.extensionPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
validate() {
|
||||||
|
const self = this;
|
||||||
|
godotRequest({action: "editor", command: "projectdir"}).then((res: any)=>{
|
||||||
|
let path = res.path;
|
||||||
|
if(path && path.length> 0 && path.endsWith("/"))
|
||||||
|
path = path.substring(0, path.length-1)
|
||||||
|
if( path == self.workspaceDir)
|
||||||
|
vscode.window.showInformationMessage("Connected to godot editor server");
|
||||||
|
else {
|
||||||
|
vscode.window.showWarningMessage("The opened project is not same with godot editor");
|
||||||
|
}
|
||||||
|
}).catch(e=>{
|
||||||
|
vscode.window.showErrorMessage("Failed connect to godot editor server");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
dispose() {
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ToolManager;
|
||||||
@@ -2,8 +2,6 @@ import {Disposable, window} from 'vscode';
|
|||||||
import parse from "./gdscript/parser";
|
import parse from "./gdscript/parser";
|
||||||
import GDParser from './gdscript/parser';
|
import GDParser from './gdscript/parser';
|
||||||
import GDScriptCompleter from './gdscript/completion';
|
import GDScriptCompleter from './gdscript/completion';
|
||||||
import * as path from 'path';
|
|
||||||
import * as fs from 'fs';
|
|
||||||
|
|
||||||
|
|
||||||
interface DocumentFlag {
|
interface DocumentFlag {
|
||||||
|
|||||||
Reference in New Issue
Block a user