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
d5c842c0
Unverified
Commit
d5c842c0
authored
Jun 25, 2021
by
Jonah Williams
Committed by
GitHub
Jun 25, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[flutter_tools] make analyze once an integration test (#85336)
parent
025397ae
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
396 additions
and
0 deletions
+396
-0
analyze_once_test.dart
...utter_tools/test/integration.shard/analyze_once_test.dart
+396
-0
No files found.
packages/flutter_tools/test/
commands.shard/permeable
/analyze_once_test.dart
→
packages/flutter_tools/test/
integration.shard
/analyze_once_test.dart
View file @
d5c842c0
...
...
@@ -4,75 +4,41 @@
// @dart = 2.8
import
'package:flutter_tools/src/artifacts.dart'
;
import
'package:flutter_tools/src/base/common.dart'
;
import
'package:flutter_tools/src/base/error_handling_io.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/base/io.dart'
;
import
'package:flutter_tools/src/base/logger.dart'
;
import
'package:flutter_tools/src/base/os.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/base/terminal.dart'
;
import
'package:flutter_tools/src/base/user_messages.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/commands/analyze.dart'
;
import
'package:flutter_tools/src/flutter_cache.dart'
;
import
'package:flutter_tools/src/globals_null_migrated.dart'
as
globals
;
import
'package:flutter_tools/src/runner/flutter_command.dart'
;
import
'package:process/process.dart'
;
import
'../../src/common.dart'
;
import
'../../src/context.dart'
;
import
'../../src/fakes.dart'
;
import
'../../src/test_flutter_command_runner.dart'
;
final
Platform
_kNoColorTerminalPlatform
=
FakePlatform
(
stdoutSupportsAnsi:
false
);
import
'../src/common.dart'
;
import
'test_utils.dart'
;
final
String
analyzerSeparator
=
platform
.
isWindows
?
'-'
:
'•'
;
void
main
(
)
{
String
analyzerSeparator
;
FileSystem
fileSystem
;
Platform
platform
;
BufferLogger
logger
;
AnsiTerminal
terminal
;
ProcessManager
processManager
;
Directory
tempDir
;
String
projectPath
;
File
libMain
;
Artifacts
artifacts
;
Future
<
void
>
runCommand
({
FlutterCommand
command
,
List
<
String
>
arguments
,
List
<
String
>
statusTextContains
,
List
<
String
>
errorTextContains
,
bool
toolExit
=
false
,
String
exitMessageContains
,
List
<
String
>
statusTextContains
=
const
<
String
>[],
List
<
String
>
errorTextContains
=
const
<
String
>[],
String
exitMessageContains
=
''
,
int
exitCode
=
0
,
})
async
{
try
{
await
createTestCommandRunner
(
command
).
run
(
arguments
);
expect
(
toolExit
,
isFalse
,
reason:
'Expected ToolExit exception'
);
}
on
ToolExit
catch
(
e
)
{
if
(!
toolExit
)
{
testLogger
.
clear
();
rethrow
;
}
if
(
exitMessageContains
!=
null
)
{
expect
(
e
.
message
,
contains
(
exitMessageContains
));
// May not analyzer exception the `exitCode` is `null`.
expect
(
e
.
exitCode
??
0
,
exitCode
);
}
}
assertContains
(
logger
.
statusText
,
statusTextContains
);
assertContains
(
logger
.
errorText
,
errorTextContains
);
logger
.
clear
();
final
ProcessResult
result
=
await
processManager
.
run
(<
String
>[
fileSystem
.
path
.
join
(
getFlutterRoot
(),
'bin'
,
'flutter'
),
'--no-color'
,
...
arguments
,
],
workingDirectory:
projectPath
);
print
(
result
.
stdout
);
print
(
result
.
stderr
);
expect
(
result
.
exitCode
,
exitCode
,
reason:
'Expected to exit with non-zero exit code.'
);
assertContains
(
result
.
stdout
.
toString
(),
statusTextContains
);
assertContains
(
result
.
stdout
.
toString
(),
errorTextContains
);
expect
(
result
.
stderr
,
contains
(
exitMessageContains
));
}
void
_createDotPackages
(
String
projectPath
,
[
bool
nullSafe
=
false
])
{
final
StringBuffer
flutterRootUri
=
StringBuffer
(
'file://'
);
final
String
canonicalizedFlutterRootPath
=
fileSystem
.
path
.
canonicalize
(
Cache
.
flutterRoot
);
final
String
canonicalizedFlutterRootPath
=
fileSystem
.
path
.
canonicalize
(
getFlutterRoot
()
);
if
(
platform
.
isWindows
)
{
flutterRootUri
..
write
(
'/'
)
...
...
@@ -100,7 +66,7 @@ void main() {
"name": "flutter_project",
"rootUri": "../",
"packageUri": "lib/",
"languageVersion": "
${nullSafe ? "2.1
0
" : "2.7"}
"
"languageVersion": "
${nullSafe ? "2.1
2
" : "2.7"}
"
}
]
}
...
...
@@ -111,33 +77,6 @@ void main() {
..
writeAsStringSync
(
dotPackagesSrc
);
}
setUpAll
(()
{
Cache
.
disableLocking
();
processManager
=
const
LocalProcessManager
();
platform
=
const
LocalPlatform
();
terminal
=
AnsiTerminal
(
platform:
platform
,
stdio:
Stdio
());
fileSystem
=
globals
.
localFileSystem
;
logger
=
BufferLogger
.
test
();
analyzerSeparator
=
platform
.
isWindows
?
'-'
:
'•'
;
final
OperatingSystemUtils
operatingSystemUtils
=
FakeOperatingSystemUtils
();
artifacts
=
CachedArtifacts
(
cache:
FlutterCache
(
fileSystem:
fileSystem
,
logger:
logger
,
platform:
platform
,
osUtils:
operatingSystemUtils
,
),
fileSystem:
fileSystem
,
platform:
platform
,
operatingSystemUtils:
operatingSystemUtils
,
);
Cache
.
flutterRoot
=
Cache
.
defaultFlutterRoot
(
fileSystem:
fileSystem
,
platform:
platform
,
userMessages:
UserMessages
(),
);
});
setUp
(()
{
tempDir
=
fileSystem
.
systemTempDirectory
.
createTempSync
(
'flutter_analyze_once_test_1.'
).
absolute
;
projectPath
=
fileSystem
.
path
.
join
(
tempDir
.
path
,
'flutter_project'
);
...
...
@@ -155,41 +94,24 @@ void main() {
});
// Analyze in the current directory - no arguments
test
Using
Context
(
'working directory'
,
()
async
{
test
Without
Context
(
'working directory'
,
()
async
{
await
runCommand
(
command:
AnalyzeCommand
(
workingDirectory:
fileSystem
.
directory
(
projectPath
),
fileSystem:
fileSystem
,
logger:
logger
,
platform:
platform
,
processManager:
processManager
,
terminal:
terminal
,
artifacts:
artifacts
,
),
arguments:
<
String
>[
'analyze'
,
'--no-pub'
],
statusTextContains:
<
String
>[
'No issues found!'
],
);
});
//
Analyze
a specific file outside the current directory
test
Using
Context
(
'passing one file throws'
,
()
async
{
//
testWithoutContext
a specific file outside the current directory
test
Without
Context
(
'passing one file throws'
,
()
async
{
await
runCommand
(
command:
AnalyzeCommand
(
platform:
platform
,
fileSystem:
fileSystem
,
logger:
logger
,
processManager:
processManager
,
terminal:
terminal
,
artifacts:
artifacts
,
),
arguments:
<
String
>[
'analyze'
,
'--no-pub'
,
libMain
.
path
],
toolExit:
true
,
exitMessageContains:
'is not a directory'
,
exitCode:
1
,
);
});
// Analyze in the current directory - no arguments
test
Using
Context
(
'working directory with errors'
,
()
async
{
test
Without
Context
(
'working directory with errors'
,
()
async
{
// Break the code to produce the "Avoid empty else" hint
// that is upgraded to a warning in package:flutter/analysis_options_user.yaml
// to assert that we are using the default Flutter analysis options.
...
...
@@ -212,15 +134,6 @@ void main() {
// Analyze in the current directory - no arguments
await
runCommand
(
command:
AnalyzeCommand
(
workingDirectory:
fileSystem
.
directory
(
projectPath
),
platform:
platform
,
fileSystem:
fileSystem
,
logger:
logger
,
processManager:
processManager
,
terminal:
terminal
,
artifacts:
artifacts
,
),
arguments:
<
String
>[
'analyze'
,
'--no-pub'
],
statusTextContains:
<
String
>[
'Analyzing'
,
...
...
@@ -230,301 +143,171 @@ void main() {
"warning
$analyzerSeparator
The parameter 'onPressed' is required"
,
],
exitMessageContains:
'4 issues found.'
,
toolExit:
true
,
exitCode:
1
,
);
});
// Analyze in the current directory - no arguments
test
Using
Context
(
'working directory with local options'
,
()
async
{
test
Without
Context
(
'working directory with local options'
,
()
async
{
// Insert an analysis_options.yaml file in the project
// which will trigger a lint for broken code that was inserted earlier
final
File
optionsFile
=
fileSystem
.
file
(
fileSystem
.
path
.
join
(
projectPath
,
'analysis_options.yaml'
));
try
{
optionsFile
.
writeAsStringSync
(
'''
include: package:flutter/analysis_options_user.yaml
linter:
rules:
- only_throw_errors
'''
);
String
source
=
libMain
.
readAsStringSync
();
source
=
source
.
replaceFirst
(
'onPressed: _incrementCounter,'
,
'// onPressed: _incrementCounter,'
,
);
source
=
source
.
replaceFirst
(
'_counter++;'
,
'_counter++; throw "an error message";'
,
);
libMain
.
writeAsStringSync
(
source
);
// Analyze in the current directory - no arguments
await
runCommand
(
command:
AnalyzeCommand
(
workingDirectory:
fileSystem
.
directory
(
projectPath
),
platform:
platform
,
fileSystem:
fileSystem
,
logger:
logger
,
processManager:
processManager
,
terminal:
terminal
,
artifacts:
artifacts
,
),
arguments:
<
String
>[
'analyze'
,
'--no-pub'
],
statusTextContains:
<
String
>[
'Analyzing'
,
"info
$analyzerSeparator
The declaration '_incrementCounter' isn't"
,
'info
$analyzerSeparator
Only throw instances of classes extending either Exception or Error'
,
"warning
$analyzerSeparator
The parameter 'onPressed' is required"
,
],
exitMessageContains:
'3 issues found.'
,
toolExit:
true
,
exitCode:
1
,
);
}
finally
{
ErrorHandlingFileSystem
.
deleteIfExists
(
optionsFile
);
}
});
String
source
=
libMain
.
readAsStringSync
();
source
=
source
.
replaceFirst
(
'onPressed: _incrementCounter,'
,
'// onPressed: _incrementCounter,'
,
);
source
=
source
.
replaceFirst
(
'_counter++;'
,
'_counter++; throw "an error message";'
,
);
libMain
.
writeAsStringSync
(
source
);
testUsingContext
(
'analyze once no duplicate issues'
,
()
async
{
final
Directory
tempDir
=
fileSystem
.
systemTempDirectory
.
createTempSync
(
'flutter_analyze_once_test_2.'
).
absolute
;
_createDotPackages
(
tempDir
.
path
);
// Analyze in the current directory - no arguments
await
runCommand
(
arguments:
<
String
>[
'analyze'
,
'--no-pub'
],
statusTextContains:
<
String
>[
'Analyzing'
,
"info
$analyzerSeparator
The declaration '_incrementCounter' isn't"
,
'info
$analyzerSeparator
Only throw instances of classes extending either Exception or Error'
,
"warning
$analyzerSeparator
The parameter 'onPressed' is required"
,
],
exitMessageContains:
'3 issues found.'
,
exitCode:
1
,
);
});
try
{
final
File
foo
=
fileSystem
.
file
(
fileSystem
.
path
.
join
(
tempDir
.
p
ath
,
'foo.dart'
));
foo
.
writeAsStringSync
(
'''
testWithoutContext
(
'analyze once no duplicate issues'
,
()
async
{
final
File
foo
=
fileSystem
.
file
(
fileSystem
.
path
.
join
(
projectP
ath
,
'foo.dart'
));
foo
.
writeAsStringSync
(
'''
import '
bar
.
dart
';
void foo() => bar();
'''
);
final
File
bar
=
fileSystem
.
file
(
fileSystem
.
path
.
join
(
tempDir
.
p
ath
,
'bar.dart'
));
bar
.
writeAsStringSync
(
'''
final
File
bar
=
fileSystem
.
file
(
fileSystem
.
path
.
join
(
projectP
ath
,
'bar.dart'
));
bar
.
writeAsStringSync
(
'''
import '
dart:
async
'; // unused
void bar() {
}
'''
);
// Analyze in the current directory - no arguments
await
runCommand
(
command:
AnalyzeCommand
(
workingDirectory:
tempDir
,
platform:
platform
,
fileSystem:
fileSystem
,
logger:
logger
,
processManager:
processManager
,
terminal:
terminal
,
artifacts:
artifacts
,
),
arguments:
<
String
>[
'analyze'
,
'--no-pub'
],
statusTextContains:
<
String
>[
'Analyzing'
,
],
exitMessageContains:
'1 issue found.'
,
toolExit:
true
,
exitCode:
1
);
}
finally
{
tryToDelete
(
tempDir
);
}
// Analyze in the current directory - no arguments
await
runCommand
(
arguments:
<
String
>[
'analyze'
,
'--no-pub'
],
statusTextContains:
<
String
>[
'Analyzing'
,
],
exitMessageContains:
'1 issue found.'
,
exitCode:
1
);
});
test
Using
Context
(
'analyze once returns no issues when source is error-free'
,
()
async
{
test
Without
Context
(
'analyze once returns no issues when source is error-free'
,
()
async
{
const
String
contents
=
'''
StringBuffer bar = StringBuffer('
baz
');
'''
;
final
Directory
tempDir
=
fileSystem
.
systemTempDirectory
.
createTempSync
(
'flutter_analyze_once_test_3.'
);
_createDotPackages
(
tempDir
.
path
);
tempDir
.
childFile
(
'main.dart'
).
writeAsStringSync
(
contents
);
try
{
await
runCommand
(
command:
AnalyzeCommand
(
workingDirectory:
fileSystem
.
directory
(
tempDir
),
platform:
_kNoColorTerminalPlatform
,
fileSystem:
fileSystem
,
logger:
logger
,
processManager:
processManager
,
terminal:
terminal
,
artifacts:
artifacts
,
),
arguments:
<
String
>[
'analyze'
,
'--no-pub'
],
statusTextContains:
<
String
>[
'No issues found!'
],
);
}
finally
{
tryToDelete
(
tempDir
);
}
fileSystem
.
directory
(
projectPath
).
childFile
(
'main.dart'
).
writeAsStringSync
(
contents
);
await
runCommand
(
arguments:
<
String
>[
'analyze'
,
'--no-pub'
],
statusTextContains:
<
String
>[
'No issues found!'
],
);
});
test
Using
Context
(
'analyze once returns no issues for todo comments'
,
()
async
{
test
Without
Context
(
'analyze once returns no issues for todo comments'
,
()
async
{
const
String
contents
=
'''
// TODO(foobar):
StringBuffer bar = StringBuffer('
baz
');
'''
;
final
Directory
tempDir
=
fileSystem
.
systemTempDirectory
.
createTempSync
(
'flutter_analyze_once_test_4.'
);
_createDotPackages
(
tempDir
.
path
);
tempDir
.
childFile
(
'main.dart'
).
writeAsStringSync
(
contents
);
try
{
await
runCommand
(
command:
AnalyzeCommand
(
workingDirectory:
fileSystem
.
directory
(
tempDir
),
platform:
_kNoColorTerminalPlatform
,
terminal:
terminal
,
processManager:
processManager
,
logger:
logger
,
fileSystem:
fileSystem
,
artifacts:
artifacts
,
),
arguments:
<
String
>[
'analyze'
,
'--no-pub'
],
statusTextContains:
<
String
>[
'No issues found!'
],
);
}
finally
{
tryToDelete
(
tempDir
);
}
});
testUsingContext
(
'analyze once with default options has info issue finally exit code 1.'
,
()
async
{
final
Directory
tempDir
=
fileSystem
.
systemTempDirectory
.
createTempSync
(
'flutter_analyze_once_default_options_info_issue_exit_code_1.'
);
_createDotPackages
(
tempDir
.
path
);
fileSystem
.
directory
(
projectPath
).
childFile
(
'main.dart'
).
writeAsStringSync
(
contents
);
await
runCommand
(
arguments:
<
String
>[
'analyze'
,
'--no-pub'
],
statusTextContains:
<
String
>[
'No issues found!'
],
);
});
testWithoutContext
(
'analyze once with default options has info issue finally exit code 1.'
,
()
async
{
const
String
infoSourceCode
=
'''
int analyze() {}
'''
;
tempDir
.
childFile
(
'main.dart'
).
writeAsStringSync
(
infoSourceCode
);
try
{
await
runCommand
(
command:
AnalyzeCommand
(
workingDirectory:
fileSystem
.
directory
(
tempDir
),
platform:
_kNoColorTerminalPlatform
,
terminal:
terminal
,
processManager:
processManager
,
logger:
logger
,
fileSystem:
fileSystem
,
artifacts:
artifacts
,
),
arguments:
<
String
>[
'analyze'
,
'--no-pub'
],
statusTextContains:
<
String
>[
'info'
,
'missing_return'
,
],
exitMessageContains:
'1 issue found.'
,
toolExit:
true
,
exitCode:
1
,
);
}
finally
{
tryToDelete
(
tempDir
);
}
fileSystem
.
directory
(
projectPath
).
childFile
(
'main.dart'
).
writeAsStringSync
(
infoSourceCode
);
await
runCommand
(
arguments:
<
String
>[
'analyze'
,
'--no-pub'
],
statusTextContains:
<
String
>[
'info'
,
'missing_return'
,
],
exitMessageContains:
'1 issue found.'
,
exitCode:
1
,
);
});
testUsingContext
(
'analyze once with no-fatal-infos has info issue finally exit code 0.'
,
()
async
{
final
Directory
tempDir
=
fileSystem
.
systemTempDirectory
.
createTempSync
(
'flutter_analyze_once_no_fatal_infos_info_issue_exit_code_0.'
);
_createDotPackages
(
tempDir
.
path
);
testWithoutContext
(
'analyze once with no-fatal-infos has info issue finally exit code 0.'
,
()
async
{
const
String
infoSourceCode
=
'''
int analyze() {}
'''
;
tempDir
.
childFile
(
'main.dart'
).
writeAsStringSync
(
infoSourceCode
);
try
{
await
runCommand
(
command:
AnalyzeCommand
(
workingDirectory:
fileSystem
.
directory
(
tempDir
),
platform:
_kNoColorTerminalPlatform
,
terminal:
terminal
,
processManager:
processManager
,
logger:
logger
,
fileSystem:
fileSystem
,
artifacts:
artifacts
,
),
arguments:
<
String
>[
'analyze'
,
'--no-pub'
,
'--no-fatal-infos'
],
statusTextContains:
<
String
>[
'info'
,
'missing_return'
,
],
exitMessageContains:
'1 issue found.'
,
toolExit:
true
,
exitCode:
0
,
);
}
finally
{
tryToDelete
(
tempDir
);
}
fileSystem
.
directory
(
projectPath
).
childFile
(
'main.dart'
).
writeAsStringSync
(
infoSourceCode
);
await
runCommand
(
arguments:
<
String
>[
'analyze'
,
'--no-pub'
,
'--no-fatal-infos'
],
statusTextContains:
<
String
>[
'info'
,
'missing_return'
,
],
exitMessageContains:
'1 issue found.'
,
exitCode:
0
,
);
});
testUsingContext
(
'analyze once only fatal-warnings has info issue finally exit code 0.'
,
()
async
{
final
Directory
tempDir
=
fileSystem
.
systemTempDirectory
.
createTempSync
(
'flutter_analyze_once_only_fatal_warnings_info_issue_exit_code_0.'
);
_createDotPackages
(
tempDir
.
path
);
testWithoutContext
(
'analyze once only fatal-warnings has info issue finally exit code 0.'
,
()
async
{
const
String
infoSourceCode
=
'''
int analyze() {}
'''
;
tempDir
.
childFile
(
'main.dart'
).
writeAsStringSync
(
infoSourceCode
);
try
{
await
runCommand
(
command:
AnalyzeCommand
(
workingDirectory:
fileSystem
.
directory
(
tempDir
),
platform:
_kNoColorTerminalPlatform
,
terminal:
terminal
,
processManager:
processManager
,
logger:
logger
,
fileSystem:
fileSystem
,
artifacts:
artifacts
,
),
arguments:
<
String
>[
'analyze'
,
'--no-pub'
,
'--fatal-warnings'
,
'--no-fatal-infos'
],
statusTextContains:
<
String
>[
'info'
,
'missing_return'
,
],
exitMessageContains:
'1 issue found.'
,
toolExit:
true
,
exitCode:
0
,
);
}
finally
{
tryToDelete
(
tempDir
);
}
fileSystem
.
directory
(
projectPath
).
childFile
(
'main.dart'
).
writeAsStringSync
(
infoSourceCode
);
await
runCommand
(
arguments:
<
String
>[
'analyze'
,
'--no-pub'
,
'--fatal-warnings'
,
'--no-fatal-infos'
],
statusTextContains:
<
String
>[
'info'
,
'missing_return'
,
],
exitMessageContains:
'1 issue found.'
,
exitCode:
0
,
);
});
testUsingContext
(
'analyze once only fatal-infos has warning issue finally exit code 1.'
,
()
async
{
final
Directory
tempDir
=
fileSystem
.
systemTempDirectory
.
createTempSync
(
'flutter_analyze_once_only_fatal_infos_warning_issue_exit_code_1.'
);
_createDotPackages
(
tempDir
.
path
);
testWithoutContext
(
'analyze once only fatal-infos has warning issue finally exit code 1.'
,
()
async
{
const
String
warningSourceCode
=
'''
int analyze() {}
'''
;
final
File
optionsFile
=
fileSystem
.
file
(
fileSystem
.
path
.
join
(
tempDir
.
p
ath
,
'analysis_options.yaml'
));
final
File
optionsFile
=
fileSystem
.
file
(
fileSystem
.
path
.
join
(
projectP
ath
,
'analysis_options.yaml'
));
optionsFile
.
writeAsStringSync
(
'''
analyzer:
errors:
missing_return: warning
'''
);
tempDir
.
childFile
(
'main.dart'
).
writeAsStringSync
(
warningSourceCode
);
try
{
await
runCommand
(
command:
AnalyzeCommand
(
workingDirectory:
fileSystem
.
directory
(
tempDir
),
platform:
_kNoColorTerminalPlatform
,
terminal:
terminal
,
processManager:
processManager
,
logger:
logger
,
fileSystem:
fileSystem
,
artifacts:
artifacts
,
),
arguments:
<
String
>[
'analyze'
,
'--no-pub'
,
'--fatal-infos'
,
'--no-fatal-warnings'
],
statusTextContains:
<
String
>[
'warning'
,
'missing_return'
,
],
exitMessageContains:
'1 issue found.'
,
toolExit:
true
,
exitCode:
1
,
);
}
finally
{
tryToDelete
(
tempDir
);
}
fileSystem
.
directory
(
projectPath
).
childFile
(
'main.dart'
).
writeAsStringSync
(
warningSourceCode
);
await
runCommand
(
arguments:
<
String
>[
'analyze'
,
'--no-pub'
,
'--fatal-infos'
,
'--no-fatal-warnings'
],
statusTextContains:
<
String
>[
'warning'
,
'missing_return'
,
],
exitMessageContains:
'1 issue found.'
,
exitCode:
1
,
);
});
}
...
...
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