From e51e1c3d44640d60c9843c6f41ee06434cadf697 Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 19 Oct 2015 14:35:14 -0700 Subject: [PATCH] Allow Script-and-Regex linter to have optional/empty capturing patterns for char/line Summary: See discussion in D13737. If you're using this linter to match messages which //sometimes// have a character, you can get `""` (empty string) matches when the expression doesn't match. We'll complain about these later. Instead, cast the matches the expected types. Test Plan: @csilvers confirmed fix, see D13737. Reviewers: chad, csilvers Reviewed By: csilvers Subscribers: spicyj, csilvers Differential Revision: https://secure.phabricator.com/D14307 --- src/lint/linter/ArcanistScriptAndRegexLinter.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/lint/linter/ArcanistScriptAndRegexLinter.php b/src/lint/linter/ArcanistScriptAndRegexLinter.php index 70ce944a..ca8883cb 100644 --- a/src/lint/linter/ArcanistScriptAndRegexLinter.php +++ b/src/lint/linter/ArcanistScriptAndRegexLinter.php @@ -324,7 +324,7 @@ final class ArcanistScriptAndRegexLinter extends ArcanistLinter { * Get the line and character of the message from the regex match. * * @param dict Captured groups from regex. - * @return pair Line and character of the message. + * @return pair Line and character of the message. * * @task parse */ @@ -336,8 +336,19 @@ final class ArcanistScriptAndRegexLinter extends ArcanistLinter { return array($line + 1, $char + 1); } - $line = idx($match, 'line', 1); + $line = idx($match, 'line'); + if ($line) { + $line = (int)$line; + } else { + $line = 1; + } + $char = idx($match, 'char'); + if ($char) { + $char = (int)$char; + } else { + $char = null; + } return array($line, $char); }