@@ -6,6 +6,7 @@ private import codeql.rust.elements.SourceFile
66private import codeql.rust.elements.AstNode
77private import codeql.rust.elements.Comment
88private import codeql.rust.Diagnostics
9+ private import codeql.rust.internal.ExtractorStep
910
1011private module Input implements InputSig {
1112 abstract class ContainerBase extends @container {
@@ -36,7 +37,9 @@ class Folder = Impl::Folder;
3637/** A file. */
3738class File extends Container , Impl:: File {
3839 /** Holds if this file was extracted from ordinary source code. */
39- predicate fromSource ( ) { any ( ) }
40+ predicate fromSource ( ) {
41+ exists ( ExtractorStep s | s .getAction ( ) = "Extract" and s .getFile ( ) = this )
42+ }
4043
4144 /**
4245 * Gets the number of lines containing code in this file. This value
@@ -58,11 +61,20 @@ class File extends Container, Impl::File {
5861 }
5962}
6063
64+ /**
65+ * A source file that was extracted.
66+ *
67+ * TODO: rename `SourceFile` from the generated AST to give that name to this class.
68+ */
69+ class ExtractedFile extends File {
70+ ExtractedFile ( ) { this .fromSource ( ) }
71+ }
72+
6173/**
6274 * A successfully extracted file, that is, a file that was extracted and
6375 * contains no extraction errors or warnings.
6476 */
65- class SuccessfullyExtractedFile extends File {
77+ class SuccessfullyExtractedFile extends ExtractedFile {
6678 SuccessfullyExtractedFile ( ) {
6779 not exists ( Diagnostic d |
6880 d .getLocation ( ) .getFile ( ) = this and
0 commit comments