spellr 0.8.2 → 0.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/README.md +27 -6
- data/lib/.spellr.yml +1 -0
- data/lib/spellr/check.rb +1 -0
- data/lib/spellr/cli_options.rb +7 -0
- data/lib/spellr/column_location.rb +2 -2
- data/lib/spellr/config.rb +5 -4
- data/lib/spellr/file.rb +18 -19
- data/lib/spellr/file_list.rb +11 -2
- data/lib/spellr/interactive.rb +1 -1
- data/lib/spellr/interactive_add.rb +1 -1
- data/lib/spellr/key_tuner/naive_bayes.rb +1 -4
- data/lib/spellr/language.rb +8 -23
- data/lib/spellr/line_location.rb +9 -14
- data/lib/spellr/line_tokenizer.rb +2 -2
- data/lib/spellr/output_stubbed.rb +1 -1
- data/lib/spellr/token_regexps.rb +2 -1
- data/lib/spellr/tokenizer.rb +7 -4
- data/lib/spellr/version.rb +1 -1
- data/spellr.gemspec +10 -4
- metadata +19 -16
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c9df7410c75a7e4c7ff3b8defecfdd38252571090e5edacbf46e562be7f27d3e
         | 
| 4 | 
            +
              data.tar.gz: a7f24ff28fccb5bf4da96891849994442d2d27ad2097bfce246543efd80d1274
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a582e1b04c1f5f39637877b1f28c468d89c671bc8675bcadd639206b03753ac1df2c83dda0f88d42fb0f0eda1869a33fbb217e0bea45aaa6abc30e363d35774f
         | 
| 7 | 
            +
              data.tar.gz: 60065eb1def72bb64ed99ef1186eb80d2ea9a6ef908e538677ae830747893b30358f7eee3c8d384cc31186366ac3cb546e6522400d5bc43df2a900818d171e86
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,3 +1,18 @@ | |
| 1 | 
            +
            # v0.8.7
         | 
| 2 | 
            +
            - Recognize URL with tilde in path
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            # v0.8.6
         | 
| 5 | 
            +
            - `--suppress--file-rules` so you can check files that would usually be ignored
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # v0.8.5
         | 
| 8 | 
            +
            - Single line disable! use `spellr:disable-line` #25
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            # v0.8.4
         | 
| 11 | 
            +
            - Update fast_ignore dependency, it's faster now (about 0.5s faster on rails codebase)
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            # v0.8.3
         | 
| 14 | 
            +
            - Update fast_ignore dependency fixing symlinks to directories handling.
         | 
| 15 | 
            +
             | 
| 1 16 | 
             
            # v0.8.2
         | 
| 2 17 | 
             
            - Massive test refactor
         | 
| 3 18 | 
             
              - Spellr now only pays attention to Spellr.pwd. Dir.pwd can be whatever
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            # Spellr
         | 
