From d1b5037e152b79b9a21f49f31afe8a75f83b8bd2 Mon Sep 17 00:00:00 2001 From: Sergey Besedin Date: Wed, 8 Apr 2020 21:52:21 +0400 Subject: [PATCH] Update config --- .Xresources | 30 +- .Xresources.d/st | 10 +- .gitconfig | 7 + .gitignore_global | 11 + .newsboat/config | 35 +- .rubocop.yml | 3997 +++++++++++++++++++- .taskrc | 29 +- .xinitrc | 6 +- .zshrc | 8 - .zshrc.d/aliases.zsh | 4 +- htop/htoprc | 12 +- i3/config | 74 +- i3status-rs/config.toml | 55 +- install.sh | 13 + kitty/kitty.conf | 29 +- mutt/colors-gruvbox-shuber-extended.muttrc | 6 + mutt/colors-gruvbox-shuber.muttrc | 81 + mutt/mailcap | 5 +- mutt/muttrc | 110 +- nvim/init.vim | 629 +-- 20 files changed, 4633 insertions(+), 518 deletions(-) create mode 100644 mutt/colors-gruvbox-shuber-extended.muttrc create mode 100644 mutt/colors-gruvbox-shuber.muttrc diff --git a/.Xresources b/.Xresources index 73e7378..3618124 100644 --- a/.Xresources +++ b/.Xresources @@ -1,31 +1,3 @@ -URxvt*font: xft:Iosevka\ Term:size=11 - -URxvt*scrollBar: false -! URxvt*geometry: 167x54 - -! do not scroll with output -URxvt*scrollTtyOutput: false -! scroll in relation to buffer (with mouse scroll or Shift+Page Up) -URxvt*scrollWithBuffer: true -! scroll back to the bottom on keypress -URxvt*scrollTtyKeypress: true -URxvt*secondaryWheel: true - -URxvt.urgentOnBell: true - -URxvt.perl-ext: default,clipboard,url-select,keyboard-select - -URxvt.keysym.M-Escape: perl:keyboard-select:activate -URxvt.keysym.M-s: perl:keyboard-select:search - -URxvt.url-select.launcher: browser -URxvt.url-select.underline: true -URxvt.url-select.button: 1 -URxvt.keysym.M-u: perl:url-select:select_next - -! links color -!URxvt.colorUL: #4682B4 - Xft*dpi: 96 Xft*antialias: true Xft.hinting: true @@ -33,5 +5,5 @@ Xft.hintstyle: hintslight Xft.lcdfilter: lcddefault Xft.rgba: rgb -#include ".Xresources.d/base16-gruvbox-dark-hard-256" #include ".Xresources.d/st" +#include ".Xresources.d/base16-gruvbox-dark-hard-256" diff --git a/.Xresources.d/st b/.Xresources.d/st index 017b3dd..1fb6243 100644 --- a/.Xresources.d/st +++ b/.Xresources.d/st @@ -8,30 +8,30 @@ st.termname: xterm-256color ! st.shell: /bin/sh ! The following options options can be reloaded via USR1 signal. -st.font: Iosevka Term:pixelsize=18:antialias=true:autohint=false:dpi=120; +st.font: Iosevka\ Term-11:medium:antialias=true:autohint=false:hintstyle=hintslight:rgba=rgba:lcdfilter:lcddefault; +st.bold_font: 1 st.borderpx: 0 ! Available cursor values: 2 4 6 7 = █ _ | ☃ ( 1 3 5 are blinking versions) st.cursorshape: 2 ! thickness of underline and bar cursors st.cursorthickness: 2 -! 0: normal blinking, 1: leave cursor border and blink with cursor's background +! 0: normal blinking, 1: leave cursor border and blink with cursors background st.cursorblinkstyle: 0 ! 0: cursor blinks with a constant interval; 1: blinking cycle resets on key input st.cursorblinkontype: 1 -st.bold_font: 1 st.xfps: 120 st.actionfps: 30 ! Amount of lines scrolled st.mouseScrollLines: 1 ! Kerning / character bounding-box height multiplier -st.chscale: 1.0 +st.chscale: 0.95 ! Kerning / character bounding-box width multiplier st.cwscale: 1.0 ! blinking timeout for terminal and cursor blinking (0 disables) st.blinktimeout: 800 ! bell volume. Value between -100 and 100. (0 disables) st.bellvolume: 100 -! this is a char that is exposed like so: `printf '\033[z'` +! this is a char that is exposed like so: printf '\033[z' st.prompt_char: $ ! This option is can be preedit style. Available values: `root` `overthespot` (Default taken `root`) st.imstyle: root diff --git a/.gitconfig b/.gitconfig index fa391b4..61baa82 100644 --- a/.gitconfig +++ b/.gitconfig @@ -12,11 +12,15 @@ co = checkout df = diff pl = pull + pul = pull ps = push + pus = push today = log --stat --since='1 Day Ago' --graph --pretty=oneline --abbrev-commit --date=relative lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative + lgs = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative --stat lf = !sh -c 'git lg --grep=$1 --max-count=5' - tree = log --graph --decorate --pretty=oneline --abbrev-commit + # lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative patch = !git --no-pager diff --no-color [color] @@ -32,3 +36,6 @@ [mergetool] prompt = false + +[credential] + helper = cache diff --git a/.gitignore_global b/.gitignore_global index 8e6a8ca..3f0f62d 100644 --- a/.gitignore_global +++ b/.gitignore_global @@ -1,5 +1,6 @@ *.swp /.bundle +/.vim npm-debug.log vendor/bundle/ vendor/cache/ @@ -10,3 +11,13 @@ yarn-error.log *.gem .pgsync.yml stats.json +tags +.ctags.d/ + +/.direnv +.envrc +*.pid +*.sock + +report*.json +.clinic/ diff --git a/.newsboat/config b/.newsboat/config index 9c1f779..ce1123f 100644 --- a/.newsboat/config +++ b/.newsboat/config @@ -5,8 +5,8 @@ # vim: set ai et fenc=utf-8 ft=conf nu si sts=0 sw=4 ts=8 tw=0 : # ---------------------------------------------------------------------- -auto-reload yes -browser qutebrowser +auto-reload no +browser surf cleanup-on-quit yes feed-sort-order firsttag max-downloads 4 @@ -26,9 +26,8 @@ prepopulate-query-feeds no feedlist-format "%4i %11u %T > %t" define-filter "Only query feeds" "feedtitle =~ \"====\"" - -include "~/.newsboat/nextcloud" +include "~/.config/newsboat/nextcloud" # binds ---------------------------------------------------------------- @@ -38,6 +37,18 @@ bind-key \ reload-all bind-key "RIGHT" select-tag bind-key "SPACE" open +# unbind keys +unbind-key ENTER +unbind-key j +unbind-key k +unbind-key J +unbind-key K + +# bind keys - vim style +bind-key j down +bind-key k up +bind-key l open +bind-key h quit # hide articles matching: --------------------------------------------- @@ -67,3 +78,19 @@ highlight article ":.*\\(embedded flash\\)$" color74 default color listnormal white default color listfocus default color240 color info default color240 + +color background color236 default +color listnormal color248 default +color listnormal_unread color6 default +color listfocus color236 color12 +color listfocus_unread color15 color12 +color info color248 color236 +color article color248 default + +# highlights +highlight article "^(Feed|Link):.*$" color6 default bold +highlight article "^(Title|Date|Author):.*$" color6 default bold +highlight article "https?://[^ ]+" color10 default underline +highlight article "\\[[0-9]+\\]" color10 default bold +highlight article "\\[image\\ [0-9]+\\]" color10 default bold +highlight feedlist "^─.*$" color6 color236 bold diff --git a/.rubocop.yml b/.rubocop.yml index a28db4b..7c3585c 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,109 +1,3952 @@ ---- +# Common configuration. + AllCops: - TargetRubyVersion: 2.5 + RubyInterpreters: + - ruby + - macruby + - rake + - jruby + - rbx + # Include common Ruby source files. Include: - - 'vendor/gems/**/*' + - '**/*.rb' + - '**/*.arb' + - '**/*.axlsx' + - '**/*.builder' + - '**/*.fcgi' + - '**/*.gemfile' + - '**/*.gemspec' + - '**/*.god' + - '**/*.jb' + - '**/*.jbuilder' + - '**/*.mspec' + - '**/*.opal' + - '**/*.pluginspec' + - '**/*.podspec' + - '**/*.rabl' + - '**/*.rake' + - '**/*.rbuild' + - '**/*.rbw' + - '**/*.rbx' + - '**/*.ru' + - '**/*.ruby' + - '**/*.spec' + - '**/*.thor' + - '**/*.watchr' + - '**/.irbrc' + - '**/.pryrc' + - '**/buildfile' + - '**/Appraisals' + - '**/Berksfile' + - '**/Brewfile' + - '**/Buildfile' + - '**/Capfile' + - '**/Cheffile' + - '**/Dangerfile' + - '**/Deliverfile' + - '**/Fastfile' + - '**/*Fastfile' + - '**/Gemfile' + - '**/Guardfile' + - '**/Jarfile' + - '**/Mavenfile' + - '**/Podfile' + - '**/Puppetfile' + - '**/Rakefile' + - '**/Snapfile' + - '**/Thorfile' + - '**/Vagabondfile' + - '**/Vagrantfile' Exclude: - - 'db/**/*' - - 'config/**/*' - - 'script/**/*' - - 'vendor/bundle/**/*' - - 'app/assets/**/*' - 'node_modules/**/*' - 'tmp/**/*' - - 'log/**/*' + - 'vendor/**/*' + - '.git/**/*' + # Default formatter will be used if no `-f/--format` option is given. + DefaultFormatter: progress + # Cop names are displayed in offense messages by default. Change behavior + # by overriding DisplayCopNames, or by giving the `--no-display-cop-names` + # option. + DisplayCopNames: true + # Style guide URLs are not displayed in offense messages by default. Change + # behavior by overriding `DisplayStyleGuide`, or by giving the + # `-S/--display-style-guide` option. + DisplayStyleGuide: false + # When specifying style guide URLs, any paths and/or fragments will be + # evaluated relative to the base URL. + StyleGuideBaseURL: https://rubystyle.guide + # Extra details are not displayed in offense messages by default. Change + # behavior by overriding ExtraDetails, or by giving the + # `-E/--extra-details` option. + ExtraDetails: false + # Additional cops that do not reference a style guide rule may be enabled by + # default. Change behavior by overriding `StyleGuideCopsOnly`, or by giving + # the `--only-guide-cops` option. + StyleGuideCopsOnly: false + # All cops except the ones configured `Enabled: false` in this file are enabled by default. + # Change this behavior by overriding either `DisabledByDefault` or `EnabledByDefault`. + # When `DisabledByDefault` is `true`, all cops in the default configuration + # are disabled, and only cops in user configuration are enabled. This makes + # cops opt-in instead of opt-out. Note that when `DisabledByDefault` is `true`, + # cops in user configuration will be enabled even if they don't set the + # Enabled parameter. + # When `EnabledByDefault` is `true`, all cops, even those configured `Enabled: false` + # in this file are enabled by default. Cops can still be disabled in user configuration. + # Note that it is invalid to set both EnabledByDefault and DisabledByDefault + # to true in the same configuration. + EnabledByDefault: false + DisabledByDefault: false + # Enables the result cache if `true`. Can be overridden by the `--cache` command + # line option. + UseCache: true + # Threshold for how many files can be stored in the result cache before some + # of the files are automatically removed. + MaxFilesInCache: 20000 + # The cache will be stored in "rubocop_cache" under this directory. If + # CacheRootDirectory is ~ (nil), which it is by default, the root will be + # taken from the environment variable `$XDG_CACHE_HOME` if it is set, or if + # `$XDG_CACHE_HOME` is not set, it will be `$HOME/.cache/`. + CacheRootDirectory: ~ + # It is possible for a malicious user to know the location of RuboCop's cache + # directory by looking at CacheRootDirectory, and create a symlink in its + # place that could cause RuboCop to overwrite unintended files, or read + # malicious input. If you are certain that your cache location is secure from + # this kind of attack, and wish to use a symlinked cache location, set this + # value to "true". + AllowSymlinksInCacheRootDirectory: false + # What MRI version of the Ruby interpreter is the inspected code intended to + # run on? (If there is more than one, set this to the lowest version.) + # If a value is specified for TargetRubyVersion then it is used. Acceptable + # values are specificed as a float (i.e. 2.5); the teeny version of Ruby + # should not be included. If the project specifies a Ruby version in the + # .ruby-version file, Gemfile or gems.rb file, RuboCop will try to determine + # the desired version of Ruby by inspecting the .ruby-version file first, + # followed by the Gemfile.lock or gems.locked file. (Although the Ruby version + # is specified in the Gemfile or gems.rb file, RuboCop reads the final value + # from the lock file.) If the Ruby version is still unresolved, RuboCop will + # use the oldest officially supported Ruby version (currently Ruby 2.3). + TargetRubyVersion: ~ -Rails: +#################### Bundler ############################### + +Bundler/DuplicatedGem: + Description: 'Checks for duplicate gem entries in Gemfile.' + Enabled: true + VersionAdded: '0.46' + Include: + - '**/*.gemfile' + - '**/Gemfile' + - '**/gems.rb' + +Bundler/GemComment: + Description: 'Add a comment describing each gem.' + Enabled: false + VersionAdded: '0.59' + VersionChanged: '0.77' + Include: + - '**/*.gemfile' + - '**/Gemfile' + - '**/gems.rb' + IgnoredGems: [] + +Bundler/InsecureProtocolSource: + Description: >- + The source `:gemcutter`, `:rubygems` and `:rubyforge` are deprecated + because HTTP requests are insecure. Please change your source to + 'https://rubygems.org' if possible, or 'http://rubygems.org' if not. + Enabled: true + VersionAdded: '0.50' + Include: + - '**/*.gemfile' + - '**/Gemfile' + - '**/gems.rb' + +Bundler/OrderedGems: + Description: >- + Gems within groups in the Gemfile should be alphabetically sorted. + Enabled: true + VersionAdded: '0.46' + VersionChanged: '0.47' + TreatCommentsAsGroupSeparators: true + Include: + - '**/*.gemfile' + - '**/Gemfile' + - '**/gems.rb' + +#################### Gemspec ############################### + +Gemspec/DuplicatedAssignment: + Description: 'An attribute assignment method calls should be listed only once in a gemspec.' + Enabled: true + VersionAdded: '0.52' + Include: + - '**/*.gemspec' + +Gemspec/OrderedDependencies: + Description: >- + Dependencies in the gemspec should be alphabetically sorted. + Enabled: true + VersionAdded: '0.51' + TreatCommentsAsGroupSeparators: true + Include: + - '**/*.gemspec' + +Gemspec/RequiredRubyVersion: + Description: 'Checks that `required_ruby_version` of gemspec and `TargetRubyVersion` of .rubocop.yml are equal.' + Enabled: true + VersionAdded: '0.52' + Include: + - '**/*.gemspec' + +Gemspec/RubyVersionGlobalsUsage: + Description: Checks usage of RUBY_VERSION in gemspec. + Enabled: true + VersionAdded: '0.72' + Include: + - '**/*.gemspec' + +#################### Layout ########################### + +Layout/AccessModifierIndentation: + Description: Check indentation of private/protected visibility modifiers. + StyleGuide: '#indent-public-private-protected' + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: indent + SupportedStyles: + - outdent + - indent + # By default, the indentation width from Layout/IndentationWidth is used + # But it can be overridden by setting this parameter + IndentationWidth: ~ + +Layout/ArgumentAlignment: + Description: >- + Align the arguments of a method call if they span more + than one line. + StyleGuide: '#no-double-indent' + Enabled: true + VersionAdded: '0.68' + VersionChanged: '0.77' + # Alignment of arguments in multi-line method calls. + # + # The `with_first_argument` style aligns the following lines along the same + # column as the first parameter. + # + # method_call(a, + # b) + # + # The `with_fixed_indentation` style aligns the following lines with one + # level of indentation relative to the start of the line with the method call. + # + # method_call(a, + # b) + EnforcedStyle: with_first_argument + SupportedStyles: + - with_first_argument + - with_fixed_indentation + # By default, the indentation width from Layout/IndentationWidth is used + # But it can be overridden by setting this parameter + IndentationWidth: ~ + +Layout/ArrayAlignment: + Description: >- + Align the elements of an array literal if they span more than + one line. + StyleGuide: '#align-multiline-arrays' + Enabled: true + VersionAdded: '0.49' + VersionChanged: '0.77' + +Layout/AssignmentIndentation: + Description: >- + Checks the indentation of the first line of the + right-hand-side of a multi-line assignment. + Enabled: true + VersionAdded: '0.49' + VersionChanged: '0.77' + # By default, the indentation width from `Layout/IndentationWidth` is used + # But it can be overridden by setting this parameter + IndentationWidth: ~ + +Layout/BlockAlignment: + Description: 'Align block ends correctly.' + Enabled: true + VersionAdded: '0.53' + # The value `start_of_block` means that the `end` should be aligned with line + # where the `do` keyword appears. + # The value `start_of_line` means it should be aligned with the whole + # expression's starting line. + # The value `either` means both are allowed. + EnforcedStyleAlignWith: either + SupportedStylesAlignWith: + - either + - start_of_block + - start_of_line + +Layout/BlockEndNewline: + Description: 'Put end statement of multiline block on its own line.' + Enabled: true + VersionAdded: '0.49' + +Layout/CaseIndentation: + Description: 'Indentation of when in a case/when/[else/]end.' + StyleGuide: '#indent-when-to-case' + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: case + SupportedStyles: + - case + - end + IndentOneStep: false + # By default, the indentation width from `Layout/IndentationWidth` is used. + # But it can be overridden by setting this parameter. + # This only matters if `IndentOneStep` is `true` + IndentationWidth: ~ + +Layout/ClassStructure: + Description: 'Enforces a configured order of definitions within a class body.' + StyleGuide: '#consistent-classes' + Enabled: false + VersionAdded: '0.52' + Categories: + module_inclusion: + - include + - prepend + - extend + ExpectedOrder: + - module_inclusion + - constants + - public_class_methods + - initializer + - public_methods + - protected_methods + - private_methods + +Layout/ClosingHeredocIndentation: + Description: 'Checks the indentation of here document closings.' + Enabled: true + VersionAdded: '0.57' + +Layout/ClosingParenthesisIndentation: + Description: 'Checks the indentation of hanging closing parentheses.' + Enabled: true + VersionAdded: '0.49' + +Layout/CommentIndentation: + Description: 'Indentation of comments.' + Enabled: true + VersionAdded: '0.49' + +Layout/ConditionPosition: + Description: >- + Checks for condition placed in a confusing position relative to + the keyword. + StyleGuide: '#same-line-condition' + Enabled: true + VersionAdded: '0.53' + +Layout/DefEndAlignment: + Description: 'Align ends corresponding to defs correctly.' + Enabled: true + VersionAdded: '0.53' + # The value `def` means that `end` should be aligned with the def keyword. + # The value `start_of_line` means that `end` should be aligned with method + # calls like `private`, `public`, etc, if present in front of the `def` + # keyword on the same line. + EnforcedStyleAlignWith: start_of_line + SupportedStylesAlignWith: + - start_of_line + - def + AutoCorrect: false + Severity: warning + +Layout/DotPosition: + Description: 'Checks the position of the dot in multi-line method calls.' + StyleGuide: '#consistent-multi-line-chains' + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: leading + SupportedStyles: + - leading + - trailing + +Layout/ElseAlignment: + Description: 'Align elses and elsifs correctly.' + Enabled: true + VersionAdded: '0.49' + +Layout/EmptyComment: + Description: 'Checks empty comment.' + Enabled: true + VersionAdded: '0.53' + AllowBorderComment: true + AllowMarginComment: true + +Layout/EmptyLineAfterGuardClause: + Description: 'Add empty line after guard clause.' + Enabled: true + VersionAdded: '0.56' + VersionChanged: '0.59' + +Layout/EmptyLineAfterMagicComment: + Description: 'Add an empty line after magic comments to separate them from code.' + StyleGuide: '#separate-magic-comments-from-code' + Enabled: true + VersionAdded: '0.49' + +Layout/EmptyLineBetweenDefs: + Description: 'Use empty lines between defs.' + StyleGuide: '#empty-lines-between-methods' + Enabled: true + VersionAdded: '0.49' + # If `true`, this parameter means that single line method definitions don't + # need an empty line between them. + AllowAdjacentOneLineDefs: false + # Can be array to specify minimum and maximum number of empty lines, e.g. [1, 2] + NumberOfEmptyLines: 1 + +Layout/EmptyLines: + Description: "Don't use several empty lines in a row." + StyleGuide: '#two-or-more-empty-lines' + Enabled: true + VersionAdded: '0.49' + +Layout/EmptyLinesAroundAccessModifier: + Description: "Keep blank lines around access modifiers." + StyleGuide: '#empty-lines-around-access-modifier' + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: around + SupportedStyles: + - around + - only_before + Reference: + # A reference to `EnforcedStyle: only_before`. + - https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions + +Layout/EmptyLinesAroundArguments: + Description: "Keeps track of empty lines around method arguments." + Enabled: true + VersionAdded: '0.52' + +Layout/EmptyLinesAroundBeginBody: + Description: "Keeps track of empty lines around begin-end bodies." + StyleGuide: '#empty-lines-around-bodies' + Enabled: true + VersionAdded: '0.49' + +Layout/EmptyLinesAroundBlockBody: + Description: "Keeps track of empty lines around block bodies." + StyleGuide: '#empty-lines-around-bodies' + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: no_empty_lines + SupportedStyles: + - empty_lines + - no_empty_lines + +Layout/EmptyLinesAroundClassBody: + Description: "Keeps track of empty lines around class bodies." + StyleGuide: '#empty-lines-around-bodies' + Enabled: true + VersionAdded: '0.49' + VersionChanged: '0.53' + EnforcedStyle: no_empty_lines + SupportedStyles: + - empty_lines + - empty_lines_except_namespace + - empty_lines_special + - no_empty_lines + - beginning_only + - ending_only + +Layout/EmptyLinesAroundExceptionHandlingKeywords: + Description: "Keeps track of empty lines around exception handling keywords." + StyleGuide: '#empty-lines-around-bodies' + Enabled: true + VersionAdded: '0.49' + +Layout/EmptyLinesAroundMethodBody: + Description: "Keeps track of empty lines around method bodies." + StyleGuide: '#empty-lines-around-bodies' + Enabled: true + VersionAdded: '0.49' + +Layout/EmptyLinesAroundModuleBody: + Description: "Keeps track of empty lines around module bodies." + StyleGuide: '#empty-lines-around-bodies' + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: no_empty_lines + SupportedStyles: + - empty_lines + - empty_lines_except_namespace + - empty_lines_special + - no_empty_lines + +Layout/EndAlignment: + Description: 'Align ends correctly.' + Enabled: true + VersionAdded: '0.53' + # The value `keyword` means that `end` should be aligned with the matching + # keyword (`if`, `while`, etc.). + # The value `variable` means that in assignments, `end` should be aligned + # with the start of the variable on the left hand side of `=`. In all other + # situations, `end` should still be aligned with the keyword. + # The value `start_of_line` means that `end` should be aligned with the start + # of the line which the matching keyword appears on. + EnforcedStyleAlignWith: keyword + SupportedStylesAlignWith: + - keyword + - variable + - start_of_line + AutoCorrect: false + Severity: warning + +Layout/EndOfLine: + Description: 'Use Unix-style line endings.' + StyleGuide: '#crlf' + Enabled: true + VersionAdded: '0.49' + # The `native` style means that CR+LF (Carriage Return + Line Feed) is + # enforced on Windows, and LF is enforced on other platforms. The other styles + # mean LF and CR+LF, respectively. + EnforcedStyle: native + SupportedStyles: + - native + - lf + - crlf + +Layout/ExtraSpacing: + Description: 'Do not use unnecessary spacing.' + Enabled: true + VersionAdded: '0.49' + # When true, allows most uses of extra spacing if the intent is to align + # things with the previous or next line, not counting empty lines or comment + # lines. + AllowForAlignment: true + # When true, allows things like 'obj.meth(arg) # comment', + # rather than insisting on 'obj.meth(arg) # comment'. + # If done for alignment, either this OR AllowForAlignment will allow it. + AllowBeforeTrailingComments: false + # When true, forces the alignment of `=` in assignments on consecutive lines. + ForceEqualSignAlignment: false + +Layout/FirstArgumentIndentation: + Description: 'Checks the indentation of the first argument in a method call.' + Enabled: true + VersionAdded: '0.68' + VersionChanged: '0.77' + EnforcedStyle: special_for_inner_method_call_in_parentheses + SupportedStyles: + # The first parameter should always be indented one step more than the + # preceding line. + - consistent + # The first parameter should always be indented one level relative to the + # parent that is receiving the parameter + - consistent_relative_to_receiver + # The first parameter should normally be indented one step more than the + # preceding line, but if it's a parameter for a method call that is itself + # a parameter in a method call, then the inner parameter should be indented + # relative to the inner method. + - special_for_inner_method_call + # Same as `special_for_inner_method_call` except that the special rule only + # applies if the outer method call encloses its arguments in parentheses. + - special_for_inner_method_call_in_parentheses + # By default, the indentation width from `Layout/IndentationWidth` is used + # But it can be overridden by setting this parameter + IndentationWidth: ~ + +Layout/FirstArrayElementIndentation: + Description: >- + Checks the indentation of the first element in an array + literal. + Enabled: true + VersionAdded: '0.68' + VersionChanged: '0.77' + # The value `special_inside_parentheses` means that array literals with + # brackets that have their opening bracket on the same line as a surrounding + # opening round parenthesis, shall have their first element indented relative + # to the first position inside the parenthesis. + # + # The value `consistent` means that the indentation of the first element shall + # always be relative to the first position of the line where the opening + # bracket is. + # + # The value `align_brackets` means that the indentation of the first element + # shall always be relative to the position of the opening bracket. + EnforcedStyle: special_inside_parentheses + SupportedStyles: + - special_inside_parentheses + - consistent + - align_brackets + # By default, the indentation width from `Layout/IndentationWidth` is used + # But it can be overridden by setting this parameter + IndentationWidth: ~ + +Layout/FirstArrayElementLineBreak: + Description: >- + Checks for a line break before the first element in a + multi-line array. + Enabled: false + VersionAdded: '0.49' + +Layout/FirstHashElementIndentation: + Description: 'Checks the indentation of the first key in a hash literal.' + Enabled: true + VersionAdded: '0.68' + VersionChanged: '0.77' + # The value `special_inside_parentheses` means that hash literals with braces + # that have their opening brace on the same line as a surrounding opening + # round parenthesis, shall have their first key indented relative to the + # first position inside the parenthesis. + # + # The value `consistent` means that the indentation of the first key shall + # always be relative to the first position of the line where the opening + # brace is. + # + # The value `align_braces` means that the indentation of the first key shall + # always be relative to the position of the opening brace. + EnforcedStyle: special_inside_parentheses + SupportedStyles: + - special_inside_parentheses + - consistent + - align_braces + # By default, the indentation width from `Layout/IndentationWidth` is used + # But it can be overridden by setting this parameter + IndentationWidth: ~ + +Layout/FirstHashElementLineBreak: + Description: >- + Checks for a line break before the first element in a + multi-line hash. + Enabled: false + VersionAdded: '0.49' + +Layout/FirstMethodArgumentLineBreak: + Description: >- + Checks for a line break before the first argument in a + multi-line method call. + Enabled: false + VersionAdded: '0.49' + +Layout/FirstMethodParameterLineBreak: + Description: >- + Checks for a line break before the first parameter in a + multi-line method parameter definition. + Enabled: false + VersionAdded: '0.49' + +Layout/FirstParameterIndentation: + Description: >- + Checks the indentation of the first parameter in a + method definition. + Enabled: true + VersionAdded: '0.49' + VersionChanged: '0.77' + EnforcedStyle: consistent + SupportedStyles: + - consistent + - align_parentheses + # By default, the indentation width from `Layout/IndentationWidth` is used + # But it can be overridden by setting this parameter + IndentationWidth: ~ + +Layout/HashAlignment: + Description: >- + Align the elements of a hash literal if they span more than + one line. + Enabled: true + AllowMultipleStyles: true + VersionAdded: '0.49' + VersionChanged: '0.77' + # Alignment of entries using hash rocket as separator. Valid values are: + # + # key - left alignment of keys + # 'a' => 2 + # 'bb' => 3 + # separator - alignment of hash rockets, keys are right aligned + # 'a' => 2 + # 'bb' => 3 + # table - left alignment of keys, hash rockets, and values + # 'a' => 2 + # 'bb' => 3 + EnforcedHashRocketStyle: key + SupportedHashRocketStyles: + - key + - separator + - table + # Alignment of entries using colon as separator. Valid values are: + # + # key - left alignment of keys + # a: 0 + # bb: 1 + # separator - alignment of colons, keys are right aligned + # a: 0 + # bb: 1 + # table - left alignment of keys and values + # a: 0 + # bb: 1 + EnforcedColonStyle: key + SupportedColonStyles: + - key + - separator + - table + # Select whether hashes that are the last argument in a method call should be + # inspected? Valid values are: + # + # always_inspect - Inspect both implicit and explicit hashes. + # Registers an offense for: + # function(a: 1, + # b: 2) + # Registers an offense for: + # function({a: 1, + # b: 2}) + # always_ignore - Ignore both implicit and explicit hashes. + # Accepts: + # function(a: 1, + # b: 2) + # Accepts: + # function({a: 1, + # b: 2}) + # ignore_implicit - Ignore only implicit hashes. + # Accepts: + # function(a: 1, + # b: 2) + # Registers an offense for: + # function({a: 1, + # b: 2}) + # ignore_explicit - Ignore only explicit hashes. + # Accepts: + # function({a: 1, + # b: 2}) + # Registers an offense for: + # function(a: 1, + # b: 2) + EnforcedLastArgumentHashStyle: always_inspect + SupportedLastArgumentHashStyles: + - always_inspect + - always_ignore + - ignore_implicit + - ignore_explicit + +Layout/HeredocArgumentClosingParenthesis: + Description: >- + Checks for the placement of the closing parenthesis in a + method call that passes a HEREDOC string as an argument. + Enabled: false + StyleGuide: '#heredoc-argument-closing-parentheses' + VersionAdded: '0.68' + +Layout/HeredocIndentation: + Description: 'This cop checks the indentation of the here document bodies.' + StyleGuide: '#squiggly-heredocs' + Enabled: true + VersionAdded: '0.49' + VersionChanged: '0.77' + EnforcedStyle: squiggly + SupportedStyles: + - squiggly + - active_support + - powerpack + - unindent + +Layout/IndentationConsistency: + Description: 'Keep indentation straight.' + StyleGuide: '#spaces-indentation' + Enabled: true + VersionAdded: '0.49' + # The difference between `indented` and `normal` is that the `indented_internal_methods` + # style prescribes that in classes and modules the `protected` and `private` + # modifier keywords shall be indented the same as public methods and that + # protected and private members shall be indented one step more than the + # modifiers. Other than that, both styles mean that entities on the same + # logical depth shall have the same indentation. + EnforcedStyle: normal + SupportedStyles: + - normal + - indented_internal_methods + Reference: + # A reference to `EnforcedStyle: indented_internal_methods`. + - https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions + +Layout/IndentationWidth: + Description: 'Use 2 spaces for indentation.' + StyleGuide: '#spaces-indentation' + Enabled: true + VersionAdded: '0.49' + # Number of spaces for each indentation level. + Width: 2 + IgnoredPatterns: [] + +Layout/InitialIndentation: + Description: >- + Checks the indentation of the first non-blank non-comment line in a file. + Enabled: true + VersionAdded: '0.49' + +Layout/LeadingCommentSpace: + Description: 'Comments should start with a space.' + StyleGuide: '#hash-space' + Enabled: true + VersionAdded: '0.49' + VersionChanged: '0.73' + AllowDoxygenCommentStyle: false + +Layout/LeadingEmptyLines: + Description: Check for unnecessary blank lines at the beginning of a file. + Enabled: true + VersionAdded: '0.57' + VersionChanged: '0.77' + +Layout/LineLength: + Description: 'Limit lines to 80 characters.' + StyleGuide: '#80-character-limits' + Enabled: true + VersionAdded: '0.25' + VersionChanged: '0.78' + AutoCorrect: false + Max: 80 + # To make it possible to copy or click on URIs in the code, we allow lines + # containing a URI to be longer than Max. + AllowHeredoc: true + AllowURI: true + URISchemes: + - http + - https + # The IgnoreCopDirectives option causes the LineLength rule to ignore cop + # directives like '# rubocop: enable ...' when calculating a line's length. + IgnoreCopDirectives: true + # The IgnoredPatterns option is a list of !ruby/regexp and/or string + # elements. Strings will be converted to Regexp objects. A line that matches + # any regular expression listed in this option will be ignored by LineLength. + IgnoredPatterns: [] + +Layout/MultilineArrayBraceLayout: + Description: >- + Checks that the closing brace in an array literal is + either on the same line as the last array element, or + a new line. + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: symmetrical + SupportedStyles: + # symmetrical: closing brace is positioned in same way as opening brace + # new_line: closing brace is always on a new line + # same_line: closing brace is always on the same line as last element + - symmetrical + - new_line + - same_line + +Layout/MultilineArrayLineBreaks: + Description: >- + Checks that each item in a multi-line array literal + starts on a separate line. + Enabled: false + VersionAdded: '0.67' + +Layout/MultilineAssignmentLayout: + Description: 'Check for a newline after the assignment operator in multi-line assignments.' + StyleGuide: '#indent-conditional-assignment' + Enabled: false + VersionAdded: '0.49' + # The types of assignments which are subject to this rule. + SupportedTypes: + - block + - case + - class + - if + - kwbegin + - module + EnforcedStyle: new_line + SupportedStyles: + # Ensures that the assignment operator and the rhs are on the same line for + # the set of supported types. + - same_line + # Ensures that the assignment operator and the rhs are on separate lines + # for the set of supported types. + - new_line + +Layout/MultilineBlockLayout: + Description: 'Ensures newlines after multiline block do statements.' + Enabled: true + VersionAdded: '0.49' + +Layout/MultilineHashBraceLayout: + Description: >- + Checks that the closing brace in a hash literal is + either on the same line as the last hash element, or + a new line. + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: symmetrical + SupportedStyles: + # symmetrical: closing brace is positioned in same way as opening brace + # new_line: closing brace is always on a new line + # same_line: closing brace is always on same line as last element + - symmetrical + - new_line + - same_line + +Layout/MultilineHashKeyLineBreaks: + Description: >- + Checks that each item in a multi-line hash literal + starts on a separate line. + Enabled: false + VersionAdded: '0.67' + +Layout/MultilineMethodArgumentLineBreaks: + Description: >- + Checks that each argument in a multi-line method call + starts on a separate line. + Enabled: false + VersionAdded: '0.67' + +Layout/MultilineMethodCallBraceLayout: + Description: >- + Checks that the closing brace in a method call is + either on the same line as the last method argument, or + a new line. + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: symmetrical + SupportedStyles: + # symmetrical: closing brace is positioned in same way as opening brace + # new_line: closing brace is always on a new line + # same_line: closing brace is always on the same line as last argument + - symmetrical + - new_line + - same_line + +Layout/MultilineMethodCallIndentation: + Description: >- + Checks indentation of method calls with the dot operator + that span more than one line. + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: aligned + SupportedStyles: + - aligned + - indented + - indented_relative_to_receiver + # By default, the indentation width from Layout/IndentationWidth is used + # But it can be overridden by setting this parameter + IndentationWidth: ~ + +Layout/MultilineMethodDefinitionBraceLayout: + Description: >- + Checks that the closing brace in a method definition is + either on the same line as the last method parameter, or + a new line. + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: symmetrical + SupportedStyles: + # symmetrical: closing brace is positioned in same way as opening brace + # new_line: closing brace is always on a new line + # same_line: closing brace is always on the same line as last parameter + - symmetrical + - new_line + - same_line + +Layout/MultilineOperationIndentation: + Description: >- + Checks indentation of binary operations that span more than + one line. + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: aligned + SupportedStyles: + - aligned + - indented + # By default, the indentation width from `Layout/IndentationWidth` is used + # But it can be overridden by setting this parameter + IndentationWidth: ~ + +Layout/ParameterAlignment: + Description: >- + Align the parameters of a method definition if they span more + than one line. + StyleGuide: '#no-double-indent' + Enabled: true + VersionAdded: '0.49' + VersionChanged: '0.77' + # Alignment of parameters in multi-line method calls. + # + # The `with_first_parameter` style aligns the following lines along the same + # column as the first parameter. + # + # def method_foo(a, + # b) + # + # The `with_fixed_indentation` style aligns the following lines with one + # level of indentation relative to the start of the line with the method call. + # + # def method_foo(a, + # b) + EnforcedStyle: with_first_parameter + SupportedStyles: + - with_first_parameter + - with_fixed_indentation + # By default, the indentation width from Layout/IndentationWidth is used + # But it can be overridden by setting this parameter + IndentationWidth: ~ + +Layout/RescueEnsureAlignment: + Description: 'Align rescues and ensures correctly.' + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceAfterColon: + Description: 'Use spaces after colons.' + StyleGuide: '#spaces-operators' + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceAfterComma: + Description: 'Use spaces after commas.' + StyleGuide: '#spaces-operators' + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceAfterMethodName: + Description: >- + Do not put a space between a method name and the opening + parenthesis in a method definition. + StyleGuide: '#parens-no-spaces' + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceAfterNot: + Description: Tracks redundant space after the ! operator. + StyleGuide: '#no-space-bang' + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceAfterSemicolon: + Description: 'Use spaces after semicolons.' + StyleGuide: '#spaces-operators' + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceAroundBlockParameters: + Description: 'Checks the spacing inside and after block parameters pipes.' + Enabled: true + VersionAdded: '0.49' + EnforcedStyleInsidePipes: no_space + SupportedStylesInsidePipes: + - space + - no_space + +Layout/SpaceAroundEqualsInParameterDefault: + Description: >- + Checks that the equals signs in parameter default assignments + have or don't have surrounding space depending on + configuration. + StyleGuide: '#spaces-around-equals' + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: space + SupportedStyles: + - space + - no_space + +Layout/SpaceAroundKeyword: + Description: 'Use a space around keywords if appropriate.' + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceAroundOperators: + Description: 'Use a single space around operators.' + StyleGuide: '#spaces-operators' + Enabled: true + VersionAdded: '0.49' + # When `true`, allows most uses of extra spacing if the intent is to align + # with an operator on the previous or next line, not counting empty lines + # or comment lines. + AllowForAlignment: true + +Layout/SpaceBeforeBlockBraces: + Description: >- + Checks that the left block brace has or doesn't have space + before it. + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: space + SupportedStyles: + - space + - no_space + EnforcedStyleForEmptyBraces: space + SupportedStylesForEmptyBraces: + - space + - no_space + VersionChanged: '0.52.1' + +Layout/SpaceBeforeComma: + Description: 'No spaces before commas.' + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceBeforeComment: + Description: >- + Checks for missing space between code and a comment on the + same line. + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceBeforeFirstArg: + Description: >- + Checks that exactly one space is used between a method name + and the first argument for method calls without parentheses. + Enabled: true + VersionAdded: '0.49' + # When `true`, allows most uses of extra spacing if the intent is to align + # things with the previous or next line, not counting empty lines or comment + # lines. + AllowForAlignment: true + +Layout/SpaceBeforeSemicolon: + Description: 'No spaces before semicolons.' + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceInLambdaLiteral: + Description: 'Checks for spaces in lambda literals.' + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: require_no_space + SupportedStyles: + - require_no_space + - require_space + +Layout/SpaceInsideArrayLiteralBrackets: + Description: 'Checks the spacing inside array literal brackets.' + Enabled: true + VersionAdded: '0.52' + EnforcedStyle: no_space + SupportedStyles: + - space + - no_space + # 'compact' normally requires a space inside the brackets, with the exception + # that successive left brackets or right brackets are collapsed together + - compact + EnforcedStyleForEmptyBrackets: no_space + SupportedStylesForEmptyBrackets: + - space + - no_space + +Layout/SpaceInsideArrayPercentLiteral: + Description: 'No unnecessary additional spaces between elements in %i/%w literals.' + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceInsideBlockBraces: + Description: >- + Checks that block braces have or don't have surrounding space. + For blocks taking parameters, checks that the left brace has + or doesn't have trailing space. + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: space + SupportedStyles: + - space + - no_space + EnforcedStyleForEmptyBraces: no_space + SupportedStylesForEmptyBraces: + - space + - no_space + # Space between `{` and `|`. Overrides `EnforcedStyle` if there is a conflict. + SpaceBeforeBlockParameters: true + +Layout/SpaceInsideHashLiteralBraces: + Description: "Use spaces inside hash literal braces - or don't." + StyleGuide: '#spaces-operators' + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: space + SupportedStyles: + - space + - no_space + # 'compact' normally requires a space inside hash braces, with the exception + # that successive left braces or right braces are collapsed together + - compact + EnforcedStyleForEmptyBraces: no_space + SupportedStylesForEmptyBraces: + - space + - no_space + + +Layout/SpaceInsideParens: + Description: 'No spaces after ( or before ).' + StyleGuide: '#spaces-braces' + Enabled: true + VersionAdded: '0.49' + VersionChanged: '0.55' + EnforcedStyle: no_space + SupportedStyles: + - space + - no_space + +Layout/SpaceInsidePercentLiteralDelimiters: + Description: 'No unnecessary spaces inside delimiters of %i/%w/%x literals.' + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceInsideRangeLiteral: + Description: 'No spaces inside range literals.' + StyleGuide: '#no-space-inside-range-literals' + Enabled: true + VersionAdded: '0.49' + +Layout/SpaceInsideReferenceBrackets: + Description: 'Checks the spacing inside referential brackets.' + Enabled: true + VersionAdded: '0.52' + VersionChanged: '0.53' + EnforcedStyle: no_space + SupportedStyles: + - space + - no_space + EnforcedStyleForEmptyBrackets: no_space + SupportedStylesForEmptyBrackets: + - space + - no_space + +Layout/SpaceInsideStringInterpolation: + Description: 'Checks for padding/surrounding spaces inside string interpolation.' + StyleGuide: '#string-interpolation' + Enabled: true + VersionAdded: '0.49' + EnforcedStyle: no_space + SupportedStyles: + - space + - no_space + +Layout/Tab: + Description: 'No hard tabs.' + StyleGuide: '#spaces-indentation' + Enabled: true + VersionAdded: '0.49' + VersionChanged: '0.51' + # By default, the indentation width from Layout/IndentationWidth is used + # But it can be overridden by setting this parameter + # It is used during auto-correction to determine how many spaces should + # replace each tab. + IndentationWidth: ~ + +Layout/TrailingEmptyLines: + Description: 'Checks trailing blank lines and final newline.' + StyleGuide: '#newline-eof' + Enabled: true + VersionAdded: '0.49' + VersionChanged: '0.77' + EnforcedStyle: final_newline + SupportedStyles: + - final_newline + - final_blank_line + +Layout/TrailingWhitespace: + Description: 'Avoid trailing whitespace.' + StyleGuide: '#no-trailing-whitespace' + Enabled: true + VersionAdded: '0.49' + VersionChanged: '0.55' + AllowInHeredoc: false + +#################### Lint ################################## +### Warnings + +Lint/AmbiguousBlockAssociation: + Description: >- + Checks for ambiguous block association with method when param passed without + parentheses. + StyleGuide: '#syntax' + Enabled: true + VersionAdded: '0.48' + +Lint/AmbiguousOperator: + Description: >- + Checks for ambiguous operators in the first argument of a + method invocation without parentheses. + StyleGuide: '#method-invocation-parens' + Enabled: true + VersionAdded: '0.17' + +Lint/AmbiguousRegexpLiteral: + Description: >- + Checks for ambiguous regexp literals in the first argument of + a method invocation without parentheses. + Enabled: true + VersionAdded: '0.17' + +Lint/AssignmentInCondition: + Description: "Don't use assignment in conditions." + StyleGuide: '#safe-assignment-in-condition' + Enabled: true + VersionAdded: '0.9' + AllowSafeAssignment: true + +Lint/BigDecimalNew: + Description: '`BigDecimal.new()` is deprecated. Use `BigDecimal()` instead.' + Enabled: true + VersionAdded: '0.53' + +Lint/BooleanSymbol: + Description: 'Check for `:true` and `:false` symbols.' + Enabled: true + VersionAdded: '0.50' + +Lint/CircularArgumentReference: + Description: "Default values in optional keyword arguments and optional ordinal arguments should not refer back to the name of the argument." + Enabled: true + VersionAdded: '0.33' + +Lint/Debugger: + Description: 'Check for debugger calls.' + Enabled: true + VersionAdded: '0.14' + VersionChanged: '0.49' + +Lint/DeprecatedClassMethods: + Description: 'Check for deprecated class method calls.' + Enabled: true + VersionAdded: '0.19' + +Lint/DisjunctiveAssignmentInConstructor: + Description: 'In constructor, plain assignment is preferred over disjunctive.' + Enabled: true + Safe: false + VersionAdded: '0.62' + +Lint/DuplicateCaseCondition: + Description: 'Do not repeat values in case conditionals.' + Enabled: true + VersionAdded: '0.45' + +Lint/DuplicateHashKey: + Description: 'Check for duplicate keys in hash literals.' + Enabled: true + VersionAdded: '0.34' + VersionChanged: '0.77' + +Lint/DuplicateMethods: + Description: 'Check for duplicate method definitions.' + Enabled: true + VersionAdded: '0.29' + +Lint/EachWithObjectArgument: + Description: 'Check for immutable argument given to each_with_object.' + Enabled: true + VersionAdded: '0.31' + +Lint/ElseLayout: + Description: 'Check for odd code arrangement in an else block.' + Enabled: true + VersionAdded: '0.17' + +Lint/EmptyEnsure: + Description: 'Checks for empty ensure block.' + Enabled: true + VersionAdded: '0.10' + VersionChanged: '0.48' + AutoCorrect: false + +Lint/EmptyExpression: + Description: 'Checks for empty expressions.' + Enabled: true + VersionAdded: '0.45' + +Lint/EmptyInterpolation: + Description: 'Checks for empty string interpolation.' + Enabled: true + VersionAdded: '0.20' + VersionChanged: '0.45' + +Lint/EmptyWhen: + Description: 'Checks for `when` branches with empty bodies.' + Enabled: true + VersionAdded: '0.45' + +Lint/EndInMethod: + Description: 'END blocks should not be placed inside method definitions.' + Enabled: true + VersionAdded: '0.9' + +Lint/EnsureReturn: + Description: 'Do not use return in an ensure block.' + StyleGuide: '#no-return-ensure' + Enabled: true + VersionAdded: '0.9' + +Lint/ErbNewArguments: + Description: 'Use `:trim_mode` and `:eoutvar` keyword arguments to `ERB.new`.' + Enabled: true + VersionAdded: '0.56' + +Lint/FlipFlop: + Description: 'Checks for flip-flops.' + StyleGuide: '#no-flip-flops' + Enabled: true + VersionAdded: '0.16' + +Lint/FloatOutOfRange: + Description: >- + Catches floating-point literals too large or small for Ruby to + represent. + Enabled: true + VersionAdded: '0.36' + +Lint/FormatParameterMismatch: + Description: 'The number of parameters to format/sprint must match the fields.' + Enabled: true + VersionAdded: '0.33' + +Lint/HeredocMethodCallPosition: + Description: >- + Checks for the ordering of a method call where + the receiver of the call is a HEREDOC. + Enabled: false + StyleGuide: '#heredoc-method-calls' + VersionAdded: '0.68' + +Lint/ImplicitStringConcatenation: + Description: >- + Checks for adjacent string literals on the same line, which + could better be represented as a single string literal. + Enabled: true + VersionAdded: '0.36' + +Lint/IneffectiveAccessModifier: + Description: >- + Checks for attempts to use `private` or `protected` to set + the visibility of a class method, which does not work. + Enabled: true + VersionAdded: '0.36' + +Lint/InheritException: + Description: 'Avoid inheriting from the `Exception` class.' + Enabled: true + VersionAdded: '0.41' + # The default base class in favour of `Exception`. + EnforcedStyle: runtime_error + SupportedStyles: + - runtime_error + - standard_error + +Lint/InterpolationCheck: + Description: 'Raise warning for interpolation in single q strs.' + Enabled: true + VersionAdded: '0.50' + +Lint/LiteralAsCondition: + Description: 'Checks of literals used in conditions.' + Enabled: true + VersionAdded: '0.51' + +Lint/LiteralInInterpolation: + Description: 'Checks for literals used in interpolation.' + Enabled: true + VersionAdded: '0.19' + VersionChanged: '0.32' + +Lint/Loop: + Description: >- + Use Kernel#loop with break rather than begin/end/until or + begin/end/while for post-loop tests. + StyleGuide: '#loop-with-break' + Enabled: true + VersionAdded: '0.9' + +Lint/MissingCopEnableDirective: + Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`.' + Enabled: true + VersionAdded: '0.52' + # Maximum number of consecutive lines the cop can be disabled for. + # 0 allows only single-line disables + # 1 would mean the maximum allowed is the following: + # # rubocop:disable SomeCop + # a = 1 + # # rubocop:enable SomeCop + # .inf for any size + MaximumRangeSize: .inf + +Lint/MultipleComparison: + Description: "Use `&&` operator to compare multiple values." + Enabled: true + VersionAdded: '0.47' + VersionChanged: '0.77' + +Lint/NestedMethodDefinition: + Description: 'Do not use nested method definitions.' + StyleGuide: '#no-nested-methods' + Enabled: true + VersionAdded: '0.32' + +Lint/NestedPercentLiteral: + Description: 'Checks for nested percent literals.' + Enabled: true + VersionAdded: '0.52' + +Lint/NextWithoutAccumulator: + Description: >- + Do not omit the accumulator when calling `next` + in a `reduce`/`inject` block. + Enabled: true + VersionAdded: '0.36' + +Lint/NonLocalExitFromIterator: + Description: 'Do not use return in iterator to cause non-local exit.' + Enabled: true + VersionAdded: '0.30' + +Lint/NumberConversion: + Description: 'Checks unsafe usage of number conversion methods.' + Enabled: false + VersionAdded: '0.53' + VersionChanged: '0.70' + SafeAutoCorrect: false + +Lint/OrderedMagicComments: + Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.' + Enabled: true + VersionAdded: '0.53' + +Lint/ParenthesesAsGroupedExpression: + Description: >- + Checks for method calls with a space before the opening + parenthesis. + StyleGuide: '#parens-no-spaces' + Enabled: true + VersionAdded: '0.12' + +Lint/PercentStringArray: + Description: >- + Checks for unwanted commas and quotes in %w/%W literals. + Enabled: true + Safe: false + VersionAdded: '0.41' + +Lint/PercentSymbolArray: + Description: >- + Checks for unwanted commas and colons in %i/%I literals. + Enabled: true + VersionAdded: '0.41' + +Lint/RandOne: + Description: >- + Checks for `rand(1)` calls. Such calls always return `0` + and most likely a mistake. + Enabled: true + VersionAdded: '0.36' + +Lint/RedundantCopDisableDirective: + Description: >- + Checks for rubocop:disable comments that can be removed. + Note: this cop is not disabled when disabling all cops. + It must be explicitly disabled. + Enabled: true + VersionAdded: '0.76' + +Lint/RedundantCopEnableDirective: + Description: Checks for rubocop:enable comments that can be removed. + Enabled: true + VersionAdded: '0.76' + +Lint/RedundantRequireStatement: + Description: 'Checks for unnecessary `require` statement.' + Enabled: true + VersionAdded: '0.76' + +Lint/RedundantSplatExpansion: + Description: 'Checks for splat unnecessarily being called on literals.' + Enabled: true + VersionChanged: '0.76' + +Lint/RedundantStringCoercion: + Description: 'Checks for Object#to_s usage in string interpolation.' + StyleGuide: '#no-to-s' + Enabled: true + VersionAdded: '0.19' + VersionChanged: '0.77' + +Lint/RedundantWithIndex: + Description: 'Checks for redundant `with_index`.' + Enabled: true + VersionAdded: '0.50' + +Lint/RedundantWithObject: + Description: 'Checks for redundant `with_object`.' + Enabled: true + VersionAdded: '0.51' + +Lint/RegexpAsCondition: + Description: >- + Do not use regexp literal as a condition. + The regexp literal matches `$_` implicitly. + Enabled: true + VersionAdded: '0.51' + +Lint/RequireParentheses: + Description: >- + Use parentheses in the method call to avoid confusion + about precedence. + Enabled: true + VersionAdded: '0.18' + +Lint/RescueException: + Description: 'Avoid rescuing the Exception class.' + StyleGuide: '#no-blind-rescues' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.27.1' + +Lint/RescueType: + Description: 'Avoid rescuing from non constants that could result in a `TypeError`.' + Enabled: true + VersionAdded: '0.49' + +Lint/ReturnInVoidContext: + Description: 'Checks for return in void context.' + Enabled: true + VersionAdded: '0.50' + +Lint/SafeNavigationChain: + Description: 'Do not chain ordinary method call after safe navigation operator.' + Enabled: true + VersionAdded: '0.47' + VersionChanged: '0.77' + AllowedMethods: + - present? + - blank? + - presence + - try + - try! + +Lint/SafeNavigationConsistency: + Description: >- + Check to make sure that if safe navigation is used for a method + call in an `&&` or `||` condition that safe navigation is used + for all method calls on that same object. + Enabled: true + VersionAdded: '0.55' + VersionChanged: '0.77' + AllowedMethods: + - present? + - blank? + - presence + - try + - try! + +Lint/SafeNavigationWithEmpty: + Description: 'Avoid `foo&.empty?` in conditionals.' + Enabled: true + VersionAdded: '0.62' + +Lint/ScriptPermission: + Description: 'Grant script file execute permission.' + Enabled: true + VersionAdded: '0.49' + VersionChanged: '0.50' + +Lint/SendWithMixinArgument: + Description: 'Checks for `send` method when using mixin.' + Enabled: true + VersionAdded: '0.75' + +Lint/ShadowedArgument: + Description: 'Avoid reassigning arguments before they were used.' + Enabled: true + VersionAdded: '0.52' + IgnoreImplicitReferences: false + + +Lint/ShadowedException: + Description: >- + Avoid rescuing a higher level exception + before a lower level exception. + Enabled: true + VersionAdded: '0.41' + +Lint/ShadowingOuterLocalVariable: + Description: >- + Do not use the same name as outer local variable + for block arguments or block local variables. + Enabled: true + VersionAdded: '0.9' + +Lint/SuppressedException: + Description: "Don't suppress exceptions." + StyleGuide: '#dont-hide-exceptions' + Enabled: true + AllowComments: false + VersionAdded: '0.9' + VersionChanged: '0.77' + +Lint/Syntax: + Description: 'Checks syntax error.' + Enabled: true + VersionAdded: '0.9' + + +Lint/ToJSON: + Description: 'Ensure #to_json includes an optional argument.' Enabled: true -Rails/HttpPositionalArguments: - Exclude: - - 'spec/**/*_spec.rb' +Lint/UnderscorePrefixedVariableName: + Description: 'Do not use prefix `_` for a variable that is used.' + Enabled: true + VersionAdded: '0.21' + AllowKeywordBlockArguments: false -Rails/TimeZone: - Enabled: false +Lint/UnifiedInteger: + Description: 'Use Integer instead of Fixnum or Bignum.' + Enabled: true + VersionAdded: '0.43' -Rails/Date: - Enabled: false +Lint/UnreachableCode: + Description: 'Unreachable code.' + Enabled: true + VersionAdded: '0.9' + +Lint/UnusedBlockArgument: + Description: 'Checks for unused block arguments.' + StyleGuide: '#underscore-unused-vars' + Enabled: true + VersionAdded: '0.21' + VersionChanged: '0.22' + IgnoreEmptyBlocks: true + AllowUnusedKeywordArguments: false + +Lint/UnusedMethodArgument: + Description: 'Checks for unused method arguments.' + StyleGuide: '#underscore-unused-vars' + Enabled: true + VersionAdded: '0.21' + VersionChanged: '0.35' + AllowUnusedKeywordArguments: false + IgnoreEmptyMethods: true + +Lint/UriEscapeUnescape: + Description: >- + `URI.escape` method is obsolete and should not be used. Instead, use + `CGI.escape`, `URI.encode_www_form` or `URI.encode_www_form_component` + depending on your specific use case. + Also `URI.unescape` method is obsolete and should not be used. Instead, use + `CGI.unescape`, `URI.decode_www_form` or `URI.decode_www_form_component` + depending on your specific use case. + Enabled: true + VersionAdded: '0.50' + +Lint/UriRegexp: + Description: 'Use `URI::DEFAULT_PARSER.make_regexp` instead of `URI.regexp`.' + Enabled: true + VersionAdded: '0.50' + +Lint/UselessAccessModifier: + Description: 'Checks for useless access modifiers.' + Enabled: true + VersionAdded: '0.20' + VersionChanged: '0.47' + ContextCreatingMethods: [] + MethodCreatingMethods: [] + +Lint/UselessAssignment: + Description: 'Checks for useless assignment to a local variable.' + StyleGuide: '#underscore-unused-vars' + Enabled: true + VersionAdded: '0.11' + +Lint/UselessComparison: + Description: 'Checks for comparison of something with itself.' + Enabled: true + VersionAdded: '0.11' + +Lint/UselessElseWithoutRescue: + Description: 'Checks for useless `else` in `begin..end` without `rescue`.' + Enabled: true + VersionAdded: '0.17' + +Lint/UselessSetterCall: + Description: 'Checks for useless setter call to a local variable.' + Enabled: true + VersionAdded: '0.13' + +Lint/Void: + Description: 'Possible use of operator/literal/variable in void context.' + Enabled: true + VersionAdded: '0.9' + CheckForMethodsWithNoSideEffects: false + +#################### Metrics ############################### + +Metrics/AbcSize: + Description: >- + A calculated magnitude based on number of assignments, + branches, and conditions. + Reference: + - http://c2.com/cgi/wiki?AbcMetric + - https://en.wikipedia.org/wiki/ABC_Software_Metric + Enabled: true + VersionAdded: '0.27' + VersionChanged: '0.66' + # The ABC size is a calculated magnitude, so this number can be an Integer or + # a Float. + Max: 15 Metrics/BlockLength: + Description: 'Avoid long blocks with many lines.' + Enabled: true + VersionAdded: '0.44' + VersionChanged: '0.66' + CountComments: false # count full line comments? + Max: 25 + ExcludedMethods: + # By default, exclude the `#refine` method, as it tends to have larger + # associated blocks. + - refine Exclude: - - 'spec/**/*_spec.rb' - - 'app/endpoints/**/*.rb' - - '*.gemspec' + - '**/*.gemspec' -# Commonly used screens these days easily fit more than 80 characters. -Metrics/LineLength: - Max: 120 +Metrics/BlockNesting: + Description: 'Avoid excessive block nesting.' + StyleGuide: '#three-is-the-number-thou-shalt-count' + Enabled: true + VersionAdded: '0.25' + VersionChanged: '0.47' + CountBlocks: false + Max: 3 + +Metrics/ClassLength: + Description: 'Avoid classes longer than 100 lines of code.' + Enabled: true + VersionAdded: '0.25' + CountComments: false # count full line comments? + Max: 100 + +# Avoid complex methods. +Metrics/CyclomaticComplexity: + Description: >- + A complexity metric that is strongly correlated to the number + of test cases needed to validate a method. + Enabled: true + VersionAdded: '0.25' + Max: 6 -# Too short methods lead to extraction of single-use methods, which can make -# the code easier to read (by naming things), but can also clutter the class Metrics/MethodLength: - Max: 20 + Description: 'Avoid methods longer than 10 lines of code.' + StyleGuide: '#short-methods' + Enabled: true + VersionAdded: '0.25' + VersionChanged: '0.59.2' + CountComments: false # count full line comments? + Max: 10 + ExcludedMethods: [] + +Metrics/ModuleLength: + Description: 'Avoid modules longer than 100 lines of code.' + Enabled: true + VersionAdded: '0.31' + CountComments: false # count full line comments? + Max: 100 Metrics/ParameterLists: - Max: 8 - -# This is too subjective -Style/SymbolArray: - Enabled: false - -Style/ClassAndModuleChildren: - Enabled: false - -Style/CollectionMethods: + Description: 'Avoid parameter lists longer than three or four parameters.' + StyleGuide: '#too-many-params' Enabled: true - PreferredMethods: - # inject seems more common in the community. - reduce: 'inject' + VersionAdded: '0.25' + Max: 5 + CountKeywordArgs: true -Style/FrozenStringLiteralComment: +Metrics/PerceivedComplexity: + Description: >- + A complexity metric geared towards measuring complexity for a + human reader. + Enabled: true + VersionAdded: '0.25' + Max: 7 + +################## Migration ############################# + +Migration/DepartmentName: + Description: >- + Check that cop names in rubocop:disable (etc) comments are + given with department name. Enabled: false -# Either allow this style or don't. Marking it as safe with parenthesis -# is silly. Let's try to live without them for now. -Style/ParenthesesAroundCondition: - AllowSafeAssignment: false -Lint/AssignmentInCondition: - AllowSafeAssignment: false +#################### Naming ############################## -# Fail is an alias of raise. Avoid aliases, it's more cognitive load for no gain. -# The argument that fail should be used to abort the program is wrong too, -# there's Kernel#abort for that. -Style/SignalException: - EnforcedStyle: only_raise +Naming/AccessorMethodName: + Description: Check the naming of accessor methods for get_/set_. + StyleGuide: '#accessor_mutator_method_names' + Enabled: true + VersionAdded: '0.50' -# Check with yard instead. -Style/Documentation: - Enabled: false +Naming/AsciiIdentifiers: + Description: 'Use only ascii symbols in identifiers.' + StyleGuide: '#english-identifiers' + Enabled: true + VersionAdded: '0.50' -# aligns the following lines with one level of indentation relative to -# the start of the line with the method call. -# -# method_call(a, -# b) -# -Style/BlockDelimiters: - Enabled: false +Naming/BinaryOperatorParameterName: + Description: 'When defining binary operators, name the argument other.' + StyleGuide: '#other-arg' + Enabled: true + VersionAdded: '0.50' + +Naming/BlockParameterName: + Description: >- + Checks for block parameter names that contain capital letters, + end in numbers, or do not meet a minimal length. + Enabled: true + VersionAdded: '0.53' + VersionChanged: '0.77' + # Parameter names may be equal to or greater than this value + MinNameLength: 1 + AllowNamesEndingInNumbers: true + # Allowed names that will not register an offense + AllowedNames: [] + # Forbidden names that will register an offense + ForbiddenNames: [] + +Naming/ClassAndModuleCamelCase: + Description: 'Use CamelCase for classes and modules.' + StyleGuide: '#camelcase-classes' + Enabled: true + VersionAdded: '0.50' + +Naming/ConstantName: + Description: 'Constants should use SCREAMING_SNAKE_CASE.' + StyleGuide: '#screaming-snake-case' + Enabled: true + VersionAdded: '0.50' + +Naming/FileName: + Description: 'Use snake_case for source file names.' + StyleGuide: '#snake-case-files' + Enabled: true + VersionAdded: '0.50' + # Camel case file names listed in `AllCops:Include` and all file names listed + # in `AllCops:Exclude` are excluded by default. Add extra excludes here. + Exclude: [] + # When `true`, requires that each source file should define a class or module + # with a name which matches the file name (converted to ... case). + # It further expects it to be nested inside modules which match the names + # of subdirectories in its path. + ExpectMatchingDefinition: false + # If non-`nil`, expect all source file names to match the following regex. + # Only the file name itself is matched, not the entire file path. + # Use anchors as necessary if you want to match the entire name rather than + # just a part of it. + Regex: ~ + # With `IgnoreExecutableScripts` set to `true`, this cop does not + # report offending filenames for executable scripts (i.e. source + # files with a shebang in the first line). + IgnoreExecutableScripts: true + AllowedAcronyms: + - CLI + - DSL + - ACL + - API + - ASCII + - CPU + - CSS + - DNS + - EOF + - GUID + - HTML + - HTTP + - HTTPS + - ID + - IP + - JSON + - LHS + - QPS + - RAM + - RHS + - RPC + - SLA + - SMTP + - SQL + - SSH + - TCP + - TLS + - TTL + - UDP + - UI + - UID + - UUID + - URI + - URL + - UTF8 + - VM + - XML + - XMPP + - XSRF + - XSS + +Naming/HeredocDelimiterCase: + Description: 'Use configured case for heredoc delimiters.' + StyleGuide: '#heredoc-delimiters' + Enabled: true + VersionAdded: '0.50' + EnforcedStyle: uppercase + SupportedStyles: + - lowercase + - uppercase + +Naming/HeredocDelimiterNaming: + Description: 'Use descriptive heredoc delimiters.' + StyleGuide: '#heredoc-delimiters' + Enabled: true + VersionAdded: '0.50' + ForbiddenDelimiters: + - !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/' + +Naming/MemoizedInstanceVariableName: + Description: >- + Memoized method name should match memo instance variable name. + Enabled: true + VersionAdded: '0.53' + VersionChanged: '0.58' + EnforcedStyleForLeadingUnderscores: disallowed + SupportedStylesForLeadingUnderscores: + - disallowed + - required + - optional + +Naming/MethodName: + Description: 'Use the configured style when naming methods.' + StyleGuide: '#snake-case-symbols-methods-vars' + Enabled: true + VersionAdded: '0.50' + EnforcedStyle: snake_case + SupportedStyles: + - snake_case + - camelCase + # Method names matching patterns are always allowed. + # + # IgnoredPatterns: + # - '\A\s*onSelectionBulkChange\s*' + # - '\A\s*onSelectionCleared\s*' + # + IgnoredPatterns: [] + +Naming/MethodParameterName: + Description: >- + Checks for method parameter names that contain capital letters, + end in numbers, or do not meet a minimal length. + Enabled: true + VersionAdded: '0.53' + VersionChanged: '0.77' + # Parameter names may be equal to or greater than this value + MinNameLength: 3 + AllowNamesEndingInNumbers: true + # Allowed names that will not register an offense + AllowedNames: + - io + - id + - to + - by + - 'on' + - in + - at + - ip + - db + - os + # Forbidden names that will register an offense + ForbiddenNames: [] + +Naming/PredicateName: + Description: 'Check the names of predicate methods.' + StyleGuide: '#bool-methods-qmark' + Enabled: true + VersionAdded: '0.50' + VersionChanged: '0.77' + # Predicate name prefixes. + NamePrefix: + - is_ + - has_ + - have_ + # Predicate name prefixes that should be removed. + ForbiddenPrefixes: + - is_ + - has_ + - have_ + # Predicate names which, despite having a forbidden prefix, or no `?`, + # should still be accepted + AllowedMethods: + - is_a? + # Method definition macros for dynamically generated methods. + MethodDefinitionMacros: + - define_method + - define_singleton_method + # Exclude Rspec specs because there is a strong convention to write spec + # helpers in the form of `have_something` or `be_something`. + Exclude: + - 'spec/**/*' + +Naming/RescuedExceptionsVariableName: + Description: 'Use consistent rescued exceptions variables naming.' + Enabled: true + VersionAdded: '0.67' + VersionChanged: '0.68' + PreferredName: e + +Naming/VariableName: + Description: 'Use the configured style when naming variables.' + StyleGuide: '#snake-case-symbols-methods-vars' + Enabled: true + VersionAdded: '0.50' + EnforcedStyle: snake_case + SupportedStyles: + - snake_case + - camelCase + +Naming/VariableNumber: + Description: 'Use the configured style when numbering variables.' + Enabled: true + VersionAdded: '0.50' + EnforcedStyle: normalcase + SupportedStyles: + - snake_case + - normalcase + - non_integer + +#################### Security ############################## + +Security/Eval: + Description: 'The use of eval represents a serious security risk.' + Enabled: true + VersionAdded: '0.47' + +Security/JSONLoad: + Description: >- + Prefer usage of `JSON.parse` over `JSON.load` due to potential + security issues. See reference for more information. + Reference: 'https://ruby-doc.org/stdlib-2.3.0/libdoc/json/rdoc/JSON.html#method-i-load' + Enabled: true + VersionAdded: '0.43' + VersionChanged: '0.44' + # Autocorrect here will change to a method that may cause crashes depending + # on the value of the argument. + AutoCorrect: false + SafeAutoCorrect: false + +Security/MarshalLoad: + Description: >- + Avoid using of `Marshal.load` or `Marshal.restore` due to potential + security issues. See reference for more information. + Reference: 'https://ruby-doc.org/core-2.3.3/Marshal.html#module-Marshal-label-Security+considerations' + Enabled: true + VersionAdded: '0.47' + +Security/Open: + Description: 'The use of Kernel#open represents a serious security risk.' + Enabled: true + VersionAdded: '0.53' + Safe: false + +Security/YAMLLoad: + Description: >- + Prefer usage of `YAML.safe_load` over `YAML.load` due to potential + security issues. See reference for more information. + Reference: 'https://ruby-doc.org/stdlib-2.3.3/libdoc/yaml/rdoc/YAML.html#module-YAML-label-Security' + Enabled: true + VersionAdded: '0.47' + SafeAutoCorrect: false + +#################### Style ############################### + +Style/AccessModifierDeclarations: + Description: 'Checks style of how access modifiers are used.' + Enabled: true + VersionAdded: '0.57' + EnforcedStyle: group + SupportedStyles: + - inline + - group -# free to use alias and alias_method Style/Alias: - Enabled: false - -# Prefer numbers without delimeters -Style/NumericLiterals: - Enabled: false - -Style/LambdaCall: - Enabled: false - -Style/NumericPredicate: - EnforcedStyle: comparison + Description: 'Use alias instead of alias_method.' + StyleGuide: '#alias-method-lexically' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.36' + EnforcedStyle: prefer_alias + SupportedStyles: + - prefer_alias + - prefer_alias_method Style/AndOr: + Description: 'Use &&/|| instead of and/or.' + StyleGuide: '#no-and-or-or' Enabled: true - Exclude: - - 'app/controllers/**/*' + VersionAdded: '0.9' + VersionChanged: '0.25' + # Whether `and` and `or` are banned only in conditionals (conditionals) + # or completely (always). + EnforcedStyle: always + SupportedStyles: + - always + - conditionals -Layout/AlignParameters: +Style/ArrayJoin: + Description: 'Use Array#join instead of Array#*.' + StyleGuide: '#array-join' + Enabled: true + VersionAdded: '0.20' + VersionChanged: '0.31' + +Style/AsciiComments: + Description: 'Use only ascii symbols in comments.' + StyleGuide: '#english-comments' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.52' + AllowedChars: [] + +Style/Attr: + Description: 'Checks for uses of Module#attr.' + StyleGuide: '#attr' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.12' + +Style/AutoResourceCleanup: + Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).' Enabled: false + VersionAdded: '0.30' + +Style/BarePercentLiterals: + Description: 'Checks if usage of %() or %Q() matches configuration.' + StyleGuide: '#percent-q-shorthand' + Enabled: true + VersionAdded: '0.25' + EnforcedStyle: bare_percent + SupportedStyles: + - percent_q + - bare_percent + +Style/BeginBlock: + Description: 'Avoid the use of BEGIN blocks.' + StyleGuide: '#no-BEGIN-blocks' + Enabled: true + VersionAdded: '0.9' + +Style/BlockComments: + Description: 'Do not use block comments.' + StyleGuide: '#no-block-comments' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.23' + +Style/BlockDelimiters: + Description: >- + Avoid using {...} for multi-line blocks (multiline chaining is + always ugly). + Prefer {...} over do...end for single-line blocks. + StyleGuide: '#single-line-blocks' + Enabled: true + VersionAdded: '0.30' + VersionChanged: '0.35' + EnforcedStyle: line_count_based + SupportedStyles: + # The `line_count_based` style enforces braces around single line blocks and + # do..end around multi-line blocks. + - line_count_based + # The `semantic` style enforces braces around functional blocks, where the + # primary purpose of the block is to return a value and do..end for + # multi-line procedural blocks, where the primary purpose of the block is + # its side-effects. Single-line procedural blocks may only use do-end, + # unless AllowBracesOnProceduralOneLiners has a truthy value (see below). + # + # This looks at the usage of a block's method to determine its type (e.g. is + # the result of a `map` assigned to a variable or passed to another + # method) but exceptions are permitted in the `ProceduralMethods`, + # `FunctionalMethods` and `IgnoredMethods` sections below. + - semantic + # The `braces_for_chaining` style enforces braces around single line blocks + # and do..end around multi-line blocks, except for multi-line blocks whose + # return value is being chained with another method (in which case braces + # are enforced). + - braces_for_chaining + # The `always_braces` style always enforces braces. + - always_braces + ProceduralMethods: + # Methods that are known to be procedural in nature but look functional from + # their usage, e.g. + # + # time = Benchmark.realtime do + # foo.bar + # end + # + # Here, the return value of the block is discarded but the return value of + # `Benchmark.realtime` is used. + - benchmark + - bm + - bmbm + - create + - each_with_object + - measure + - new + - realtime + - tap + - with_object + FunctionalMethods: + # Methods that are known to be functional in nature but look procedural from + # their usage, e.g. + # + # let(:foo) { Foo.new } + # + # Here, the return value of `Foo.new` is used to define a `foo` helper but + # doesn't appear to be used from the return value of `let`. + - let + - let! + - subject + - watch + IgnoredMethods: + # Methods that can be either procedural or functional and cannot be + # categorised from their usage alone, e.g. + # + # foo = lambda do |x| + # puts "Hello, #{x}" + # end + # + # foo = lambda do |x| + # x * 100 + # end + # + # Here, it is impossible to tell from the return value of `lambda` whether + # the inner block's return value is significant. + - lambda + - proc + - it + # The AllowBracesOnProceduralOneLiners option is ignored unless the + # EnforcedStyle is set to `semantic`. If so: + # + # If AllowBracesOnProceduralOneLiners is unspecified, or set to any + # falsey value, then semantic purity is maintained, so one-line + # procedural blocks must use do-end, not braces. + # + # # bad + # collection.each { |element| puts element } + # + # # good + # collection.each do |element| puts element end + # + # If AllowBracesOnProceduralOneLiners is set to any truthy value, + # then one-line procedural blocks may use either style. + # + # # good + # collection.each { |element| puts element } + # + # # also good + # collection.each do |element| puts element end + AllowBracesOnProceduralOneLiners: false + +Style/BracesAroundHashParameters: + Description: 'Enforce braces style around hash parameters.' + Enabled: true + VersionAdded: '0.14.1' + VersionChanged: '0.28' + EnforcedStyle: no_braces + SupportedStyles: + # The `braces` style enforces braces around all method parameters that are + # hashes. + - braces + # The `no_braces` style checks that the last parameter doesn't have braces + # around it. + - no_braces + # The `context_dependent` style checks that the last parameter doesn't have + # braces around it, but requires braces if the second to last parameter is + # also a hash literal. + - context_dependent + +Style/CaseEquality: + Description: 'Avoid explicit use of the case equality operator(===).' + StyleGuide: '#no-case-equality' + Enabled: true + VersionAdded: '0.9' + +Style/CharacterLiteral: + Description: 'Checks for uses of character literals.' + StyleGuide: '#no-character-literals' + Enabled: true + VersionAdded: '0.9' + +Style/ClassAndModuleChildren: + Description: 'Checks style of children classes and modules.' + StyleGuide: '#namespace-definition' + # Moving from compact to nested children requires knowledge of whether the + # outer parent is a module or a class. Moving from nested to compact requires + # verification that the outer parent is defined elsewhere. Rubocop does not + # have the knowledge to perform either operation safely and thus requires + # manual oversight. + SafeAutoCorrect: false + AutoCorrect: false + Enabled: true + VersionAdded: '0.19' + # + # Basically there are two different styles: + # + # `nested` - have each child on a separate line + # class Foo + # class Bar + # end + # end + # + # `compact` - combine definitions as much as possible + # class Foo::Bar + # end + # + # The compact style is only forced, for classes or modules with one child. + EnforcedStyle: nested + SupportedStyles: + - nested + - compact + +Style/ClassCheck: + Description: 'Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.' + Enabled: true + VersionAdded: '0.24' + EnforcedStyle: is_a? + SupportedStyles: + - is_a? + - kind_of? + +Style/ClassMethods: + Description: 'Use self when defining module/class methods.' + StyleGuide: '#def-self-class-methods' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.20' + +Style/ClassVars: + Description: 'Avoid the use of class variables.' + StyleGuide: '#no-class-vars' + Enabled: true + VersionAdded: '0.13' + +# Align with the style guide. +Style/CollectionMethods: + Description: 'Preferred collection methods.' + StyleGuide: '#map-find-select-reduce-size' + Enabled: false + VersionAdded: '0.9' + VersionChanged: '0.27' + Safe: false + # Mapping from undesired method to desired method + # e.g. to use `detect` over `find`: + # + # Style/CollectionMethods: + # PreferredMethods: + # find: detect + PreferredMethods: + collect: 'map' + collect!: 'map!' + inject: 'reduce' + detect: 'find' + find_all: 'select' + +Style/ColonMethodCall: + Description: 'Do not use :: for method call.' + StyleGuide: '#double-colons' + Enabled: true + VersionAdded: '0.9' + +Style/ColonMethodDefinition: + Description: 'Do not use :: for defining class methods.' + StyleGuide: '#colon-method-definition' + Enabled: true + VersionAdded: '0.52' + +Style/CommandLiteral: + Description: 'Use `` or %x around command literals.' + StyleGuide: '#percent-x' + Enabled: true + VersionAdded: '0.30' + EnforcedStyle: backticks + # backticks: Always use backticks. + # percent_x: Always use `%x`. + # mixed: Use backticks on single-line commands, and `%x` on multi-line commands. + SupportedStyles: + - backticks + - percent_x + - mixed + # If `false`, the cop will always recommend using `%x` if one or more backticks + # are found in the command string. + AllowInnerBackticks: false + +# Checks formatting of special comments +Style/CommentAnnotation: + Description: >- + Checks formatting of special comments + (TODO, FIXME, OPTIMIZE, HACK, REVIEW). + StyleGuide: '#annotate-keywords' + Enabled: true + VersionAdded: '0.10' + VersionChanged: '0.31' + Keywords: + - TODO + - FIXME + - OPTIMIZE + - HACK + - REVIEW + +Style/CommentedKeyword: + Description: 'Do not place comments on the same line as certain keywords.' + Enabled: true + VersionAdded: '0.51' + +Style/ConditionalAssignment: + Description: >- + Use the return value of `if` and `case` statements for + assignment to a variable and variable comparison instead + of assigning that variable inside of each branch. + Enabled: true + VersionAdded: '0.36' + VersionChanged: '0.47' + EnforcedStyle: assign_to_condition + SupportedStyles: + - assign_to_condition + - assign_inside_condition + # When configured to `assign_to_condition`, `SingleLineConditionsOnly` + # will only register an offense when all branches of a condition are + # a single line. + # When configured to `assign_inside_condition`, `SingleLineConditionsOnly` + # will only register an offense for assignment to a condition that has + # at least one multiline branch. + SingleLineConditionsOnly: true + IncludeTernaryExpressions: true + +Style/ConstantVisibility: + Description: >- + Check that class- and module constants have + visibility declarations. + Enabled: false + VersionAdded: '0.66' + +# Checks that you have put a copyright in a comment before any code. +# +# You can override the default Notice in your .rubocop.yml file. +# +# In order to use autocorrect, you must supply a value for the +# `AutocorrectNotice` key that matches the regexp Notice. A blank +# `AutocorrectNotice` will cause an error during autocorrect. +# +# Autocorrect will add a copyright notice in a comment at the top +# of the file immediately after any shebang or encoding comments. +# +# Example rubocop.yml: +# +# Style/Copyright: +# Enabled: true +# Notice: 'Copyright (\(c\) )?2015 Yahoo! Inc' +# AutocorrectNotice: '# Copyright (c) 2015 Yahoo! Inc.' +# +Style/Copyright: + Description: 'Include a copyright notice in each file before any code.' + Enabled: false + VersionAdded: '0.30' + Notice: '^Copyright (\(c\) )?2[0-9]{3} .+' + AutocorrectNotice: '' + +Style/DateTime: + Description: 'Use Time over DateTime.' + StyleGuide: '#date--time' + Enabled: false + VersionAdded: '0.51' + VersionChanged: '0.59' + AllowCoercion: false + +Style/DefWithParentheses: + Description: 'Use def with parentheses when there are arguments.' + StyleGuide: '#method-parens' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.12' + +Style/Dir: + Description: >- + Use the `__dir__` method to retrieve the canonicalized + absolute path to the current file. + Enabled: true + VersionAdded: '0.50' + +Style/Documentation: + Description: 'Document classes and non-namespace modules.' + Enabled: true + VersionAdded: '0.9' + Exclude: + - 'spec/**/*' + - 'test/**/*' + +Style/DocumentationMethod: + Description: 'Checks for missing documentation comment for public methods.' + Enabled: false + VersionAdded: '0.43' + Exclude: + - 'spec/**/*' + - 'test/**/*' + RequireForNonPublicMethods: false + +Style/DoubleCopDisableDirective: + Description: 'Checks for double rubocop:disable comments on a single line.' + Enabled: true + VersionAdded: '0.73' + +Style/DoubleNegation: + Description: 'Checks for uses of double negation (!!).' + StyleGuide: '#no-bang-bang' + Enabled: true + VersionAdded: '0.19' + +Style/EachForSimpleLoop: + Description: >- + Use `Integer#times` for a simple loop which iterates a fixed + number of times. + Enabled: true + VersionAdded: '0.41' + +Style/EachWithObject: + Description: 'Prefer `each_with_object` over `inject` or `reduce`.' + Enabled: true + VersionAdded: '0.22' + VersionChanged: '0.42' + +Style/EmptyBlockParameter: + Description: 'Omit pipes for empty block parameters.' + Enabled: true + VersionAdded: '0.52' + +Style/EmptyCaseCondition: + Description: 'Avoid empty condition in case statements.' + Enabled: true + VersionAdded: '0.40' + +Style/EmptyElse: + Description: 'Avoid empty else-clauses.' + Enabled: true + VersionAdded: '0.28' + VersionChanged: '0.32' + EnforcedStyle: both + # empty - warn only on empty `else` + # nil - warn on `else` with nil in it + # both - warn on empty `else` and `else` with `nil` in it + SupportedStyles: + - empty + - nil + - both + +Style/EmptyLambdaParameter: + Description: 'Omit parens for empty lambda parameters.' + Enabled: true + VersionAdded: '0.52' + +Style/EmptyLiteral: + Description: 'Prefer literals to Array.new/Hash.new/String.new.' + StyleGuide: '#literal-array-hash' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.12' + +Style/EmptyMethod: + Description: 'Checks the formatting of empty method definitions.' + StyleGuide: '#no-single-line-methods' + Enabled: true + VersionAdded: '0.46' + EnforcedStyle: compact + SupportedStyles: + - compact + - expanded + +Style/Encoding: + Description: 'Use UTF-8 as the source file encoding.' + StyleGuide: '#utf-8' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.50' + +Style/EndBlock: + Description: 'Avoid the use of END blocks.' + StyleGuide: '#no-END-blocks' + Enabled: true + VersionAdded: '0.9' + +Style/EvalWithLocation: + Description: 'Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.' + Enabled: true + VersionAdded: '0.52' + +Style/EvenOdd: + Description: 'Favor the use of `Integer#even?` && `Integer#odd?`.' + StyleGuide: '#predicate-methods' + Enabled: true + VersionAdded: '0.12' + VersionChanged: '0.29' + +Style/ExpandPathArguments: + Description: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`." + Enabled: true + VersionAdded: '0.53' + +Style/FloatDivision: + Description: 'For performing float division, coerce one side only.' + StyleGuide: '#float-division' + Reference: 'https://github.com/rubocop-hq/ruby-style-guide/issues/628' + Enabled: true + VersionAdded: '0.72' + EnforcedStyle: single_coerce + SupportedStyles: + - left_coerce + - right_coerce + - single_coerce + - fdiv + +Style/For: + Description: 'Checks use of for or each in multiline loops.' + StyleGuide: '#no-for-loops' + Enabled: true + VersionAdded: '0.13' + VersionChanged: '0.59' + EnforcedStyle: each + SupportedStyles: + - each + - for + +Style/FormatString: + Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.' + StyleGuide: '#sprintf' + Enabled: true + VersionAdded: '0.19' + VersionChanged: '0.49' + EnforcedStyle: format + SupportedStyles: + - format + - sprintf + - percent + +Style/FormatStringToken: + Description: 'Use a consistent style for format string tokens.' + Enabled: true + EnforcedStyle: annotated + SupportedStyles: + # Prefer tokens which contain a sprintf like type annotation like + # `%s`, `%d`, `%f` + - annotated + # Prefer simple looking "template" style tokens like `%{name}`, `%{age}` + - template + - unannotated + VersionAdded: '0.49' + VersionChanged: '0.75' + +Style/FrozenStringLiteralComment: + Description: >- + Add the frozen_string_literal comment to the top of files + to help transition to frozen string literals by default. + Enabled: false + VersionAdded: '0.36' + VersionChanged: '0.69' + EnforcedStyle: always + SupportedStyles: + # `always` will always add the frozen string literal comment to a file + # regardless of the Ruby version or if `freeze` or `<<` are called on a + # string literal. If you run code against multiple versions of Ruby, it is + # possible that this will create errors in Ruby 2.3.0+. + - always + # `never` will enforce that the frozen string literal comment does not + # exist in a file. + - never + +Style/GlobalVars: + Description: 'Do not introduce global variables.' + StyleGuide: '#instance-vars' + Reference: 'https://www.zenspider.com/ruby/quickref.html' + Enabled: true + VersionAdded: '0.13' + # Built-in global variables are allowed by default. + AllowedVariables: [] + +Style/GuardClause: + Description: 'Check for conditionals that can be replaced with guard clauses.' + StyleGuide: '#no-nested-conditionals' + Enabled: true + VersionAdded: '0.20' + VersionChanged: '0.22' + # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless` + # needs to have to trigger this cop + MinBodyLength: 1 + +Style/HashSyntax: + Description: >- + Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax + { :a => 1, :b => 2 }. + StyleGuide: '#hash-literals' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.43' + EnforcedStyle: ruby19 + SupportedStyles: + # checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys + - ruby19 + # checks for hash rocket syntax for all hashes + - hash_rockets + # forbids mixed key syntaxes (e.g. {a: 1, :b => 2}) + - no_mixed_keys + # enforces both ruby19 and no_mixed_keys styles + - ruby19_no_mixed_keys + # Force hashes that have a symbol value to use hash rockets + UseHashRocketsWithSymbolValues: false + # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style + PreferHashRocketsForNonAlnumEndingSymbols: false + +Style/IdenticalConditionalBranches: + Description: >- + Checks that conditional statements do not have an identical + line at the end of each branch, which can validly be moved + out of the conditional. + Enabled: true + VersionAdded: '0.36' + +Style/IfInsideElse: + Description: 'Finds if nodes inside else, which can be converted to elsif.' + Enabled: true + AllowIfModifier: false + VersionAdded: '0.36' + +Style/IfUnlessModifier: + Description: >- + Favor modifier if/unless usage when you have a + single-line body. + StyleGuide: '#if-as-a-modifier' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.30' + +Style/IfUnlessModifierOfIfUnless: + Description: >- + Avoid modifier if/unless usage on conditionals. + Enabled: true + VersionAdded: '0.39' + +Style/IfWithSemicolon: + Description: 'Do not use if x; .... Use the ternary operator instead.' + StyleGuide: '#no-semicolon-ifs' + Enabled: true + VersionAdded: '0.9' + +Style/ImplicitRuntimeError: + Description: >- + Use `raise` or `fail` with an explicit exception class and + message, rather than just a message. + Enabled: false + VersionAdded: '0.41' + +Style/InfiniteLoop: + Description: 'Use Kernel#loop for infinite loops.' + StyleGuide: '#infinite-loop' + Enabled: true + VersionAdded: '0.26' + VersionChanged: '0.61' + SafeAutoCorrect: true + +Style/InlineComment: + Description: 'Avoid trailing inline comments.' + Enabled: false + VersionAdded: '0.23' + +Style/InverseMethods: + Description: >- + Use the inverse method instead of `!.method` + if an inverse method is defined. + Enabled: true + Safe: false + VersionAdded: '0.48' + # `InverseMethods` are methods that can be inverted by a not (`not` or `!`) + # The relationship of inverse methods only needs to be defined in one direction. + # Keys and values both need to be defined as symbols. + InverseMethods: + :any?: :none? + :even?: :odd? + :==: :!= + :=~: :!~ + :<: :>= + :>: :<= + # `ActiveSupport` defines some common inverse methods. They are listed below, + # and not enabled by default. + #:present?: :blank?, + #:include?: :exclude? + # `InverseBlocks` are methods that are inverted by inverting the return + # of the block that is passed to the method + InverseBlocks: + :select: :reject + :select!: :reject! + +Style/IpAddresses: + Description: "Don't include literal IP addresses in code." + Enabled: false + VersionAdded: '0.58' + VersionChanged: '0.77' + # Allow addresses to be permitted + AllowedAddresses: + - "::" + # :: is a valid IPv6 address, but could potentially be legitimately in code + +Style/Lambda: + Description: 'Use the new lambda literal syntax for single-line blocks.' + StyleGuide: '#lambda-multi-line' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.40' + EnforcedStyle: line_count_dependent + SupportedStyles: + - line_count_dependent + - lambda + - literal + +Style/LambdaCall: + Description: 'Use lambda.call(...) instead of lambda.(...).' + StyleGuide: '#proc-call' + Enabled: true + VersionAdded: '0.13.1' + VersionChanged: '0.14' + EnforcedStyle: call + SupportedStyles: + - call + - braces + +Style/LineEndConcatenation: + Description: >- + Use \ instead of + or << to concatenate two string literals at + line end. + Enabled: true + SafeAutoCorrect: false + VersionAdded: '0.18' + VersionChanged: '0.64' + +Style/MethodCallWithArgsParentheses: + Description: 'Use parentheses for method calls with arguments.' + StyleGuide: '#method-invocation-parens' + Enabled: false + VersionAdded: '0.47' + VersionChanged: '0.61' + IgnoreMacros: true + IgnoredMethods: [] + IgnoredPatterns: [] + IncludedMacros: [] + AllowParenthesesInMultilineCall: false + AllowParenthesesInChaining: false + AllowParenthesesInCamelCaseMethod: false + EnforcedStyle: require_parentheses + SupportedStyles: + - require_parentheses + - omit_parentheses + +Style/MethodCallWithoutArgsParentheses: + Description: 'Do not use parentheses for method calls with no arguments.' + StyleGuide: '#method-invocation-parens' + Enabled: true + IgnoredMethods: [] + VersionAdded: '0.47' + VersionChanged: '0.55' + +Style/MethodCalledOnDoEndBlock: + Description: 'Avoid chaining a method call on a do...end block.' + StyleGuide: '#single-line-blocks' + Enabled: false + VersionAdded: '0.14' + +Style/MethodDefParentheses: + Description: >- + Checks if the method definitions have or don't have + parentheses. + StyleGuide: '#method-parens' + Enabled: true + VersionAdded: '0.16' + VersionChanged: '0.35' + EnforcedStyle: require_parentheses + SupportedStyles: + - require_parentheses + - require_no_parentheses + - require_no_parentheses_except_multiline + +Style/MethodMissingSuper: + Description: Checks for `method_missing` to call `super`. + StyleGuide: '#no-method-missing' + Enabled: true + VersionAdded: '0.56' + +Style/MinMax: + Description: >- + Use `Enumerable#minmax` instead of `Enumerable#min` + and `Enumerable#max` in conjunction. + Enabled: true + VersionAdded: '0.50' + +Style/MissingElse: + Description: >- + Require if/case expressions to have an else branches. + If enabled, it is recommended that + Style/UnlessElse and Style/EmptyElse be enabled. + This will conflict with Style/EmptyElse if + Style/EmptyElse is configured to style "both". + Enabled: false + VersionAdded: '0.30' + VersionChanged: '0.38' + EnforcedStyle: both + SupportedStyles: + # if - warn when an if expression is missing an else branch + # case - warn when a case expression is missing an else branch + # both - warn when an if or case expression is missing an else branch + - if + - case + - both + +Style/MissingRespondToMissing: + Description: >- + Checks if `method_missing` is implemented + without implementing `respond_to_missing`. + StyleGuide: '#no-method-missing' + Enabled: true + VersionAdded: '0.56' + +Style/MixinGrouping: + Description: 'Checks for grouping of mixins in `class` and `module` bodies.' + StyleGuide: '#mixin-grouping' + Enabled: true + VersionAdded: '0.48' + VersionChanged: '0.49' + EnforcedStyle: separated + SupportedStyles: + # separated: each mixed in module goes in a separate statement. + # grouped: mixed in modules are grouped into a single statement. + - separated + - grouped + +Style/MixinUsage: + Description: 'Checks that `include`, `extend` and `prepend` exists at the top level.' + Enabled: true + VersionAdded: '0.51' + +Style/ModuleFunction: + Description: 'Checks for usage of `extend self` in modules.' + StyleGuide: '#module-function' + Enabled: true + VersionAdded: '0.11' + VersionChanged: '0.65' + EnforcedStyle: module_function + SupportedStyles: + - module_function + - extend_self + Autocorrect: false + SafeAutoCorrect: false + +Style/MultilineBlockChain: + Description: 'Avoid multi-line chains of blocks.' + StyleGuide: '#single-line-blocks' + Enabled: true + VersionAdded: '0.13' + +Style/MultilineIfModifier: + Description: 'Only use if/unless modifiers on single line statements.' + StyleGuide: '#no-multiline-if-modifiers' + Enabled: true + VersionAdded: '0.45' + +Style/MultilineIfThen: + Description: 'Do not use then for multi-line if/unless.' + StyleGuide: '#no-then' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.26' + +Style/MultilineMemoization: + Description: 'Wrap multiline memoizations in a `begin` and `end` block.' + Enabled: true + VersionAdded: '0.44' + VersionChanged: '0.48' + EnforcedStyle: keyword + SupportedStyles: + - keyword + - braces + +Style/MultilineMethodSignature: + Description: 'Avoid multi-line method signatures.' + Enabled: false + VersionAdded: '0.59' + +Style/MultilineTernaryOperator: + Description: >- + Avoid multi-line ?: (the ternary operator); + use if/unless instead. + StyleGuide: '#no-multiline-ternary' + Enabled: true + VersionAdded: '0.9' + +Style/MultilineWhenThen: + Description: 'Do not use then for multi-line when statement.' + StyleGuide: '#no-then' + Enabled: true + VersionAdded: '0.73' + +Style/MultipleComparison: + Description: >- + Avoid comparing a variable with multiple items in a conditional, + use Array#include? instead. + Enabled: true + VersionAdded: '0.49' + +Style/MutableConstant: + Description: 'Do not assign mutable objects to constants.' + Enabled: true + VersionAdded: '0.34' + VersionChanged: '0.65' + EnforcedStyle: literals + SupportedStyles: + # literals: freeze literals assigned to constants + # strict: freeze all constants + # Strict mode is considered an experimental feature. It has not been updated + # with an exhaustive list of all methods that will produce frozen objects so + # there is a decent chance of getting some false positives. Luckily, there is + # no harm in freezing an already frozen object. + - literals + - strict + +Style/NegatedIf: + Description: >- + Favor unless over if for negative conditions + (or control flow or). + StyleGuide: '#unless-for-negatives' + Enabled: true + VersionAdded: '0.20' + VersionChanged: '0.48' + EnforcedStyle: both + SupportedStyles: + # both: prefix and postfix negated `if` should both use `unless` + # prefix: only use `unless` for negated `if` statements positioned before the body of the statement + # postfix: only use `unless` for negated `if` statements positioned after the body of the statement + - both + - prefix + - postfix + +Style/NegatedUnless: + Description: 'Favor if over unless for negative conditions.' + StyleGuide: '#if-for-negatives' + Enabled: true + VersionAdded: '0.69' + EnforcedStyle: both + SupportedStyles: + # both: prefix and postfix negated `unless` should both use `if` + # prefix: only use `if` for negated `unless` statements positioned before the body of the statement + # postfix: only use `if` for negated `unless` statements positioned after the body of the statement + - both + - prefix + - postfix + +Style/NegatedWhile: + Description: 'Favor until over while for negative conditions.' + StyleGuide: '#until-for-negatives' + Enabled: true + VersionAdded: '0.20' + +Style/NestedModifier: + Description: 'Avoid using nested modifiers.' + StyleGuide: '#no-nested-modifiers' + Enabled: true + VersionAdded: '0.35' + +Style/NestedParenthesizedCalls: + Description: >- + Parenthesize method calls which are nested inside the + argument list of another parenthesized method call. + Enabled: true + VersionAdded: '0.36' + VersionChanged: '0.77' + AllowedMethods: + - be + - be_a + - be_an + - be_between + - be_falsey + - be_kind_of + - be_instance_of + - be_truthy + - be_within + - eq + - eql + - end_with + - include + - match + - raise_error + - respond_to + - start_with + +Style/NestedTernaryOperator: + Description: 'Use one expression per branch in a ternary operator.' + StyleGuide: '#no-nested-ternary' + Enabled: true + VersionAdded: '0.9' + +Style/Next: + Description: 'Use `next` to skip iteration instead of a condition at the end.' + StyleGuide: '#no-nested-conditionals' + Enabled: true + VersionAdded: '0.22' + VersionChanged: '0.35' + # With `always` all conditions at the end of an iteration needs to be + # replaced by next - with `skip_modifier_ifs` the modifier if like this one + # are ignored: [1, 2].each { |a| return 'yes' if a == 1 } + EnforcedStyle: skip_modifier_ifs + # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless` + # needs to have to trigger this cop + MinBodyLength: 3 + SupportedStyles: + - skip_modifier_ifs + - always + +Style/NilComparison: + Description: 'Prefer x.nil? to x == nil.' + StyleGuide: '#predicate-methods' + Enabled: true + VersionAdded: '0.12' + VersionChanged: '0.59' + EnforcedStyle: predicate + SupportedStyles: + - predicate + - comparison + +Style/NonNilCheck: + Description: 'Checks for redundant nil checks.' + StyleGuide: '#no-non-nil-checks' + Enabled: true + VersionAdded: '0.20' + VersionChanged: '0.22' + # With `IncludeSemanticChanges` set to `true`, this cop reports offenses for + # `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is + # **usually** OK, but might change behavior. + # + # With `IncludeSemanticChanges` set to `false`, this cop does not report + # offenses for `!x.nil?` and does no changes that might change behavior. + IncludeSemanticChanges: false + +Style/Not: + Description: 'Use ! instead of not.' + StyleGuide: '#bang-not-not' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.20' + +Style/NumericLiteralPrefix: + Description: 'Use smallcase prefixes for numeric literals.' + StyleGuide: '#numeric-literal-prefixes' + Enabled: true + VersionAdded: '0.41' + EnforcedOctalStyle: zero_with_o + SupportedOctalStyles: + - zero_with_o + - zero_only + + +Style/NumericLiterals: + Description: >- + Add underscores to large numeric literals to improve their + readability. + StyleGuide: '#underscores-in-numerics' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.48' + MinDigits: 5 + Strict: false + +Style/NumericPredicate: + Description: >- + Checks for the use of predicate- or comparison methods for + numeric comparisons. + StyleGuide: '#predicate-methods' + Safe: false + # This will change to a new method call which isn't guaranteed to be on the + # object. Switching these methods has to be done with knowledge of the types + # of the variables which rubocop doesn't have. + SafeAutoCorrect: false + AutoCorrect: false + Enabled: true + VersionAdded: '0.42' + VersionChanged: '0.59' + EnforcedStyle: predicate + SupportedStyles: + - predicate + - comparison + IgnoredMethods: [] + # Exclude RSpec specs because assertions like `expect(1).to be > 0` cause + # false positives. + Exclude: + - 'spec/**/*' + +Style/OneLineConditional: + Description: >- + Favor the ternary operator(?:) over + if/then/else/end constructs. + StyleGuide: '#ternary-operator' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.38' + +Style/OptionHash: + Description: "Don't use option hashes when you can use keyword arguments." + Enabled: false + VersionAdded: '0.33' + VersionChanged: '0.34' + # A list of parameter names that will be flagged by this cop. + SuspiciousParamNames: + - options + - opts + - args + - params + - parameters + +Style/OptionalArguments: + Description: >- + Checks for optional arguments that do not appear at the end + of the argument list. + StyleGuide: '#optional-arguments' + Enabled: true + VersionAdded: '0.33' + +Style/OrAssignment: + Description: 'Recommend usage of double pipe equals (||=) where applicable.' + StyleGuide: '#double-pipe-for-uninit' + Enabled: true + VersionAdded: '0.50' + +Style/ParallelAssignment: + Description: >- + Check for simple usages of parallel assignment. + It will only warn when the number of variables + matches on both sides of the assignment. + StyleGuide: '#parallel-assignment' + Enabled: true + VersionAdded: '0.32' + +Style/ParenthesesAroundCondition: + Description: >- + Don't use parentheses around the condition of an + if/unless/while. + StyleGuide: '#no-parens-around-condition' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.56' + AllowSafeAssignment: true + AllowInMultilineConditions: false + +Style/PercentLiteralDelimiters: + Description: 'Use `%`-literal delimiters consistently.' + StyleGuide: '#percent-literal-braces' + Enabled: true + VersionAdded: '0.19' + # Specify the default preferred delimiter for all types with the 'default' key + # Override individual delimiters (even with default specified) by specifying + # an individual key + PreferredDelimiters: + default: () + '%i': '[]' + '%I': '[]' + '%r': '{}' + '%w': '[]' + '%W': '[]' + VersionChanged: '0.48.1' + +Style/PercentQLiterals: + Description: 'Checks if uses of %Q/%q match the configured preference.' + Enabled: true + VersionAdded: '0.25' + EnforcedStyle: lower_case_q + SupportedStyles: + - lower_case_q # Use `%q` when possible, `%Q` when necessary + - upper_case_q # Always use `%Q` + +Style/PerlBackrefs: + Description: 'Avoid Perl-style regex back references.' + StyleGuide: '#no-perl-regexp-last-matchers' + Enabled: true + VersionAdded: '0.13' + +Style/PreferredHashMethods: + Description: 'Checks use of `has_key?` and `has_value?` Hash methods.' + StyleGuide: '#hash-key' + Enabled: true + Safe: false + VersionAdded: '0.41' + VersionChanged: '0.70' + EnforcedStyle: short + SupportedStyles: + - short + - verbose + +Style/Proc: + Description: 'Use proc instead of Proc.new.' + StyleGuide: '#proc' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.18' + +Style/RaiseArgs: + Description: 'Checks the arguments passed to raise/fail.' + StyleGuide: '#exception-class-messages' + Enabled: true + VersionAdded: '0.14' + VersionChanged: '0.40' + EnforcedStyle: exploded + SupportedStyles: + - compact # raise Exception.new(msg) + - exploded # raise Exception, msg + +Style/RandomWithOffset: + Description: >- + Prefer to use ranges when generating random numbers instead of + integers with offsets. + StyleGuide: '#random-numbers' + Enabled: true + VersionAdded: '0.52' + +Style/RedundantBegin: + Description: "Don't use begin blocks when they are not needed." + StyleGuide: '#begin-implicit' + Enabled: true + VersionAdded: '0.10' + VersionChanged: '0.21' + +Style/RedundantCapitalW: + Description: 'Checks for %W when interpolation is not needed.' + Enabled: true + VersionAdded: '0.76' + +Style/RedundantCondition: + Description: 'Checks for unnecessary conditional expressions.' + Enabled: true + VersionAdded: '0.76' + +Style/RedundantConditional: + Description: "Don't return true/false from a conditional." + Enabled: true + VersionAdded: '0.50' + +Style/RedundantException: + Description: "Checks for an obsolete RuntimeException argument in raise/fail." + StyleGuide: '#no-explicit-runtimeerror' + Enabled: true + VersionAdded: '0.14' + VersionChanged: '0.29' + +Style/RedundantFreeze: + Description: "Checks usages of Object#freeze on immutable objects." + Enabled: true + VersionAdded: '0.34' + VersionChanged: '0.66' + +Style/RedundantInterpolation: + Description: 'Checks for strings that are just an interpolated expression.' + Enabled: true + VersionAdded: '0.76' + +Style/RedundantParentheses: + Description: "Checks for parentheses that seem not to serve any purpose." + Enabled: true + VersionAdded: '0.36' + +Style/RedundantPercentQ: + Description: 'Checks for %q/%Q when single quotes or double quotes would do.' + StyleGuide: '#percent-q' + Enabled: true + VersionAdded: '0.76' + +Style/RedundantReturn: + Description: "Don't use return where it's not required." + StyleGuide: '#no-explicit-return' + Enabled: true + VersionAdded: '0.10' + VersionChanged: '0.14' + # When `true` allows code like `return x, y`. + AllowMultipleReturnValues: false + +Style/RedundantSelf: + Description: "Don't use self where it's not needed." + StyleGuide: '#no-self-unless-required' + Enabled: true + VersionAdded: '0.10' + VersionChanged: '0.13' + +Style/RedundantSort: + Description: >- + Use `min` instead of `sort.first`, + `max_by` instead of `sort_by...last`, etc. + Enabled: true + VersionAdded: '0.76' + +Style/RedundantSortBy: + Description: 'Use `sort` instead of `sort_by { |x| x }`.' + Enabled: true + VersionAdded: '0.36' + +Style/RegexpLiteral: + Description: 'Use / or %r around regular expressions.' + StyleGuide: '#percent-r' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.30' + EnforcedStyle: slashes + # slashes: Always use slashes. + # percent_r: Always use `%r`. + # mixed: Use slashes on single-line regexes, and `%r` on multi-line regexes. + SupportedStyles: + - slashes + - percent_r + - mixed + # If `false`, the cop will always recommend using `%r` if one or more slashes + # are found in the regexp string. + AllowInnerSlashes: false + +Style/RescueModifier: + Description: 'Avoid using rescue in its modifier form.' + StyleGuide: '#no-rescue-modifiers' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.34' + +Style/RescueStandardError: + Description: 'Avoid rescuing without specifying an error class.' + Enabled: true + VersionAdded: '0.52' + EnforcedStyle: explicit + # implicit: Do not include the error class, `rescue` + # explicit: Require an error class `rescue StandardError` + SupportedStyles: + - implicit + - explicit + +Style/ReturnNil: + Description: 'Use return instead of return nil.' + Enabled: false + EnforcedStyle: return + SupportedStyles: + - return + - return_nil + VersionAdded: '0.50' + +Style/SafeNavigation: + Description: >- + This cop transforms usages of a method call safeguarded by + a check for the existence of the object to + safe navigation (`&.`). + Enabled: true + VersionAdded: '0.43' + VersionChanged: '0.77' + # Safe navigation may cause a statement to start returning `nil` in addition + # to whatever it used to return. + ConvertCodeThatCanStartToReturnNil: false + AllowedMethods: + - present? + - blank? + - presence + - try + - try! + +Style/Sample: + Description: >- + Use `sample` instead of `shuffle.first`, + `shuffle.last`, and `shuffle[Integer]`. + Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code' + Enabled: true + VersionAdded: '0.30' + +Style/SelfAssignment: + Description: >- + Checks for places where self-assignment shorthand should have + been used. + StyleGuide: '#self-assignment' + Enabled: true + VersionAdded: '0.19' + VersionChanged: '0.29' + +Style/Semicolon: + Description: "Don't use semicolons to terminate expressions." + StyleGuide: '#no-semicolon' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.19' + # Allow `;` to separate several expressions on the same line. + AllowAsExpressionSeparator: false + +Style/Send: + Description: 'Prefer `Object#__send__` or `Object#public_send` to `send`, as `send` may overlap with existing methods.' + StyleGuide: '#prefer-public-send' + Enabled: false + VersionAdded: '0.33' + +Style/SignalException: + Description: 'Checks for proper usage of fail and raise.' + StyleGuide: '#prefer-raise-over-fail' + Enabled: true + VersionAdded: '0.11' + VersionChanged: '0.37' + EnforcedStyle: only_raise + SupportedStyles: + - only_raise + - only_fail + - semantic + +Style/SingleLineBlockParams: + Description: 'Enforces the names of some block params.' + Enabled: false + VersionAdded: '0.16' + VersionChanged: '0.47' + Methods: + - reduce: + - acc + - elem + - inject: + - acc + - elem + +Style/SingleLineMethods: + Description: 'Avoid single-line methods.' + StyleGuide: '#no-single-line-methods' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.19' + AllowIfMethodIsEmpty: true + +Style/SpecialGlobalVars: + Description: 'Avoid Perl-style global variables.' + StyleGuide: '#no-cryptic-perlisms' + Enabled: true + VersionAdded: '0.13' + VersionChanged: '0.36' + SafeAutoCorrect: false + EnforcedStyle: use_english_names + SupportedStyles: + - use_perl_names + - use_english_names + +Style/StabbyLambdaParentheses: + Description: 'Check for the usage of parentheses around stabby lambda arguments.' + StyleGuide: '#stabby-lambda-with-args' + Enabled: true + VersionAdded: '0.35' + EnforcedStyle: require_parentheses + SupportedStyles: + - require_parentheses + - require_no_parentheses + +Style/StderrPuts: + Description: 'Use `warn` instead of `$stderr.puts`.' + StyleGuide: '#warn' + Enabled: true + VersionAdded: '0.51' + +Style/StringHashKeys: + Description: 'Prefer symbols instead of strings as hash keys.' + StyleGuide: '#symbols-as-keys' + Enabled: false + VersionAdded: '0.52' + VersionChanged: '0.75' + Safe: false + +Style/StringLiterals: + Description: 'Checks if uses of quotes match the configured preference.' + StyleGuide: '#consistent-string-literals' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.36' + EnforcedStyle: single_quotes + SupportedStyles: + - single_quotes + - double_quotes + # If `true`, strings which span multiple lines using `\` for continuation must + # use the same type of quotes on each line. + ConsistentQuotesInMultiline: false + +Style/StringLiteralsInInterpolation: + Description: >- + Checks if uses of quotes inside expressions in interpolated + strings match the configured preference. + Enabled: true + VersionAdded: '0.27' + EnforcedStyle: single_quotes + SupportedStyles: + - single_quotes + - double_quotes + +Style/StringMethods: + Description: 'Checks if configured preferred methods are used over non-preferred.' + Enabled: false + VersionAdded: '0.34' + VersionChanged: '0.34.2' + # Mapping from undesired method to desired_method + # e.g. to use `to_sym` over `intern`: + # + # StringMethods: + # PreferredMethods: + # intern: to_sym + PreferredMethods: + intern: to_sym + +Style/Strip: + Description: 'Use `strip` instead of `lstrip.rstrip`.' + Enabled: true + VersionAdded: '0.36' + +Style/StructInheritance: + Description: 'Checks for inheritance from Struct.new.' + StyleGuide: '#no-extend-struct-new' + Enabled: true + VersionAdded: '0.29' + +Style/SymbolArray: + Description: 'Use %i or %I for arrays of symbols.' + StyleGuide: '#percent-i' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.49' + EnforcedStyle: percent + MinSize: 2 + SupportedStyles: + - percent + - brackets + +Style/SymbolLiteral: + Description: 'Use plain symbols instead of string symbols when possible.' + Enabled: true + VersionAdded: '0.30' + +Style/SymbolProc: + Description: 'Use symbols as procs instead of blocks when possible.' + Enabled: true + SafeAutoCorrect: false + VersionAdded: '0.26' + VersionChanged: '0.64' + # A list of method names to be ignored by the check. + # The names should be fairly unique, otherwise you'll end up ignoring lots of code. + IgnoredMethods: + - respond_to + - define_method + +Style/TernaryParentheses: + Description: 'Checks for use of parentheses around ternary conditions.' + Enabled: true + VersionAdded: '0.42' + VersionChanged: '0.46' + EnforcedStyle: require_no_parentheses + SupportedStyles: + - require_parentheses + - require_no_parentheses + - require_parentheses_when_complex + AllowSafeAssignment: true + +Style/TrailingBodyOnClass: + Description: 'Class body goes below class statement.' + Enabled: true + VersionAdded: '0.53' + +Style/TrailingBodyOnMethodDefinition: + Description: 'Method body goes below definition.' + Enabled: true + VersionAdded: '0.52' + +Style/TrailingBodyOnModule: + Description: 'Module body goes below module statement.' + Enabled: true + VersionAdded: '0.53' + +Style/TrailingCommaInArguments: + Description: 'Checks for trailing comma in argument lists.' + StyleGuide: '#no-trailing-params-comma' + Enabled: true + VersionAdded: '0.36' + # If `comma`, the cop requires a comma after the last argument, but only for + # parenthesized method calls where each argument is on its own line. + # If `consistent_comma`, the cop requires a comma after the last argument, + # for all parenthesized method calls with arguments. + EnforcedStyleForMultiline: no_comma + SupportedStylesForMultiline: + - comma + - consistent_comma + - no_comma + +Style/TrailingCommaInArrayLiteral: + Description: 'Checks for trailing comma in array literals.' + StyleGuide: '#no-trailing-array-commas' + Enabled: true + VersionAdded: '0.53' + # but only when each item is on its own line. + # If `consistent_comma`, the cop requires a comma after the last item of all + # non-empty array literals. + EnforcedStyleForMultiline: no_comma + SupportedStylesForMultiline: + - comma + - consistent_comma + - no_comma + +Style/TrailingCommaInHashLiteral: + Description: 'Checks for trailing comma in hash literals.' + Enabled: true + # If `comma`, the cop requires a comma after the last item in a hash, + # but only when each item is on its own line. + # If `consistent_comma`, the cop requires a comma after the last item of all + # non-empty hash literals. + EnforcedStyleForMultiline: no_comma + SupportedStylesForMultiline: + - comma + - consistent_comma + - no_comma + VersionAdded: '0.53' + +Style/TrailingMethodEndStatement: + Description: 'Checks for trailing end statement on line of method body.' + Enabled: true + VersionAdded: '0.52' + +Style/TrailingUnderscoreVariable: + Description: >- + Checks for the usage of unneeded trailing underscores at the + end of parallel variable assignment. + AllowNamedUnderscoreVariables: true + Enabled: true + VersionAdded: '0.31' + VersionChanged: '0.35' + +# `TrivialAccessors` requires exact name matches and doesn't allow +# predicated methods by default. +Style/TrivialAccessors: + Description: 'Prefer attr_* methods to trivial readers/writers.' + StyleGuide: '#attr_family' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.77' + # When set to `false` the cop will suggest the use of accessor methods + # in situations like: + # + # def name + # @other_name + # end + # + # This way you can uncover "hidden" attributes in your code. + ExactNameMatch: true + AllowPredicates: true + # Allows trivial writers that don't end in an equal sign. e.g. + # + # def on_exception(action) + # @on_exception=action + # end + # on_exception :restart + # + # Commonly used in DSLs + AllowDSLWriters: false + IgnoreClassMethods: false + AllowedMethods: + - to_ary + - to_a + - to_c + - to_enum + - to_h + - to_hash + - to_i + - to_int + - to_io + - to_open + - to_path + - to_proc + - to_r + - to_regexp + - to_str + - to_s + - to_sym + +Style/UnlessElse: + Description: >- + Do not use unless with else. Rewrite these with the positive + case first. + StyleGuide: '#no-else-with-unless' + Enabled: true + VersionAdded: '0.9' + +Style/UnpackFirst: + Description: >- + Checks for accessing the first element of `String#unpack` + instead of using `unpack1`. + Enabled: true + VersionAdded: '0.54' + +Style/VariableInterpolation: + Description: >- + Don't interpolate global, instance and class variables + directly in strings. + StyleGuide: '#curlies-interpolate' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.20' + +Style/WhenThen: + Description: 'Use when x then ... for one-line cases.' + StyleGuide: '#one-line-cases' + Enabled: true + VersionAdded: '0.9' + +Style/WhileUntilDo: + Description: 'Checks for redundant do after while or until.' + StyleGuide: '#no-multiline-while-do' + Enabled: true + VersionAdded: '0.9' + +Style/WhileUntilModifier: + Description: >- + Favor modifier while/until usage when you have a + single-line body. + StyleGuide: '#while-as-a-modifier' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.30' + +Style/WordArray: + Description: 'Use %w or %W for arrays of words.' + StyleGuide: '#percent-w' + Enabled: true + VersionAdded: '0.9' + VersionChanged: '0.36' + EnforcedStyle: percent + SupportedStyles: + # percent style: %w(word1 word2) + - percent + # bracket style: ['word1', 'word2'] + - brackets + # The `MinSize` option causes the `WordArray` rule to be ignored for arrays + # smaller than a certain size. The rule is only applied to arrays + # whose element count is greater than or equal to `MinSize`. + MinSize: 2 + # The regular expression `WordRegex` decides what is considered a word. + WordRegex: !ruby/regexp '/\A(?:\p{Word}|\p{Word}-\p{Word}|\n|\t)+\z/' + +Style/YodaCondition: + Description: 'Forbid or enforce yoda conditions.' + Reference: 'https://en.wikipedia.org/wiki/Yoda_conditions' + Enabled: true + EnforcedStyle: forbid_for_all_comparison_operators + SupportedStyles: + # check all comparison operators + - forbid_for_all_comparison_operators + # check only equality operators: `!=` and `==` + - forbid_for_equality_operators_only + # enforce yoda for all comparison operators + - require_for_all_comparison_operators + # enforce yoda only for equality operators: `!=` and `==` + - require_for_equality_operators_only + Safe: false + VersionAdded: '0.49' + VersionChanged: '0.75' + +Style/ZeroLengthPredicate: + Description: 'Use #empty? when testing for objects of length 0.' + Enabled: true + Safe: false + VersionAdded: '0.37' + VersionChanged: '0.39' diff --git a/.taskrc b/.taskrc index 2e6cca2..cd21f50 100644 --- a/.taskrc +++ b/.taskrc @@ -10,20 +10,24 @@ # Use the command 'task show' to see all defaults and overrides +weekstart=Monday + # Files data.location=~/.task # Color theme (uncomment one to use) -# include /usr/share/task/light-16.theme -# include /usr/share/task/light-256.theme -# include /usr/share/task/dark-256.theme -# include /usr/share/task/dark-red-256.theme -# include /usr/share/task/dark-green-256.theme -# include /usr/share/task/dark-blue-256.theme -# include /usr/share/task/dark-violets-256.theme -include /usr/share/task/dark-yellow-green.theme -# include /usr/share/task/dark-gray-256.theme -# include /usr/share/task/solarized-dark-256.theme +# include /usr/share/task/rc/light-16.theme +# include /usr/share/task/rc/light-256.theme +include /usr/share/task/rc/dark-256.theme +# include /usr/share/task/rc/dark-red-256.theme +# include /usr/share/task/rc/dark-green-256.theme +# include /usr/share/task/rc/dark-blue-256.theme +# include /usr/share/task/rc/dark-violets-256.theme +# include /usr/share/task/rc/dark-yellow-green.theme +# include /usr/share/task/rc/dark-gray-256.theme +# include /usr/share/task/rc/solarized-dark-256.theme + +search.case.sensitive=no alias.rm=delete alias.mod=modify @@ -32,6 +36,11 @@ uda.totalactivetime.type=duration uda.totalactivetime.label=Total active time uda.totalactivetime.values= +uda.priority.values=H,M,,L +urgency.uda.priority.H.coefficient=3.0 +urgency.uda.priority.L.coefficient=0.5 +urgency.uda.priority.M.coefficient=2.0 + default.command=list report.active.columns=id,project,description.truncated,start.age diff --git a/.xinitrc b/.xinitrc index aa8165f..db10ba7 100644 --- a/.xinitrc +++ b/.xinitrc @@ -1,8 +1,8 @@ #!/bin/sh export BROWSER=browser -export TERMINAL=terminal -export XTERM=terminal +export TERMINAL=xst +export XTERM=xst export LANGUAGE=en_US:en_GB:en export LC_TIME=ru_RU.UTF-8 @@ -15,6 +15,8 @@ xinput set-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Button" 2 xinput set-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Timeout" 200 xinput set-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Axes" 6 7 4 5 +# xinput set-prop "Primax Kensington Eagle Trackball" "Evdev Middle Button Emulation" 1 + # exec ck-launch-session dbus-launch xrdb -merge ~/.Xresources exec i3 > $HOME/log/i3.txt 2>&1 diff --git a/.zshrc b/.zshrc index f93fefa..fe74ca0 100644 --- a/.zshrc +++ b/.zshrc @@ -1,11 +1,3 @@ -if [ -d $HOME/.local/bin ] ; then - PATH=$HOME/.local/bin:$PATH -fi - -if [ -d $HOME/bin ] ; then - PATH=$HOME/bin:$PATH -fi - # Lines configured by zsh-newuser-install HISTFILE=~/.histfile HISTSIZE=2000 diff --git a/.zshrc.d/aliases.zsh b/.zshrc.d/aliases.zsh index c755d23..995bf8b 100644 --- a/.zshrc.d/aliases.zsh +++ b/.zshrc.d/aliases.zsh @@ -5,6 +5,7 @@ alias ll="ls -lAF" alias mkpasswd="head -c16 /dev/urandom | xxd -ps" alias mc="mc -b" alias ls='ls --color=auto' +alias cdp='cd $($HOME/bin/cdp)' # alias less='vimpager' if [ -f /usr/bin/grc ]; then @@ -33,9 +34,6 @@ alias mina="bundle exec mina" alias rgrep="grep --exclude-dir=Godeps --exclude-dir=node_modules --exclude-dir=log --exclude-dir=vendor --exclude-dir=tmp --exclude-dir=public --exclude-dir=.git --exclude=.swp -rn" alias grep="grep --exclude-dir=.git --color=auto" -alias wiki="cd $HOME/wiki && vim index.md" -alias xwiki="cd $HOME/wiki && xvim index.md" - alias weather="curl wttr.in/Moscow" alias ag="ag --path-to-ignore $HOME/.agignore --nogroup" alias vim="nvim" diff --git a/htop/htoprc b/htop/htoprc index f169e25..5f01c21 100644 --- a/htop/htoprc +++ b/htop/htoprc @@ -1,16 +1,16 @@ # Beware! This file is rewritten by htop when settings are changed in the interface. # The parser is also very primitive, and not human-friendly. fields=0 48 17 18 38 39 40 2 46 47 49 1 -sort_key=47 +sort_key=46 sort_direction=1 hide_threads=0 hide_kernel_threads=0 hide_userland_threads=0 -shadow_other_users=0 +shadow_other_users=1 show_thread_names=0 -show_program_path=1 +show_program_path=0 highlight_base_name=1 -highlight_megabytes=0 +highlight_megabytes=1 highlight_threads=1 tree_view=0 header_margin=1 @@ -20,7 +20,7 @@ update_process_names=0 account_guest_in_cpu_meter=0 color_scheme=0 delay=15 -left_meters=AllCPUs2 Memory -left_meter_modes=1 1 +left_meters=AllCPUs2 Memory Swap +left_meter_modes=1 1 1 right_meters=Tasks LoadAverage Uptime right_meter_modes=2 2 2 diff --git a/i3/config b/i3/config index 5cd0035..3dbab9e 100644 --- a/i3/config +++ b/i3/config @@ -30,7 +30,7 @@ font pango:DejaVu Sans Condensed Bold 8 # Use Mouse+$mod to drag floating windows to their wanted position floating_modifier $mod -default_border pixel 1 +default_border normal 1 default_floating_border pixel 1 hide_edge_borders smart focus_follows_mouse no @@ -38,22 +38,20 @@ focus_follows_mouse no workspace_auto_back_and_forth no workspace_layout tabbed -for_window [class="(?i)firefox"] move container to workspace 1 -for_window [class="(?i)thunderbird"] move container to workspace 1 +for_window [class="(?i)firefox"] move container to workspace $ws1 +for_window [class="(?i)thunderbird"] move container to workspace $ws1 # sticky enable # class border backgr. text indicator child_border -client.focused #665c54 #665c54 #ffffff #2e9ef4 #665c54 -client.focused_inactive #333333 #5f676a #fbf1c7 #484e50 #5f676a +client.focused #333333 #5f676a #ffffff #2e9ef4 #5f676a +client.focused_inactive #665c54 #665c54 #fbf1c7 #484e50 #665c54 client.unfocused #333333 #222222 #bdae93 #292d2e #222222 client.urgent #2f343a #900000 #fbf1c7 #900000 #900000 client.placeholder #000000 #0c0c0c #fbf1c7 #000000 #0c0c0c - client.background #ffffff # start a terminal -bindsym $mod+Shift+t exec terminal bindsym $mod+Return exec terminal # kill focused window @@ -66,21 +64,35 @@ bindsym $mod+F2 exec "dmenu_run" # installed. # bindsym $mod+d exec --no-startup-id i3-dmenu-desktop -bindsym $mod+F4 exec "edit_project" +bindsym $mod+F4 exec "kitty edit_project" bindsym $mod+v exec "passmenu" # change focus +# QWERTY bindsym $mod+h focus left bindsym $mod+j focus down bindsym $mod+k focus up bindsym $mod+l focus right +# colemak +# bindsym $mod+k focus left +# bindsym $mod+n focus down +# bindsym $mod+e focus up +# bindsym $mod+i focus right + # move focused window +# QWERTY bindsym $mod+Shift+h move left bindsym $mod+Shift+j move down bindsym $mod+Shift+k move up bindsym $mod+Shift+l move right +# colemak +# bindsym $mod+Shift+k move left +# bindsym $mod+Shift+n move down +# bindsym $mod+Shift+e move up +# bindsym $mod+Shift+i move right + mode "split" { # split in horizontal orientation bindsym h split h mode "default" @@ -99,13 +111,13 @@ bindsym $mod+s mode "split" bindsym $mod+f fullscreen toggle # change container layout (stacked, tabbed, toggle split) -bindsym $mod+q layout stacking -bindsym $mod+w layout tabbed -bindsym $mod+e layout toggle split +bindsym $mod+Shift+q layout stacking +bindsym $mod+Shift+t layout tabbed +bindsym $mod+Shift+w layout toggle split # toggle tiling / floating bindsym $mod+Shift+space floating toggle -# bindsym $mod+space sticky toggle +bindsym $mod+Shift+0 sticky toggle # change focus between tiling / floating windows # bindsym $mod+space focus mode_toggle @@ -127,7 +139,6 @@ set $ws6 "6" set $ws7 "7" set $ws8 "8" set $ws9 "9" -set $ws10 "10" # switch to workspace bindsym $mod+1 workspace $ws1 @@ -139,7 +150,6 @@ bindsym $mod+6 workspace $ws6 bindsym $mod+7 workspace $ws7 bindsym $mod+8 workspace $ws8 bindsym $mod+9 workspace $ws9 -bindsym $mod+0 workspace $ws10 # move focused container to workspace bindsym $mod+Shift+1 move container to workspace $ws1 @@ -151,25 +161,31 @@ bindsym $mod+Shift+6 move container to workspace $ws6 bindsym $mod+Shift+7 move container to workspace $ws7 bindsym $mod+Shift+8 move container to workspace $ws8 bindsym $mod+Shift+9 move container to workspace $ws9 -bindsym $mod+Shift+0 move container to workspace $ws10 # reload the configuration file -bindsym $mod+Shift+e reload +# bindsym $mod+Shift+e reload # restart i3 inplace (preserves your layout/session, can be used to upgrade i3) bindsym $mod+Shift+r restart # exit i3 (logs you out of your X session) -bindsym $mod+Shift+q exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'" +bindsym $mod+Shift+x exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'" -bindsym $mod+Shift+z exec "i3lock" +bindsym $mod+Shift+z exec "stop_and_lock" # resize window (you can also use the mouse for that) mode "resize" { # These bindings trigger as soon as you enter the resize mode - bindsym h resize shrink width 3 px or 3 ppt - bindsym j resize grow height 3 px or 3 ppt - bindsym k resize shrink height 3 px or 3 ppt - bindsym l resize grow width 3 px or 3 ppt + # QWERTY + bindsym Left resize shrink width 3 px or 3 ppt + bindsym Down resize grow height 3 px or 3 ppt + bindsym Up resize shrink height 3 px or 3 ppt + bindsym Right resize grow width 3 px or 3 ppt + + # colemak + # bindsym k resize shrink width 3 px or 3 ppt + # bindsym n resize grow height 3 px or 3 ppt + # bindsym e resize shrink height 3 px or 3 ppt + # bindsym i resize grow width 3 px or 3 ppt # back to normal: Enter or Escape or $mod+r bindsym Return mode "default" @@ -188,6 +204,7 @@ bindsym $mod+space scratchpad show # Start i3bar to display a workspace bar (plus the system information i3status # finds out, if available) bar { + # strip_workspace_numbers yes status_command i3status-rs ~/.config/i3status-rs/config.toml font pango:Iosevka Term, FontAwesome Bold 12px colors { @@ -208,6 +225,17 @@ bindsym XF86MonBrightnessUp exec --no-startup-id sudo light -A 5 bindsym XF86MonBrightnessDown exec --no-startup-id sudo light -U 5 bindsym XF86Search exec --no-startup-id suspend +# Volume control +bindsym XF86AudioRaiseVolume exec --no-startup-id volume_control.sh incr +bindsym XF86AudioLowerVolume exec --no-startup-id volume_control.sh decr +bindsym XF86AudioMute exec --no-startup-id volume_control.sh mute + +bindsym XF86AudioPrev exec --no-startup-id mpc prev +bindsym XF86AudioPlay exec --no-startup-id mpc toggle +bindsym XF86AudioStop exec --no-startup-id mpc stop +bindsym XF86AudioNext exec --no-startup-id mpc next + + # Autorun -exec --no-startup-id feh --bg-scale ~/.config/i3/bg.jpg +exec --no-startup-id feh --bg-fill ~/.config/i3/bg.jpg exec --no-startup-id xautorun diff --git a/i3status-rs/config.toml b/i3status-rs/config.toml index 0f0fc5d..5a44743 100644 --- a/i3status-rs/config.toml +++ b/i3status-rs/config.toml @@ -24,20 +24,32 @@ block = "custom" command = "timelogger statusbar" interval = 10 +[[block]] +block = "custom" +command = "statusd-weather Tbilisi" +interval = 60 + [[block]] block = "sound" driver = "alsa" [[block]] -block = "net" -device = "wlan0" -ssid = true -ip = true -speed_down = false -graph_up = false -speed_up = false -speed_down = false -interval = 5 +block = "maildir" +interval = 60 +inboxes = ["/home/krsh/Mail/kr3ssh@gmail.com/INBOX", "/home/krsh/Mail/kr3ssh@pm.me/INBOX", "/home/krsh/Mail/sergey@1158.studio/INBOX", "/home/krsh/Mail/sergey@aww.cloud/INBOX"] +threshold_warning = 1 +threshold_critical = 5 + +# [[block]] +# block = "net" +# device = "wlp3s0" +# ssid = true +# ip = true +# speed_down = false +# graph_up = false +# speed_up = false +# speed_down = false +# interval = 5 [[block]] block = "net" @@ -53,10 +65,10 @@ interval = 5 [[block]] block = "memory" display_type = "memory" -format_mem = "{MAm} MB" +format_mem = "{MAg} GB" clickable = false -warning_mem = 70 -critical_mem = 85 +warning_mem = 60 +critical_mem = 70 [[block]] block = "cpu" @@ -68,20 +80,25 @@ block = "temperature" collapsed = true interval = 10 format = "{min}° min, {max}° max, {average}° avg" -good = 30 -idle = 50 -info = 70 -warning = 80 +good = 45 +idle = 60 +info = 75 +warning = 84 [[block]] block = "load" interval = 1 format = "{15m} {5m} {1m}" +# [[block]] +# block = "battery" +# interval = 10 +# format = "{percentage}% {time}" + [[block]] -block = "battery" -interval = 10 -format = "{percentage}% {time}" +block = "custom" +command = "statusd-utctime" +interval = 60 [[block]] block = "time" diff --git a/install.sh b/install.sh index 1b0eb99..f13b389 100755 --- a/install.sh +++ b/install.sh @@ -7,6 +7,7 @@ ln -s $PWD/.railsrc \ $PWD/.gitconfig \ $PWD/.gitignore_global \ $PWD/.rubocop.yml \ + $PWD/.reek.yml \ $PWD/.screenrc \ $PWD/.xinitrc \ $PWD/.Xresources \ @@ -21,3 +22,15 @@ ln -s $PWD/htop ~/.config/ ln -s $PWD/qutebrowser/config.py ~/.config/qutebrowser/config.py cp -n $PWD/.bundle-config ~/.bundle/config + +ln -s $PWD/i3/config ~/.config/i3/config +ln -s $PWD/i3status/config ~/.config/i3status/config +ln -s $PWD/i3status-rs/config.toml ~/.config/i3status-rs/config.toml + +ln -s $PWD/kitty/kitty.conf ~/.config/kitty/kitty.conf +cp -rn $PWD/kitty/colors ~/.config/kitty/ + +ln -s $PWD/nvim/init.vim ~/.config/nvim/init.vim + +ln -s $PWD/mutt/muttrc ~/.config/mutt/muttrc +ln -s $PWD/mutt/mailcap ~/.config/mutt/mailcap diff --git a/kitty/kitty.conf b/kitty/kitty.conf index 509523f..9d6d88b 100644 --- a/kitty/kitty.conf +++ b/kitty/kitty.conf @@ -1,12 +1,25 @@ include colors/base16/base16-gruvbox-dark-hard-256.conf -font_family Iosevka Term +shell shell + +font_family Iosevka Term Medium font_size 11 bold_font Iosevka Term Medium -italic_font Iosevka Term Oblique +italic_font Iosevka Term Medium Oblique bold_italic_font Iosevka Term Medium Oblique adjust_line_height 95% +padding_width 0 +border_width 0 +window_border_width 1 +window_padding_width 0 +window_margin_width 0 +window_resize_step_cells 0 +single_window_margin_width 0 +draw_minimal_borders True +hide_window_decorations False +placement_strategy top-left + tab_bar_style separator tab_separator " ┇ " @@ -26,5 +39,17 @@ map ctrl+shift+7 goto_tab 7 map ctrl+shift+8 goto_tab 8 map ctrl+shift+9 goto_tab 9 +map ctrl+shift+equal no_op +map ctrl+shift+minus no_op +map ctrl+shift+backspace no_op +map ctrl+shift+w no_op + +# Crutch to disable escaping space +send_text all alt+space \x20\x7f + +map ctrl+alt+equal change_font_size all +2.0 +map ctrl+alt+minus change_font_size all -2.0 +map ctrl+alt+0 change_font_size all 0 + # Would open the scrollback buffer in a new window when you press the F1 key map ctrl+shift+f1 pipe @ansi window less +G -R diff --git a/mutt/colors-gruvbox-shuber-extended.muttrc b/mutt/colors-gruvbox-shuber-extended.muttrc new file mode 100644 index 0000000..f0ac2be --- /dev/null +++ b/mutt/colors-gruvbox-shuber-extended.muttrc @@ -0,0 +1,6 @@ +color compose header color223 color234 +color compose security_encrypt color175 color234 +color compose security_sign color109 color234 +color compose security_both color142 color234 +color compose security_none color208 color234 + diff --git a/mutt/colors-gruvbox-shuber.muttrc b/mutt/colors-gruvbox-shuber.muttrc new file mode 100644 index 0000000..0b958af --- /dev/null +++ b/mutt/colors-gruvbox-shuber.muttrc @@ -0,0 +1,81 @@ +# gruvbox dark (contrast dark): + +# bg0 = 234 +# bg1 = 237 +# bg2 = 239 +# bg3 = 241 +# bg4 = 243 +# +# gray = 245 +# +# fg0 = 229 +# fg1 = 223 +# fg2 = 250 +# fg3 = 248 +# fg4 = 246 +# +# red = 167 +# green = 142 +# yellow = 214 +# blue = 109 +# purple = 175 +# aqua = 108 +# orange = 208 + + +# See http://www.mutt.org/doc/manual/#color + +color attachment color109 color234 +color bold color229 color234 +color error color167 color234 +color hdrdefault color246 color234 +color indicator color223 color237 +color markers color243 color234 +color normal color223 color234 +color quoted color250 color234 +color quoted1 color108 color234 +color quoted2 color250 color234 +color quoted3 color108 color234 +color quoted4 color250 color234 +color quoted5 color108 color234 +color search color234 color208 +color signature color108 color234 +color status color234 color250 +color tilde color243 color234 +color tree color142 color234 +color underline color223 color239 + +color sidebar_divider color250 color234 +color sidebar_new color142 color234 + +color index color142 color234 ~N +color index color108 color234 ~O +color index color109 color234 ~P +color index color214 color234 ~F +color index color175 color234 ~Q +color index color167 color234 ~= +color index color234 color223 ~T +color index color234 color167 ~D + +color header color214 color234 "^(To:|From:)" +color header color142 color234 "^Subject:" +color header color108 color234 "^X-Spam-Status:" +color header color108 color234 "^Received:" + +color body color142 color234 "[a-z]{3,256}://[-a-zA-Z0-9@:%._\\+~#=/?&,]+" +#color body color142 color234 "[a-zA-Z]([-a-zA-Z0-9_]+\\.){2,256}[-a-zA-Z0-9_]{2,256}" +color body color208 color234 "[-a-z_0-9.%$]+@[-a-z_0-9.]+\\.[-a-z][-a-z]+" +color body color208 color234 "mailto:[-a-z_0-9.]+@[-a-z_0-9.]+" +color body color234 color214 "[;:]-*[)>(L limit-current-thread @@ -80,46 +30,48 @@ bind index L limit-current-thread # Show three quoted lines before the reply set skip_quoted_offset = 3 -set new_mail_command="notify-send 'New e-mail' '%n new messages, %u unread.' &" +# Macros +macro index Z "mbsync -a" "Sync all" + +# More vim-like bindings +# bind index i noop +bind attach,index g noop # clear for next binding +bind attach,index gg first-entry +bind attach,index G last-entry +bind index N search-opposite +# bind pager i exit +# bind pager q toggle-quoted +bind pager / search + +# QWERTY +bind pager j next-line +bind pager k previous-line + +bind pager g noop # clear for next binding +bind pager gg top +bind pager G bottom +bind index,pager \# noop +bind index,pager \& noop +bind index,pager R group-reply ## Keys -bind pager j next-line -bind pager k previous-line bind attach,index,pager \CD next-page bind attach,index,pager \CU previous-page -bind pager g top -bind pager G bottom -bind attach,index g first-entry -bind attach,index G last-entry -bind index,pager B sidebar-toggle-visible -bind index \Cg imap-fetch-mail -bind index,pager \CK sidebar-prev -bind index,pager \CJ sidebar-next +bind index,pager B sidebar-toggle-visible bind index,pager \CO sidebar-open -macro attach 'V' "cat >~/.cache/mutt/mail.html && qutebrowser file:///home/kressh/.cache/mutt/mail.html && rm ~/.cache/mutt/mail.html" +# QWERTY +bind index,pager \Ck sidebar-prev +bind index,pager \Cj sidebar-next + +macro attach 'V' "cat > ~/.cache/mutt/mail.html; ~/bin/preview-html ~/.cache/mutt/mail.html; rm ~/.cache/mutt/mail.html" macro index 'c' '?^K=' -# Etc -set mail_check = 30 -set move = no -set imap_keepalive = 900 -set sort = threads -set sort_browser = date -set sort_aux = reverse-last-date-received -set editor = "nvim" -set send_charset = "utf-8" - -set sidebar_visible = no -set sidebar_format = "%B%?F? [%F]?%* %?N?%N/?%S" -set mail_check_stats - -set pager_index_lines = 10 - set mailcap_path = ~/.config/mutt/mailcap -alternative_order text/plain text/html auto_view text/html +alternative_order text/plain text/html + # GnuPG bootstrap # source ~/.mutt/gpg.rc diff --git a/nvim/init.vim b/nvim/init.vim index 7b2e7b8..90209fc 100644 --- a/nvim/init.vim +++ b/nvim/init.vim @@ -1,88 +1,81 @@ set nocompatible filetype off -set rtp+=$HOME/.config/nvim/bundle/Vundle.vim -call vundle#begin('$HOME/.config/nvim/bundle') +source $HOME/go/src/github.com/junegunn/fzf/plugin/fzf.vim -" let Vundle manage Vundle -" required! -Plugin 'gmarik/Vundle.vim' -Plugin 'tpope/vim-fugitive' +call plug#begin('$HOME/.config/nvim/bundle') + +Plug 'tpope/vim-sensible' " Colors -Plugin 'chriskempson/base16-vim' +Plug 'chriskempson/base16-vim' -" Autocomplete -Plugin 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } +Plug 'terryma/vim-multiple-cursors' +Plug 'Lokaltog/vim-easymotion' -" -Plugin 'terryma/vim-multiple-cursors' -Plugin 'Lokaltog/vim-easymotion' +Plug 'rust-lang/rust.vim' +" Plug 'racer-rust/vim-racer' +Plug 'vim-ruby/vim-ruby' +Plug 'tpope/vim-rails' +Plug 'tpope/vim-rake' +Plug 'tpope/vim-bundler' +Plug 'calviken/vim-gdscript3' +" Plug 'tpope/vim-projectionist' +" Plug 'tpope/vim-haml' +Plug 'ledger/vim-ledger' +Plug 'slim-template/vim-slim' +Plug 'fatih/vim-go' +" Plug 'wavded/vim-stylus' +" Plug 'digitaltoad/vim-jade' +Plug 'Glench/Vim-Jinja2-Syntax' +Plug 'HerringtonDarkholme/yats.vim' -" Languages -Plugin 'rust-lang/rust.vim' -Plugin 'racer-rust/vim-racer' -Plugin 'vim-ruby/vim-ruby' -Plugin 'tpope/vim-rails' -Plugin 'tpope/vim-rake' -Plugin 'tpope/vim-bundler' -Plugin 'ledger/vim-ledger' -Plugin 'slim-template/vim-slim' -Plugin 'fatih/vim-go' -Plugin 'wavded/vim-stylus' -Plugin 'digitaltoad/vim-jade' -Plugin 'Glench/Vim-Jinja2-Syntax' +Plug 'tomtom/tcomment_vim' -" Productivity -Plugin 'farseer90718/vim-taskwarrior' +Plug 'majutsushi/tagbar', { 'on': 'TagbarToggle' } -Plugin 'majutsushi/tagbar' - -" Plugin 'L9' -Plugin 'scrooloose/nerdcommenter' -Plugin 'scrooloose/nerdtree' -Plugin 'jistr/vim-nerdtree-tabs' -" Plugin 'vim-scripts/tlib' +Plug 'scrooloose/nerdtree', { 'on': ['NERDTreeToggle', 'NERDTreeFind'] } +Plug 'milkypostman/vim-togglelist' " l and q " Snippets -Plugin 'Shougo/neosnippet' -Plugin 'Shougo/neosnippet-snippets' -Plugin 'honza/vim-snippets' +Plug 'Shougo/neosnippet' +Plug 'Shougo/neosnippet-snippets' +Plug 'honza/vim-snippets' " Appearance -Plugin 'vim-airline/vim-airline' -Plugin 'vim-airline/vim-airline-themes' +Plug 'itchyny/lightline.vim' +Plug 'maximbaz/lightline-ale' +Plug 'shinchu/lightline-gruvbox.vim' -Plugin 'mattn/calendar-vim' -Plugin 'vim-scripts/vimwiki' -" Plugin 'mhinz/vim-startify' -" Plugin 'ngmy/vim-rubocop' -Plugin 'editorconfig/editorconfig-vim' -Plugin 'tpope/vim-surround' -Plugin 'tpope/vim-unimpaired' -Plugin 'tpope/vim-endwise' -Plugin 'rstacruz/vim-closer' +Plug 'ryanoasis/vim-devicons' -Plugin 'kien/ctrlp.vim' -Plugin 'mileszs/ack.vim' -Plugin 'godlygeek/tabular' -Plugin 'nathanaelkane/vim-indent-guides' +Plug 'editorconfig/editorconfig-vim' +Plug 'tpope/vim-surround' +Plug 'tpope/vim-unimpaired' +Plug 'tpope/vim-endwise' +Plug 'rstacruz/vim-closer' + +Plug 'junegunn/fzf.vim' +Plug 'godlygeek/tabular' +Plug 'nathanaelkane/vim-indent-guides' " Linters and syntax stuff -Plugin 'w0rp/ale' +Plug 'neoclide/coc.nvim', {'branch': 'release'} +Plug 'w0rp/ale' " -" Plugin 'neomake/neomake' -" Plugin 'vim-syntastic/syntastic' -" Plugin 'syngan/vim-vimlint' -" Plugin 'ynkdir/vim-vimlparser' -" Plugin 'tpope/vim-dispatch' -" Plugin 'whatyouhide/vim-gotham' -" Plugin 'altercation/vim-colors-solarized' -Plugin 'airblade/vim-gitgutter' -Plugin 'szw/vim-maximizer' -Plugin 'kassio/neoterm' +" Plug 'tpope/vim-dispatch' +Plug 'airblade/vim-gitgutter' +Plug 'tpope/vim-fugitive' +Plug 'kassio/neoterm' +Plug 'janko/vim-test' -call vundle#end() +" Tasks +Plug 'blindFS/vim-taskwarrior' +Plug 'powerman/vim-plugin-AnsiEsc' +Plug 'vimwiki/vimwiki', {'branch': 'dev'} +Plug 'tbabej/taskwiki' + +call plug#end() " Colorscheme set t_Co=256 @@ -93,63 +86,162 @@ colorscheme base16-gruvbox-dark-hard " NERD Commenter " Add spaces after comment delimiters by default -let g:NERDSpaceDelims = 1 +" let g:NERDSpaceDelims = 1 " Use compact syntax for prettified multi-line comments -let g:NERDCompactSexyComs = 1 +" let g:NERDCompactSexyComs = 1 " Align line-wise comment delimiters flush left instead of following code indentation -let g:NERDDefaultAlign = 'left' +" let g:NERDDefaultAlign = 'left' " Allow commenting and inverting empty lines (useful when commenting a region) -let g:NERDCommentEmptyLines = 1 +" let g:NERDCommentEmptyLines = 1 " Enable trimming of trailing whitespace when uncommenting -let g:NERDTrimTrailingWhitespace = 0 - -" NERDtree-tabs -let g:nerdtree_tabs_open_on_gui_startup = 0 -let g:nerdtree_tabs_autoclose = 0 +" let g:NERDTrimTrailingWhitespace = 0 " Snipmate " imap snipMateNextOrTrigger " let g:snipMate = get(g:, 'snipMate', {}) " Allow for vimrc re-sourcing -" YouCompleteMe -" let g:ycm_key_list_select_completion = [''] -" let g:ycm_key_list_previous_completion = [''] +" coc.nvim +" +" Use tab for trigger completion with characters ahead and navigate. +" Use command ':verbose imap ' to make sure tab is not mapped by other plugin. -" Neocomplete -let g:acp_enableAtStartup = 0 -let g:deoplete#enable_at_startup = 1 -let g:deoplete#enable_smart_case = 1 -let g:deoplete#max_list = 10 -let g:deoplete#sources#syntax#min_keyword_length = 3 -inoremap pumvisible() ? "\" : "\" +" inoremap +" \ pumvisible() ? "\" : +" \ check_back_space() ? "\" : +" \ coc#refresh() +" inoremap pumvisible() ? "\" : "\" +" +" function! s:check_back_space() abort +" let col = col('.') - 1 +" return !col || getline('.')[col - 1] =~# '\s' +" endfunction -" Deoplete with multiple cursors -function Multiple_cursors_before() - let g:deoplete#disable_auto_complete = 1 -endfunction -function Multiple_cursors_after() - let g:deoplete#disable_auto_complete = 0 +let g:coc_global_extensions = [ + \ 'coc-css', + \ 'coc-fish', + \ 'coc-html', + \ 'coc-lists', + \ 'coc-omni', + \ 'coc-sh', + \ 'coc-tsserver', + \ 'coc-eslint', + \ 'coc-docker', + \ 'coc-highlight', + \ 'coc-json', + \ 'coc-neosnippet', + \ 'coc-rust-analyzer', + \ 'coc-solargraph', + \ 'coc-yaml' + \ ] + +highlight CocErrorSign ctermfg=9 ctermbg=18 guifg=#ff0000 guibg=#3c3836 +highlight CocWarningSign ctermfg=130 ctermbg=18 guifg=#ff922b guibg=#3c3836 +highlight CocInfoSign ctermfg=11 ctermbg=18 guifg=#fab005 guibg=#3c3836 +highlight CocHintSign ctermfg=12 ctermbg=18 guifg=#15aabf guibg=#3c3836 + +" Use to trigger completion. +inoremap coc#refresh() + +" Use to confirm completion, `u` means break undo chain at current position. +" Coc only does snippet and additional edit on confirm. +" inoremap pumvisible() ? "\" : "\u\" +" Or use `complete_info` if your vim support it, like: +" inoremap complete_info()["selected"] != "-1" ? "\" : "\u\" + +" Use `[g` and `]g` to navigate diagnostics +nmap [g (coc-diagnostic-prev) +nmap ]g (coc-diagnostic-next) + +" Remap keys for gotos +nmap gd (coc-definition) +nmap gy (coc-type-definition) +nmap gi (coc-implementation) +nmap gr (coc-references) +nmap gl :CocList outline + +nnoremap s :CocSearch + +" Use K to show documentation in preview window +nnoremap K :call show_documentation() + +function! s:show_documentation() + if (index(['vim','help'], &filetype) >= 0) + execute 'h '.expand('') + else + call CocAction('doHover') + endif endfunction -autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete +" Highlight symbol under cursor on CursorHold +autocmd CursorHold * silent call CocActionAsync('highlight') + +" Remap for rename current word +nmap rn (coc-rename) + +" Remap for format selected region +xmap f (coc-format-selected) +nmap f (coc-format-selected) + +" Remap for do codeAction of current line +" nmap ac (coc-codeaction) +" Fix autofix problem of current line +nmap qf (coc-fix-current) + +" Required for operations modifying multiple buffers like rename. +set hidden + +" autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete autocmd FileType ledger setlocal sw=4 ts=4 sts=4 autocmd FileType rust setlocal sw=4 ts=4 sts=4 +" FZF with dev icons +function! FZFWithDevIcons() + let l:fzf_files_options = ' -m --bind ctrl-d:preview-page-down,ctrl-u:preview-page-up --preview "bat --color always --style numbers {2..}"' + + function! s:files() + let l:files = split(system($FZF_DEFAULT_COMMAND), '\n') + return s:prepend_icon(l:files) + endfunction + + function! s:prepend_icon(candidates) + let result = [] + for candidate in a:candidates + let filename = fnamemodify(candidate, ':p:t') + let icon = WebDevIconsGetFileTypeSymbol(filename, isdirectory(filename)) + call add(result, printf("%s %s", icon, candidate)) + endfor + + return result + endfunction + + function! s:edit_file(items) + let items = a:items + let i = 1 + let ln = len(items) + while i < ln + let item = items[i] + let parts = split(item, ' ') + let file_path = get(parts, 1, '') + let items[i] = file_path + let i += 1 + endwhile + call s:Sink(items) + endfunction + + let opts = fzf#wrap({}) + let opts.source = files() + let s:Sink = opts['sink*'] + let opts['sink*'] = function('s:edit_file') + let opts.options .= l:fzf_files_options + call fzf#run(opts) + +endfunction + " Neocomplete snippets imap (neosnippet_expand_or_jump) smap (neosnippet_expand_or_jump) xmap (neosnippet_expand_target) -" SuperTab like snippets behavior. -" Note: It must be "imap" and "smap". It uses mappings. -imap (neosnippet_expand_or_jump) -"imap -" \ pumvisible() ? "\" : -" \ neosnippet#expandable_or_jumpable() ? -" \ "\(neosnippet_expand_or_jump)" : "\" -smap neosnippet#expandable_or_jumpable() ? -\ "\(neosnippet_expand_or_jump)" : "\" - " For conceal markers. if has('conceal') set conceallevel=0 concealcursor=niv @@ -159,112 +251,70 @@ endif let g:neosnippet#enable_snipmate_compatibility = 1 " " Tell Neosnippet about the other snippets -let g:neosnippet#snippets_directory='~/.config/nvim/bundle/vim-snippets/snippets' - -" Neomake -" Run NeoMake on read and write operations -" autocmd! BufReadPost,BufWritePost * Neomake -" autocmd! BufWritePost * Neomake -" autocmd BufUnload,BufWinLeave * lclose +let g:neosnippet#snippets_directory='$HOME/.config/nvim/bundle/vim-snippets/snippets' " ALE " let g:ale_sign_column_always = 1 -let g:airline#extensions#ale#enabled = 1 +let g:ale_enabled = 1 let g:ale_list_window_size = 3 -let g:ale_lint_on_text_changed = 'never' +let g:ale_lint_on_save = 1 let g:ale_lint_on_enter = 0 -let g:ale_open_list = 1 +let g:ale_lint_on_text_changed = 0 +let g:ale_lint_on_insert_leave = 0 +let g:ale_open_list = 0 +let g:ale_linters_explicit = 1 -" let g:ale_sign_error = 'E>' -" let g:ale_sign_warning = 'W>' -let g:ale_sign_error = '×' -let g:ale_sign_warning = '•' +let g:ale_linters = { + \ 'ruby': ['reek'], + \ 'scss': ['stylelint'], + \ 'sass': ['stylelint'], + \ 'css': ['stylelint'], + \ 'slim': ['slimlint'], + \ } + +let g:ale_fixers = { +\ '*': ['remove_trailing_lines', 'trim_whitespace'], +\} + +" Set this variable to 1 to fix files when you save them. +let g:ale_fix_on_save = 1 + +" let g:ale_set_loclist = 0 +" let g:ale_set_quickfix = 1 +" let g:ale_keep_list_window_open = 1 + +" nmap (ale_previous_wrap) +" nmap (ale_next_wrap) + +let g:ale_set_highlights = 1 + +let g:ale_sign_error = 'E>' +let g:ale_sign_warning = 'W>' let g:ale_echo_msg_error_str = 'Error' let g:ale_echo_msg_warning_str = 'Warning' let g:ale_echo_msg_format = '[%severity%] %s [%linter%]' -" let g:neomake_ruby_enabled_makers = ['rubocop', 'reek'] -" let g:neomake_open_list = 2 -" let g:neomake_list_height = 4 -" let g:neomake_serialize = 1 -" let g:neomake_serialize_abort_on_error = 1 -" -" let g:neomake_error_sign = { -" \ 'text': 'E>', -" \ 'texthl': 'NeomakeErrorSign', -" \ } -" let g:neomake_warning_sign = { -" \ 'text': 'S>', -" \ 'texthl': 'NeomakeWarningSign', -" \ } -" let g:neomake_info_sign = { -" \ 'text': 'I>', -" \ 'texthl': 'NeomakeInfoSign', -" \ } -" let g:neomake_message_sign = { -" \ 'text': 'M>', -" \ 'texthl': 'NeomakeMsg', -" \ } -" -" augroup my_neomake_signs -" au! -" autocmd ColorScheme * -" \ hi NeomakeErrorSign ctermfg=red | -" \ hi NeomakeWarningSign ctermfg=yellow -" augroup END - let g:EditorConfig_exclude_patterns = ['fugitive://.*', 'scp://.*'] -" Syntastic -" let g:syntastic_ruby_checkers = ['rubocop'] -"let g:syntastic_shell = "/bin/sh" -" let g:syntastic_loc_list_height = 3 -"let g:syntastic_enable_balloons = 1 -"let g:syntastic_ruby_checkers = ['rubocop'] -"let g:syntastic_ruby_rubocop_exec ='/home/kressh/.rbenv/versions/2.2.0/bin/rubocop' -" let g:syntastic_ruby_rubocop_args = '-l' -" let g:syntastic_quiet_messages = { "type": "style" } -" let g:syntastic_always_populate_loc_list = 1 -" let g:syntastic_auto_loc_list = 1 -"let g:syntastic_check_on_open = 0 -" let g:syntastic_check_on_wq = 1 +" FZF ripgrep +nnoremap g :Rg -" Ack -" let g:ack_use_dispatch = 0 -" Ag -if executable('rg') - let g:ackprg = 'rg --vimgrep' - cnoreabbrev ag Ack - cnoreabbrev aG Ack - cnoreabbrev Ag Ack - cnoreabbrev AG Ack -endif - -syntax enable -filetype plugin indent on - -silent! nmap :NERDTreeTabsToggle +" NerdTREE +silent! nmap :NERDTreeToggle silent! map :NERDTreeFind let g:NERDTreeMapActivateNode="" let g:NERDTreeMapPreview="" -let g:calendar_keys = {'goto_next_month': '', - \ 'goto_prev_month': '', - \ 'goto_prev_year': '', - \ 'goto_next_year': ''} -let g:calendar_monday = 1 -let g:calendar_focus_today = 1 - " RustFmt rust -let g:rustfmt_autosave = 1 +" let g:rustfmt_autosave = 1 " Racer -let g:racer_experimental_completer = 1 -au FileType rust nmap gd (rust-def) -au FileType rust nmap gs (rust-def-split) -au FileType rust nmap gx (rust-def-vertical) -au FileType rust nmap gd (rust-doc) +" let g:racer_experimental_completer = 1 +" au FileType rust nmap gd (rust-def) +" au FileType rust nmap gs (rust-def-split) +" au FileType rust nmap gx (rust-def-vertical) +" au FileType rust nmap gd (rust-doc) au BufRead,BufNewFile *.jbuilder setf ruby au BufRead,BufNewFile *.rabl setf ruby @@ -275,56 +325,122 @@ au BufRead,BufNewFile *.tag setf coffee " riotjs tags " silent! nmap :FufLine " silent! nmap :FufCoverageFile " -" Airline -let g:airline_theme = 'base16' -" let g:airline_section_s = '' " Don't display encoding -" let g:airline_section_y = '' " Don't display encoding -let g:airline_powerline_fonts = 1 -" let g:airline_left_sep = '▶' " Set custom left separator -" let g:airline_right_sep = '◀' " Set custom right separator -let g:airline#extensions#tabline#enabled = 1 " Enable airline for tab-bar -" let g:airline#extensions#tabline#show_buffers = 0 " Don't display buffers in tab-bar with single tab -" let g:airline#extensions#tabline#fnamemod = ':t' " Display only filename in tab +" Lightline +let g:lightline = { + \ 'colorscheme': 'gruvbox', + \ 'component_function': { + \ 'gitbranch': 'fugitive#head' + \ }, + \ } -" Buffer/Tab navigation -nnoremap h :bp -nnoremap n :bn -nnoremap l :bn -nnoremap d :bd +let g:lightline.component_expand = { + \ 'linter_checking': 'lightline#ale#checking', + \ 'linter_warnings': 'lightline#ale#warnings', + \ 'linter_errors': 'lightline#ale#errors', + \ 'linter_ok': 'lightline#ale#ok', + \ } + +let g:lightline.component_function = { + \ 'cocstatus': 'coc#status' + \ } + +let g:lightline.component_type = { + \ 'linter_checking': 'left', + \ 'linter_warnings': 'warning', + \ 'linter_errors': 'error', + \ 'linter_ok': 'left', + \ } + +let g:lightline.active = { + \ 'left': [ [ 'mode', 'paste' ], + \ [ 'gitbranch', 'readonly', 'filename', 'modified' ], + \ [ 'cocstatus' ]], + \ 'right': [ [ 'linter_checking', 'linter_errors', 'linter_warnings', 'linter_ok' ], + \ [ 'lineinfo' ], + \ [ 'percent' ], + \ [ 'fileformat', 'fileencoding', 'filetype' ] ] + \ } + +set shell=fish " Terminal tnoremap -command Term split term://$SHELL +command Term split term://fish let g:neoterm_autoinsert = 1 let g:neoterm_default_mod = 'rightbelow' +" vim-test +" make test commands execute using neoterm +let test#strategy = "neoterm" + " Vim gitgutter -let g:gitgutter_sign_added = '█' -let g:gitgutter_sign_modified = '█' -let g:gitgutter_sign_removed = '█' -let g:gitgutter_sign_removed_first_line = '█' -let g:gitgutter_sign_modified_removed = '█' +let g:gitgutter_enabled = 1 +let g:gitgutter_signs = 1 +" let g:gitgutter_sign_added = ' ' +" let g:gitgutter_sign_modified = ' ' +" let g:gitgutter_sign_removed = ' ' +" let g:gitgutter_sign_removed_first_line = ' ' +" let g:gitgutter_sign_modified_removed = ' ' +let g:gitgutter_sign_added = '+' +let g:gitgutter_sign_modified = '~' +let g:gitgutter_sign_removed = '-' +let g:gitgutter_sign_removed_first_line = '-' +let g:gitgutter_sign_modified_removed = '~' +let g:gitgutter_highlight_linenrs = 1 +let g:gitgutter_highlight_lines = 0 -let g:ctrlp_map = '' -let g:ctrlp_cmd = 'CtrlP' -let g:ctrlp_user_command = "fd --type file --full-path -c never -H -E node_modules -E vendor -E public -E tmp -E log -E .git -E .hg -E .svn -E '*.min.js' -E '*.log' -E '.keep' %s" -let g:ctrlp_dont_split = 'NERD' -let g:ctrlp_root_markers = ['Dockerfile', 'gems.locked', 'Gemfile.lock', '.gitignore'] -let g:ctrlp_working_path_mode = 'aw' -let g:ctrlp_use_caching = 0 +highlight GitGutterChangeLineNr ctermfg=16 ctermbg=18 guifg=#83a598 guibg=#3c3836 +highlight GitGutterChangeDeleteLineNr ctermfg=16 ctermbg=18 guifg=#d3869b guibg=#3c3836 -" Vim maximizer -let g:maximizer_default_mapping_key = '' +highlight link GitGutterAddLineNr GitGutterAddLine +highlight link GitGutterDeleteLineNr GitGutterDeleteLine + +" fzf +" silent! nmap :FZF +silent! nmap :call FZFWithDevIcons() + +" An action can be a reference to a function that processes selected lines +function! s:build_quickfix_list(lines) + call setqflist(map(copy(a:lines), '{ "filename": v:val }')) + copen + cc +endfunction + +" This is the default extra key bindings +let g:fzf_action = { + \ 'ctrl-q': function('s:build_quickfix_list'), + \ 'ctrl-t': 'tab split', + \ 'ctrl-x': 'split', + \ 'ctrl-v': 'vsplit', + \ 'ctrl-o': 'edit' } + +" Default fzf layout +" - down / up / left / right +let g:fzf_layout = { 'down': '~30%' } + +" hide the statusline of the containing buffer +autocmd! FileType fzf +autocmd FileType fzf set laststatus=0 noshowmode noruler + \| autocmd BufLeave set laststatus=2 showmode ruler + +" Customize fzf colors to match your color scheme +let g:fzf_colors = +\ { 'fg': ['fg', 'Normal'], + \ 'bg': ['bg', 'Normal'], + \ 'hl': ['fg', 'Comment'], + \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'], + \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'], + \ 'hl+': ['fg', 'Statement'], + \ 'info': ['fg', 'PreProc'], + \ 'border': ['fg', 'Ignore'], + \ 'prompt': ['fg', 'Conditional'], + \ 'pointer': ['fg', 'Exception'], + \ 'marker': ['fg', 'Keyword'], + \ 'spinner': ['fg', 'Label'], + \ 'header': ['fg', 'Comment'] } " Replace current word with yanked or deleted text -nnoremap S "_diwP - -fun! StripTrailingWhitespaces() - let l = line(".") - let c = col(".") - %s/\s\+$//e - call cursor(l, c) -endfun +" nnoremap S "_diwP " tagbar nmap :TagbarToggle @@ -352,9 +468,6 @@ let g:tagbar_type_ruby = { \ ] \} -" Automatically clean trailing whitespaces on save -autocmd BufWritePre *.* :call StripTrailingWhitespaces() - " vim-indent-guides " let g:indent_guides_enable_on_vim_startup = 1 " let g:indent_guides_auto_colors = 0 @@ -363,6 +476,17 @@ autocmd BufWritePre *.* :call StripTrailingWhitespaces() " autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd ctermbg=8 " autocmd VimEnter,Colorscheme * :hi IndentGuidesEven ctermbg=0 +" Vimwiki +let g:vimwiki_list = [{'path': '~/vimwiki/', 'syntax': 'markdown', 'ext': '.md'}] + +" FIXME: this is strange workaround for workaround for bug in kitty +autocmd FileType vimwiki nnoremap wH VimwikiGoBackLink + +" Taskwiki +let g:taskwiki_markup_syntax = "markdown" +" let g:taskwiki_source_tw_colors = "yes" +nnoremap tR :TaskWikiBufferLoad + set noswapfile set ofu=syntaxcomplete#Complete @@ -372,40 +496,35 @@ set shiftwidth=2 " Tabs under smart indent set cf " Enable error files & error jumping. set clipboard=unnamed " Yanks go on clipboard instead. -set history=32 " Number of things to remember in history. -set autowrite " Writes on make/shell commands set nu " Line numbers on +set relativenumber +set cursorline -" set nowrap " Line wrapping off set wrap set linebreak -set notimeout -set ttimeout " set timeoutlen=250 " Time to wait after ESC (default causes an annoying delay) -set synmaxcol=200 -set incsearch +set cmdheight=1 + +set updatetime=300 + set hlsearch " Highlight searches -set ruler " Ruler on -set re=1 +set re=0 " set ttyfast " set lazyredraw +set redrawtime=1000 -set nocp incsearch " Search -" set ignorecase " Ignore case of searches +set ignorecase smartcase " Ignore case of searches set cinoptions=:0,p0,t0 set cinwords=if,else,while,do,for,switch,case,begin set formatoptions=tcqr set cindent -set autoindent -set smarttab set expandtab set colorcolumn=80,120 -" hi ColorColumn guibg=Black set nostartofline " Don’t reset cursor to start of line when moving around. set noeol " Don’t add empty newlines at the end of files @@ -418,23 +537,26 @@ set mat=5 " Bracket blinking. " Show $ at end of line and trailing space as ~ set novisualbell " No blinking . set noerrorbells " No noise. -set laststatus=2 " Always show status line. " Invisibles -" set listchars=tab:▸\ ,eol:¬ set list listchars=tab:▸·,trail:·,nbsp:· " Use one space, not two, after punctuation. set nojoinspaces -" inoremap -" inoremap -" inoremap -" inoremap -noremap -noremap -noremap -noremap +" Disable some keys +" noremap +" noremap +" noremap +" noremap +" noremap +" noremap +" noremap +" noremap +" inoremap +" inoremap +" inoremap +" inoremap " Open new split panes to right and bottom, which feels more natural set splitbelow @@ -447,3 +569,10 @@ nnoremap j nnoremap k nnoremap h nnoremap l + +nnoremap Y y$ +nnoremap S hs + +" Save & quit +noremap Q :q +noremap :qa