Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Group primitives in object name lintr? #842

Closed
jonkeane opened this issue Jul 24, 2021 · 4 comments
Closed

Group primitives in object name lintr? #842

jonkeane opened this issue Jul 24, 2021 · 4 comments
Labels
false-positive code that shouldn't lint, but does object linters 🏀

Comments

@jonkeane
Copy link
Contributor

After #755 generic detection is great for identifying generics and linting only S3 method definitions.

I have noticed that some of the base group generics (like sum) are not listed in .S3PrimitiveGenerics which is used to get a list of possible generics. Which is documented at https://stat.ethz.ch/R-manual/R-devel/library/base/html/InternalMethods.html

I've looked a bit to see if there is a group generics vector like . S3PrimitiveGenerics, but haven't found one yet. I do see that sum is in the result of getGenerics() thought that also includes generics for packages that have also been loaded.

Oddly(?) getGenerics("package:base") returns nothing (unlike something like getGenerics("package:methods") or other packages that return only that package's methods). getGenerics()[getGenerics()@package == "base"] would limit it to generics that are in base, but that's hacky/ugly. Finally, the list of group generics is small enough one could also hardcode them.

I would be happy to submit a PR that takes any of these approaches + an appropriate test.

@AshesITR
Copy link
Collaborator

Interesting find. Can you provide a reprex that mistakenly produces a lint?
e.g. tan is not in .S3PrimitiveGenerics but

lintr::lint(text = "tan.test <- function() 2", linters = lintr::object_name_linter())

doesn't lint.

@jonkeane
Copy link
Contributor Author

Hmmm, that's weird. When I try it on a fresh install from the master branch from this repo, that same command does produce output for me:

> remotes::install_github("lintr")
Error in parse_repo_spec(repo) : Invalid git repo specification: 'lintr'
> remotes::install_github("lintr")
> remotes::install_github("jimhester/lintr")
Downloading GitHub repo jimhester/lintr@HEAD
   checking for file ‘/private/var/folders/b2/8w36qffn5rgbkzd2bf8tcgbh0000gn/T/R✔  checking for file ‘/private/var/folders/b2/8w36qffn5rgbkzd2bf8tcgbh0000gn/T/RtmpR9rwd7/remotes119496182db37/jimhester-lintr-709cb07/DESCRIPTION’
─  preparing ‘lintr’:
✔  checking DESCRIPTION meta-information ...
─  installing the package to process help pages
─  checking for LF line-endings in source and make files and shell scripts (6.6s)
─  checking for empty or unneeded directories
─  building ‘lintr_2.0.1.9000.tar.gz’
   
* installing *source* package ‘lintr’ ...
** using staged installation
** R
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
** testing if installed package can be loaded from final location
** testing if installed package keeps a record of temporary installation path
* DONE (lintr)
> lintr::lint(text = "tan.test <- function() 2", linters = lintr::object_name_linter())
<text>:1:1: style: Variable and function name style should be snake_case or symbols.
tan.test <- function() 2
^~~~~~~~

Which I think should be ok, in the same way that lintr::lint(text = "names.test <- function() 2", linters = lintr::object_name_linter()) shows no linting errors.

@IndrajeetPatil
Copy link
Collaborator

Can reproduce with the latest main as well:

lintr::lint(
  text = "tan.test <- function() 2", 
  linters = lintr::object_name_linter()
)
#> <text>:1:1: style: [object_name_linter] Variable and function name style should be snake_case or symbols.
#> tan.test <- function() 2
#> ^~~~~~~~

Created on 2022-09-28 with reprex v2.0.2

Session info
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.2.1 (2022-06-23)
#>  os       macOS Monterey 12.5.1
#>  system   aarch64, darwin20
#>  ui       X11
#>  language (EN)
#>  collate  en_US.UTF-8
#>  ctype    en_US.UTF-8
#>  tz       Europe/Berlin
#>  date     2022-09-28
#>  pandoc   2.19.2 @ /usr/local/bin/ (via rmarkdown)
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────
#>  package      * version    date (UTC) lib source
#>  callr          3.7.2      2022-08-22 [1] CRAN (R 4.2.0)
#>  cli            3.4.1      2022-09-23 [1] CRAN (R 4.2.1)
#>  crayon         1.5.1      2022-03-26 [1] CRAN (R 4.2.0)
#>  cyclocomp      1.1.0      2016-09-10 [1] CRAN (R 4.2.0)
#>  desc           1.4.2      2022-09-08 [1] CRAN (R 4.2.1)
#>  digest         0.6.29     2021-12-01 [1] CRAN (R 4.2.0)
#>  evaluate       0.16       2022-08-09 [1] CRAN (R 4.2.1)
#>  fansi          1.0.3      2022-03-24 [1] CRAN (R 4.2.0)
#>  fastmap        1.1.0      2021-01-25 [1] CRAN (R 4.2.0)
#>  fs             1.5.2      2021-12-08 [1] CRAN (R 4.2.0)
#>  glue           1.6.2      2022-02-24 [1] CRAN (R 4.2.0)
#>  highr          0.9        2021-04-16 [1] CRAN (R 4.2.0)
#>  htmltools      0.5.3      2022-07-18 [1] CRAN (R 4.2.1)
#>  knitr          1.40       2022-08-24 [1] CRAN (R 4.2.1)
#>  lazyeval       0.2.2      2019-03-15 [1] CRAN (R 4.2.0)
#>  lifecycle      1.0.2      2022-09-09 [1] CRAN (R 4.2.1)
#>  lintr          3.0.1.9000 2022-09-27 [1] Github (r-lib/lintr@9e1f8ba)
#>  magrittr       2.0.3      2022-03-30 [1] CRAN (R 4.2.0)
#>  pillar         1.8.1      2022-08-19 [1] CRAN (R 4.2.1)
#>  pkgconfig      2.0.3      2019-09-22 [1] CRAN (R 4.2.0)
#>  processx       3.7.0      2022-07-07 [1] CRAN (R 4.2.1)
#>  ps             1.7.1      2022-06-18 [1] CRAN (R 4.2.0)
#>  purrr          0.3.4      2020-04-17 [1] CRAN (R 4.2.0)
#>  R.cache        0.16.0     2022-07-21 [1] CRAN (R 4.2.0)
#>  R.methodsS3    1.8.2      2022-06-13 [1] CRAN (R 4.2.0)
#>  R.oo           1.25.0     2022-06-12 [1] CRAN (R 4.2.0)
#>  R.utils        2.12.0     2022-06-28 [1] CRAN (R 4.2.0)
#>  R6             2.5.1.9000 2022-08-06 [1] Github (r-lib/R6@87d5e45)
#>  remotes        2.4.2      2021-11-30 [1] CRAN (R 4.2.0)
#>  reprex         2.0.2      2022-08-17 [1] CRAN (R 4.2.1)
#>  rex            1.2.1      2021-11-26 [1] CRAN (R 4.2.0)
#>  rlang          1.0.6      2022-09-24 [1] CRAN (R 4.2.1)
#>  rmarkdown      2.16       2022-08-24 [1] CRAN (R 4.2.1)
#>  rprojroot      2.0.3      2022-04-02 [1] CRAN (R 4.2.0)
#>  rstudioapi     0.14       2022-08-22 [1] CRAN (R 4.2.1)
#>  sessioninfo    1.2.2      2021-12-06 [1] CRAN (R 4.2.0)
#>  stringi        1.7.8      2022-07-11 [1] CRAN (R 4.2.1)
#>  stringr        1.4.1      2022-08-20 [1] CRAN (R 4.2.1)
#>  styler         1.7.0.9002 2022-09-27 [1] Github (r-lib/styler@1a8bab3)
#>  tibble         3.1.8      2022-07-22 [1] CRAN (R 4.2.1)
#>  utf8           1.2.2      2021-07-24 [1] CRAN (R 4.2.0)
#>  vctrs          0.4.1      2022-04-13 [1] CRAN (R 4.2.0)
#>  withr          2.5.0      2022-03-03 [1] CRAN (R 4.2.0)
#>  xfun           0.33       2022-09-12 [1] CRAN (R 4.2.1)
#>  xml2           1.3.3      2021-11-30 [1] CRAN (R 4.2.0)
#>  xmlparsedata   1.0.5      2021-03-06 [1] CRAN (R 4.2.0)
#>  yaml           2.3.5      2022-02-21 [1] CRAN (R 4.2.0)
#> 
#>  [1] /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/library
#> 
#> ──────────────────────────────────────────────────────────────────────────────

@MichaelChirico
Copy link
Collaborator

I don't reproduce on current main:

testthat::expect_success(lintr::expect_lint("tan.test <- function() 2", NULL, lintr::object_name_linter()))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
false-positive code that shouldn't lint, but does object linters 🏀
Projects
None yet
Development

No branches or pull requests

4 participants