diff --git a/guides/rails_guides/generator.rb b/guides/rails_guides/generator.rb index 50cb05f5644f3..4523b6fd04aee 100644 --- a/guides/rails_guides/generator.rb +++ b/guides/rails_guides/generator.rb @@ -10,7 +10,6 @@ require "rails_guides/markdown" require "rails_guides/helpers" -require "rails_guides/levenshtein" module RailsGuides class Generator @@ -206,9 +205,7 @@ def check_fragment_identifiers(html, anchors) html.scan(/ Levenshtein.distance(fragment_identifier, b) - } + guess = DidYouMean::SpellChecker.new(dictionary: anchors).correct(fragment_identifier).first puts "*** BROKEN LINK: ##{fragment_identifier}, perhaps you meant ##{guess}." end end diff --git a/guides/rails_guides/levenshtein.rb b/guides/rails_guides/levenshtein.rb deleted file mode 100644 index 2213ef754d368..0000000000000 --- a/guides/rails_guides/levenshtein.rb +++ /dev/null @@ -1,44 +0,0 @@ -# frozen_string_literal: true - -module RailsGuides - module Levenshtein - # This code is based directly on the Text gem implementation. - # Copyright (c) 2006-2013 Paul Battley, Michael Neumann, Tim Fletcher. - # - # Returns a value representing the "cost" of transforming str1 into str2 - def self.distance(str1, str2) - s = str1 - t = str2 - n = s.length - m = t.length - - return m if 0 == n - return n if 0 == m - - d = (0..m).to_a - x = nil - - # avoid duplicating an enumerable object in the loop - str2_codepoint_enumerable = str2.each_codepoint - - str1.each_codepoint.with_index do |char1, i| - e = i + 1 - - str2_codepoint_enumerable.with_index do |char2, j| - cost = (char1 == char2) ? 0 : 1 - x = [ - d[j + 1] + 1, # insertion - e + 1, # deletion - d[j] + cost # substitution - ].min - d[j] = e - e = x - end - - d[m] = x - end - - x - end - end -end