| 2 2 |  | 
| 3 | 
            +
            [](https://travis-ci.com/robotdana/spellr)
         | 
| 3 4 | 
             
            [](https://rubygems.org/gems/spellr)
         | 
| 4 | 
            -
            [](https://travis-ci.org/robotdana/spellr)
         | 
| 5 5 |  | 
| 6 6 | 
             
            Spell check your source code for fun and occasionally finding bugs
         | 
| 7 7 |  | 
| @@ -27,6 +27,8 @@ However, in a programming context spelling things _consistently_ is useful, wher | |
| 27 27 |  | 
| 28 28 | 
             
            ## Installation
         | 
| 29 29 |  | 
| 30 | 
            +
            This is tested against ruby 2.4.0-3.0.0.preview1.
         | 
| 31 | 
            +
             | 
| 30 32 | 
             
            ### With Bundler
         | 
| 31 33 |  | 
| 32 34 | 
             
            Add this line to your application's `Gemfile`:
         | 
| @@ -175,20 +177,27 @@ Type `e` to add this word to the english wordlist and continue on through the sp | |
| 175 177 |  | 
| 176 178 | 
             
            ### Disabling the tokenizer
         | 
| 177 179 |  | 
| 178 | 
            -
            If the tokenizer finds a word you don't want to add to the wordlist (perhaps it's an intentional example of a typo, or a non-word string not excluded by the heuristic) then  | 
| 180 | 
            +
            If the tokenizer finds a word you don't want to add to the wordlist (perhaps it's an intentional example of a typo, or a non-word string not excluded by the heuristic) then add any kind of comment containing `spellr:disable-line` to the line.
         | 
| 181 | 
            +
            ```ruby
         | 
| 182 | 
            +
            open('mispeled_filename.txt') # spellr:disable-line
         | 
| 183 | 
            +
            ```
         | 
| 184 | 
            +
             | 
| 185 | 
            +
            You can also disable multiple lines, by surrounding the offending code with `spellr:disable` and `spellr:enable`
         | 
| 179 186 | 
             
            ```ruby
         | 
| 180 187 | 
             
            # spellr:disable
         | 
| 181 | 
            -
            "Test typo of the: teh"
         | 
| 188 | 
            +
            it "Test typo of the: teh" do
         | 
| 189 | 
            +
              fill_in(field, with: "teh")
         | 
| 190 | 
            +
            end
         | 
| 182 191 | 
             
            # spellr:enable
         | 
| 183 192 | 
             
            ```
         | 
| 184 193 |  | 
| 185 | 
            -
             | 
| 194 | 
            +
            If your language supports inline comments you can also surround with `spellr:disable` and `spellr:enable` in the same line:
         | 
| 186 195 | 
             
            ```html
         | 
| 187 196 | 
             
            <span><!-- spellr:disable -->nonsenseword<!-- spellr:enable --></span>
         | 
| 188 197 | 
             
            ```
         | 
| 189 198 | 
             
            ## Configuration
         | 
| 190 199 |  | 
| 191 | 
            -
            Spellr's configuration is a `.spellr.yml` file in your project root. This is combined with the gem defaults defined [here](https://github.com/robotdana/spellr/blob/ | 
| 200 | 
            +
            Spellr's configuration is a `.spellr.yml` file in your project root. This is combined with the gem defaults defined [here](https://github.com/robotdana/spellr/blob/main/lib/.spellr.yml).
         | 
| 192 201 | 
             
            There are top-level keys and per-language keys.
         | 
| 193 202 | 
             
            ```yml
         | 
| 194 203 | 
             
            word_minimum_length: 3 # any words shorter than this will be ignored
         | 
| @@ -297,6 +306,18 @@ Spellr::RakeTask.generate_task(:spellr, **spellr_arguments) | |
| 297 306 | 
             
            task default: :spellr
         | 
| 298 307 | 
             
            ```
         | 
| 299 308 |  | 
| 309 | 
            +
            ## Ignoring the configured patterns
         | 
| 310 | 
            +
             | 
| 311 | 
            +
            Sometimes you'll want to spell check something that would usually be ignored,
         | 
| 312 | 
            +
            e.g. `.git/COMMIT_EDITMSG` even though `spellr` ignores the `.git` directory.
         | 
| 313 | 
            +
             | 
| 314 | 
            +
            For this you can use the `--suppress-file-rules` command line argument.
         | 
| 315 | 
            +
            ```bash
         | 
| 316 | 
            +
            $ spellr --suppress-file-rules .git/COMMIT_EDITMSG
         | 
| 317 | 
            +
            ```
         | 
| 318 | 
            +
             | 
| 319 | 
            +
            **Note: This still ignores files outside of the current directory**
         | 
| 320 | 
            +
             | 
| 300 321 | 
             
            ## Development
         | 
| 301 322 |  | 
| 302 323 | 
             
            After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests.
         | 
| @@ -310,4 +331,4 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/robotd | |
| 310 331 | 
             
            ## License
         | 
| 311 332 |  | 
| 312 333 | 
             
            The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
         | 
| 313 | 
            -
            Wordlists packaged with this gem have their own licenses, see them in https://github.com/robotdana/spellr/tree/ | 
| 334 | 
            +
            Wordlists packaged with this gem have their own licenses, see them in https://github.com/robotdana/spellr/tree/main/wordlists
         | 
    
        data/lib/.spellr.yml
    CHANGED
    
    
    
        data/lib/spellr/check.rb
    CHANGED
    
    
    
        data/lib/spellr/cli_options.rb
    CHANGED
    
    | @@ -28,6 +28,9 @@ module Spellr | |
| 28 28 | 
             
                      opts.separator('')
         | 
| 29 29 | 
             
                      opts.on('--[no-]parallel', 'Run in parallel or not, default --parallel', &method(:parallel_option))
         | 
| 30 30 | 
             
                      opts.on('-d', '--dry-run', 'List files to be checked', &method(:dry_run_option))
         | 
| 31 | 
            +
                      opts.on('-f', '--suppress-file-rules', <<~HELP, &method(:suppress_file_rules))
         | 
| 32 | 
            +
                        Suppress all configured, default, and gitignore include and exclude patterns
         | 
| 33 | 
            +
                      HELP
         | 
| 31 34 | 
             
                      opts.separator('')
         | 
| 32 35 | 
             
                      opts.on('-c', '--config FILENAME', String, <<~HELP, &method(:config_option))
         | 
| 33 36 | 
             
                        Path to the config file (default ./.spellr.yml)
         | 
| @@ -56,6 +59,10 @@ module Spellr | |
| 56 59 | 
             
                      Spellr.config.checker = Spellr::CheckInteractive unless @parallel_option
         | 
| 57 60 | 
             
                    end
         | 
| 58 61 |  | 
| 62 | 
            +
                    def suppress_file_rules(_)
         | 
| 63 | 
            +
                      Spellr.config.suppress_file_rules = true
         | 
| 64 | 
            +
                    end
         | 
| 65 | 
            +
             | 
| 59 66 | 
             
                    def config_option(file)
         | 
| 60 67 | 
             
                      file = Spellr.pwd.join(file).expand_path
         | 
| 61 68 |  | 
| @@ -4,8 +4,8 @@ require_relative 'line_location' | |
| 4 4 |  | 
| 5 5 | 
             
            module Spellr
         | 
| 6 6 | 
             
              class ColumnLocation
         | 
| 7 | 
            -
                attr_reader :char_offset
         | 
| 8 | 
            -
             | 
| 7 | 
            +
                attr_reader :char_offset, :byte_offset
         | 
| 8 | 
            +
             | 
| 9 9 | 
             
                attr_accessor :line_location
         | 
| 10 10 |  | 
| 11 11 | 
             
                def initialize(char_offset: 0, byte_offset: 0, line_location: LineLocation.new)
         | 
    
        data/lib/spellr/config.rb
    CHANGED
    
    | @@ -10,10 +10,11 @@ require 'pathname' | |
| 10 10 |  | 
| 11 11 | 
             
            module Spellr
         | 
| 12 12 | 
             
              class Config
         | 
| 13 | 
            -
                attr_writer :reporter
         | 
| 14 | 
            -
             | 
| 13 | 
            +
                attr_writer :reporter, :checker
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                attr_accessor :suppress_file_rules, :dry_run
         | 
| 16 | 
            +
             | 
| 15 17 | 
             
                attr_reader :config_file
         | 
| 16 | 
            -
                attr_accessor :dry_run
         | 
| 17 18 | 
             
                alias_method :dry_run?, :dry_run
         | 
| 18 19 |  | 
| 19 20 | 
             
                def initialize
         | 
| @@ -77,7 +78,7 @@ module Spellr | |
| 77 78 | 
             
                  Spellr::ConfigValidator.new.valid?
         | 
| 78 79 | 
             
                end
         | 
| 79 80 |  | 
| 80 | 
            -
                def reset! # rubocop:disable Metrics/MethodLength | 
| 81 | 
            +
                def reset! # rubocop:disable Metrics/MethodLength
         | 
| 81 82 | 
             
                  @config = ConfigLoader.new
         | 
| 82 83 | 
             
                  remove_instance_variable(:@languages) if defined?(@languages)
         | 
| 83 84 | 
             
                  remove_instance_variable(:@excludes) if defined?(@excludes)
         | 
    
        data/lib/spellr/file.rb
    CHANGED
    
    | @@ -4,25 +4,6 @@ require 'pathname' | |
| 4 4 |  | 
| 5 5 | 
             
            module Spellr
         | 
| 6 6 | 
             
              class File < Pathname
         | 
| 7 | 
            -
                def self.wrap(file)
         | 
| 8 | 
            -
                  file.is_a?(Spellr::File) ? file : Spellr::File.new(file)
         | 
| 9 | 
            -
                end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                # don't use FastIgnore shebang handling
         | 
| 12 | 
            -
                # because i use lots of different FastIgnore instances and each would to open the files.
         | 
| 13 | 
            -
                def hashbang
         | 
| 14 | 
            -
                  @hashbang ||= begin
         | 
| 15 | 
            -
                    return if extname != ''
         | 
| 16 | 
            -
                    return unless first_line&.start_with?('#!')
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                    first_line
         | 
| 19 | 
            -
                  end
         | 
| 20 | 
            -
                end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                def first_line
         | 
| 23 | 
            -
                  @first_line ||= each_line.first
         | 
| 24 | 
            -
                end
         | 
| 25 | 
            -
             | 
| 26 7 | 
             
                def relative_path
         | 
| 27 8 | 
             
                  @relative_path ||= relative_path_from(Spellr.pwd)
         | 
| 28 9 | 
             
                end
         | 
| @@ -34,6 +15,24 @@ module Spellr | |
| 34 15 | 
             
                  end
         | 
| 35 16 | 
             
                end
         | 
| 36 17 |  | 
| 18 | 
            +
                # the bulk of this method is copied from fast_ignore
         | 
| 19 | 
            +
                def first_line # rubocop:disable Metrics/MethodLength
         | 
| 20 | 
            +
                  return @first_line if defined?(@first_line)
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  @first_line = nil
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  file = ::File.new(to_s)
         | 
| 25 | 
            +
                  @first_line = file.sysread(25)
         | 
| 26 | 
            +
                  @first_line += file.sysread(50) until @first_line.include?("\n")
         | 
| 27 | 
            +
                  file.close
         | 
| 28 | 
            +
                  @first_line
         | 
| 29 | 
            +
                rescue ::EOFError, ::SystemCallError
         | 
| 30 | 
            +
                  # :nocov:
         | 
| 31 | 
            +
                  file&.close
         | 
| 32 | 
            +
                  # :nocov:
         | 
| 33 | 
            +
                  @first_line
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 37 36 | 
             
                def read_write
         | 
| 38 37 | 
             
                  write(yield read)
         | 
| 39 38 | 
             
                end
         | 
    
        data/lib/spellr/file_list.rb
    CHANGED
    
    | @@ -26,11 +26,20 @@ module Spellr | |
| 26 26 |  | 
| 27 27 | 
             
                private
         | 
| 28 28 |  | 
| 29 | 
            +
                def configured_rules
         | 
| 30 | 
            +
                  return { gitignore: false } if Spellr.config.suppress_file_rules
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  {
         | 
| 33 | 
            +
                    ignore_rules: Spellr.config.excludes,
         | 
| 34 | 
            +
                    include_rules: Spellr.config.includes
         | 
| 35 | 
            +
                  }
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 29 38 | 
             
                def fast_ignore # rubocop:disable Metrics/MethodLength
         | 
| 30 39 | 
             
                  FastIgnore.new(
         | 
| 31 | 
            -
                     | 
| 32 | 
            -
                    include_rules: Spellr.config.includes,
         | 
| 40 | 
            +
                    **configured_rules,
         | 
| 33 41 | 
             
                    argv_rules: @patterns,
         | 
| 42 | 
            +
                    follow_symlinks: true,
         | 
| 34 43 | 
             
                    root: Spellr.pwd_s
         | 
| 35 44 | 
             
                  )
         | 
| 36 45 | 
             
                end
         | 
    
        data/lib/spellr/interactive.rb
    CHANGED
    
    | @@ -58,7 +58,7 @@ module Spellr | |
| 58 58 | 
             
                  Process.clock_gettime(Process::CLOCK_MONOTONIC)
         | 
| 59 59 | 
             
                end
         | 
| 60 60 |  | 
| 61 | 
            -
                def stdin_getch(legal_chars) # rubocop:disable Metrics/MethodLength | 
| 61 | 
            +
                def stdin_getch(legal_chars) # rubocop:disable Metrics/MethodLength
         | 
| 62 62 | 
             
                  choice = output.stdin.getch
         | 
| 63 63 |  | 
| 64 64 | 
             
                  if legal_chars.include?(choice)
         | 
| @@ -13,10 +13,7 @@ class NaiveBayes | |
| 13 13 |  | 
| 14 14 | 
             
              YAML_PATH = File.join(__dir__, 'data.yml')
         | 
| 15 15 |  | 
| 16 | 
            -
              attr_reader :feature_set
         | 
| 17 | 
            -
              attr_reader :num_classes
         | 
| 18 | 
            -
              attr_reader :classes
         | 
| 19 | 
            -
              attr_reader :features
         | 
| 16 | 
            +
              attr_reader :feature_set, :num_classes, :classes, :features
         | 
| 20 17 |  | 
| 21 18 | 
             
              def initialize(path = YAML_PATH)
         | 
| 22 19 | 
             
                load_from_yaml(path)
         | 
    
        data/lib/spellr/language.rb
    CHANGED
    
    | @@ -7,17 +7,12 @@ require 'fast_ignore' | |
| 7 7 |  | 
| 8 8 | 
             
            module Spellr
         | 
| 9 9 | 
             
              class Language
         | 
| 10 | 
            -
                attr_reader :name
         | 
| 11 | 
            -
                attr_reader :key
         | 
| 10 | 
            +
                attr_reader :name, :key
         | 
| 12 11 |  | 
| 13 | 
            -
                def initialize(name, key: name[0], includes: [], hashbangs: [], locale: [], addable: true) # rubocop:disable Metrics/ParameterLists | 
| 12 | 
            +
                def initialize(name, key: name[0], includes: [], hashbangs: [], locale: [], addable: true) # rubocop:disable Metrics/ParameterLists
         | 
| 14 13 | 
             
                  @name = name
         | 
| 15 14 | 
             
                  @key = key
         | 
| 16 | 
            -
                  @includes = includes
         | 
| 17 | 
            -
                  @hashbangs = hashbangs
         | 
| 18 | 
            -
                  @hashbang_pattern = unless hashbangs.empty?
         | 
| 19 | 
            -
                    /\A#!.*\b(?:#{hashbangs.map { |s| Regexp.escape(s) }.join('|')})\b/
         | 
| 20 | 
            -
                  end
         | 
| 15 | 
            +
                  @includes = includes + hashbangs.map { |h| "#!:#{h}" }
         | 
| 21 16 | 
             
                  @locales = Array(locale)
         | 
| 22 17 | 
             
                  @addable = addable
         | 
| 23 18 | 
             
                end
         | 
| @@ -26,10 +21,6 @@ module Spellr | |
| 26 21 | 
             
                  @addable
         | 
| 27 22 | 
             
                end
         | 
| 28 23 |  | 
| 29 | 
            -
                def matches?(file)
         | 
| 30 | 
            -
                  matches_includes?(file) || matches_hashbangs?(file)
         | 
| 31 | 
            -
                end
         | 
| 32 | 
            -
             | 
| 33 24 | 
             
                def wordlists
         | 
| 34 25 | 
             
                  default_wordlists.select(&:exist?)
         | 
| 35 26 | 
             
                end
         | 
| @@ -41,24 +32,18 @@ module Spellr | |
| 41 32 | 
             
                  )
         | 
| 42 33 | 
             
                end
         | 
| 43 34 |  | 
| 44 | 
            -
                 | 
| 45 | 
            -
             | 
| 46 | 
            -
                def matches_hashbangs?(file)
         | 
| 47 | 
            -
                  return @includes.empty? unless @hashbang_pattern
         | 
| 48 | 
            -
             | 
| 49 | 
            -
                  file = Spellr::File.wrap(file)
         | 
| 50 | 
            -
                  return unless file.hashbang
         | 
| 35 | 
            +
                def matches?(file)
         | 
| 36 | 
            +
                  return true if @includes.empty?
         | 
| 51 37 |  | 
| 52 | 
            -
                   | 
| 38 | 
            +
                  fast_ignore.allowed?(file.to_s, directory: false, content: file.first_line)
         | 
| 53 39 | 
             
                end
         | 
| 54 40 |  | 
| 55 | 
            -
                 | 
| 56 | 
            -
                  return @hashbangs.empty? if @includes.empty?
         | 
| 41 | 
            +
                private
         | 
| 57 42 |  | 
| 43 | 
            +
                def fast_ignore
         | 
| 58 44 | 
             
                  @fast_ignore ||= FastIgnore.new(
         | 
| 59 45 | 
             
                    include_rules: @includes, gitignore: false, root: Spellr.pwd_s
         | 
| 60 46 | 
             
                  )
         | 
| 61 | 
            -
                  @fast_ignore.allowed?(file.to_s)
         | 
| 62 47 | 
             
                end
         | 
| 63 48 |  | 
| 64 49 | 
             
                def gem_wordlist
         | 
    
        data/lib/spellr/line_location.rb
    CHANGED
    
    | @@ -4,27 +4,22 @@ require_relative 'file' | |
| 4 4 |  | 
| 5 5 | 
             
            module Spellr
         | 
| 6 6 | 
             
              class LineLocation
         | 
| 7 | 
            -
                attr_reader :line_number
         | 
| 8 | 
            -
                attr_reader :char_offset
         | 
| 9 | 
            -
                attr_reader :byte_offset
         | 
| 7 | 
            +
                attr_reader :line_number, :char_offset, :byte_offset, :file
         | 
| 10 8 |  | 
| 11 | 
            -
                def initialize( | 
| 12 | 
            -
                   | 
| 9 | 
            +
                def initialize(
         | 
| 10 | 
            +
                  file = ::Spellr::File.new('[string]'),
         | 
| 11 | 
            +
                  line_number = 1,
         | 
| 12 | 
            +
                  char_offset: 0,
         | 
| 13 | 
            +
                  byte_offset: 0
         | 
| 14 | 
            +
                )
         | 
| 15 | 
            +
                  @file = file
         | 
| 13 16 | 
             
                  @line_number = line_number
         | 
| 14 17 | 
             
                  @char_offset = char_offset
         | 
| 15 18 | 
             
                  @byte_offset = byte_offset
         | 
| 16 19 | 
             
                end
         | 
| 17 20 |  | 
| 18 21 | 
             
                def to_s
         | 
| 19 | 
            -
                  "#{ | 
| 20 | 
            -
                end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                def file_relative_path
         | 
| 23 | 
            -
                  file.relative_path
         | 
| 24 | 
            -
                end
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                def file
         | 
| 27 | 
            -
                  @file ||= Spellr::File.wrap(@filename)
         | 
| 22 | 
            +
                  "#{file.relative_path}:#{line_number}"
         | 
| 28 23 | 
             
                end
         | 
| 29 24 | 
             
              end
         | 
| 30 25 | 
             
            end
         | 
| @@ -16,7 +16,7 @@ module Spellr | |
| 16 16 | 
             
                  @stderr ||= StringIO.new
         | 
| 17 17 | 
             
                end
         | 
| 18 18 |  | 
| 19 | 
            -
                def marshal_dump # rubocop:disable Metrics/MethodLength
         | 
| 19 | 
            +
                def marshal_dump # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
         | 
| 20 20 | 
             
                  l_exit_code = @exit_code if defined?(@exit_code)
         | 
| 21 21 | 
             
                  l_counts = @counts if defined?(@counts)
         | 
| 22 22 | 
             
                  l_stdin = @stdin if defined?(@stdin)
         | 
    
        data/lib/spellr/token_regexps.rb
    CHANGED
    
    | @@ -39,7 +39,7 @@ module Spellr | |
| 39 39 | 
             
                # literal \ so that i can match on domains in regexps. no-one cares but me.
         | 
| 40 40 | 
             
                URL_HOSTNAME = /(?:[[:alnum:]\-\\]+(?:\.[[:alnum:]\-\\]+)+|localhost|#{URL_IP_ADDRESS})/.freeze
         | 
| 41 41 | 
             
                URL_PORT = /:\d+/.freeze
         | 
| 42 | 
            -
                URL_PATH = %r{/(?:[[:alnum:] | 
| 42 | 
            +
                URL_PATH = %r{/(?:[[:alnum:]=@!$&~\-/._\\]|%\h{2})+}.freeze
         | 
| 43 43 | 
             
                URL_QUERY = %r{\?(?:[[:alnum:]=!$\-/.\\]|%\h{2})+(?:&(?:[[:alnum:]=!$\-/.\\]|%\h{2})+)*}.freeze
         | 
| 44 44 | 
             
                URL_FRAGMENT = %r{#(?:[[:alnum:]=!$&\-/.\\]|%\h{2})+}.freeze
         | 
| 45 45 |  | 
| @@ -98,5 +98,6 @@ module Spellr | |
| 98 98 |  | 
| 99 99 | 
             
                SPELLR_DISABLE_RE = /spellr:disable/.freeze
         | 
| 100 100 | 
             
                SPELLR_ENABLE_RE = /spellr:enable/.freeze
         | 
| 101 | 
            +
                SPELLR_LINE_DISABLE_RE = /spellr:disable[-:]line/.freeze
         | 
| 101 102 | 
             
              end
         | 
| 102 103 | 
             
            end
         | 
    
        data/lib/spellr/tokenizer.rb
    CHANGED
    
    | @@ -7,9 +7,10 @@ require_relative 'line_tokenizer' | |
| 7 7 |  | 
| 8 8 | 
             
            module Spellr
         | 
| 9 9 | 
             
              class Tokenizer
         | 
| 10 | 
            -
                attr_reader :file
         | 
| 10 | 
            +
                attr_reader :file, :filename
         | 
| 11 11 |  | 
| 12 12 | 
             
                def initialize(file, start_at: nil, skip_key: true)
         | 
| 13 | 
            +
                  @filename = file
         | 
| 13 14 | 
             
                  @start_at = start_at || ColumnLocation.new(line_location: LineLocation.new(file))
         | 
| 14 15 | 
             
                  @file = file.is_a?(StringIO) || file.is_a?(IO) ? file : ::File.new(file)
         | 
| 15 16 | 
             
                  @file.pos = @start_at.line_location.byte_offset
         | 
| @@ -27,7 +28,7 @@ module Spellr | |
| 27 28 |  | 
| 28 29 | 
             
                def each_term(&block)
         | 
| 29 30 | 
             
                  file.each_line do |line|
         | 
| 30 | 
            -
                    prepare_tokenizer_for_line(line) | 
| 31 | 
            +
                    prepare_tokenizer_for_line(line)&.each_term(&block)
         | 
| 31 32 | 
             
                  end
         | 
| 32 33 | 
             
                ensure
         | 
| 33 34 | 
             
                  file.close
         | 
| @@ -35,7 +36,7 @@ module Spellr | |
| 35 36 |  | 
| 36 37 | 
             
                def each_token(skip_term_proc: nil) # rubocop:disable Metrics/MethodLength
         | 
| 37 38 | 
             
                  each_line_with_stats do |line, line_number, char_offset, byte_offset|
         | 
| 38 | 
            -
                    prepare_tokenizer_for_line(line) | 
| 39 | 
            +
                    prepare_tokenizer_for_line(line)&.each_token(skip_term_proc: skip_term_proc) do |token|
         | 
| 39 40 | 
             
                      token.line = prepare_line(line, line_number, char_offset, byte_offset)
         | 
| 40 41 |  | 
| 41 42 | 
             
                      yield token
         | 
| @@ -45,7 +46,7 @@ module Spellr | |
| 45 46 |  | 
| 46 47 | 
             
                def prepare_line(line, line_number, char_offset, byte_offset)
         | 
| 47 48 | 
             
                  line_location = LineLocation.new(
         | 
| 48 | 
            -
                     | 
| 49 | 
            +
                    filename, line_number, char_offset: char_offset, byte_offset: byte_offset
         | 
| 49 50 | 
             
                  )
         | 
| 50 51 | 
             
                  column_location = ColumnLocation.new(line_location: line_location)
         | 
| 51 52 | 
             
                  Token.new(line, location: column_location)
         | 
| @@ -74,6 +75,8 @@ module Spellr | |
| 74 75 | 
             
                attr_reader :line_tokenizer
         | 
| 75 76 |  | 
| 76 77 | 
             
                def prepare_tokenizer_for_line(line)
         | 
| 78 | 
            +
                  return if line.match?(Spellr::TokenRegexps::SPELLR_LINE_DISABLE_RE)
         | 
| 79 | 
            +
             | 
| 77 80 | 
             
                  line_tokenizer.string = line
         | 
| 78 81 | 
             
                  line_tokenizer.pos = 0
         | 
| 79 82 | 
             
                  line_tokenizer
         | 
    
        data/lib/spellr/version.rb
    CHANGED
    
    
    
        data/spellr.gemspec
    CHANGED
    
    | @@ -14,6 +14,12 @@ Gem::Specification.new do |spec| | |
| 14 14 | 
             
              spec.homepage = 'http://github.com/robotdana/spellr'
         | 
| 15 15 | 
             
              spec.license = 'MIT'
         | 
| 16 16 |  | 
| 17 | 
            +
              if spec.respond_to?(:metadata)
         | 
| 18 | 
            +
                spec.metadata['homepage_uri'] = spec.homepage
         | 
| 19 | 
            +
                spec.metadata['source_code_uri'] = spec.homepage
         | 
| 20 | 
            +
                spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/main/CHANGELOG.md"
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 17 23 | 
             
              spec.required_ruby_version = '>= 2.4'
         | 
| 18 24 |  | 
| 19 25 | 
             
              spec.files = Dir.glob('{lib,exe,wordlists}/**/{*,.*}') + %w{
         | 
| @@ -28,19 +34,19 @@ Gem::Specification.new do |spec| | |
| 28 34 | 
             
              spec.require_paths = ['lib']
         | 
| 29 35 |  | 
| 30 36 | 
             
              spec.add_development_dependency 'bundler', '~> 2.0'
         | 
| 31 | 
            -
              spec.add_development_dependency 'leftovers', '>= 0. | 
| 37 | 
            +
              spec.add_development_dependency 'leftovers', '>= 0.4.0'
         | 
| 32 38 | 
             
              spec.add_development_dependency 'mime-types', '~> 3.3.1'
         | 
| 33 39 | 
             
              spec.add_development_dependency 'nokogiri'
         | 
| 34 40 | 
             
              spec.add_development_dependency 'pry'
         | 
| 35 41 | 
             
              spec.add_development_dependency 'rake', '>= 12.3.3'
         | 
| 36 42 | 
             
              spec.add_development_dependency 'rspec', '~> 3.0'
         | 
| 37 | 
            -
              spec.add_development_dependency 'rubocop'
         | 
| 38 | 
            -
              spec.add_development_dependency 'rubocop-rspec'
         | 
| 43 | 
            +
              spec.add_development_dependency 'rubocop', '~> 0.93.1'
         | 
| 44 | 
            +
              spec.add_development_dependency 'rubocop-rspec', '~> 1.44.1'
         | 
| 39 45 | 
             
              spec.add_development_dependency 'simplecov', '~> 0.18.5'
         | 
| 40 46 | 
             
              spec.add_development_dependency 'simplecov-console'
         | 
| 41 47 | 
             
              spec.add_development_dependency 'tty_string', '>= 0.2.1'
         | 
| 42 48 | 
             
              spec.add_development_dependency 'webmock', '~> 3.8'
         | 
| 43 49 |  | 
| 44 | 
            -
              spec.add_dependency 'fast_ignore', '>= 0. | 
| 50 | 
            +
              spec.add_dependency 'fast_ignore', '>= 0.11.0'
         | 
| 45 51 | 
             
              spec.add_dependency 'parallel', '~> 1.0'
         | 
| 46 52 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: spellr
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.8. | 
| 4 | 
            +
              version: 0.8.7
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Dana Sherson
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020- | 
| 11 | 
            +
            date: 2020-11-19 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -30,14 +30,14 @@ dependencies: | |
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - ">="
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: 0. | 
| 33 | 
            +
                    version: 0.4.0
         | 
| 34 34 | 
             
              type: :development
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: 0. | 
| 40 | 
            +
                    version: 0.4.0
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: mime-types
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -112,30 +112,30 @@ dependencies: | |
| 112 112 | 
             
              name: rubocop
         | 
| 113 113 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 114 | 
             
                requirements:
         | 
| 115 | 
            -
                - - " | 
| 115 | 
            +
                - - "~>"
         | 
| 116 116 | 
             
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            -
                    version:  | 
| 117 | 
            +
                    version: 0.93.1
         | 
| 118 118 | 
             
              type: :development
         | 
| 119 119 | 
             
              prerelease: false
         | 
| 120 120 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 121 | 
             
                requirements:
         | 
| 122 | 
            -
                - - " | 
| 122 | 
            +
                - - "~>"
         | 
| 123 123 | 
             
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            -
                    version:  | 
| 124 | 
            +
                    version: 0.93.1
         | 
| 125 125 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 126 126 | 
             
              name: rubocop-rspec
         | 
| 127 127 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 128 128 | 
             
                requirements:
         | 
| 129 | 
            -
                - - " | 
| 129 | 
            +
                - - "~>"
         | 
| 130 130 | 
             
                  - !ruby/object:Gem::Version
         | 
| 131 | 
            -
                    version:  | 
| 131 | 
            +
                    version: 1.44.1
         | 
| 132 132 | 
             
              type: :development
         | 
| 133 133 | 
             
              prerelease: false
         | 
| 134 134 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 135 135 | 
             
                requirements:
         | 
| 136 | 
            -
                - - " | 
| 136 | 
            +
                - - "~>"
         | 
| 137 137 | 
             
                  - !ruby/object:Gem::Version
         | 
| 138 | 
            -
                    version:  | 
| 138 | 
            +
                    version: 1.44.1
         | 
| 139 139 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 140 140 | 
             
              name: simplecov
         | 
| 141 141 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -198,14 +198,14 @@ dependencies: | |
| 198 198 | 
             
                requirements:
         | 
| 199 199 | 
             
                - - ">="
         | 
| 200 200 | 
             
                  - !ruby/object:Gem::Version
         | 
| 201 | 
            -
                    version: 0. | 
| 201 | 
            +
                    version: 0.11.0
         | 
| 202 202 | 
             
              type: :runtime
         | 
| 203 203 | 
             
              prerelease: false
         | 
| 204 204 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 205 205 | 
             
                requirements:
         | 
| 206 206 | 
             
                - - ">="
         | 
| 207 207 | 
             
                  - !ruby/object:Gem::Version
         | 
| 208 | 
            -
                    version: 0. | 
| 208 | 
            +
                    version: 0.11.0
         | 
| 209 209 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 210 210 | 
             
              name: parallel
         | 
| 211 211 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -299,7 +299,10 @@ files: | |
| 299 299 | 
             
            homepage: http://github.com/robotdana/spellr
         | 
| 300 300 | 
             
            licenses:
         | 
| 301 301 | 
             
            - MIT
         | 
| 302 | 
            -
            metadata: | 
| 302 | 
            +
            metadata:
         | 
| 303 | 
            +
              homepage_uri: http://github.com/robotdana/spellr
         | 
| 304 | 
            +
              source_code_uri: http://github.com/robotdana/spellr
         | 
| 305 | 
            +
              changelog_uri: http://github.com/robotdana/spellr/blob/main/CHANGELOG.md
         | 
| 303 306 | 
             
            post_install_message: 
         | 
| 304 307 | 
             
            rdoc_options: []
         | 
| 305 308 | 
             
            require_paths:
         | 
| @@ -315,7 +318,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 315 318 | 
             
                - !ruby/object:Gem::Version
         | 
| 316 319 | 
             
                  version: '0'
         | 
| 317 320 | 
             
            requirements: []
         | 
| 318 | 
            -
            rubygems_version: 3.0. | 
| 321 | 
            +
            rubygems_version: 3.0.8
         | 
| 319 322 | 
             
            signing_key: 
         | 
| 320 323 | 
             
            specification_version: 4
         | 
| 321 324 | 
             
            summary: Spell check your source code
         |