Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
fb552edc
Unverified
Commit
fb552edc
authored
Nov 07, 2020
by
Yuqian Li
Committed by
GitHub
Nov 07, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Do not analyze files that are not checked in git (#69723)
parent
e4d94f7c
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
50 additions
and
34 deletions
+50
-34
analyze.dart
dev/bots/analyze.dart
+50
-34
No files found.
dev/bots/analyze.dart
View file @
fb552edc
...
...
@@ -146,7 +146,7 @@ final RegExp _legacyDeprecation = RegExp(r' // ignore: flutter_deprecation_synta
Future
<
void
>
verifyDeprecations
(
String
workingDirectory
,
{
int
minimumMatches
=
2000
})
async
{
final
List
<
String
>
errors
=
<
String
>[];
for
(
final
File
file
in
_allFiles
(
workingDirectory
,
'dart'
,
minimumMatches:
minimumMatches
))
{
await
for
(
final
File
file
in
_allFiles
(
workingDirectory
,
'dart'
,
minimumMatches:
minimumMatches
))
{
int
lineNumber
=
0
;
final
List
<
String
>
lines
=
file
.
readAsLinesSync
();
final
List
<
int
>
linesWithDeprecations
=
<
int
>[];
...
...
@@ -245,7 +245,7 @@ Future<void> _verifyNoMissingLicenseForExtension(String workingDirectory, String
assert
(!
license
.
endsWith
(
'
\n
'
));
final
String
licensePattern
=
license
+
'
\n
'
+
(
trailingBlank
?
'
\n
'
:
''
);
final
List
<
String
>
errors
=
<
String
>[];
for
(
final
File
file
in
_allFiles
(
workingDirectory
,
extension
,
minimumMatches:
minimumMatches
))
{
await
for
(
final
File
file
in
_allFiles
(
workingDirectory
,
extension
,
minimumMatches:
minimumMatches
))
{
final
String
contents
=
file
.
readAsStringSync
().
replaceAll
(
'
\r\n
'
,
'
\n
'
);
if
(
contents
.
isEmpty
)
continue
;
// let's not go down the /bin/true rabbit hole
...
...
@@ -276,7 +276,7 @@ const Set<String> _exemptTestImports = <String>{
Future<void> verifyNoTestImports(String workingDirectory) async {
final List<String> errors = <String>[];
assert("// foo
\n
import '
binding_test
.
dart
' as binding;
\n
'".contains(_testImportPattern));
final List<File> dartFiles = _allFiles(path.join(workingDirectory, 'packages'), 'dart', minimumMatches: 1500).toList();
final List<File> dartFiles =
await
_allFiles(path.join(workingDirectory, 'packages'), 'dart', minimumMatches: 1500).toList();
for (final File file in dartFiles) {
for (final String line in file.readAsLinesSync()) {
final Match match = _testImportPattern.firstMatch(line);
...
...
@@ -297,7 +297,7 @@ Future<void> verifyNoTestImports(String workingDirectory) async {
Future<void> verifyNoTestPackageImports(String workingDirectory) async {
// TODO(ianh): Remove this whole test once https://github.com/dart-lang/matcher/issues/98 is fixed.
final List<String> shims = <String>[];
final List<String> errors =
_allFiles(workingDirectory, 'dart', minimumMatches: 2000
)
final List<String> errors =
(await _allFiles(workingDirectory, 'dart', minimumMatches: 2000).toList()
)
.map<String>((File file) {
final String name = Uri.file(path.relative(file.path,
from: workingDirectory)).toFilePath(windows: false);
...
...
@@ -392,7 +392,7 @@ Future<void> verifyNoBadImportsInFlutter(String workingDirectory) async {
// Verify that the imports are well-ordered.
final
Map
<
String
,
Set
<
String
>>
dependencyMap
=
<
String
,
Set
<
String
>>{};
for
(
final
String
directory
in
directories
)
{
dependencyMap
[
directory
]
=
_findFlutterDependencies
(
path
.
join
(
srcPath
,
directory
),
errors
,
checkForMeta:
directory
!=
'foundation'
);
dependencyMap
[
directory
]
=
await
_findFlutterDependencies
(
path
.
join
(
srcPath
,
directory
),
errors
,
checkForMeta:
directory
!=
'foundation'
);
}
assert
(
dependencyMap
[
'material'
].
contains
(
'widgets'
)
&&
dependencyMap
[
'widgets'
].
contains
(
'rendering'
)
&&
...
...
@@ -443,7 +443,7 @@ Future<void> verifyNoBadImportsInFlutter(String workingDirectory) async {
Future
<
void
>
verifyNoBadImportsInFlutterTools
(
String
workingDirectory
)
async
{
final
List
<
String
>
errors
=
<
String
>[];
final
List
<
File
>
files
=
_allFiles
(
path
.
join
(
workingDirectory
,
'packages'
,
'flutter_tools'
,
'lib'
),
'dart'
,
minimumMatches:
200
).
toList
();
final
List
<
File
>
files
=
await
_allFiles
(
path
.
join
(
workingDirectory
,
'packages'
,
'flutter_tools'
,
'lib'
),
'dart'
,
minimumMatches:
200
).
toList
();
for
(
final
File
file
in
files
)
{
if
(
file
.
readAsStringSync
().
contains
(
'package:flutter_tools/'
))
{
errors
.
add
(
'
$yellow${file.path}$reset
imports flutter_tools.'
);
...
...
@@ -515,7 +515,7 @@ Future<void> verifyNoRuntimeTypeInToString(String workingDirectory) async {
final
Set
<
String
>
excludedFiles
=
<
String
>{
path
.
join
(
flutterLib
,
'src'
,
'foundation'
,
'object.dart'
),
// Calls this from within an assert.
};
final
List
<
File
>
files
=
_allFiles
(
flutterLib
,
'dart'
,
minimumMatches:
400
)
final
List
<
File
>
files
=
await
_allFiles
(
flutterLib
,
'dart'
,
minimumMatches:
400
)
.
where
((
File
file
)
=>
!
excludedFiles
.
contains
(
file
.
path
))
.
toList
();
final
RegExp
toStringRegExp
=
RegExp
(
r'^\s+String\s+to(.+?)?String(.+?)?\(\)\s+(\{|=>)'
);
...
...
@@ -563,7 +563,7 @@ Future<void> verifyNoRuntimeTypeInToString(String workingDirectory) async {
}
Future
<
void
>
verifyNoTrailingSpaces
(
String
workingDirectory
,
{
int
minimumMatches
=
4000
})
async
{
final
List
<
File
>
files
=
_allFiles
(
workingDirectory
,
null
,
minimumMatches:
minimumMatches
)
final
List
<
File
>
files
=
await
_allFiles
(
workingDirectory
,
null
,
minimumMatches:
minimumMatches
)
.
where
((
File
file
)
=>
path
.
basename
(
file
.
path
)
!=
'serviceaccount.enc'
)
.
where
((
File
file
)
=>
path
.
basename
(
file
.
path
)
!=
'Ahem.ttf'
)
.
where
((
File
file
)
=>
path
.
extension
(
file
.
path
)
!=
'.snapshot'
)
...
...
@@ -1025,27 +1025,7 @@ Future<void> verifyNoBinaries(String workingDirectory, { Set<Hash256> legacyBina
);
legacyBinaries
??=
_legacyBinaries
;
if
(!
Platform
.
isWindows
)
{
// TODO(ianh): Port this to Windows
final
EvalResult
evalResult
=
await
_evalCommand
(
'git'
,
<
String
>[
'ls-files'
,
'-z'
],
workingDirectory:
workingDirectory
,
);
if
(
evalResult
.
exitCode
!=
0
)
{
exitWithError
(<
String
>[
'git ls-filese failed with exit code
${evalResult.exitCode}
'
,
'
${bold}
stdout:
$reset
'
,
evalResult
.
stdout
,
'
${bold}
stderr:
$reset
'
,
evalResult
.
stderr
,
]);
}
final
List
<
String
>
filenames
=
evalResult
.
stdout
.
split
(
'
\
x00'
);
assert
(
filenames
.
last
.
isEmpty
);
// git ls-files gives a trailing blank 0x00
filenames
.
removeLast
();
final
List
<
File
>
files
=
filenames
.
map
<
File
>((
String
filename
)
=>
File
(
path
.
join
(
workingDirectory
,
filename
)))
.
toList
();
final
List
<
File
>
files
=
await
_gitFiles
(
workingDirectory
,
runSilently:
false
);
final
List
<
String
>
problems
=
<
String
>[];
for
(
final
File
file
in
files
)
{
final
Uint8List
bytes
=
file
.
readAsBytesSync
();
...
...
@@ -1085,7 +1065,35 @@ bool _listEquals<T>(List<T> a, List<T> b) {
return
true
;
}
Iterable
<
File
>
_allFiles
(
String
workingDirectory
,
String
extension
,
{
@required
int
minimumMatches
})
sync
*
{
Future
<
List
<
File
>>
_gitFiles
(
String
workingDirectory
,
{
bool
runSilently
=
true
})
async
{
final
EvalResult
evalResult
=
await
_evalCommand
(
'git'
,
<
String
>[
'ls-files'
,
'-z'
],
workingDirectory:
workingDirectory
,
runSilently:
runSilently
,
);
if
(
evalResult
.
exitCode
!=
0
)
{
exitWithError
(<
String
>[
'git ls-filese failed with exit code
${evalResult.exitCode}
'
,
'
${bold}
stdout:
$reset
'
,
evalResult
.
stdout
,
'
${bold}
stderr:
$reset
'
,
evalResult
.
stderr
,
]);
}
final
List
<
String
>
filenames
=
evalResult
.
stdout
.
split
(
'
\
x00'
);
assert
(
filenames
.
last
.
isEmpty
);
// git ls-files gives a trailing blank 0x00
filenames
.
removeLast
();
return
filenames
.
map
<
File
>((
String
filename
)
=>
File
(
path
.
join
(
workingDirectory
,
filename
)))
.
toList
();
}
Stream
<
File
>
_allFiles
(
String
workingDirectory
,
String
extension
,
{
@required
int
minimumMatches
})
async
*
{
final
Set
<
String
>
gitFileNamesSet
=
<
String
>{};
gitFileNamesSet
.
addAll
((
await
_gitFiles
(
workingDirectory
)).
map
((
File
f
)
=>
path
.
canonicalize
(
f
.
absolute
.
path
)));
assert
(
extension
==
null
||
!
extension
.
startsWith
(
'.'
),
'Extension argument should not start with a period.'
);
final
Set
<
FileSystemEntity
>
pending
=
<
FileSystemEntity
>{
Directory
(
workingDirectory
)
};
int
matches
=
0
;
...
...
@@ -1095,6 +1103,8 @@ Iterable<File> _allFiles(String workingDirectory, String extension, { @required
if
(
path
.
extension
(
entity
.
path
)
==
'.tmpl'
)
continue
;
if
(
entity
is
File
)
{
if
(!
gitFileNamesSet
.
contains
(
path
.
canonicalize
(
entity
.
absolute
.
path
)))
continue
;
if
(
_isGeneratedPluginRegistrant
(
entity
))
continue
;
if
(
path
.
basename
(
entity
.
path
)
==
'flutter_export_environment.sh'
)
...
...
@@ -1146,6 +1156,7 @@ Future<EvalResult> _evalCommand(String executable, List<String> arguments, {
Map
<
String
,
String
>
environment
,
bool
skip
=
false
,
bool
allowNonZeroExit
=
false
,
bool
runSilently
=
false
,
})
async
{
final
String
commandDescription
=
'
${path.relative(executable, from: workingDirectory)}
${arguments.join(' ')}
'
;
final
String
relativeWorkingDir
=
path
.
relative
(
workingDirectory
);
...
...
@@ -1153,7 +1164,10 @@ Future<EvalResult> _evalCommand(String executable, List<String> arguments, {
printProgress
(
'SKIPPING'
,
relativeWorkingDir
,
commandDescription
);
return
null
;
}
if
(!
runSilently
)
{
printProgress
(
'RUNNING'
,
relativeWorkingDir
,
commandDescription
);
}
final
Stopwatch
time
=
Stopwatch
()..
start
();
final
Process
process
=
await
Process
.
start
(
executable
,
arguments
,
...
...
@@ -1170,7 +1184,9 @@ Future<EvalResult> _evalCommand(String executable, List<String> arguments, {
exitCode:
exitCode
,
);
if
(!
runSilently
)
{
print
(
'
$clock
ELAPSED TIME:
$bold${prettyPrintDuration(time.elapsed)}$reset
for
$commandDescription
in
$relativeWorkingDir
'
);
}
if
(
exitCode
!=
0
&&
!
allowNonZeroExit
)
{
stderr
.
write
(
result
.
stderr
);
...
...
@@ -1197,8 +1213,8 @@ Future<void> _runFlutterAnalyze(String workingDirectory, {
final
RegExp
_importPattern
=
RegExp
(
r''
'^
\
s*import (['"])package:flutter/([^.]+)
\
.dart
\
1''');
final RegExp _importMetaPattern = RegExp(r'''^
\
s*import (['"
])
package:
meta
/
meta
\
.
dart
\
1
''');
Set<String> _findFlutterDependencies(String srcPath, List<String> errors, { bool checkForMeta = false })
{
return _allFiles(srcPath, '
dart
', minimumMatches: 1)
Future<Set<String>> _findFlutterDependencies(String srcPath, List<String> errors, { bool checkForMeta = false }) async
{
return
await
_allFiles(srcPath, '
dart
', minimumMatches: 1)
.map<Set<String>>((File file) {
final Set<String> result = <String>{};
for (final String line in file.readAsLinesSync()) {
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment