This commit is contained in:
Hackerpilot 2015-06-04 16:50:29 -07:00
parent 017d208405
commit 77a7b4f5d2
2 changed files with 18 additions and 9 deletions

View File

@ -115,8 +115,11 @@ void generateReport(string[] fileNames, const StaticAnalysisConfig config)
writeln("}"); writeln("}");
} }
/// For multiple files /**
/// Returns: true if there were errors * For multiple files
*
* Returns: true if there were errors or if there were warnings and `staticAnalyze` was true.
*/
bool analyze(string[] fileNames, const StaticAnalysisConfig config, bool staticAnalyze = true) bool analyze(string[] fileNames, const StaticAnalysisConfig config, bool staticAnalyze = true)
{ {
bool hasErrors = false; bool hasErrors = false;
@ -129,10 +132,11 @@ bool analyze(string[] fileNames, const StaticAnalysisConfig config, bool staticA
ParseAllocator p = new ParseAllocator; ParseAllocator p = new ParseAllocator;
StringCache cache = StringCache(StringCache.defaultBucketCount); StringCache cache = StringCache(StringCache.defaultBucketCount);
uint errorCount = 0; uint errorCount = 0;
uint warningCount = 0;
const Module m = parseModule(fileName, code, p, cache, false, null, const Module m = parseModule(fileName, code, p, cache, false, null,
&errorCount, null); &errorCount, &warningCount);
assert (m); assert (m);
if (errorCount > 0) if (errorCount > 0 || (staticAnalyze && warningCount > 0))
hasErrors = true; hasErrors = true;
MessageSet results = analyze(fileName, m, config, staticAnalyze); MessageSet results = analyze(fileName, m, config, staticAnalyze);
if (results is null) if (results is null)

View File

@ -182,11 +182,11 @@ int main(string[] args)
if (report) if (report)
generateReport(expandArgs(args), config); generateReport(expandArgs(args), config);
else else
analyze(expandArgs(args), config, true); return analyze(expandArgs(args), config, true) ? 1 : 0;
} }
else if (syntaxCheck) else if (syntaxCheck)
{ {
return .syntaxCheck(expandArgs(args)); return .syntaxCheck(expandArgs(args)) ? 1 : 0;
} }
else else
{ {
@ -265,6 +265,7 @@ int main(string[] args)
return 0; return 0;
} }
private:
string[] expandArgs(string[] args) string[] expandArgs(string[] args)
{ {
@ -359,11 +360,13 @@ options:
--syntaxCheck | -s [sourceFile] --syntaxCheck | -s [sourceFile]
Lexes and parses sourceFile, printing the line and column number of any Lexes and parses sourceFile, printing the line and column number of any
syntax errors to stdout. One error or warning is printed per line. syntax errors to stdout. One error or warning is printed per line.
If no files are specified, input is read from stdin. If no files are specified, input is read from stdin. %1$s will exit with
a status code of zero if no errors are found, 1 otherwise.
--styleCheck | -S [sourceFiles] --styleCheck | -S [sourceFiles]
Lexes and parses sourceFiles, printing the line and column number of any Lexes and parses sourceFiles, printing the line and column number of any
static analysis check failures stdout. static analysis check failures stdout. %1$s will exit with a status code
of zero if no warnings or errors are found, 1 otherwise.
--ctags | -c sourceFile --ctags | -c sourceFile
Generates ctags information from the given source code file. Note that Generates ctags information from the given source code file. Note that
@ -388,7 +391,9 @@ options:
current working directory if none are specified. current working directory if none are specified.
--report [sourceFiles sourceDirectories] --report [sourceFiles sourceDirectories]
Generate a static analysis report in JSON format. Implies --styleCheck. Generate a static analysis report in JSON format. Implies --styleCheck,
however the exit code will still be zero if errors or warnings are
found.
--config configFile --config configFile
Use the given configuration file instead of the default located in Use the given configuration file instead of the default located in