diff --git a/.gitignore b/.gitignore index 074167a91b..04bdd5804f 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ vendor .env bin .jekyll* +yaspeller_report.json diff --git a/Rakefile b/Rakefile index e2d9b20cb3..1db16698b4 100644 --- a/Rakefile +++ b/Rakefile @@ -127,6 +127,28 @@ namespace :check do require_relative "lib/markup_checker" MarkupChecker.new.check end + + desc "Validate spelling (required: `npm i -g yaspeller`, use: `rake 'check:spelling[ru,json]'`)" + task :spelling, [:lang, :format] do |t, args| + args.with_defaults(format: 'console') + dictionary = File.expand_path("../lib/spelling/#{args[:lang]}/dictionary.json", __FILE__) + # initial dictionary generated by https://github.com/razum2um/yaspeller-dictionary-builder + opts = File.exists?(dictionary) ? "--dictionary #{dictionary}" : "" + system <<~SH.gsub!(/[[:space:]]+/, " ").strip + yaspeller + --report #{args[:format]} + --ignore-text "'.*" + --ignore-latin + --ignore-uppercase + --ignore-urls + --only-errors + --lang #{args[:lang]} + --file-extensions ".md" + --ignore-digits + #{opts} + #{args[:lang]} + SH + end end require "rake/testtask" diff --git a/lib/spelling/ru/dictionary.json b/lib/spelling/ru/dictionary.json new file mode 100644 index 0000000000..f285ba1a6d --- /dev/null +++ b/lib/spelling/ru/dictionary.json @@ -0,0 +1,137 @@ +[ + "[аА]ттрибут(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[бБ]аг(а|ам|ами|ах|е|и|ов|ом|у)?", + "[бБ]агрепорт(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[бБ]агфикс(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[бБ]ектрейс(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[бБ]енчмаркинг(а|ам|ами|ах|е|и|ов|ом|у)?", + "[бБ]илд(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[бБ]инарник(а|ам|ами|ах|е|и|ов|ом|у)?", + "[бБ]итмап(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[бБ]риф(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[бБ]экпортироват(ей|и|ь|ью|ям|ями|ях)", + "[бБ]эктрейс(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[вВ]ебсайт(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[вВ]ерсионировани(е|ем|и|ю|я)", + "[вВ]ерсионн(ая|ого|ой|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[вВ]зломан(ого|ое|ом|ому|ые|ым|ыми|ых)", + "[вВ]озникновни(е|ем|и|й|ю|я|ям|ями|ях)", + "[вВ]оркфлоу", + "[дД]ебаг(а|ам|ами|ах|е|и|ов|ом|у)?", + "[дД]есктоп(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[дД]ефолтн(ая|ого|ой|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[дД]женерик(а|ам|ами|ах|е|и|ов|ом|у)?", + "[дД]зайн(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[дД]ифф(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[иИ]деом(а|е|ой|у|ы)", + "[иИ]нстанс(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[йЙ]ен(а|ам|ами|ах|е|ой|у|ы)?", + "[кК]оммандн(ая|ого|ой|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[кК]оммит(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[кК]оммитер(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[кК]оммиттер(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[кК]омьюнити", + "[кК]онтрибутор(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[кК]онтрибьютор(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[кК]онфереци(ей|и|й|ю|я|ям|ями|ях)", + "[лЛ]ексер(а|ам|ами|ах|е|ой|у|ы)?", + "[лЛ]етоисчеслени(е|ем|и|й|ю|я|ям|ями|ях)", + "[лЛ]юд(ей|и|ь|ью|ям|ями|ях)", + "[мМ]анкипатч(а|ам|ами|ах|е|ей|ем|и|у)?", + "[мМ]ат(ец|ца|цам|цами|цах|це|цев|цем|цу|цы)", + "[мМ]атц", + "[мМ]ацу(е|ем|й|ю|я)", + "[мМ]ежсайтов(ая|ого|ой|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[мМ]ентейнер(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[мМ]енторств(а|ам|ами|ах|е|о|ом|у)?", + "[нН]евалидном(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[нН]едоверенн(ая|ого|ой|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[нН]епойман(а|е|ой|у|ы)", + "[нН]еприсоединенн(ая|ого|ой|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[нН]есимвол(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[нН]есимвольн(ая|ого|ой|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[нН]есовестимост(ей|и|ь|ью|ям|ями|ях)", + "[нН]изкоуровн(его|ей|ем|ему|ие|ий|им|ими|их|юю|яя)", + "[нН]од(а|ам|ами|ах|е|ой|у|ы)?", + "[оО]колорубиево(е|ев|ем|и|й|ю|я|ям|ями|ях)", + "[оО]пенсорсн(ая|ого|ой|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[оО]тнаследованн(ого|ом|ому|ые|ый|ым|ыми|ых)", + "[пП]арсит(а|ам|ами|ах|е|о|ом|у)?", + "[пП]атченн(ая|ого|ой|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[пП]атчинг(а|ам|ами|ах|е|и|ов|ом|у)?", + "[пП]атчлевел(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[пП]ереподпис(ей|и|ь|ью|ям|ями|ях)", + "[пП]ереподписанн(ого|ом|ому|ые|ый|ым|ыми|ых)", + "[пП]ересбор(ка|кам|ками|ках|ке|ки|кой|ку|ок)", + "[пП]еречислител(е|ей|ем|и|ь|ю|я|ям|ями|ях)", + "[пП]латфортм(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[пП]о-умолчани(е|ем|и|ю|я)", + "[пП]одделан(ая|ого|ой|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[пП]одерж(ек|ка|кам|ками|ках|ке|ки|кой|ку)", + "[пП]околенческ(ая|ие|ий|им|ими|их|ого|ой|ом|ому|ую)", + "[пП]ортировани(е|ем|и|ю|я)", + "[пП]оследстиви(ей|и|й|ю|я|ям|ями|ях)", + "[пП]ревью", + "[пП]редзаказ(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[пП]реднастроенн(ого|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[пП]рекрастн(ого|ое|ом|ому|ые|ым|ыми|ых)", + "[пП]ререлиз(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[пП]родакшен(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[пП]ропатчен(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[пП]ропатченн(ая|ой|ую|ые|ым|ыми|ых)", + "[пП]улл(а|ам|ами|ах|е|ой|у|ы)?", + "[рР]азсказчик(а|ам|ами|ах|е|и|ов|ом|у)?", + "[рР]актор(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[рР]антайм(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[рР]еквест(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[рР]елизим(а|ам|ами|ах|е|ой|у|ы)?", + "[рР]епозитари(ей|и|й|ю|я|ям|ями|ях)", + "[рР]ефакторинг(а|ам|ами|ах|е|и|ов|ом|у)?", + "[рР]убист(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[сС]амоорганизованн(ого|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[сС]генеренн(ая|ой|ую|ые|ым|ыми|ых)", + "[сС]ериализаци(ей|и|й|ю|я|ям|ями|ях)", + "[сС]криптинг(а|ам|ами|ах|е|и|ов|ом|у)?", + "[сС]криптов(ая|ого|ой|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[сС]одател(ей|и|ь|ью|ям|ями|ях)", + "[сС]оучередител(е|ей|ем|и|ь|ю|я|ям|ями|ях)", + "[тТ]айп(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[тТ]айп(ей|и|ь|ью|ям|ями|ях)", + "[тТ]айпе(е|ей|и|й|ю|я|ям|ями|ях)", + "[тТ]виттер(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[тТ]икет(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[тТ]окен(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[тТ]ранк(а|ам|ами|ах|е|и|ов|ом|у)?", + "[тТ]улкит(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[уУ]зявимост(ей|и|ь|ью|ям|ями|ях)", + "[фФ]идбек(а|ам|ами|ах|е|и|ов|ом|у)?", + "[фФ]иксим(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[фФ]ич(а|ам|ами|ах|е|ей|и|у)?", + "[фФ]орк(а|ам|ами|ах|е|и|ов|ом|у)?", + "[фФ]реймворк(а|ам|ами|ах|е|и|ов|ом|у)?", + "[хХ]ак(а|ам|ами|ах|е|и|ов|ом|у)?", + "[хХ]акатон(а|ам|ами|ах|е|ов|ом|у)?", + "[чЧ]екер(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[эЭ]ксперементальн(ая|ого|ой|ом|ому|ую|ые|ый|ым|ыми|ых)", + "[эЭ]ксплоит(а|ам|ами|ах|е|ов|ом|у|ы)?", + "[эЭ]нтерпрайз(ен|на|нам|нами|нах|не|но|ном|ну)", + "[юЮ]кихиро", + "бессмысленен", + "вмержили", + "дефрагментировать", + "зарелизился", + "коммитить", + "неа", + "НеСимволы", + "парсить", + "патчить", + "перегенерировать", + "пересобирается", + "проспонсировано", + "разыменовывается", + "релизиться", + "репортится", + "тайпет", + "хмм", + "эксплоит" +]