mirror of https://gitlab.com/basile.b/dexed.git
130 lines
2.9 KiB
Plaintext
130 lines
2.9 KiB
Plaintext
unit ce_dastworx;
|
|
{$I ce_defines.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, process, jsonscanner, fpjson, jsonparser, ce_common;
|
|
|
|
(**
|
|
* Gets the module name and the imports of the source code located in
|
|
* "source". The first line of "import" contains the module name, double quoted.
|
|
* Each following line contain an import.
|
|
*)
|
|
procedure getModuleImports(source, imports: TStrings);
|
|
|
|
(**
|
|
* Gets the module names and the imports of the sources in "files".
|
|
* source. Each line in "import" that contains double quoted text indicates
|
|
* that a new group of import starts.
|
|
*)
|
|
procedure getModulesImports(const files: string; results: TStrings);
|
|
|
|
procedure getHalsteadMetrics(source: TStrings; out jsn: TJSONObject);
|
|
|
|
implementation
|
|
|
|
var
|
|
toolname: string;
|
|
|
|
function getToolName: string;
|
|
begin
|
|
if toolname = '' then
|
|
toolname := exeFullName('dastworx' + exeExt);
|
|
exit(toolname);
|
|
end;
|
|
|
|
procedure getModuleImports(source, imports: TStrings);
|
|
var
|
|
str: string;
|
|
prc: TProcess;
|
|
begin
|
|
str := getToolName;
|
|
if str.isEmpty then
|
|
exit;
|
|
prc := TProcess.Create(nil);
|
|
try
|
|
prc.Executable := str;
|
|
prc.Parameters.Add('-i');
|
|
prc.Options := [poUsePipes{$IFDEF WINDOWS}, poNewConsole{$ENDIF}];
|
|
prc.ShowWindow := swoHIDE;
|
|
prc.Execute;
|
|
str := source.Text;
|
|
prc.Input.Write(str[1], str.length);
|
|
prc.CloseInput;
|
|
processOutputToStrings(prc, imports);
|
|
while prc.Running do ;
|
|
{$IFDEF DEBUG}
|
|
tryRaiseFromStdErr(prc);
|
|
{$ENDIF}
|
|
finally
|
|
prc.free;
|
|
end;
|
|
end;
|
|
|
|
procedure getModulesImports(const files: string; results: TStrings);
|
|
var
|
|
str: string;
|
|
prc: TProcess;
|
|
begin
|
|
str := getToolName;
|
|
if str.isEmpty then
|
|
exit;
|
|
prc := TProcess.Create(nil);
|
|
try
|
|
prc.Executable := str;
|
|
prc.Parameters.Add(files);
|
|
prc.Parameters.Add('-i');
|
|
prc.Options := [poUsePipes {$IFDEF WINDOWS}, poNewConsole{$ENDIF}];
|
|
prc.ShowWindow := swoHIDE;
|
|
prc.Execute;
|
|
prc.CloseInput;
|
|
processOutputToStrings(prc, results);
|
|
while prc.Running do ;
|
|
{$IFDEF DEBUG}
|
|
tryRaiseFromStdErr(prc);
|
|
{$ENDIF}
|
|
finally
|
|
prc.free;
|
|
end;
|
|
end;
|
|
|
|
procedure getHalsteadMetrics(source: TStrings; out jsn: TJSONObject);
|
|
var
|
|
prc: TProcess;
|
|
prs: TJSONParser;
|
|
jps: TJSONData;
|
|
str: string;
|
|
lst: TStringList;
|
|
begin
|
|
str := getToolName;
|
|
if str.isEmpty then
|
|
exit;
|
|
prc := TProcess.Create(nil);
|
|
lst := TStringList.create;
|
|
try
|
|
prc.Executable := str;
|
|
prc.Parameters.Add('-H');
|
|
prc.Options := [poUsePipes {$IFDEF WINDOWS}, poNewConsole{$ENDIF}];
|
|
prc.ShowWindow := swoHIDE;
|
|
prc.Execute;
|
|
str := source.Text;
|
|
prc.Input.Write(str[1], str.length);
|
|
prc.CloseInput;
|
|
processOutputToStrings(prc, lst);
|
|
prs := TJSONParser.Create(lst.Text, [joIgnoreTrailingComma, joUTF8]);
|
|
jps := prs.Parse;
|
|
if jps.isNotNil and (jps.JSONType = jtObject) then
|
|
jsn := TJSONObject(jps.Clone);
|
|
jps.Free;
|
|
while prc.Running do ;
|
|
finally
|
|
prs.Free;
|
|
prc.Free;
|
|
lst.free;
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|