Bearbeiten von „Datei search engine.dart“
Zur Navigation springen
Zur Suche springen
Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden.
Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.
Aktuelle Version | Dein Text | ||
Zeile 352: | Zeile 352: | ||
<pre>/// Searches the files matching the [filePattern] in a [directory]. | <pre>/// Searches the files matching the [filePattern] in a [directory]. | ||
/// This method is recursive on subdirectories. | /// This method is recursive on subdirectories. | ||
void searchFilePattern(RegExp filePattern, String directory, int depth) { | void searchFilePattern(RegExp filePattern, String directory, int depth) { | ||
if (verboseLevel >= 2 && depth <= 1 || verboseLevel >= 3) { | if (verboseLevel >= 2 && depth <= 1 || verboseLevel >= 3) { | ||
Zeile 362: | Zeile 361: | ||
for (var file in Directory(directory).listSync()) { | for (var file in Directory(directory).listSync()) { | ||
final name = file.path; | final name = file.path; | ||
final node = basename(name); | final node = path.basename(name); | ||
if (FileSystemEntity.isDirectorySync(name)) { | if (FileSystemEntity.isDirectorySync(name)) { | ||
if (fileOptions.excludedDirs != null && | if (fileOptions.excludedDirs != null && | ||
Zeile 373: | Zeile 372: | ||
subDirectories.add(name); | subDirectories.add(name); | ||
} | } | ||
} else { | |||
} | if (filePattern != null && filePattern.firstMatch(node) == null) { | ||
ignoredFiles++; | |||
if (verboseLevel >= 4) { | |||
print('= ignoring not matching $name'); | |||
} | |||
continue; | |||
} | } | ||
if (fileOptions.excluded != null && | |||
fileOptions.excluded.firstMatch(node) != null) { | |||
ignoredFiles++; | |||
if (verboseLevel >= 4) { | |||
print('= ignoring excluded $name'); | |||
} | |||
continue; | |||
} | } | ||
if (!fileOptions.processBinaries && isBinary(name)) { | |||
if (verboseLevel >= 4) { | |||
print('= ignoring binary $name'); | |||
} | |||
countBinaries++; | |||
continue; | |||
} | } | ||
final safeHits = totalHitLines; | |||
searchFile(name); | |||
if (totalHitLines > safeHits) { | |||
totalHitFiles++; | |||
if (searchOptions.exitFiles != null && | |||
totalHitFiles >= searchOptions.exitFiles) { | |||
throw ExitException('hit files: $totalHitFiles'); | |||
} | |||
} | } | ||
} | } | ||
Zeile 423: | Zeile 422: | ||
* <code>name = file.path;</code> Das Attribut <code>path</code> liefert den vollen Namen der Datei. | * <code>name = file.path;</code> Das Attribut <code>path</code> liefert den vollen Namen der Datei. | ||
* <code>node = path.basename(name);</code> Die Funktion <code>basename()</code> entfernt die Pfadangabe vom Dateinamen. | * <code>node = path.basename(name);</code> Die Funktion <code>basename()</code> entfernt die Pfadangabe vom Dateinamen. | ||
* <code>if (FileSystemEntity.isDirectorySync(name))</code> Es wird geprüft, ob die Datei ein Verzeichnis ist: Wenn ja, wird untersucht, ob ein Ausschluss des Verzeichnisses mittels der Option <code>--excluded-dirs</code> definiert | * <code>if (FileSystemEntity.isDirectorySync(name))</code> Es wird geprüft, ob die Datei ein Verzeichnis ist: Wenn ja, wird das untersucht, ob ein Ausschluss des Verzeichnisses mittels der Option <code>--excluded-dirs</code> definiert. Wenn nicht, wird der volle Dateiname an die Liste der Untervzeichnisse angehängt: <code>subDirectories.add(name);</code> | ||
* <code>if (filePattern != null && filePattern.firstMatch(node) == null)</code> | * <code>if (filePattern != null && filePattern.firstMatch(node) == null)</code> | ||
** Es wird geprüft, ob ein Dateimuster vorliegt (<code>filePattern != null</code>), aber kein Treffer vorliegt: Dann kommt die Datei nicht in Frage. | ** Es wird geprüft, ob ein Dateimuster vorliegt (<code>filePattern != null</code>), aber kein Treffer vorliegt: Dann kommt die Datei nicht in Frage. | ||
Zeile 429: | Zeile 428: | ||
* <code>if (fileOptions.excluded != null && fileOptions.excluded.firstMatch(node) != null)</code> | * <code>if (fileOptions.excluded != null && fileOptions.excluded.firstMatch(node) != null)</code> | ||
** Wenn eine Dateiauschlussoption (<code>--excluded</code> definiert ist, und das Suchmuster passt, kommt die Datei nicht in Frage, es geht mit dem nächsten Eintrag weiter (<code>continue</code>). | ** Wenn eine Dateiauschlussoption (<code>--excluded</code> definiert ist, und das Suchmuster passt, kommt die Datei nicht in Frage, es geht mit dem nächsten Eintrag weiter (<code>continue</code>). | ||
* <code>if (!fileOptions.processBinaries && isBinary(name))</code>Wenn die Option <code>--process-binary</code> nicht gesetzt ist und die Datei binär ist, geht es zum nächsten Listeneintrag (<code>continue</code>) | * <code>if (!fileOptions.processBinaries && isBinary(name))</code>Wenn die Option <code>--process-binary</code> nicht gesetzt ist und die Datei binär ist, geht es zum nächsten Listeneintrag (<code>continue</code>). | ||
* <code>searchFile(name);</code> Hier findet die Suche in der Datei statt. | * <code>searchFile(name);</code> Hier findet die Suche in der Datei statt. | ||
* <code>if (totalHitLines > safeHits)</code> Wenn sich die Zahl der Trefferzeilen geändert hat, erhöht sich die Zahl der Trefferdateien. Wenn mit der Option <code>--exit-files</code> hier eine Grenze definiert wurde und diese erreicht ist, wird ein Schnellausstieg mit dem Werfen der Ausnahme <code>ExitException</code> getätigt. | * <code>if (totalHitLines > safeHits)</code> Wenn sich die Zahl der Trefferzeilen geändert hat, erhöht sich die Zahl der Trefferdateien. Wenn mit der Option <code>--exit-files</code> hier eine Grenze definiert wurde und diese erreicht ist, wird ein Schnellausstieg mit dem Werfen der Ausnahme <code>ExitException</code> getätigt. | ||
* <code>try { ... } on FileSystemException {</code> Beim Aufruf der Methode <code>listSync()</code> kann ein Problem auftreten, das das Werfen der Ausnahme <code>FileSystemException</code> auslöst. In diesem Fall wird die Statistik berichtigt und die Suche in diesem Verzeichnis beendet. | * <code>try { ... } on FileSystemException {</code> Beim Aufruf der Methode <code>listSync()</code> kann ein Problem auftreten, das das Werfen der Ausnahme <code>FileSystemException</code> auslöst. In diesem Fall wird die Statistik berichtigt und die Suche in diesem Verzeichnis beendet. | ||
* <code>if (fileOptions.recursive)</code> Wenn die Option <code>--recursive</code> gesetzt ist, wird die Liste der Unterverzeichnisse in einer Schleife <code>for (var subDir in subDirectories)</code> abgearbeitet. Das geschieht durch Aufruf der Methode <code>searchFilePattern()</code>, also einem '''rekursiven Aufruf''' von "sich selber" | * <code>if (fileOptions.recursive)</code> Wenn die Option <code>--recursive</code> gesetzt ist, wird die Liste der Unterverzeichnisse in einer Schleife <code>for (var subDir in subDirectories)</code> abgearbeitet. Das geschieht durch Aufruf der Methode <code>searchFilePattern()</code>, also einem '''rekursiven Aufruf''' von "sich selber". | ||
== Die Methode showLine() == | == Die Methode showLine() == |