Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15197238
D10704.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
D10704.diff
View Options
diff --git a/src/lint/linter/ArcanistScriptAndRegexLinter.php b/src/lint/linter/ArcanistScriptAndRegexLinter.php
--- a/src/lint/linter/ArcanistScriptAndRegexLinter.php
+++ b/src/lint/linter/ArcanistScriptAndRegexLinter.php
@@ -6,12 +6,12 @@
* script and a regex to interpret the results of some real linter, it does
* not itself lint both scripts and regexes).
*
- * Configure this linter by setting these keys in your configuration:
+ * Configure this linter by setting these keys in your .arclint section:
*
- * - `linter.scriptandregex.script` Script command to run. This can be
+ * - `script-and-regex.script` Script command to run. This can be
* the path to a linter script, but may also include flags or use shell
* features (see below for examples).
- * - `linter.scriptandregex.regex` The regex to process output with. This
+ * - `script-and-regex.regex` The regex to process output with. This
* regex uses named capturing groups (detailed below) to interpret output.
*
* The script will be invoked from the project root, so you can specify a
@@ -155,6 +155,8 @@
*/
final class ArcanistScriptAndRegexLinter extends ArcanistLinter {
+ private $script = null;
+ private $regex = null;
private $output = array();
public function getInfoName() {
@@ -223,10 +225,13 @@
if (!empty($match['throw'])) {
$throw = $match['throw'];
throw new ArcanistUsageException(
- "ArcanistScriptAndRegexLinter: ".
- "configuration captured a 'throw' named capturing group, ".
- "'{$throw}'. Script output:\n".
- $output);
+ pht(
+ "%s: configuration captured a '%s' named capturing group, ".
+ "'%s'. Script output:\n%s",
+ __CLASS__,
+ 'throw',
+ $throw,
+ $output));
}
if (!empty($match['halt'])) {
@@ -287,6 +292,34 @@
return 'script-and-regex';
}
+ public function getLinterConfigurationOptions() {
+ // These fields are optional only to avoid breaking things.
+ $options = array(
+ 'script-and-regex.script' => array(
+ 'type' => 'optional string',
+ 'help' => pht('Script to execute.'),
+ ),
+ 'script-and-regex.regex' => array(
+ 'type' => 'optional regex',
+ 'help' => pht('The regex to process output with.'),
+ ),
+ );
+
+ return $options + parent::getLinterConfigurationOptions();
+ }
+
+ public function setLinterConfigurationValue($key, $value) {
+ switch ($key) {
+ case 'script-and-regex.script':
+ $this->script = $value;
+ return;
+ case 'script-and-regex.regex':
+ $this->regex = $value;
+ return;
+ }
+
+ return parent::setLinterConfigurationValue($key, $value);
+ }
/* -( Parsing Output )----------------------------------------------------- */
@@ -355,15 +388,18 @@
* @task config
*/
private function getConfiguredScript() {
- $key = 'linter.scriptandregex.script';
- $config = $this->getEngine()
- ->getConfigurationManager()
- ->getConfigFromAnySource($key);
+ if (strlen($this->script)) {
+ return $this->script;
+ }
+
+ $config = $this->getDeprecatedConfiguration('linter.scriptandregex.script');
if (!$config) {
throw new ArcanistUsageException(
- "ArcanistScriptAndRegexLinter: ".
- "You must configure '{$key}' to point to a script to execute.");
+ pht(
+ 'No "script" configured for script-and-regex linter, which '.
+ 'requires a script. Use "%s" to configure one.',
+ 'script-and-regex.script'));
}
// NOTE: No additional validation since the "script" can be some random
@@ -381,26 +417,31 @@
* @task config
*/
private function getConfiguredRegex() {
+ if (strlen($this->regex)) {
+ return $this->regex;
+ }
+
$key = 'linter.scriptandregex.regex';
- $config = $this->getEngine()
- ->getConfigurationManager()
- ->getConfigFromAnySource($key);
+ $config = $this->getDeprecatedConfiguration($key);
if (!$config) {
throw new ArcanistUsageException(
- "ArcanistScriptAndRegexLinter: ".
- "You must configure '{$key}' with a valid PHP PCRE regex.");
+ pht(
+ 'No "regex" configured for script-and-regex linter, which '.
+ 'requires a regex. Use "%s" to configure one.',
+ 'script-and-regex.regex'));
}
// NOTE: preg_match() returns 0 for no matches and false for compile error;
// this won't match, but will validate the syntax of the regex.
- $ok = preg_match($config, 'syntax-check');
+ $ok = @preg_match($config, 'syntax-check');
if ($ok === false) {
throw new ArcanistUsageException(
- "ArcanistScriptAndRegexLinter: ".
- "Regex '{$config}' does not compile. You must configure '{$key}' with ".
- "a valid PHP PCRE regex, including delimiters.");
+ pht(
+ 'Regular expression passed to script-and-regex linter ("%s") is '.
+ 'not a valid regular expression.',
+ $config));
}
return $config;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Feb 23, 10:12 PM (13 h, 53 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7187863
Default Alt Text
D10704.diff (5 KB)
Attached To
Mode
D10704: Modernize Script-and-Regex linter for ConfigurationDriven
Attached
Detach File
Event Timeline
Log In to Comment