diff --git a/lib/compilers/argument-parsers.js b/lib/compilers/argument-parsers.ts similarity index 91% rename from lib/compilers/argument-parsers.js rename to lib/compilers/argument-parsers.ts index 235d6b94a9505d8f53577908a3ac14ea54af3b10..b1161101f5fd3c9d97fdc6f41b5800f22da819f0 100644 --- a/lib/compilers/argument-parsers.js +++ b/lib/compilers/argument-parsers.ts @@ -36,9 +36,9 @@ export class BaseParser { return _.keys(options).find(option => option.includes(forOption)); } - static parseLines(stdout, optionRegex) { - let previousOption = false; - let options = {}; + static parseLines(stdout, optionRegex: RegExp) { + let previousOption: false | string = false; + const options = {}; utils.eachLine(stdout, line => { const match = line.match(optionRegex); @@ -113,7 +113,7 @@ export class GCCParser extends BaseParser { } } - static async parse(compiler) { + static override async parse(compiler) { const results = await Promise.all([ GCCParser.getOptions(compiler, '-fsyntax-only --help'), GCCParser.getOptions(compiler, '-fsyntax-only --target-help'), @@ -126,7 +126,7 @@ export class GCCParser extends BaseParser { return compiler; } - static async getOptions(compiler, helpArg) { + static override async getOptions(compiler, helpArg) { const optionFinder = /^\s*(--?[\d+,<=>[\]a-z|-]*)\s*(.*)/i; const result = await compiler.execCompilerCached(compiler.compiler.exe, helpArg.split(' ')); const options = result.code === 0 ? BaseParser.parseLines(result.stdout + result.stderr, optionFinder) : {}; @@ -136,6 +136,8 @@ export class GCCParser extends BaseParser { } export class ClangParser extends BaseParser { + static mllvmOptions = new Set<string>(); + static setCompilerSettingsFromOptions(compiler, options) { logger.debug(`clang-like compiler options: ${_.keys(options).join(' ')}`); if (BaseParser.hasSupport(options, '-fsave-optimization-record')) { @@ -169,7 +171,7 @@ export class ClangParser extends BaseParser { compiler.compiler.options += ' -fno-crash-diagnostics'; } - static async parse(compiler) { + static override async parse(compiler) { try { const options = await ClangParser.getOptions(compiler, '--help'); @@ -188,7 +190,7 @@ export class ClangParser extends BaseParser { } } - static async getOptions(compiler, helpArg, populate = true) { + static override async getOptions(compiler, helpArg, populate = true) { const optionFinder = /^\s*(--?[\d+,<=>[\]a-z|-]*)\s*(.*)/i; const result = await compiler.execCompilerCached(compiler.compiler.exe, helpArg.split(' ')); const options = result.code === 0 ? BaseParser.parseLines(result.stdout + result.stderr, optionFinder) : {}; @@ -227,13 +229,13 @@ export class LDCParser extends BaseParser { } } - static async parse(compiler) { + static override async parse(compiler) { const options = await LDCParser.getOptions(compiler, '--help-hidden'); this.setCompilerSettingsFromOptions(compiler, options); return compiler; } - static async getOptions(compiler, helpArg, populate = true) { + static override async getOptions(compiler, helpArg, populate = true) { const optionFinder = /^\s*(--?[\d+,<=>[\]a-z|-]*)\s*(.*)/i; const result = await compiler.execCompilerCached(compiler.compiler.exe, helpArg.split(' ')); const options = result.code === 0 ? BaseParser.parseLines(result.stdout + result.stderr, optionFinder) : {}; @@ -245,14 +247,14 @@ export class LDCParser extends BaseParser { } export class ErlangParser extends BaseParser { - static async parse(compiler) { + static override async parse(compiler) { await ErlangParser.getOptions(compiler, '-help'); return compiler; } } export class PascalParser extends BaseParser { - static async parse(compiler) { + static override async parse(compiler) { await PascalParser.getOptions(compiler, '-help'); return compiler; } @@ -266,13 +268,13 @@ export class ISPCParser extends BaseParser { } } - static async parse(compiler) { + static override async parse(compiler) { const options = await ISPCParser.getOptions(compiler, '--help'); await this.setCompilerSettingsFromOptions(compiler, options); return compiler; } - static async getOptions(compiler, helpArg) { + static override async getOptions(compiler, helpArg) { const result = await compiler.execCompilerCached(compiler.compiler.exe, [helpArg]); const optionFinder = /^\s*\[(--?[\d\s()+,/<=>a-z{|}-]*)]\s*(.*)/i; const options = result.code === 0 ? BaseParser.parseLines(result.stdout + result.stderr, optionFinder) : {}; @@ -282,35 +284,35 @@ export class ISPCParser extends BaseParser { } export class JavaParser extends BaseParser { - static async parse(compiler) { + static override async parse(compiler) { await JavaParser.getOptions(compiler, '-help'); return compiler; } } export class KotlinParser extends BaseParser { - static async parse(compiler) { + static override async parse(compiler) { await KotlinParser.getOptions(compiler, '-help'); return compiler; } } export class ScalaParser extends BaseParser { - static async parse(compiler) { + static override async parse(compiler) { await ScalaParser.getOptions(compiler, '-help'); return compiler; } } export class VCParser extends BaseParser { - static async parse(compiler) { + static override async parse(compiler) { await VCParser.getOptions(compiler, '/help'); return compiler; } - static parseLines(stdout, optionRegex) { - let previousOption = false; - let options = {}; + static override parseLines(stdout, optionRegex) { + let previousOption: string | false = false; + const options = {}; const matchLine = line => { if (line.startsWith('/?')) return; @@ -362,7 +364,7 @@ export class VCParser extends BaseParser { return options; } - static async getOptions(compiler, helpArg) { + static override async getOptions(compiler, helpArg) { const result = await compiler.execCompilerCached(compiler.compiler.exe, [helpArg]); const optionFinder = /^\s*(\/[\w#+,.:<=>[\]{|}-]*)\s*(.*)/i; const options = result.code === 0 ? this.parseLines(result.stdout, optionFinder) : {}; @@ -379,7 +381,7 @@ export class RustParser extends BaseParser { } } - static async parse(compiler) { + static override async parse(compiler) { const results = await Promise.all([ RustParser.getOptions(compiler, '--help'), RustParser.getOptions(compiler, '-C help'), @@ -390,7 +392,7 @@ export class RustParser extends BaseParser { return compiler; } - static async getOptions(compiler, helpArg) { + static override async getOptions(compiler, helpArg) { const result = await compiler.execCompilerCached(compiler.compiler.exe, helpArg.split(' ')); let options = {}; if (result.code === 0) { @@ -410,42 +412,42 @@ export class RustParser extends BaseParser { } export class MrustcParser extends BaseParser { - static async parse(compiler) { + static override async parse(compiler) { await MrustcParser.getOptions(compiler, '--help'); return compiler; } } export class NimParser extends BaseParser { - static async parse(compiler) { + static override async parse(compiler) { await NimParser.getOptions(compiler, '-help'); return compiler; } } export class CrystalParser extends BaseParser { - static async parse(compiler) { + static override async parse(compiler) { await CrystalParser.getOptions(compiler, 'build'); return compiler; } } export class TypeScriptNativeParser extends BaseParser { - static async parse(compiler) { + static override async parse(compiler) { await TypeScriptNativeParser.getOptions(compiler, '--help'); return compiler; } } export class TurboCParser extends BaseParser { - static async parse(compiler) { + static override async parse(compiler) { await TurboCParser.getOptions(compiler, ''); return compiler; } } export class ToitParser extends BaseParser { - static async parse(compiler) { + static override async parse(compiler) { await ToitParser.getOptions(compiler, '-help'); return compiler; }