Ruby: Make similar changes to differentiate extraction errors and warnings, and mostly restore original behaviour.

This commit is contained in:
Geoffrey White
2024-10-03 17:27:52 +01:00
parent 4c7ec59306
commit 1ea94faccf
6 changed files with 28 additions and 10 deletions

View File

@@ -31,3 +31,5 @@ query predicate multipleToString(AstNode n, string s) {
}
query predicate extractionError(ExtractionError error) { any() }
query predicate extractionWarning(ExtractionWarning error) { any() }

View File

@@ -2,6 +2,7 @@
private import codeql.Locations
private import codeql.util.FileSystem
private import codeql.ruby.Diagnostics
private module Input implements InputSig {
abstract class ContainerBase extends @container {
@@ -34,3 +35,20 @@ class File extends Container, Impl::File {
/** Holds if this file was extracted from ordinary source code. */
predicate fromSource() { any() }
}
/**
* A successfully extracted file, that is, a file that was extracted and
* contains no extraction errors or warnings.
*/
class SuccessfullyExtractedFile extends File {
SuccessfullyExtractedFile() {
not exists(Diagnostic d |
d.getLocation().getFile() = this and
(
d instanceof ExtractionError
or
d instanceof ExtractionWarning
)
)
}
}

View File

@@ -2,14 +2,15 @@
* @id rb/summary/number-of-files-extracted-with-errors
* @name Total number of Ruby files that were extracted with errors
* @description The total number of Ruby code files that we extracted, but where
* at least one extraction error occurred in the process.
* at least one extraction error (or warning) occurred in the process.
* @kind metric
* @tags summary
*/
import codeql.ruby.AST
import codeql.ruby.Diagnostics
import codeql.files.FileSystem
select count(File f |
exists(ExtractionError e | e.getLocation().getFile() = f) and exists(f.getRelativePath())
exists(f.getRelativePath()) and
not f instanceof SuccessfullyExtractedFile
)

View File

@@ -2,14 +2,12 @@
* @id rb/summary/number-of-successfully-extracted-files
* @name Total number of Ruby files that were extracted without error
* @description The total number of Ruby code files that we extracted without
* encountering any extraction errors
* encountering any extraction errors (or warnings).
* @kind metric
* @tags summary
*/
import codeql.ruby.AST
import codeql.ruby.Diagnostics
import codeql.files.FileSystem
select count(File f |
not exists(ExtractionError e | e.getLocation().getFile() = f) and exists(f.getRelativePath())
)
select count(SuccessfullyExtractedFile f | exists(f.getRelativePath()))

View File

@@ -1,2 +1,2 @@
extractionError
extractionWarning
| src/not_ruby.rb:5:25:5:26 | A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. |

View File

@@ -1 +0,0 @@
| src/not_ruby.rb:5:25:5:26 | A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. | Extraction failed in src/not_ruby.rb with error A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. | 2 |