Skip to content

soc504-s2015-princeton/lintr

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lintr

Build Status Coverage Status

Static code analysis for R

lintr

Emacs

lintr has built-in integration with flycheck versions greater than 0.23. Emacs Example

Installation

Put the following in your .emacs file to automatically use lintr to check R files. Note you will need to change the path to where you put lintr.el

(require 'flycheck)
(add-hook 'ess-mode-hook
          (lambda () (flycheck-mode t)))

Configuration

You can also configure what linters are used. e.g. using a different line length cutoff.

  • M-X customize-opton -> flycheck-r-linters -> with_defaults(line_length_linter(120))

Vim

lintr can be integrated with syntastic for on the fly linting.

Vim Example

Installation

Put the file syntastic/lintr.vim in syntastic/syntax_checkers/r. If you are using pathogen this directory is ~/.vim/bundles/syntastic/syntax_checkers/r.

You will also need to add the following lines to your .vimrc.

let g:syntastic_enable_r_lintr_checker = 1
let g:syntastic_r_checkers = 1

Configuration

You can also configure what linters are used. e.g. using a different line length cutoff.

let g:syntastic_r_lintr_linters = "with_defaults(line_length_linter(120))"

Sublime Text 3

lintr can be intergrated with Sublime Linter for on the fly linting.

Sublime Example

Installation

Simply install sublimeLinter-contrib-lintr using Package Control.

For more information see Sublime Linter Docs

Configuration

You can also configure what linters are used. e.g. using a different line length cutoff. In the SublimeLinter User Settings

{
  "user": {
    "linters": {
      "r": {
        "linters": "with_defaults(line_length_linter(120))"
      }
    }
  }
}

Available linters

  • Syntax errors: reported by parse.
  • object_usage_linter: checks that closures have the proper usage using codetools::checkUsage(). Note this runs base::eval() on the code, so do not use with untrusted code.
  • absolute_paths_linter: checks that no absolute paths are used.
  • assignment_linter: checks that <- is always used for assignment
  • closed_curly_linter: check that closed curly braces should always be on their own line unless they follow an else.
  • commas_linter: check that all commas are followed by spaces, but do not have spaces before them.
  • infix_spaces_linter: check that all infix operators have spaces around them.
  • line_length_linter: check the line length of both comments and code is less than length.
  • no_tab_linter: check that only spaces are used, never tabs.
  • camel_case_linter: check that function and variable names are not camelCase.
  • snake_case_linter: check that function and variable names are not snake_case.
  • multiple_dots_linter: check that function and variable names are separated by _ rather than ..
  • object_length_linter: check that function and variable names are not more than length characters.
  • open_curly_linter: check that opening curly braces are never on their own line and are always followed by a newline.
  • single_quotes_linter: checks that only single quotes are used to delimit string contestants.
  • spaces_inside_linter: check that parentheses and square brackets do not have spaces directly inside them.
  • spaces_left_parentheses_linter: check that all left parentheses have a space before them unless they are in a function call.
  • trailing_blank_lines_linter: check there are no trailing blank lines.
  • trailing_whitespace_linter: check there are no trailing whitespace characters.

Project Configuration

Lintr supports per-project configuration of the following fields. The config file is in Debian Control Field Format.

  • linters - see ?with_defaults for example of specifying only a few non-default linters.
  • exclusions - a list of filenames to exclude from linting. You can use a named item to exclude only certain lines from a file.
  • exclude - a regex pattern for lines to exclude from linting. Default is "# nolint"
  • exclude_start - a regex pattern to start exclusion range. Default is "# nolint start"
  • exclude_end - a regex pattern to end exclusion range. Default is "# nolint end"

An example file that uses 120 character line lengths, excludes a couple of files and sets different default exclude regexs follows.

linters: with_defaults(line_length_linter(120))
exclusions: list("inst/doc/creating_linters.R" = 1, "inst/example/bad.R", "tests/testthat/exclusions-test")
exclude: "# Exclude Linting"
exclude_start: "# Begin Exclude Linting"
exclude_end: "# End Exclude Linting"

Travis-CI

If you want to run lintr on Travis-CI you will need to have travis install the package first. This can be done by adding the following line to your .travis.yml

  - ./travis-tool.sh github_package jimhester/lintr

Testthat

If you are already using testthat for testing simply add the following to your tests to fail if there are any lints in your project. You will have to add Suggests: lintr to your package DESCRIPTION as well.

if (requireNamespace("lintr", quietly = TRUE)) {
  context("lints")
  test_that("Package Style", {
    lintr::expect_lint_free()
  })
}

Non-failing Lints

If you do not want to fail the travis build on lints or do not use testthat you can simply add the following to your .travis.yml

after_success:
  - Rscript -e 'lintr::lint_package()'

In both cases the lintr-bot will add comments to the commit or pull request with the lints found and they will also be printed on Travis-CI.

References

Most of the default linters are based on Hadley Wickham's R Style Guide.

Packages

No packages published

Languages

  • R 86.5%
  • HTML 11.3%
  • Vim Script 2.2%