Closed
Description
&
and |
are generics, so methods can be defined for which the output is not logical
.
This is the case for base octmode
class which has an &
method to do bitwise-and (much like C/Python's &
) and returns octmode
(see ?"&.octmode"
). As seen in base R:
if (is.null(extra_flags) && grepl("/(configure|cleanup)$", f) &&
(mode & "111") != as.octmode("111")) {
# ^ marked as a lint
warning(gettextf("file '%s' did not have execute permissions: corrected", f), domain = NA, call. = FALSE)
mode <- mode | "111"
}
The giveaway here is that a comparison operator is used in the <expr>
above &
-- IINM vector_logic_linter()
assumes parent infixes will be &
/&&
/|
/||
.
My first instinct was just to call this a known edge case & move on, because in general we can't swap &&
for all methods of &
, but for this particular method we can detect it's fine statically.