aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/golangci
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2025-01-22 16:07:17 +0100
committerTaras Madan <tarasmadan@google.com>2025-01-23 10:42:36 +0000
commit7b4377ad9d8a7205416df8d6217ef2b010f89481 (patch)
treee6fec4fd12ff807a16d847923f501075bf71d16c /vendor/github.com/golangci
parent475a4c203afb8b7d3af51c4fd32bb170ff32a45e (diff)
vendor: delete
Diffstat (limited to 'vendor/github.com/golangci')
-rw-r--r--vendor/github.com/golangci/dupl/.travis.yml5
-rw-r--r--vendor/github.com/golangci/dupl/LICENSE21
-rw-r--r--vendor/github.com/golangci/dupl/README.md63
-rw-r--r--vendor/github.com/golangci/dupl/job/buildtree.go22
-rw-r--r--vendor/github.com/golangci/dupl/job/parse.go36
-rw-r--r--vendor/github.com/golangci/dupl/main.go148
-rw-r--r--vendor/github.com/golangci/dupl/printer/html.go120
-rw-r--r--vendor/github.com/golangci/dupl/printer/plumbing.go50
-rw-r--r--vendor/github.com/golangci/dupl/printer/printer.go11
-rw-r--r--vendor/github.com/golangci/dupl/printer/text.go100
-rw-r--r--vendor/github.com/golangci/dupl/suffixtree/dupl.go98
-rw-r--r--vendor/github.com/golangci/dupl/suffixtree/suffixtree.go216
-rw-r--r--vendor/github.com/golangci/dupl/syntax/golang/golang.go392
-rw-r--r--vendor/github.com/golangci/dupl/syntax/syntax.go175
-rw-r--r--vendor/github.com/golangci/go-printf-func-name/LICENSE22
-rw-r--r--vendor/github.com/golangci/go-printf-func-name/pkg/analyzer/analyzer.go74
-rw-r--r--vendor/github.com/golangci/gofmt/gofmt/LICENSE27
-rw-r--r--vendor/github.com/golangci/gofmt/gofmt/doc.go106
-rw-r--r--vendor/github.com/golangci/gofmt/gofmt/gofmt.go570
-rw-r--r--vendor/github.com/golangci/gofmt/gofmt/golangci.go100
-rw-r--r--vendor/github.com/golangci/gofmt/gofmt/internal.go183
-rw-r--r--vendor/github.com/golangci/gofmt/gofmt/internal/diff/diff.go261
-rw-r--r--vendor/github.com/golangci/gofmt/gofmt/readme.md16
-rw-r--r--vendor/github.com/golangci/gofmt/gofmt/rewrite.go309
-rw-r--r--vendor/github.com/golangci/gofmt/gofmt/simplify.go169
-rw-r--r--vendor/github.com/golangci/gofmt/goimports/LICENSE27
-rw-r--r--vendor/github.com/golangci/gofmt/goimports/goimports.go88
-rw-r--r--vendor/github.com/golangci/gofmt/goimports/golangci.go35
-rw-r--r--vendor/github.com/golangci/gofmt/goimports/readme.md10
-rw-r--r--vendor/github.com/golangci/golangci-lint/LICENSE674
-rw-r--r--vendor/github.com/golangci/golangci-lint/cmd/golangci-lint/main.go81
-rw-r--r--vendor/github.com/golangci/golangci-lint/cmd/golangci-lint/plugins.go3
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/cache/cache.go298
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/errorutil/errors.go23
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/LICENSE27
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/cache/cache.go663
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/cache/cache_gcil.go12
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/cache/default.go105
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/cache/default_gcil.go6
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/cache/hash.go192
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/cache/hash_gcil.go5
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/cache/prog.go428
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/cache/readme.md51
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap.go31
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap_other.go21
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap_unix.go36
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap_windows.go41
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/mmap/readme.md15
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/quoted/quoted.go129
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/quoted/readme.md13
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/robustio/readme.md11
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio.go53
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_darwin.go21
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_flaky.go91
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_other.go27
-rw-r--r--vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_windows.go30
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/cache.go83
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/config.go122
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/config_verify.go179
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/custom.go79
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/flagsets.go146
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/help.go142
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/internal/builder.go250
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/internal/configuration.go140
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/internal/imports.go69
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/internal/vibra.go59
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/linters.go107
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/root.go167
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/run.go690
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/commands/version.go102
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/config/config.go112
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/config/issues.go246
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/config/linters.go65
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/config/linters_settings.go1041
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/config/loader.go479
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/config/output.go117
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/config/run.go47
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/config/severity.go41
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/exitcodes/exitcodes.go32
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/fsutils/filecache.go65
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/fsutils/files.go33
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/fsutils/fsutils.go102
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/fsutils/linecache.go68
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/fsutils/path_unix.go8
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/fsutils/path_windows.go28
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/issue.go32
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/linter.go217
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/load/guard.go30
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/metalinter.go90
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors/errors.go56
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors/extract.go102
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors/parse.go54
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner.go334
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_action.go66
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_action_cache.go127
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_base.go370
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_loadingpackage.go517
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runners.go114
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runners_cache.go172
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/asasalint/asasalint.go31
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/asciicheck/asciicheck.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/bidichk/bidichk.go59
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/bodyclose/bodyclose.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/canonicalheader/canonicalheader.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/containedctx/containedctx.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/contextcheck/contextcheck.go22
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/copyloopvar/copyloopvar.go29
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/cyclop/cyclop.go37
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/decorder/decorder.go44
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/depguard/depguard.go50
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/dogsled/dogsled.go110
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/dupl/dupl.go96
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/dupword/dupword.go30
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/durationcheck/durationcheck.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/err113/err113.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/errcheck/errcheck.go271
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/errchkjson/errchkjson.go31
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/errname/errname.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/errorlint/errorlint.go54
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/exhaustive/exhaustive.go37
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/exhaustruct/exhaustruct.go30
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/exportloopref/exportloopref.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/fatcontext/fatcontext.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/forbidigo/forbidigo.go103
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/forcetypeassert/forcetypeassert.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/funlen/funlen.go75
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gci/gci.go250
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/ginkgolinter/ginkgolinter.go40
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gocheckcompilerdirectives/gocheckcompilerdirectives.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gochecknoglobals/gochecknoglobals.go26
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gochecknoinits/gochecknoinits.go75
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gochecksumtype/gochecksumtype.go82
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gocognit/gocognit.go80
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/goconst/goconst.go98
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gocritic/gocritic.go590
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gocyclo/gocyclo.go76
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/godot/godot.go101
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/godox/godox.go75
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gofmt/gofmt.go98
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gofumpt/gofumpt.go132
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/goheader/goheader.go115
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/goimports/goimports.go94
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gomoddirectives/gomoddirectives.go64
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gomodguard/gomodguard.go94
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/goprintffuncname/goprintffuncname.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gosec/gosec.go247
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gosimple/gosimple.go22
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/gosmopolitan/gosmopolitan.go32
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/govet/govet.go223
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/grouper/grouper.go34
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/iface/iface.go57
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/importas/importas.go67
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/inamedparam/inamedparam.go30
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/ineffassign/ineffassign.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/interfacebloat/interfacebloat.go29
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/commons.go6
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/diff.go264
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/staticcheck_common.go143
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/util.go33
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/intrange/intrange.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/ireturn/ireturn.go31
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/lll/lll.go157
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/loggercheck/loggercheck.go44
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/maintidx/maintidx.go30
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/makezero/makezero.go74
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/mirror/mirror.go70
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/misspell/misspell.go189
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/mnd/mnd.go42
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/musttag/musttag.go29
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/nakedret/nakedret.go25
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/nestif/nestif.go78
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/nilerr/nilerr.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/nilnil/nilnil.go31
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/nlreturn/nlreturn.go27
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/noctx/noctx.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/nolintlint/internal/README.md31
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/nolintlint/internal/nolintlint.go311
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/nolintlint/nolintlint.go104
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/nonamedreturns/nonamedreturns.go29
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/nosprintfhostport/nosprintfhostport.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/paralleltest/paralleltest.go34
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/perfsprint/perfsprint.go32
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/prealloc/prealloc.go65
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/predeclared/predeclared.go26
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/promlinter/promlinter.go77
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/protogetter/protogetter.go74
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/reassign/reassign.go32
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/recvcheck/recvcheck.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/revive/revive.go435
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/rowserrcheck/rowserrcheck.go25
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/sloglint/sloglint.go33
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/spancheck/spancheck.go33
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/sqlclosecheck/sqlclosecheck.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/staticcheck/staticcheck.go22
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/stylecheck/stylecheck.go31
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/tagalign/tagalign.go75
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/tagliatelle/tagliatelle.go35
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/tenv/tenv.go29
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/testableexamples/testableexamples.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/testifylint/testifylint.go51
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/testpackage/testpackage.go28
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/thelper/thelper.go81
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/tparallel/tparallel.go18
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/typecheck.go24
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/unconvert/unconvert.go62
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/unparam/unparam.go90
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/unused/unused.go112
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/usestdlibvars/usestdlibvars.go38
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/varnamelen/varnamelen.go46
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/wastedassign/wastedassign.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/whitespace/whitespace.go102
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/wrapcheck/wrapcheck.go36
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/wsl/wsl.go40
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/golinters/zerologlint/zerologlint.go19
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goutil/env.go63
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/goutil/version.go75
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/lint/context.go64
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/lint/linter/config.go181
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/lint/linter/context.go48
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/lint/linter/linter.go67
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/builder_linter.go856
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/builder_plugin_go.go136
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/builder_plugin_module.go85
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/manager.go313
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/validator.go120
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/lint/package.go283
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/lint/runner.go238
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/logutils/log.go31
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/logutils/logutils.go117
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/logutils/mock.go82
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/logutils/out.go11
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/logutils/stderr_log.go129
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/printers/checkstyle.go95
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/printers/codeclimate.go59
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/printers/githubaction.go52
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/printers/html.go156
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/printers/json.go38
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/printers/junitxml.go99
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/printers/printer.go145
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/printers/sarif.go117
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/printers/tab.go67
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/printers/teamcity.go122
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/printers/text.go94
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/report/data.go26
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/report/log.go64
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/issue.go98
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/autogenerated_exclude.go177
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/base_rule.go68
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/cgo.go59
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/diff.go84
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/exclude.go55
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/exclude_rules.go105
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/filename_unadjuster.go133
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/fixer.go260
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/identifier_marker.go154
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/invalid_issue.go60
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/issues.go69
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/max_from_linter.go55
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/max_per_file_from_linter.go73
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/max_same_issues.go79
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/nolint.go315
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/path_prefixer.go36
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/path_prettifier.go40
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/path_shortener.go39
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/processor.go13
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/severity.go116
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/skip_dirs.go172
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/skip_files.go59
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/sort_results.go148
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/source_code.go50
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/result/processors/uniq_by_line.go73
-rw-r--r--vendor/github.com/golangci/golangci-lint/pkg/timeutils/stopwatch.go138
-rw-r--r--vendor/github.com/golangci/misspell/.gitignore37
-rw-r--r--vendor/github.com/golangci/misspell/.golangci.yml107
-rw-r--r--vendor/github.com/golangci/misspell/.pre-commit-hooks.yaml8
-rw-r--r--vendor/github.com/golangci/misspell/Dockerfile35
-rw-r--r--vendor/github.com/golangci/misspell/LICENSE21
-rw-r--r--vendor/github.com/golangci/misspell/Makefile66
-rw-r--r--vendor/github.com/golangci/misspell/README.md401
-rw-r--r--vendor/github.com/golangci/misspell/RELEASE-HOWTO.md38
-rw-r--r--vendor/github.com/golangci/misspell/ascii.go60
-rw-r--r--vendor/github.com/golangci/misspell/case.go58
-rw-r--r--vendor/github.com/golangci/misspell/goreleaser.yml31
-rw-r--r--vendor/github.com/golangci/misspell/install-misspell.sh377
-rw-r--r--vendor/github.com/golangci/misspell/legal.go47
-rw-r--r--vendor/github.com/golangci/misspell/mime.go206
-rw-r--r--vendor/github.com/golangci/misspell/notwords.go102
-rw-r--r--vendor/github.com/golangci/misspell/replace.go245
-rw-r--r--vendor/github.com/golangci/misspell/stringreplacer.go336
-rw-r--r--vendor/github.com/golangci/misspell/stringreplacer_test.gox421
-rw-r--r--vendor/github.com/golangci/misspell/url.go18
-rw-r--r--vendor/github.com/golangci/misspell/words.go31194
-rw-r--r--vendor/github.com/golangci/modinfo/.gitignore1
-rw-r--r--vendor/github.com/golangci/modinfo/.golangci.yml157
-rw-r--r--vendor/github.com/golangci/modinfo/LICENSE674
-rw-r--r--vendor/github.com/golangci/modinfo/Makefile12
-rw-r--r--vendor/github.com/golangci/modinfo/module.go157
-rw-r--r--vendor/github.com/golangci/modinfo/readme.md73
-rw-r--r--vendor/github.com/golangci/plugin-module-register/LICENSE674
-rw-r--r--vendor/github.com/golangci/plugin-module-register/register/register.go73
-rw-r--r--vendor/github.com/golangci/revgrep/.gitignore1
-rw-r--r--vendor/github.com/golangci/revgrep/.golangci.yml80
-rw-r--r--vendor/github.com/golangci/revgrep/LICENSE201
-rw-r--r--vendor/github.com/golangci/revgrep/Makefile12
-rw-r--r--vendor/github.com/golangci/revgrep/README.md55
-rw-r--r--vendor/github.com/golangci/revgrep/revgrep.go483
-rw-r--r--vendor/github.com/golangci/unconvert/LICENSE27
-rw-r--r--vendor/github.com/golangci/unconvert/README.md6
-rw-r--r--vendor/github.com/golangci/unconvert/golangci.go78
-rw-r--r--vendor/github.com/golangci/unconvert/unconvert.go650
310 files changed, 0 insertions, 65516 deletions
diff --git a/vendor/github.com/golangci/dupl/.travis.yml b/vendor/github.com/golangci/dupl/.travis.yml
deleted file mode 100644
index 33de24c0f..000000000
--- a/vendor/github.com/golangci/dupl/.travis.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-language: go
-go:
- - 1.3
- - 1.8
- - 1.9
diff --git a/vendor/github.com/golangci/dupl/LICENSE b/vendor/github.com/golangci/dupl/LICENSE
deleted file mode 100644
index ab317d841..000000000
--- a/vendor/github.com/golangci/dupl/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Michal Bohuslávek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/github.com/golangci/dupl/README.md b/vendor/github.com/golangci/dupl/README.md
deleted file mode 100644
index f34901d7a..000000000
--- a/vendor/github.com/golangci/dupl/README.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# dupl [![Build Status](https://travis-ci.org/mibk/dupl.png)](https://travis-ci.org/mibk/dupl)
-
-**dupl** is a tool written in Go for finding code clones. So far it can find clones only
-in the Go source files. The method uses suffix tree for serialized ASTs. It ignores values
-of AST nodes. It just operates with their types (e.g. `if a == 13 {}` and `if x == 100 {}` are
-considered the same provided it exceeds the minimal token sequence size).
-
-Due to the used method dupl can report so called "false positives" on the output. These are
-the ones we do not consider clones (whether they are too small, or the values of the matched
-tokens are completely different).
-
-## Installation
-
-```bash
-go get -u github.com/golangci/dupl
-```
-
-## Usage
-
-```
-Usage of dupl:
- dupl [flags] [paths]
-
-Paths:
- If the given path is a file, dupl will use it regardless of
- the file extension. If it is a directory it will recursively
- search for *.go files in that directory.
-
- If no path is given dupl will recursively search for *.go
- files in the current directory.
-
-Flags:
- -files
- read file names from stdin one at each line
- -html
- output the results as HTML, including duplicate code fragments
- -plumbing
- plumbing (easy-to-parse) output for consumption by scripts or tools
- -t, -threshold size
- minimum token sequence size as a clone (default 15)
- -vendor
- check files in vendor directory
- -v, -verbose
- explain what is being done
-
-Examples:
- dupl -t 100
- Search clones in the current directory of size at least
- 100 tokens.
- dupl $(find app/ -name '*_test.go')
- Search for clones in tests in the app directory.
- find app/ -name '*_test.go' |dupl -files
- The same as above.
-```
-
-## Example
-
-The reduced output of this command with the following parameters for the [Docker](https://www.docker.com) source code
-looks like [this](http://htmlpreview.github.io/?https://github.com/golangci/dupl/blob/master/_output_example/docker.html).
-
-```bash
-$ dupl -t 200 -html >docker.html
-```
diff --git a/vendor/github.com/golangci/dupl/job/buildtree.go b/vendor/github.com/golangci/dupl/job/buildtree.go
deleted file mode 100644
index e9aad54c0..000000000
--- a/vendor/github.com/golangci/dupl/job/buildtree.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package job
-
-import (
- "github.com/golangci/dupl/suffixtree"
- "github.com/golangci/dupl/syntax"
-)
-
-func BuildTree(schan chan []*syntax.Node) (t *suffixtree.STree, d *[]*syntax.Node, done chan bool) {
- t = suffixtree.New()
- data := make([]*syntax.Node, 0, 100)
- done = make(chan bool)
- go func() {
- for seq := range schan {
- data = append(data, seq...)
- for _, node := range seq {
- t.Update(node)
- }
- }
- done <- true
- }()
- return t, &data, done
-}
diff --git a/vendor/github.com/golangci/dupl/job/parse.go b/vendor/github.com/golangci/dupl/job/parse.go
deleted file mode 100644
index eb9d7c625..000000000
--- a/vendor/github.com/golangci/dupl/job/parse.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package job
-
-import (
- "log"
-
- "github.com/golangci/dupl/syntax"
- "github.com/golangci/dupl/syntax/golang"
-)
-
-func Parse(fchan chan string) chan []*syntax.Node {
-
- // parse AST
- achan := make(chan *syntax.Node)
- go func() {
- for file := range fchan {
- ast, err := golang.Parse(file)
- if err != nil {
- log.Println(err)
- continue
- }
- achan <- ast
- }
- close(achan)
- }()
-
- // serialize
- schan := make(chan []*syntax.Node)
- go func() {
- for ast := range achan {
- seq := syntax.Serialize(ast)
- schan <- seq
- }
- close(schan)
- }()
- return schan
-}
diff --git a/vendor/github.com/golangci/dupl/main.go b/vendor/github.com/golangci/dupl/main.go
deleted file mode 100644
index 3030a97ae..000000000
--- a/vendor/github.com/golangci/dupl/main.go
+++ /dev/null
@@ -1,148 +0,0 @@
-package dupl
-
-import (
- "flag"
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "sort"
-
- "github.com/golangci/dupl/job"
- "github.com/golangci/dupl/printer"
- "github.com/golangci/dupl/syntax"
-)
-
-const defaultThreshold = 15
-
-var (
- paths = []string{"."}
- vendor = flag.Bool("dupl.vendor", false, "")
- verbose = flag.Bool("dupl.verbose", false, "")
- files = flag.Bool("dupl.files", false, "")
-
- html = flag.Bool("dupl.html", false, "")
- plumbing = flag.Bool("dupl.plumbing", false, "")
-)
-
-const (
- vendorDirPrefix = "vendor" + string(filepath.Separator)
- vendorDirInPath = string(filepath.Separator) + vendorDirPrefix
-)
-
-func init() {
- flag.BoolVar(verbose, "dupl.v", false, "alias for -verbose")
-}
-
-func Run(files []string, threshold int) ([]printer.Issue, error) {
- fchan := make(chan string, 1024)
- go func() {
- for _, f := range files {
- fchan <- f
- }
- close(fchan)
- }()
- schan := job.Parse(fchan)
- t, data, done := job.BuildTree(schan)
- <-done
-
- // finish stream
- t.Update(&syntax.Node{Type: -1})
-
- mchan := t.FindDuplOver(threshold)
- duplChan := make(chan syntax.Match)
- go func() {
- for m := range mchan {
- match := syntax.FindSyntaxUnits(*data, m, threshold)
- if len(match.Frags) > 0 {
- duplChan <- match
- }
- }
- close(duplChan)
- }()
-
- return makeIssues(duplChan)
-}
-
-func makeIssues(duplChan <-chan syntax.Match) ([]printer.Issue, error) {
- groups := make(map[string][][]*syntax.Node)
- for dupl := range duplChan {
- groups[dupl.Hash] = append(groups[dupl.Hash], dupl.Frags...)
- }
- keys := make([]string, 0, len(groups))
- for k := range groups {
- keys = append(keys, k)
- }
- sort.Strings(keys)
-
- p := printer.NewPlumbing(ioutil.ReadFile)
-
- var issues []printer.Issue
- for _, k := range keys {
- uniq := unique(groups[k])
- if len(uniq) > 1 {
- i, err := p.MakeIssues(uniq)
- if err != nil {
- return nil, err
- }
- issues = append(issues, i...)
- }
- }
-
- return issues, nil
-}
-
-func unique(group [][]*syntax.Node) [][]*syntax.Node {
- fileMap := make(map[string]map[int]struct{})
-
- var newGroup [][]*syntax.Node
- for _, seq := range group {
- node := seq[0]
- file, ok := fileMap[node.Filename]
- if !ok {
- file = make(map[int]struct{})
- fileMap[node.Filename] = file
- }
- if _, ok := file[node.Pos]; !ok {
- file[node.Pos] = struct{}{}
- newGroup = append(newGroup, seq)
- }
- }
- return newGroup
-}
-
-func usage() {
- fmt.Fprintln(os.Stderr, `Usage: dupl [flags] [paths]
-
-Paths:
- If the given path is a file, dupl will use it regardless of
- the file extension. If it is a directory, it will recursively
- search for *.go files in that directory.
-
- If no path is given, dupl will recursively search for *.go
- files in the current directory.
-
-Flags:
- -files
- read file names from stdin one at each line
- -html
- output the results as HTML, including duplicate code fragments
- -plumbing
- plumbing (easy-to-parse) output for consumption by scripts or tools
- -t, -threshold size
- minimum token sequence size as a clone (default 15)
- -vendor
- check files in vendor directory
- -v, -verbose
- explain what is being done
-
-Examples:
- dupl -t 100
- Search clones in the current directory of size at least
- 100 tokens.
- dupl $(find app/ -name '*_test.go')
- Search for clones in tests in the app directory.
- find app/ -name '*_test.go' |dupl -files
- The same as above.`)
- os.Exit(2)
-}
diff --git a/vendor/github.com/golangci/dupl/printer/html.go b/vendor/github.com/golangci/dupl/printer/html.go
deleted file mode 100644
index 5ad9e25c7..000000000
--- a/vendor/github.com/golangci/dupl/printer/html.go
+++ /dev/null
@@ -1,120 +0,0 @@
-package printer
-
-import (
- "bytes"
- "fmt"
- "io"
- "regexp"
- "sort"
-
- "github.com/golangci/dupl/syntax"
-)
-
-type html struct {
- iota int
- w io.Writer
- ReadFile
-}
-
-func NewHTML(w io.Writer, fread ReadFile) Printer {
- return &html{w: w, ReadFile: fread}
-}
-
-func (p *html) PrintHeader() error {
- _, err := fmt.Fprint(p.w, `<!DOCTYPE html>
-<meta charset="utf-8"/>
-<title>Duplicates</title>
-<style>
- pre {
- background-color: #FFD;
- border: 1px solid #E2E2E2;
- padding: 1ex;
- }
-</style>
-`)
- return err
-}
-
-func (p *html) PrintClones(dups [][]*syntax.Node) error {
- p.iota++
- fmt.Fprintf(p.w, "<h1>#%d found %d clones</h1>\n", p.iota, len(dups))
-
- clones := make([]clone, len(dups))
- for i, dup := range dups {
- cnt := len(dup)
- if cnt == 0 {
- panic("zero length dup")
- }
- nstart := dup[0]
- nend := dup[cnt-1]
-
- file, err := p.ReadFile(nstart.Filename)
- if err != nil {
- return err
- }
-
- lineStart, _ := blockLines(file, nstart.Pos, nend.End)
- cl := clone{filename: nstart.Filename, lineStart: lineStart}
- start := findLineBeg(file, nstart.Pos)
- content := append(toWhitespace(file[start:nstart.Pos]), file[nstart.Pos:nend.End]...)
- cl.fragment = deindent(content)
- clones[i] = cl
- }
-
- sort.Sort(byNameAndLine(clones))
- for _, cl := range clones {
- fmt.Fprintf(p.w, "<h2>%s:%d</h2>\n<pre>%s</pre>\n", cl.filename, cl.lineStart, cl.fragment)
- }
- return nil
-}
-
-func (*html) PrintFooter() error { return nil }
-
-func findLineBeg(file []byte, index int) int {
- for i := index; i >= 0; i-- {
- if file[i] == '\n' {
- return i + 1
- }
- }
- return 0
-}
-
-func toWhitespace(str []byte) []byte {
- var out []byte
- for _, c := range bytes.Runes(str) {
- if c == '\t' {
- out = append(out, '\t')
- } else {
- out = append(out, ' ')
- }
- }
- return out
-}
-
-func deindent(block []byte) []byte {
- const maxVal = 99
- min := maxVal
- re := regexp.MustCompile(`(^|\n)(\t*)\S`)
- for _, line := range re.FindAllSubmatch(block, -1) {
- indent := line[2]
- if len(indent) < min {
- min = len(indent)
- }
- }
- if min == 0 || min == maxVal {
- return block
- }
- block = block[min:]
-Loop:
- for i := 0; i < len(block); i++ {
- if block[i] == '\n' && i != len(block)-1 {
- for j := 0; j < min; j++ {
- if block[i+j+1] != '\t' {
- continue Loop
- }
- }
- block = append(block[:i+1], block[i+1+min:]...)
- }
- }
- return block
-}
diff --git a/vendor/github.com/golangci/dupl/printer/plumbing.go b/vendor/github.com/golangci/dupl/printer/plumbing.go
deleted file mode 100644
index cf39d01b7..000000000
--- a/vendor/github.com/golangci/dupl/printer/plumbing.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package printer
-
-import (
- "sort"
-
- "github.com/golangci/dupl/syntax"
-)
-
-type Clone clone
-
-func (c Clone) Filename() string {
- return c.filename
-}
-
-func (c Clone) LineStart() int {
- return c.lineStart
-}
-
-func (c Clone) LineEnd() int {
- return c.lineEnd
-}
-
-type Issue struct {
- From, To Clone
-}
-
-type Plumbing struct {
- ReadFile
-}
-
-func NewPlumbing(fread ReadFile) *Plumbing {
- return &Plumbing{fread}
-}
-
-func (p *Plumbing) MakeIssues(dups [][]*syntax.Node) ([]Issue, error) {
- clones, err := prepareClonesInfo(p.ReadFile, dups)
- if err != nil {
- return nil, err
- }
- sort.Sort(byNameAndLine(clones))
- var issues []Issue
- for i, cl := range clones {
- nextCl := clones[(i+1)%len(clones)]
- issues = append(issues, Issue{
- From: Clone(cl),
- To: Clone(nextCl),
- })
- }
- return issues, nil
-}
diff --git a/vendor/github.com/golangci/dupl/printer/printer.go b/vendor/github.com/golangci/dupl/printer/printer.go
deleted file mode 100644
index 385217bfc..000000000
--- a/vendor/github.com/golangci/dupl/printer/printer.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package printer
-
-import "github.com/golangci/dupl/syntax"
-
-type ReadFile func(filename string) ([]byte, error)
-
-type Printer interface {
- PrintHeader() error
- PrintClones(dups [][]*syntax.Node) error
- PrintFooter() error
-}
diff --git a/vendor/github.com/golangci/dupl/printer/text.go b/vendor/github.com/golangci/dupl/printer/text.go
deleted file mode 100644
index 8359fa76f..000000000
--- a/vendor/github.com/golangci/dupl/printer/text.go
+++ /dev/null
@@ -1,100 +0,0 @@
-package printer
-
-import (
- "fmt"
- "io"
- "sort"
-
- "github.com/golangci/dupl/syntax"
-)
-
-type text struct {
- cnt int
- w io.Writer
- ReadFile
-}
-
-func NewText(w io.Writer, fread ReadFile) Printer {
- return &text{w: w, ReadFile: fread}
-}
-
-func (p *text) PrintHeader() error { return nil }
-
-func (p *text) PrintClones(dups [][]*syntax.Node) error {
- p.cnt++
- fmt.Fprintf(p.w, "found %d clones:\n", len(dups))
- clones, err := prepareClonesInfo(p.ReadFile, dups)
- if err != nil {
- return err
- }
- sort.Sort(byNameAndLine(clones))
- for _, cl := range clones {
- fmt.Fprintf(p.w, " %s:%d,%d\n", cl.filename, cl.lineStart, cl.lineEnd)
- }
- return nil
-}
-
-func (p *text) PrintFooter() error {
- _, err := fmt.Fprintf(p.w, "\nFound total %d clone groups.\n", p.cnt)
- return err
-}
-
-func prepareClonesInfo(fread ReadFile, dups [][]*syntax.Node) ([]clone, error) {
- clones := make([]clone, len(dups))
- for i, dup := range dups {
- cnt := len(dup)
- if cnt == 0 {
- panic("zero length dup")
- }
- nstart := dup[0]
- nend := dup[cnt-1]
-
- file, err := fread(nstart.Filename)
- if err != nil {
- return nil, err
- }
-
- cl := clone{filename: nstart.Filename}
- cl.lineStart, cl.lineEnd = blockLines(file, nstart.Pos, nend.End)
- clones[i] = cl
- }
- return clones, nil
-}
-
-func blockLines(file []byte, from, to int) (int, int) {
- line := 1
- lineStart, lineEnd := 0, 0
- for offset, b := range file {
- if b == '\n' {
- line++
- }
- if offset == from {
- lineStart = line
- }
- if offset == to-1 {
- lineEnd = line
- break
- }
- }
- return lineStart, lineEnd
-}
-
-type clone struct {
- filename string
- lineStart int
- lineEnd int
- fragment []byte
-}
-
-type byNameAndLine []clone
-
-func (c byNameAndLine) Len() int { return len(c) }
-
-func (c byNameAndLine) Swap(i, j int) { c[i], c[j] = c[j], c[i] }
-
-func (c byNameAndLine) Less(i, j int) bool {
- if c[i].filename == c[j].filename {
- return c[i].lineStart < c[j].lineStart
- }
- return c[i].filename < c[j].filename
-}
diff --git a/vendor/github.com/golangci/dupl/suffixtree/dupl.go b/vendor/github.com/golangci/dupl/suffixtree/dupl.go
deleted file mode 100644
index ab145b4f3..000000000
--- a/vendor/github.com/golangci/dupl/suffixtree/dupl.go
+++ /dev/null
@@ -1,98 +0,0 @@
-package suffixtree
-
-import "sort"
-
-type Match struct {
- Ps []Pos
- Len Pos
-}
-
-type posList struct {
- positions []Pos
-}
-
-func newPosList() *posList {
- return &posList{make([]Pos, 0)}
-}
-
-func (p *posList) append(p2 *posList) {
- p.positions = append(p.positions, p2.positions...)
-}
-
-func (p *posList) add(pos Pos) {
- p.positions = append(p.positions, pos)
-}
-
-type contextList struct {
- lists map[int]*posList
-}
-
-func newContextList() *contextList {
- return &contextList{make(map[int]*posList)}
-}
-
-func (c *contextList) getAll() []Pos {
- keys := make([]int, 0, len(c.lists))
- for k := range c.lists {
- keys = append(keys, k)
- }
- sort.Ints(keys)
- var ps []Pos
- for _, k := range keys {
- ps = append(ps, c.lists[k].positions...)
- }
- return ps
-}
-
-func (c *contextList) append(c2 *contextList) {
- for lc, pl := range c2.lists {
- if _, ok := c.lists[lc]; ok {
- c.lists[lc].append(pl)
- } else {
- c.lists[lc] = pl
- }
- }
-}
-
-// FindDuplOver find pairs of maximal duplicities over a threshold
-// length.
-func (t *STree) FindDuplOver(threshold int) <-chan Match {
- auxTran := newTran(0, 0, t.root)
- ch := make(chan Match)
- go func() {
- walkTrans(auxTran, 0, threshold, ch)
- close(ch)
- }()
- return ch
-}
-
-func walkTrans(parent *tran, length, threshold int, ch chan<- Match) *contextList {
- s := parent.state
-
- cl := newContextList()
-
- if len(s.trans) == 0 {
- pl := newPosList()
- start := parent.end + 1 - Pos(length)
- pl.add(start)
- ch := 0
- if start > 0 {
- ch = s.tree.data[start-1].Val()
- }
- cl.lists[ch] = pl
- return cl
- }
-
- for _, t := range s.trans {
- ln := length + t.len()
- cl2 := walkTrans(t, ln, threshold, ch)
- if ln >= threshold {
- cl.append(cl2)
- }
- }
- if length >= threshold && len(cl.lists) > 1 {
- m := Match{cl.getAll(), Pos(length)}
- ch <- m
- }
- return cl
-}
diff --git a/vendor/github.com/golangci/dupl/suffixtree/suffixtree.go b/vendor/github.com/golangci/dupl/suffixtree/suffixtree.go
deleted file mode 100644
index 738015025..000000000
--- a/vendor/github.com/golangci/dupl/suffixtree/suffixtree.go
+++ /dev/null
@@ -1,216 +0,0 @@
-package suffixtree
-
-import (
- "bytes"
- "fmt"
- "math"
- "strings"
-)
-
-const infinity = math.MaxInt32
-
-// Pos denotes position in data slice.
-type Pos int32
-
-type Token interface {
- Val() int
-}
-
-// STree is a struct representing a suffix tree.
-type STree struct {
- data []Token
- root *state
- auxState *state // auxiliary state
-
- // active point
- s *state
- start, end Pos
-}
-
-// New creates new suffix tree.
-func New() *STree {
- t := new(STree)
- t.data = make([]Token, 0, 50)
- t.root = newState(t)
- t.auxState = newState(t)
- t.root.linkState = t.auxState
- t.s = t.root
- return t
-}
-
-// Update refreshes the suffix tree to by new data.
-func (t *STree) Update(data ...Token) {
- t.data = append(t.data, data...)
- for _ = range data {
- t.update()
- t.s, t.start = t.canonize(t.s, t.start, t.end)
- t.end++
- }
-}
-
-// update transforms suffix tree T(n) to T(n+1).
-func (t *STree) update() {
- oldr := t.root
-
- // (s, (start, end)) is the canonical reference pair for the active point
- s := t.s
- start, end := t.start, t.end
- var r *state
- for {
- var endPoint bool
- r, endPoint = t.testAndSplit(s, start, end-1)
- if endPoint {
- break
- }
- r.fork(end)
- if oldr != t.root {
- oldr.linkState = r
- }
- oldr = r
- s, start = t.canonize(s.linkState, start, end-1)
- }
- if oldr != t.root {
- oldr.linkState = r
- }
-
- // update active point
- t.s = s
- t.start = start
-}
-
-// testAndSplit tests whether a state with canonical ref. pair
-// (s, (start, end)) is the end point, that is, a state that have
-// a c-transition. If not, then state (exs, (start, end)) is made
-// explicit (if not already so).
-func (t *STree) testAndSplit(s *state, start, end Pos) (exs *state, endPoint bool) {
- c := t.data[t.end]
- if start <= end {
- tr := s.findTran(t.data[start])
- splitPoint := tr.start + end - start + 1
- if t.data[splitPoint].Val() == c.Val() {
- return s, true
- }
- // make the (s, (start, end)) state explicit
- newSt := newState(s.tree)
- newSt.addTran(splitPoint, tr.end, tr.state)
- tr.end = splitPoint - 1
- tr.state = newSt
- return newSt, false
- }
- if s == t.auxState || s.findTran(c) != nil {
- return s, true
- }
- return s, false
-}
-
-// canonize returns updated state and start position for ref. pair
-// (s, (start, end)) of state r so the new ref. pair is canonical,
-// that is, referenced from the closest explicit ancestor of r.
-func (t *STree) canonize(s *state, start, end Pos) (*state, Pos) {
- if s == t.auxState {
- s, start = t.root, start+1
- }
- if start > end {
- return s, start
- }
-
- var tr *tran
- for {
- if start <= end {
- tr = s.findTran(t.data[start])
- if tr == nil {
- panic(fmt.Sprintf("there should be some transition for '%d' at %d",
- t.data[start].Val(), start))
- }
- }
- if tr.end-tr.start > end-start {
- break
- }
- start += tr.end - tr.start + 1
- s = tr.state
- }
- if s == nil {
- panic("there should always be some suffix link resolution")
- }
- return s, start
-}
-
-func (t *STree) At(p Pos) Token {
- if p < 0 || p >= Pos(len(t.data)) {
- panic("position out of bounds")
- }
- return t.data[p]
-}
-
-func (t *STree) String() string {
- buf := new(bytes.Buffer)
- printState(buf, t.root, 0)
- return buf.String()
-}
-
-func printState(buf *bytes.Buffer, s *state, ident int) {
- for _, tr := range s.trans {
- fmt.Fprint(buf, strings.Repeat(" ", ident))
- fmt.Fprintf(buf, "* (%d, %d)\n", tr.start, tr.ActEnd())
- printState(buf, tr.state, ident+1)
- }
-}
-
-// state is an explicit state of the suffix tree.
-type state struct {
- tree *STree
- trans []*tran
- linkState *state
-}
-
-func newState(t *STree) *state {
- return &state{
- tree: t,
- trans: make([]*tran, 0),
- linkState: nil,
- }
-}
-
-func (s *state) addTran(start, end Pos, r *state) {
- s.trans = append(s.trans, newTran(start, end, r))
-}
-
-// fork creates a new branch from the state s.
-func (s *state) fork(i Pos) *state {
- r := newState(s.tree)
- s.addTran(i, infinity, r)
- return r
-}
-
-// findTran finds c-transition.
-func (s *state) findTran(c Token) *tran {
- for _, tran := range s.trans {
- if s.tree.data[tran.start].Val() == c.Val() {
- return tran
- }
- }
- return nil
-}
-
-// tran represents a state's transition.
-type tran struct {
- start, end Pos
- state *state
-}
-
-func newTran(start, end Pos, s *state) *tran {
- return &tran{start, end, s}
-}
-
-func (t *tran) len() int {
- return int(t.end - t.start + 1)
-}
-
-// ActEnd returns actual end position as consistent with
-// the actual length of the data in the STree.
-func (t *tran) ActEnd() Pos {
- if t.end == infinity {
- return Pos(len(t.state.tree.data)) - 1
- }
- return t.end
-}
diff --git a/vendor/github.com/golangci/dupl/syntax/golang/golang.go b/vendor/github.com/golangci/dupl/syntax/golang/golang.go
deleted file mode 100644
index a0b1e77e1..000000000
--- a/vendor/github.com/golangci/dupl/syntax/golang/golang.go
+++ /dev/null
@@ -1,392 +0,0 @@
-package golang
-
-import (
- "go/ast"
- "go/parser"
- "go/token"
-
- "github.com/golangci/dupl/syntax"
-)
-
-const (
- BadNode = iota
- File
- ArrayType
- AssignStmt
- BasicLit
- BinaryExpr
- BlockStmt
- BranchStmt
- CallExpr
- CaseClause
- ChanType
- CommClause
- CompositeLit
- DeclStmt
- DeferStmt
- Ellipsis
- EmptyStmt
- ExprStmt
- Field
- FieldList
- ForStmt
- FuncDecl
- FuncLit
- FuncType
- GenDecl
- GoStmt
- Ident
- IfStmt
- IncDecStmt
- IndexExpr
- InterfaceType
- KeyValueExpr
- LabeledStmt
- MapType
- ParenExpr
- RangeStmt
- ReturnStmt
- SelectStmt
- SelectorExpr
- SendStmt
- SliceExpr
- StarExpr
- StructType
- SwitchStmt
- TypeAssertExpr
- TypeSpec
- TypeSwitchStmt
- UnaryExpr
- ValueSpec
-)
-
-// Parse the given file and return uniform syntax tree.
-func Parse(filename string) (*syntax.Node, error) {
- fset := token.NewFileSet()
- file, err := parser.ParseFile(fset, filename, nil, 0)
- if err != nil {
- return nil, err
- }
- t := &transformer{
- fileset: fset,
- filename: filename,
- }
- return t.trans(file), nil
-}
-
-type transformer struct {
- fileset *token.FileSet
- filename string
-}
-
-// trans transforms given golang AST to uniform tree structure.
-func (t *transformer) trans(node ast.Node) (o *syntax.Node) {
- o = syntax.NewNode()
- o.Filename = t.filename
- st, end := node.Pos(), node.End()
- o.Pos, o.End = t.fileset.File(st).Offset(st), t.fileset.File(end).Offset(end)
-
- switch n := node.(type) {
- case *ast.ArrayType:
- o.Type = ArrayType
- if n.Len != nil {
- o.AddChildren(t.trans(n.Len))
- }
- o.AddChildren(t.trans(n.Elt))
-
- case *ast.AssignStmt:
- o.Type = AssignStmt
- for _, e := range n.Rhs {
- o.AddChildren(t.trans(e))
- }
-
- for _, e := range n.Lhs {
- o.AddChildren(t.trans(e))
- }
-
- case *ast.BasicLit:
- o.Type = BasicLit
-
- case *ast.BinaryExpr:
- o.Type = BinaryExpr
- o.AddChildren(t.trans(n.X), t.trans(n.Y))
-
- case *ast.BlockStmt:
- o.Type = BlockStmt
- for _, stmt := range n.List {
- o.AddChildren(t.trans(stmt))
- }
-
- case *ast.BranchStmt:
- o.Type = BranchStmt
- if n.Label != nil {
- o.AddChildren(t.trans(n.Label))
- }
-
- case *ast.CallExpr:
- o.Type = CallExpr
- o.AddChildren(t.trans(n.Fun))
- for _, arg := range n.Args {
- o.AddChildren(t.trans(arg))
- }
-
- case *ast.CaseClause:
- o.Type = CaseClause
- for _, e := range n.List {
- o.AddChildren(t.trans(e))
- }
- for _, stmt := range n.Body {
- o.AddChildren(t.trans(stmt))
- }
-
- case *ast.ChanType:
- o.Type = ChanType
- o.AddChildren(t.trans(n.Value))
-
- case *ast.CommClause:
- o.Type = CommClause
- if n.Comm != nil {
- o.AddChildren(t.trans(n.Comm))
- }
- for _, stmt := range n.Body {
- o.AddChildren(t.trans(stmt))
- }
-
- case *ast.CompositeLit:
- o.Type = CompositeLit
- if n.Type != nil {
- o.AddChildren(t.trans(n.Type))
- }
- for _, e := range n.Elts {
- o.AddChildren(t.trans(e))
- }
-
- case *ast.DeclStmt:
- o.Type = DeclStmt
- o.AddChildren(t.trans(n.Decl))
-
- case *ast.DeferStmt:
- o.Type = DeferStmt
- o.AddChildren(t.trans(n.Call))
-
- case *ast.Ellipsis:
- o.Type = Ellipsis
- if n.Elt != nil {
- o.AddChildren(t.trans(n.Elt))
- }
-
- case *ast.EmptyStmt:
- o.Type = EmptyStmt
-
- case *ast.ExprStmt:
- o.Type = ExprStmt
- o.AddChildren(t.trans(n.X))
-
- case *ast.Field:
- o.Type = Field
- for _, name := range n.Names {
- o.AddChildren(t.trans(name))
- }
- o.AddChildren(t.trans(n.Type))
-
- case *ast.FieldList:
- o.Type = FieldList
- for _, field := range n.List {
- o.AddChildren(t.trans(field))
- }
-
- case *ast.File:
- o.Type = File
- for _, decl := range n.Decls {
- if genDecl, ok := decl.(*ast.GenDecl); ok && genDecl.Tok == token.IMPORT {
- // skip import declarations
- continue
- }
- o.AddChildren(t.trans(decl))
- }
-
- case *ast.ForStmt:
- o.Type = ForStmt
- if n.Init != nil {
- o.AddChildren(t.trans(n.Init))
- }
- if n.Cond != nil {
- o.AddChildren(t.trans(n.Cond))
- }
- if n.Post != nil {
- o.AddChildren(t.trans(n.Post))
- }
- o.AddChildren(t.trans(n.Body))
-
- case *ast.FuncDecl:
- o.Type = FuncDecl
- if n.Recv != nil {
- o.AddChildren(t.trans(n.Recv))
- }
- o.AddChildren(t.trans(n.Name), t.trans(n.Type))
- if n.Body != nil {
- o.AddChildren(t.trans(n.Body))
- }
-
- case *ast.FuncLit:
- o.Type = FuncLit
- o.AddChildren(t.trans(n.Type), t.trans(n.Body))
-
- case *ast.FuncType:
- o.Type = FuncType
- o.AddChildren(t.trans(n.Params))
- if n.Results != nil {
- o.AddChildren(t.trans(n.Results))
- }
-
- case *ast.GenDecl:
- o.Type = GenDecl
- for _, spec := range n.Specs {
- o.AddChildren(t.trans(spec))
- }
-
- case *ast.GoStmt:
- o.Type = GoStmt
- o.AddChildren(t.trans(n.Call))
-
- case *ast.Ident:
- o.Type = Ident
-
- case *ast.IfStmt:
- o.Type = IfStmt
- if n.Init != nil {
- o.AddChildren(t.trans(n.Init))
- }
- o.AddChildren(t.trans(n.Cond), t.trans(n.Body))
- if n.Else != nil {
- o.AddChildren(t.trans(n.Else))
- }
-
- case *ast.IncDecStmt:
- o.Type = IncDecStmt
- o.AddChildren(t.trans(n.X))
-
- case *ast.IndexExpr:
- o.Type = IndexExpr
- o.AddChildren(t.trans(n.X), t.trans(n.Index))
-
- case *ast.InterfaceType:
- o.Type = InterfaceType
- o.AddChildren(t.trans(n.Methods))
-
- case *ast.KeyValueExpr:
- o.Type = KeyValueExpr
- o.AddChildren(t.trans(n.Key), t.trans(n.Value))
-
- case *ast.LabeledStmt:
- o.Type = LabeledStmt
- o.AddChildren(t.trans(n.Label), t.trans(n.Stmt))
-
- case *ast.MapType:
- o.Type = MapType
- o.AddChildren(t.trans(n.Key), t.trans(n.Value))
-
- case *ast.ParenExpr:
- o.Type = ParenExpr
- o.AddChildren(t.trans(n.X))
-
- case *ast.RangeStmt:
- o.Type = RangeStmt
- if n.Key != nil {
- o.AddChildren(t.trans(n.Key))
- }
- if n.Value != nil {
- o.AddChildren(t.trans(n.Value))
- }
- o.AddChildren(t.trans(n.X), t.trans(n.Body))
-
- case *ast.ReturnStmt:
- o.Type = ReturnStmt
- for _, e := range n.Results {
- o.AddChildren(t.trans(e))
- }
-
- case *ast.SelectStmt:
- o.Type = SelectStmt
- o.AddChildren(t.trans(n.Body))
-
- case *ast.SelectorExpr:
- o.Type = SelectorExpr
- o.AddChildren(t.trans(n.X), t.trans(n.Sel))
-
- case *ast.SendStmt:
- o.Type = SendStmt
- o.AddChildren(t.trans(n.Chan), t.trans(n.Value))
-
- case *ast.SliceExpr:
- o.Type = SliceExpr
- o.AddChildren(t.trans(n.X))
- if n.Low != nil {
- o.AddChildren(t.trans(n.Low))
- }
- if n.High != nil {
- o.AddChildren(t.trans(n.High))
- }
- if n.Max != nil {
- o.AddChildren(t.trans(n.Max))
- }
-
- case *ast.StarExpr:
- o.Type = StarExpr
- o.AddChildren(t.trans(n.X))
-
- case *ast.StructType:
- o.Type = StructType
- o.AddChildren(t.trans(n.Fields))
-
- case *ast.SwitchStmt:
- o.Type = SwitchStmt
- if n.Init != nil {
- o.AddChildren(t.trans(n.Init))
- }
- if n.Tag != nil {
- o.AddChildren(t.trans(n.Tag))
- }
- o.AddChildren(t.trans(n.Body))
-
- case *ast.TypeAssertExpr:
- o.Type = TypeAssertExpr
- o.AddChildren(t.trans(n.X))
- if n.Type != nil {
- o.AddChildren(t.trans(n.Type))
- }
-
- case *ast.TypeSpec:
- o.Type = TypeSpec
- o.AddChildren(t.trans(n.Name), t.trans(n.Type))
-
- case *ast.TypeSwitchStmt:
- o.Type = TypeSwitchStmt
- if n.Init != nil {
- o.AddChildren(t.trans(n.Init))
- }
- o.AddChildren(t.trans(n.Assign), t.trans(n.Body))
-
- case *ast.UnaryExpr:
- o.Type = UnaryExpr
- o.AddChildren(t.trans(n.X))
-
- case *ast.ValueSpec:
- o.Type = ValueSpec
- for _, name := range n.Names {
- o.AddChildren(t.trans(name))
- }
- if n.Type != nil {
- o.AddChildren(t.trans(n.Type))
- }
- for _, val := range n.Values {
- o.AddChildren(t.trans(val))
- }
-
- default:
- o.Type = BadNode
-
- }
-
- return o
-}
diff --git a/vendor/github.com/golangci/dupl/syntax/syntax.go b/vendor/github.com/golangci/dupl/syntax/syntax.go
deleted file mode 100644
index e2c750afd..000000000
--- a/vendor/github.com/golangci/dupl/syntax/syntax.go
+++ /dev/null
@@ -1,175 +0,0 @@
-package syntax
-
-import (
- "crypto/sha1"
-
- "github.com/golangci/dupl/suffixtree"
-)
-
-type Node struct {
- Type int
- Filename string
- Pos, End int
- Children []*Node
- Owns int
-}
-
-func NewNode() *Node {
- return &Node{}
-}
-
-func (n *Node) AddChildren(children ...*Node) {
- n.Children = append(n.Children, children...)
-}
-
-func (n *Node) Val() int {
- return n.Type
-}
-
-type Match struct {
- Hash string
- Frags [][]*Node
-}
-
-func Serialize(n *Node) []*Node {
- stream := make([]*Node, 0, 10)
- serial(n, &stream)
- return stream
-}
-
-func serial(n *Node, stream *[]*Node) int {
- *stream = append(*stream, n)
- var count int
- for _, child := range n.Children {
- count += serial(child, stream)
- }
- n.Owns = count
- return count + 1
-}
-
-// FindSyntaxUnits finds all complete syntax units in the match group and returns them
-// with the corresponding hash.
-func FindSyntaxUnits(data []*Node, m suffixtree.Match, threshold int) Match {
- if len(m.Ps) == 0 {
- return Match{}
- }
- firstSeq := data[m.Ps[0] : m.Ps[0]+m.Len]
- indexes := getUnitsIndexes(firstSeq, threshold)
-
- // TODO: is this really working?
- indexCnt := len(indexes)
- if indexCnt > 0 {
- lasti := indexes[indexCnt-1]
- firstn := firstSeq[lasti]
- for i := 1; i < len(m.Ps); i++ {
- n := data[int(m.Ps[i])+lasti]
- if firstn.Owns != n.Owns {
- indexes = indexes[:indexCnt-1]
- break
- }
- }
- }
- if len(indexes) == 0 || isCyclic(indexes, firstSeq) || spansMultipleFiles(indexes, firstSeq) {
- return Match{}
- }
-
- match := Match{Frags: make([][]*Node, len(m.Ps))}
- for i, pos := range m.Ps {
- match.Frags[i] = make([]*Node, len(indexes))
- for j, index := range indexes {
- match.Frags[i][j] = data[int(pos)+index]
- }
- }
-
- lastIndex := indexes[len(indexes)-1]
- match.Hash = hashSeq(firstSeq[indexes[0] : lastIndex+firstSeq[lastIndex].Owns])
- return match
-}
-
-func getUnitsIndexes(nodeSeq []*Node, threshold int) []int {
- var indexes []int
- var split bool
- for i := 0; i < len(nodeSeq); {
- n := nodeSeq[i]
- switch {
- case n.Owns >= len(nodeSeq)-i:
- // not complete syntax unit
- i++
- split = true
- continue
- case n.Owns+1 < threshold:
- split = true
- default:
- if split {
- indexes = indexes[:0]
- split = false
- }
- indexes = append(indexes, i)
- }
- i += n.Owns + 1
- }
- return indexes
-}
-
-// isCyclic finds out whether there is a repetive pattern in the found clone. If positive,
-// it return false to point out that the clone would be redundant.
-func isCyclic(indexes []int, nodes []*Node) bool {
- cnt := len(indexes)
- if cnt <= 1 {
- return false
- }
-
- alts := make(map[int]bool)
- for i := 1; i <= cnt/2; i++ {
- if cnt%i == 0 {
- alts[i] = true
- }
- }
-
- for i := 0; i < indexes[cnt/2]; i++ {
- nstart := nodes[i+indexes[0]]
- AltLoop:
- for alt := range alts {
- for j := alt; j < cnt; j += alt {
- index := i + indexes[j]
- if index < len(nodes) {
- nalt := nodes[index]
- if nstart.Owns == nalt.Owns && nstart.Type == nalt.Type {
- continue
- }
- } else if i >= indexes[alt] {
- return true
- }
- delete(alts, alt)
- continue AltLoop
- }
- }
- if len(alts) == 0 {
- return false
- }
- }
- return true
-}
-
-func spansMultipleFiles(indexes []int, nodes []*Node) bool {
- if len(indexes) < 2 {
- return false
- }
- f := nodes[indexes[0]].Filename
- for i := 1; i < len(indexes); i++ {
- if nodes[indexes[i]].Filename != f {
- return true
- }
- }
- return false
-}
-
-func hashSeq(nodes []*Node) string {
- h := sha1.New()
- bytes := make([]byte, len(nodes))
- for i, node := range nodes {
- bytes[i] = byte(node.Type)
- }
- h.Write(bytes)
- return string(h.Sum(nil))
-}
diff --git a/vendor/github.com/golangci/go-printf-func-name/LICENSE b/vendor/github.com/golangci/go-printf-func-name/LICENSE
deleted file mode 100644
index 4585140d1..000000000
--- a/vendor/github.com/golangci/go-printf-func-name/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-MIT License
-
-Copyright (c) 2024 Golangci-lint authors
-Copyright (c) 2020 Isaev Denis
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/github.com/golangci/go-printf-func-name/pkg/analyzer/analyzer.go b/vendor/github.com/golangci/go-printf-func-name/pkg/analyzer/analyzer.go
deleted file mode 100644
index bce4b242e..000000000
--- a/vendor/github.com/golangci/go-printf-func-name/pkg/analyzer/analyzer.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package analyzer
-
-import (
- "go/ast"
- "strings"
-
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/analysis/passes/inspect"
- "golang.org/x/tools/go/ast/inspector"
-)
-
-var Analyzer = &analysis.Analyzer{
- Name: "goprintffuncname",
- Doc: "Checks that printf-like functions are named with `f` at the end.",
- Run: run,
- Requires: []*analysis.Analyzer{inspect.Analyzer},
-}
-
-func run(pass *analysis.Pass) (interface{}, error) {
- insp := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
-
- nodeFilter := []ast.Node{
- (*ast.FuncDecl)(nil),
- }
-
- insp.Preorder(nodeFilter, func(node ast.Node) {
- funcDecl := node.(*ast.FuncDecl)
-
- if res := funcDecl.Type.Results; res != nil && len(res.List) != 0 {
- return
- }
-
- params := funcDecl.Type.Params.List
- if len(params) < 2 { // [0] must be format (string), [1] must be args (...interface{})
- return
- }
-
- formatParamType, ok := params[len(params)-2].Type.(*ast.Ident)
- if !ok { // first param type isn't identificator so it can't be of type "string"
- return
- }
-
- if formatParamType.Name != "string" { // first param (format) type is not string
- return
- }
-
- if formatParamNames := params[len(params)-2].Names; len(formatParamNames) == 0 || formatParamNames[len(formatParamNames)-1].Name != "format" {
- return
- }
-
- argsParamType, ok := params[len(params)-1].Type.(*ast.Ellipsis)
- if !ok { // args are not ellipsis (...args)
- return
- }
-
- elementType, ok := argsParamType.Elt.(*ast.InterfaceType)
- if !ok { // args are not of interface type, but we need interface{}
- return
- }
-
- if elementType.Methods != nil && len(elementType.Methods.List) != 0 {
- return // has >= 1 method in interface, but we need an empty interface "interface{}"
- }
-
- if strings.HasSuffix(funcDecl.Name.Name, "f") {
- return
- }
-
- pass.Reportf(node.Pos(), "printf-like formatting function '%s' should be named '%sf'",
- funcDecl.Name.Name, funcDecl.Name.Name)
- })
-
- return nil, nil
-}
diff --git a/vendor/github.com/golangci/gofmt/gofmt/LICENSE b/vendor/github.com/golangci/gofmt/gofmt/LICENSE
deleted file mode 100644
index 6a66aea5e..000000000
--- a/vendor/github.com/golangci/gofmt/gofmt/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2009 The Go Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/github.com/golangci/gofmt/gofmt/doc.go b/vendor/github.com/golangci/gofmt/gofmt/doc.go
deleted file mode 100644
index d0a458021..000000000
--- a/vendor/github.com/golangci/gofmt/gofmt/doc.go
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-/*
-Gofmt formats Go programs.
-It uses tabs for indentation and blanks for alignment.
-Alignment assumes that an editor is using a fixed-width font.
-
-Without an explicit path, it processes the standard input. Given a file,
-it operates on that file; given a directory, it operates on all .go files in
-that directory, recursively. (Files starting with a period are ignored.)
-By default, gofmt prints the reformatted sources to standard output.
-
-Usage:
-
- gofmt [flags] [path ...]
-
-The flags are:
-
- -d
- Do not print reformatted sources to standard output.
- If a file's formatting is different than gofmt's, print diffs
- to standard output.
- -e
- Print all (including spurious) errors.
- -l
- Do not print reformatted sources to standard output.
- If a file's formatting is different from gofmt's, print its name
- to standard output.
- -r rule
- Apply the rewrite rule to the source before reformatting.
- -s
- Try to simplify code (after applying the rewrite rule, if any).
- -w
- Do not print reformatted sources to standard output.
- If a file's formatting is different from gofmt's, overwrite it
- with gofmt's version. If an error occurred during overwriting,
- the original file is restored from an automatic backup.
-
-Debugging support:
-
- -cpuprofile filename
- Write cpu profile to the specified file.
-
-The rewrite rule specified with the -r flag must be a string of the form:
-
- pattern -> replacement
-
-Both pattern and replacement must be valid Go expressions.
-In the pattern, single-character lowercase identifiers serve as
-wildcards matching arbitrary sub-expressions; those expressions
-will be substituted for the same identifiers in the replacement.
-
-When gofmt reads from standard input, it accepts either a full Go program
-or a program fragment. A program fragment must be a syntactically
-valid declaration list, statement list, or expression. When formatting
-such a fragment, gofmt preserves leading indentation as well as leading
-and trailing spaces, so that individual sections of a Go program can be
-formatted by piping them through gofmt.
-
-# Examples
-
-To check files for unnecessary parentheses:
-
- gofmt -r '(a) -> a' -l *.go
-
-To remove the parentheses:
-
- gofmt -r '(a) -> a' -w *.go
-
-To convert the package tree from explicit slice upper bounds to implicit ones:
-
- gofmt -r 'α[β:len(α)] -> α[β:]' -w $GOROOT/src
-
-# The simplify command
-
-When invoked with -s gofmt will make the following source transformations where possible.
-
- An array, slice, or map composite literal of the form:
- []T{T{}, T{}}
- will be simplified to:
- []T{{}, {}}
-
- A slice expression of the form:
- s[a:len(s)]
- will be simplified to:
- s[a:]
-
- A range of the form:
- for x, _ = range v {...}
- will be simplified to:
- for x = range v {...}
-
- A range of the form:
- for _ = range v {...}
- will be simplified to:
- for range v {...}
-
-This may result in changes that are incompatible with earlier versions of Go.
-*/
-package gofmt
-
-// BUG(rsc): The implementation of -r is a bit slow.
-// BUG(gri): If -w fails, the restored original file may not have some of the
-// original file attributes.
diff --git a/vendor/github.com/golangci/gofmt/gofmt/gofmt.go b/vendor/github.com/golangci/gofmt/gofmt/gofmt.go
deleted file mode 100644
index 909d37657..000000000
--- a/vendor/github.com/golangci/gofmt/gofmt/gofmt.go
+++ /dev/null
@@ -1,570 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package gofmt
-
-import (
- "bytes"
- "context"
- "flag"
- "fmt"
- "go/ast"
- "go/parser"
- "go/printer"
- "go/scanner"
- "go/token"
- "io"
- "io/fs"
- "math/rand"
- "os"
- "path/filepath"
- "runtime"
- "runtime/pprof"
- "strconv"
- "strings"
-
- "github.com/golangci/gofmt/gofmt/internal/diff"
- "golang.org/x/sync/semaphore"
-)
-
-var (
- // main operation modes
- list = flag.Bool("gofmt.l", false, "list files whose formatting differs from gofmt's")
- write = flag.Bool("gofmt.w", false, "write result to (source) file instead of stdout")
- rewriteRule = flag.String("gofmt.r", "", "rewrite rule (e.g., 'a[b:len(a)] -> a[b:]')")
- simplifyAST = flag.Bool("gofmt.s", false, "simplify code")
- doDiff = flag.Bool("gofmt.d", false, "display diffs instead of rewriting files")
- allErrors = flag.Bool("gofmt.e", false, "report all errors (not just the first 10 on different lines)")
-
- // debugging
- cpuprofile = flag.String("gofmt.cpuprofile", "", "write cpu profile to this file")
-)
-
-// Keep these in sync with go/format/format.go.
-const (
- tabWidth = 8
- printerMode = printer.UseSpaces | printer.TabIndent | printerNormalizeNumbers
-
- // printerNormalizeNumbers means to canonicalize number literal prefixes
- // and exponents while printing. See https://golang.org/doc/go1.13#gofmt.
- //
- // This value is defined in go/printer specifically for go/format and cmd/gofmt.
- printerNormalizeNumbers = 1 << 30
-)
-
-// fdSem guards the number of concurrently-open file descriptors.
-//
-// For now, this is arbitrarily set to 200, based on the observation that many
-// platforms default to a kernel limit of 256. Ideally, perhaps we should derive
-// it from rlimit on platforms that support that system call.
-//
-// File descriptors opened from outside of this package are not tracked,
-// so this limit may be approximate.
-var fdSem = make(chan bool, 200)
-
-var (
- rewrite func(*token.FileSet, *ast.File) *ast.File
- parserMode parser.Mode
-)
-
-func usage() {
- fmt.Fprintf(os.Stderr, "usage: gofmt [flags] [path ...]\n")
- flag.PrintDefaults()
-}
-
-func initParserMode() {
- parserMode = parser.ParseComments
- if *allErrors {
- parserMode |= parser.AllErrors
- }
- // It's only -r that makes use of go/ast's object resolution,
- // so avoid the unnecessary work if the flag isn't used.
- if *rewriteRule == "" {
- parserMode |= parser.SkipObjectResolution
- }
-}
-
-func isGoFile(f fs.DirEntry) bool {
- // ignore non-Go files
- name := f.Name()
- return !strings.HasPrefix(name, ".") && strings.HasSuffix(name, ".go") && !f.IsDir()
-}
-
-// A sequencer performs concurrent tasks that may write output, but emits that
-// output in a deterministic order.
-type sequencer struct {
- maxWeight int64
- sem *semaphore.Weighted // weighted by input bytes (an approximate proxy for memory overhead)
- prev <-chan *reporterState // 1-buffered
-}
-
-// newSequencer returns a sequencer that allows concurrent tasks up to maxWeight
-// and writes tasks' output to out and err.
-func newSequencer(maxWeight int64, out, err io.Writer) *sequencer {
- sem := semaphore.NewWeighted(maxWeight)
- prev := make(chan *reporterState, 1)
- prev <- &reporterState{out: out, err: err}
- return &sequencer{
- maxWeight: maxWeight,
- sem: sem,
- prev: prev,
- }
-}
-
-// exclusive is a weight that can be passed to a sequencer to cause
-// a task to be executed without any other concurrent tasks.
-const exclusive = -1
-
-// Add blocks until the sequencer has enough weight to spare, then adds f as a
-// task to be executed concurrently.
-//
-// If the weight is either negative or larger than the sequencer's maximum
-// weight, Add blocks until all other tasks have completed, then the task
-// executes exclusively (blocking all other calls to Add until it completes).
-//
-// f may run concurrently in a goroutine, but its output to the passed-in
-// reporter will be sequential relative to the other tasks in the sequencer.
-//
-// If f invokes a method on the reporter, execution of that method may block
-// until the previous task has finished. (To maximize concurrency, f should
-// avoid invoking the reporter until it has finished any parallelizable work.)
-//
-// If f returns a non-nil error, that error will be reported after f's output
-// (if any) and will cause a nonzero final exit code.
-func (s *sequencer) Add(weight int64, f func(*reporter) error) {
- if weight < 0 || weight > s.maxWeight {
- weight = s.maxWeight
- }
- if err := s.sem.Acquire(context.TODO(), weight); err != nil {
- // Change the task from "execute f" to "report err".
- weight = 0
- f = func(*reporter) error { return err }
- }
-
- r := &reporter{prev: s.prev}
- next := make(chan *reporterState, 1)
- s.prev = next
-
- // Start f in parallel: it can run until it invokes a method on r, at which
- // point it will block until the previous task releases the output state.
- go func() {
- if err := f(r); err != nil {
- r.Report(err)
- }
- next <- r.getState() // Release the next task.
- s.sem.Release(weight)
- }()
-}
-
-// AddReport prints an error to s after the output of any previously-added
-// tasks, causing the final exit code to be nonzero.
-func (s *sequencer) AddReport(err error) {
- s.Add(0, func(*reporter) error { return err })
-}
-
-// GetExitCode waits for all previously-added tasks to complete, then returns an
-// exit code for the sequence suitable for passing to os.Exit.
-func (s *sequencer) GetExitCode() int {
- c := make(chan int, 1)
- s.Add(0, func(r *reporter) error {
- c <- r.ExitCode()
- return nil
- })
- return <-c
-}
-
-// A reporter reports output, warnings, and errors.
-type reporter struct {
- prev <-chan *reporterState
- state *reporterState
-}
-
-// reporterState carries the state of a reporter instance.
-//
-// Only one reporter at a time may have access to a reporterState.
-type reporterState struct {
- out, err io.Writer
- exitCode int
-}
-
-// getState blocks until any prior reporters are finished with the reporter
-// state, then returns the state for manipulation.
-func (r *reporter) getState() *reporterState {
- if r.state == nil {
- r.state = <-r.prev
- }
- return r.state
-}
-
-// Warnf emits a warning message to the reporter's error stream,
-// without changing its exit code.
-func (r *reporter) Warnf(format string, args ...any) {
- fmt.Fprintf(r.getState().err, format, args...)
-}
-
-// Write emits a slice to the reporter's output stream.
-//
-// Any error is returned to the caller, and does not otherwise affect the
-// reporter's exit code.
-func (r *reporter) Write(p []byte) (int, error) {
- return r.getState().out.Write(p)
-}
-
-// Report emits a non-nil error to the reporter's error stream,
-// changing its exit code to a nonzero value.
-func (r *reporter) Report(err error) {
- if err == nil {
- panic("Report with nil error")
- }
- st := r.getState()
- scanner.PrintError(st.err, err)
- st.exitCode = 2
-}
-
-func (r *reporter) ExitCode() int {
- return r.getState().exitCode
-}
-
-// If info == nil, we are formatting stdin instead of a file.
-// If in == nil, the source is the contents of the file with the given filename.
-func processFile(filename string, info fs.FileInfo, in io.Reader, r *reporter) error {
- src, err := readFile(filename, info, in)
- if err != nil {
- return err
- }
-
- fileSet := token.NewFileSet()
- // If we are formatting stdin, we accept a program fragment in lieu of a
- // complete source file.
- fragmentOk := info == nil
- file, sourceAdj, indentAdj, err := parse(fileSet, filename, src, fragmentOk)
- if err != nil {
- return err
- }
-
- if rewrite != nil {
- if sourceAdj == nil {
- file = rewrite(fileSet, file)
- } else {
- r.Warnf("warning: rewrite ignored for incomplete programs\n")
- }
- }
-
- ast.SortImports(fileSet, file)
-
- if *simplifyAST {
- simplify(file)
- }
-
- res, err := format(fileSet, file, sourceAdj, indentAdj, src, printer.Config{Mode: printerMode, Tabwidth: tabWidth})
- if err != nil {
- return err
- }
-
- if !bytes.Equal(src, res) {
- // formatting has changed
- if *list {
- fmt.Fprintln(r, filename)
- }
- if *write {
- if info == nil {
- panic("-w should not have been allowed with stdin")
- }
-
- perm := info.Mode().Perm()
- if err := writeFile(filename, src, res, perm, info.Size()); err != nil {
- return err
- }
- }
- if *doDiff {
- newName := filepath.ToSlash(filename)
- oldName := newName + ".orig"
- r.Write(diff.Diff(oldName, src, newName, res))
- }
- }
-
- if !*list && !*write && !*doDiff {
- _, err = r.Write(res)
- }
-
- return err
-}
-
-// readFile reads the contents of filename, described by info.
-// If in is non-nil, readFile reads directly from it.
-// Otherwise, readFile opens and reads the file itself,
-// with the number of concurrently-open files limited by fdSem.
-func readFile(filename string, info fs.FileInfo, in io.Reader) ([]byte, error) {
- if in == nil {
- fdSem <- true
- var err error
- f, err := os.Open(filename)
- if err != nil {
- return nil, err
- }
- in = f
- defer func() {
- f.Close()
- <-fdSem
- }()
- }
-
- // Compute the file's size and read its contents with minimal allocations.
- //
- // If we have the FileInfo from filepath.WalkDir, use it to make
- // a buffer of the right size and avoid ReadAll's reallocations.
- //
- // If the size is unknown (or bogus, or overflows an int), fall back to
- // a size-independent ReadAll.
- size := -1
- if info != nil && info.Mode().IsRegular() && int64(int(info.Size())) == info.Size() {
- size = int(info.Size())
- }
- if size+1 <= 0 {
- // The file is not known to be regular, so we don't have a reliable size for it.
- var err error
- src, err := io.ReadAll(in)
- if err != nil {
- return nil, err
- }
- return src, nil
- }
-
- // We try to read size+1 bytes so that we can detect modifications: if we
- // read more than size bytes, then the file was modified concurrently.
- // (If that happens, we could, say, append to src to finish the read, or
- // proceed with a truncated buffer — but the fact that it changed at all
- // indicates a possible race with someone editing the file, so we prefer to
- // stop to avoid corrupting it.)
- src := make([]byte, size+1)
- n, err := io.ReadFull(in, src)
- switch err {
- case nil, io.EOF, io.ErrUnexpectedEOF:
- // io.ReadFull returns io.EOF (for an empty file) or io.ErrUnexpectedEOF
- // (for a non-empty file) if the file was changed unexpectedly. Continue
- // with comparing file sizes in those cases.
- default:
- return nil, err
- }
- if n < size {
- return nil, fmt.Errorf("error: size of %s changed during reading (from %d to %d bytes)", filename, size, n)
- } else if n > size {
- return nil, fmt.Errorf("error: size of %s changed during reading (from %d to >=%d bytes)", filename, size, len(src))
- }
- return src[:n], nil
-}
-
-func main() {
- // Arbitrarily limit in-flight work to 2MiB times the number of threads.
- //
- // The actual overhead for the parse tree and output will depend on the
- // specifics of the file, but this at least keeps the footprint of the process
- // roughly proportional to GOMAXPROCS.
- maxWeight := (2 << 20) * int64(runtime.GOMAXPROCS(0))
- s := newSequencer(maxWeight, os.Stdout, os.Stderr)
-
- // call gofmtMain in a separate function
- // so that it can use defer and have them
- // run before the exit.
- gofmtMain(s)
- os.Exit(s.GetExitCode())
-}
-
-func gofmtMain(s *sequencer) {
- flag.Usage = usage
- flag.Parse()
-
- if *cpuprofile != "" {
- fdSem <- true
- f, err := os.Create(*cpuprofile)
- if err != nil {
- s.AddReport(fmt.Errorf("creating cpu profile: %s", err))
- return
- }
- defer func() {
- f.Close()
- <-fdSem
- }()
- pprof.StartCPUProfile(f)
- defer pprof.StopCPUProfile()
- }
-
- initParserMode()
- initRewrite()
-
- args := flag.Args()
- if len(args) == 0 {
- if *write {
- s.AddReport(fmt.Errorf("error: cannot use -w with standard input"))
- return
- }
- s.Add(0, func(r *reporter) error {
- return processFile("<standard input>", nil, os.Stdin, r)
- })
- return
- }
-
- for _, arg := range args {
- switch info, err := os.Stat(arg); {
- case err != nil:
- s.AddReport(err)
- case !info.IsDir():
- // Non-directory arguments are always formatted.
- arg := arg
- s.Add(fileWeight(arg, info), func(r *reporter) error {
- return processFile(arg, info, nil, r)
- })
- default:
- // Directories are walked, ignoring non-Go files.
- err := filepath.WalkDir(arg, func(path string, f fs.DirEntry, err error) error {
- if err != nil || !isGoFile(f) {
- return err
- }
- info, err := f.Info()
- if err != nil {
- s.AddReport(err)
- return nil
- }
- s.Add(fileWeight(path, info), func(r *reporter) error {
- return processFile(path, info, nil, r)
- })
- return nil
- })
- if err != nil {
- s.AddReport(err)
- }
- }
- }
-}
-
-func fileWeight(path string, info fs.FileInfo) int64 {
- if info == nil {
- return exclusive
- }
- if info.Mode().Type() == fs.ModeSymlink {
- var err error
- info, err = os.Stat(path)
- if err != nil {
- return exclusive
- }
- }
- if !info.Mode().IsRegular() {
- // For non-regular files, FileInfo.Size is system-dependent and thus not a
- // reliable indicator of weight.
- return exclusive
- }
- return info.Size()
-}
-
-// writeFile updates a file with the new formatted data.
-func writeFile(filename string, orig, formatted []byte, perm fs.FileMode, size int64) error {
- // Make a temporary backup file before rewriting the original file.
- bakname, err := backupFile(filename, orig, perm)
- if err != nil {
- return err
- }
-
- fdSem <- true
- defer func() { <-fdSem }()
-
- fout, err := os.OpenFile(filename, os.O_WRONLY, perm)
- if err != nil {
- // We couldn't even open the file, so it should
- // not have changed.
- os.Remove(bakname)
- return err
- }
- defer fout.Close() // for error paths
-
- restoreFail := func(err error) {
- fmt.Fprintf(os.Stderr, "gofmt: %s: error restoring file to original: %v; backup in %s\n", filename, err, bakname)
- }
-
- n, err := fout.Write(formatted)
- if err == nil && int64(n) < size {
- err = fout.Truncate(int64(n))
- }
-
- if err != nil {
- // Rewriting the file failed.
-
- if n == 0 {
- // Original file unchanged.
- os.Remove(bakname)
- return err
- }
-
- // Try to restore the original contents.
-
- no, erro := fout.WriteAt(orig, 0)
- if erro != nil {
- // That failed too.
- restoreFail(erro)
- return err
- }
-
- if no < n {
- // Original file is shorter. Truncate.
- if erro = fout.Truncate(int64(no)); erro != nil {
- restoreFail(erro)
- return err
- }
- }
-
- if erro := fout.Close(); erro != nil {
- restoreFail(erro)
- return err
- }
-
- // Original contents restored.
- os.Remove(bakname)
- return err
- }
-
- if err := fout.Close(); err != nil {
- restoreFail(err)
- return err
- }
-
- // File updated.
- os.Remove(bakname)
- return nil
-}
-
-// backupFile writes data to a new file named filename<number> with permissions perm,
-// with <number> randomly chosen such that the file name is unique. backupFile returns
-// the chosen file name.
-func backupFile(filename string, data []byte, perm fs.FileMode) (string, error) {
- fdSem <- true
- defer func() { <-fdSem }()
-
- nextRandom := func() string {
- return strconv.Itoa(rand.Int())
- }
-
- dir, base := filepath.Split(filename)
- var (
- bakname string
- f *os.File
- )
- for {
- bakname = filepath.Join(dir, base+"."+nextRandom())
- var err error
- f, err = os.OpenFile(bakname, os.O_RDWR|os.O_CREATE|os.O_EXCL, perm)
- if err == nil {
- break
- }
- if err != nil && !os.IsExist(err) {
- return "", err
- }
- }
-
- // write data to backup file
- _, err := f.Write(data)
- if err1 := f.Close(); err == nil {
- err = err1
- }
-
- return bakname, err
-}
diff --git a/vendor/github.com/golangci/gofmt/gofmt/golangci.go b/vendor/github.com/golangci/gofmt/gofmt/golangci.go
deleted file mode 100644
index a69611e1d..000000000
--- a/vendor/github.com/golangci/gofmt/gofmt/golangci.go
+++ /dev/null
@@ -1,100 +0,0 @@
-package gofmt
-
-import (
- "bytes"
- "fmt"
- "go/ast"
- "go/parser"
- "go/printer"
- "go/token"
- "os"
- "path/filepath"
- "sync"
-
- "github.com/golangci/gofmt/gofmt/internal/diff"
-)
-
-var parserModeMu sync.RWMutex
-
-type RewriteRule struct {
- Pattern string
- Replacement string
-}
-
-// Run runs gofmt.
-// Deprecated: use RunRewrite instead.
-func Run(filename string, needSimplify bool) ([]byte, error) {
- return RunRewrite(filename, needSimplify, nil)
-}
-
-// RunRewrite runs gofmt.
-// empty string `rewrite` will be ignored.
-func RunRewrite(filename string, needSimplify bool, rewriteRules []RewriteRule) ([]byte, error) {
- src, err := os.ReadFile(filename)
- if err != nil {
- return nil, err
- }
-
- fset := token.NewFileSet()
-
- parserModeMu.Lock()
- initParserMode()
- parserModeMu.Unlock()
-
- file, sourceAdj, indentAdj, err := parse(fset, filename, src, false)
- if err != nil {
- return nil, err
- }
-
- file, err = rewriteFileContent(fset, file, rewriteRules)
- if err != nil {
- return nil, err
- }
-
- ast.SortImports(fset, file)
-
- if needSimplify {
- simplify(file)
- }
-
- res, err := format(fset, file, sourceAdj, indentAdj, src, printer.Config{Mode: printerMode, Tabwidth: tabWidth})
- if err != nil {
- return nil, err
- }
-
- if bytes.Equal(src, res) {
- return nil, nil
- }
-
- // formatting has changed
- newName := filepath.ToSlash(filename)
- oldName := newName + ".orig"
-
- return diff.Diff(oldName, src, newName, res), nil
-}
-
-func rewriteFileContent(fset *token.FileSet, file *ast.File, rewriteRules []RewriteRule) (*ast.File, error) {
- for _, rewriteRule := range rewriteRules {
- pattern, err := parseExpression(rewriteRule.Pattern, "pattern")
- if err != nil {
- return nil, err
- }
-
- replacement, err := parseExpression(rewriteRule.Replacement, "replacement")
- if err != nil {
- return nil, err
- }
-
- file = rewriteFile(fset, pattern, replacement, file)
- }
-
- return file, nil
-}
-
-func parseExpression(s, what string) (ast.Expr, error) {
- x, err := parser.ParseExpr(s)
- if err != nil {
- return nil, fmt.Errorf("parsing %s %q at %s\n", what, s, err)
- }
- return x, nil
-}
diff --git a/vendor/github.com/golangci/gofmt/gofmt/internal.go b/vendor/github.com/golangci/gofmt/gofmt/internal.go
deleted file mode 100644
index 231a25091..000000000
--- a/vendor/github.com/golangci/gofmt/gofmt/internal.go
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// TODO(gri): This file and the file src/go/format/internal.go are
-// the same (but for this comment and the package name). Do not modify
-// one without the other. Determine if we can factor out functionality
-// in a public API. See also #11844 for context.
-
-package gofmt
-
-import (
- "bytes"
- "go/ast"
- "go/parser"
- "go/printer"
- "go/token"
- "strings"
-)
-
-// parse parses src, which was read from the named file,
-// as a Go source file, declaration, or statement list.
-func parse(fset *token.FileSet, filename string, src []byte, fragmentOk bool) (
- file *ast.File,
- sourceAdj func(src []byte, indent int) []byte,
- indentAdj int,
- err error,
-) {
-
- // START - Change related to usage inside golangci-lint
- parserModeMu.Lock()
- parserMode := parserMode
- parserModeMu.Unlock()
- // END - Change related to usage inside golangci-lint
-
- // Try as whole source file.
- file, err = parser.ParseFile(fset, filename, src, parserMode)
- // If there's no error, return. If the error is that the source file didn't begin with a
- // package line and source fragments are ok, fall through to
- // try as a source fragment. Stop and return on any other error.
- if err == nil || !fragmentOk || !strings.Contains(err.Error(), "expected 'package'") {
- return
- }
-
- // If this is a declaration list, make it a source file
- // by inserting a package clause.
- // Insert using a ';', not a newline, so that the line numbers
- // in psrc match the ones in src.
- psrc := append([]byte("package p;"), src...)
- file, err = parser.ParseFile(fset, filename, psrc, parserMode)
- if err == nil {
- sourceAdj = func(src []byte, indent int) []byte {
- // Remove the package clause.
- // Gofmt has turned the ';' into a '\n'.
- src = src[indent+len("package p\n"):]
- return bytes.TrimSpace(src)
- }
- return
- }
- // If the error is that the source file didn't begin with a
- // declaration, fall through to try as a statement list.
- // Stop and return on any other error.
- if !strings.Contains(err.Error(), "expected declaration") {
- return
- }
-
- // If this is a statement list, make it a source file
- // by inserting a package clause and turning the list
- // into a function body. This handles expressions too.
- // Insert using a ';', not a newline, so that the line numbers
- // in fsrc match the ones in src. Add an extra '\n' before the '}'
- // to make sure comments are flushed before the '}'.
- fsrc := append(append([]byte("package p; func _() {"), src...), '\n', '\n', '}')
- file, err = parser.ParseFile(fset, filename, fsrc, parserMode)
- if err == nil {
- sourceAdj = func(src []byte, indent int) []byte {
- // Cap adjusted indent to zero.
- if indent < 0 {
- indent = 0
- }
- // Remove the wrapping.
- // Gofmt has turned the "; " into a "\n\n".
- // There will be two non-blank lines with indent, hence 2*indent.
- src = src[2*indent+len("package p\n\nfunc _() {"):]
- // Remove only the "}\n" suffix: remaining whitespaces will be trimmed anyway
- src = src[:len(src)-len("}\n")]
- return bytes.TrimSpace(src)
- }
- // Gofmt has also indented the function body one level.
- // Adjust that with indentAdj.
- indentAdj = -1
- }
-
- // Succeeded, or out of options.
- return
-}
-
-// format formats the given package file originally obtained from src
-// and adjusts the result based on the original source via sourceAdj
-// and indentAdj.
-func format(
- fset *token.FileSet,
- file *ast.File,
- sourceAdj func(src []byte, indent int) []byte,
- indentAdj int,
- src []byte,
- cfg printer.Config,
-) ([]byte, error) {
- if sourceAdj == nil {
- // Complete source file.
- var buf bytes.Buffer
- err := cfg.Fprint(&buf, fset, file)
- if err != nil {
- return nil, err
- }
- return buf.Bytes(), nil
- }
-
- // Partial source file.
- // Determine and prepend leading space.
- i, j := 0, 0
- for j < len(src) && isSpace(src[j]) {
- if src[j] == '\n' {
- i = j + 1 // byte offset of last line in leading space
- }
- j++
- }
- var res []byte
- res = append(res, src[:i]...)
-
- // Determine and prepend indentation of first code line.
- // Spaces are ignored unless there are no tabs,
- // in which case spaces count as one tab.
- indent := 0
- hasSpace := false
- for _, b := range src[i:j] {
- switch b {
- case ' ':
- hasSpace = true
- case '\t':
- indent++
- }
- }
- if indent == 0 && hasSpace {
- indent = 1
- }
- for i := 0; i < indent; i++ {
- res = append(res, '\t')
- }
-
- // Format the source.
- // Write it without any leading and trailing space.
- cfg.Indent = indent + indentAdj
- var buf bytes.Buffer
- err := cfg.Fprint(&buf, fset, file)
- if err != nil {
- return nil, err
- }
- out := sourceAdj(buf.Bytes(), cfg.Indent)
-
- // If the adjusted output is empty, the source
- // was empty but (possibly) for white space.
- // The result is the incoming source.
- if len(out) == 0 {
- return src, nil
- }
-
- // Otherwise, append output to leading space.
- res = append(res, out...)
-
- // Determine and append trailing space.
- i = len(src)
- for i > 0 && isSpace(src[i-1]) {
- i--
- }
- return append(res, src[i:]...), nil
-}
-
-// isSpace reports whether the byte is a space character.
-// isSpace defines a space as being among the following bytes: ' ', '\t', '\n' and '\r'.
-func isSpace(b byte) bool {
- return b == ' ' || b == '\t' || b == '\n' || b == '\r'
-}
diff --git a/vendor/github.com/golangci/gofmt/gofmt/internal/diff/diff.go b/vendor/github.com/golangci/gofmt/gofmt/internal/diff/diff.go
deleted file mode 100644
index 6a40b23fc..000000000
--- a/vendor/github.com/golangci/gofmt/gofmt/internal/diff/diff.go
+++ /dev/null
@@ -1,261 +0,0 @@
-// Copyright 2022 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package diff
-
-import (
- "bytes"
- "fmt"
- "sort"
- "strings"
-)
-
-// A pair is a pair of values tracked for both the x and y side of a diff.
-// It is typically a pair of line indexes.
-type pair struct{ x, y int }
-
-// Diff returns an anchored diff of the two texts old and new
-// in the “unified diff” format. If old and new are identical,
-// Diff returns a nil slice (no output).
-//
-// Unix diff implementations typically look for a diff with
-// the smallest number of lines inserted and removed,
-// which can in the worst case take time quadratic in the
-// number of lines in the texts. As a result, many implementations
-// either can be made to run for a long time or cut off the search
-// after a predetermined amount of work.
-//
-// In contrast, this implementation looks for a diff with the
-// smallest number of “unique” lines inserted and removed,
-// where unique means a line that appears just once in both old and new.
-// We call this an “anchored diff” because the unique lines anchor
-// the chosen matching regions. An anchored diff is usually clearer
-// than a standard diff, because the algorithm does not try to
-// reuse unrelated blank lines or closing braces.
-// The algorithm also guarantees to run in O(n log n) time
-// instead of the standard O(n²) time.
-//
-// Some systems call this approach a “patience diff,” named for
-// the “patience sorting” algorithm, itself named for a solitaire card game.
-// We avoid that name for two reasons. First, the name has been used
-// for a few different variants of the algorithm, so it is imprecise.
-// Second, the name is frequently interpreted as meaning that you have
-// to wait longer (to be patient) for the diff, meaning that it is a slower algorithm,
-// when in fact the algorithm is faster than the standard one.
-func Diff(oldName string, old []byte, newName string, new []byte) []byte {
- if bytes.Equal(old, new) {
- return nil
- }
- x := lines(old)
- y := lines(new)
-
- // Print diff header.
- var out bytes.Buffer
- fmt.Fprintf(&out, "diff %s %s\n", oldName, newName)
- fmt.Fprintf(&out, "--- %s\n", oldName)
- fmt.Fprintf(&out, "+++ %s\n", newName)
-
- // Loop over matches to consider,
- // expanding each match to include surrounding lines,
- // and then printing diff chunks.
- // To avoid setup/teardown cases outside the loop,
- // tgs returns a leading {0,0} and trailing {len(x), len(y)} pair
- // in the sequence of matches.
- var (
- done pair // printed up to x[:done.x] and y[:done.y]
- chunk pair // start lines of current chunk
- count pair // number of lines from each side in current chunk
- ctext []string // lines for current chunk
- )
- for _, m := range tgs(x, y) {
- if m.x < done.x {
- // Already handled scanning forward from earlier match.
- continue
- }
-
- // Expand matching lines as far as possible,
- // establishing that x[start.x:end.x] == y[start.y:end.y].
- // Note that on the first (or last) iteration we may (or definitely do)
- // have an empty match: start.x==end.x and start.y==end.y.
- start := m
- for start.x > done.x && start.y > done.y && x[start.x-1] == y[start.y-1] {
- start.x--
- start.y--
- }
- end := m
- for end.x < len(x) && end.y < len(y) && x[end.x] == y[end.y] {
- end.x++
- end.y++
- }
-
- // Emit the mismatched lines before start into this chunk.
- // (No effect on first sentinel iteration, when start = {0,0}.)
- for _, s := range x[done.x:start.x] {
- ctext = append(ctext, "-"+s)
- count.x++
- }
- for _, s := range y[done.y:start.y] {
- ctext = append(ctext, "+"+s)
- count.y++
- }
-
- // If we're not at EOF and have too few common lines,
- // the chunk includes all the common lines and continues.
- const C = 3 // number of context lines
- if (end.x < len(x) || end.y < len(y)) &&
- (end.x-start.x < C || (len(ctext) > 0 && end.x-start.x < 2*C)) {
- for _, s := range x[start.x:end.x] {
- ctext = append(ctext, " "+s)
- count.x++
- count.y++
- }
- done = end
- continue
- }
-
- // End chunk with common lines for context.
- if len(ctext) > 0 {
- n := end.x - start.x
- if n > C {
- n = C
- }
- for _, s := range x[start.x : start.x+n] {
- ctext = append(ctext, " "+s)
- count.x++
- count.y++
- }
- done = pair{start.x + n, start.y + n}
-
- // Format and emit chunk.
- // Convert line numbers to 1-indexed.
- // Special case: empty file shows up as 0,0 not 1,0.
- if count.x > 0 {
- chunk.x++
- }
- if count.y > 0 {
- chunk.y++
- }
- fmt.Fprintf(&out, "@@ -%d,%d +%d,%d @@\n", chunk.x, count.x, chunk.y, count.y)
- for _, s := range ctext {
- out.WriteString(s)
- }
- count.x = 0
- count.y = 0
- ctext = ctext[:0]
- }
-
- // If we reached EOF, we're done.
- if end.x >= len(x) && end.y >= len(y) {
- break
- }
-
- // Otherwise start a new chunk.
- chunk = pair{end.x - C, end.y - C}
- for _, s := range x[chunk.x:end.x] {
- ctext = append(ctext, " "+s)
- count.x++
- count.y++
- }
- done = end
- }
-
- return out.Bytes()
-}
-
-// lines returns the lines in the file x, including newlines.
-// If the file does not end in a newline, one is supplied
-// along with a warning about the missing newline.
-func lines(x []byte) []string {
- l := strings.SplitAfter(string(x), "\n")
- if l[len(l)-1] == "" {
- l = l[:len(l)-1]
- } else {
- // Treat last line as having a message about the missing newline attached,
- // using the same text as BSD/GNU diff (including the leading backslash).
- l[len(l)-1] += "\n\\ No newline at end of file\n"
- }
- return l
-}
-
-// tgs returns the pairs of indexes of the longest common subsequence
-// of unique lines in x and y, where a unique line is one that appears
-// once in x and once in y.
-//
-// The longest common subsequence algorithm is as described in
-// Thomas G. Szymanski, “A Special Case of the Maximal Common
-// Subsequence Problem,” Princeton TR #170 (January 1975),
-// available at https://research.swtch.com/tgs170.pdf.
-func tgs(x, y []string) []pair {
- // Count the number of times each string appears in a and b.
- // We only care about 0, 1, many, counted as 0, -1, -2
- // for the x side and 0, -4, -8 for the y side.
- // Using negative numbers now lets us distinguish positive line numbers later.
- m := make(map[string]int)
- for _, s := range x {
- if c := m[s]; c > -2 {
- m[s] = c - 1
- }
- }
- for _, s := range y {
- if c := m[s]; c > -8 {
- m[s] = c - 4
- }
- }
-
- // Now unique strings can be identified by m[s] = -1+-4.
- //
- // Gather the indexes of those strings in x and y, building:
- // xi[i] = increasing indexes of unique strings in x.
- // yi[i] = increasing indexes of unique strings in y.
- // inv[i] = index j such that x[xi[i]] = y[yi[j]].
- var xi, yi, inv []int
- for i, s := range y {
- if m[s] == -1+-4 {
- m[s] = len(yi)
- yi = append(yi, i)
- }
- }
- for i, s := range x {
- if j, ok := m[s]; ok && j >= 0 {
- xi = append(xi, i)
- inv = append(inv, j)
- }
- }
-
- // Apply Algorithm A from Szymanski's paper.
- // In those terms, A = J = inv and B = [0, n).
- // We add sentinel pairs {0,0}, and {len(x),len(y)}
- // to the returned sequence, to help the processing loop.
- J := inv
- n := len(xi)
- T := make([]int, n)
- L := make([]int, n)
- for i := range T {
- T[i] = n + 1
- }
- for i := 0; i < n; i++ {
- k := sort.Search(n, func(k int) bool {
- return T[k] >= J[i]
- })
- T[k] = J[i]
- L[i] = k + 1
- }
- k := 0
- for _, v := range L {
- if k < v {
- k = v
- }
- }
- seq := make([]pair, 2+k)
- seq[1+k] = pair{len(x), len(y)} // sentinel at end
- lastj := n
- for i := n - 1; i >= 0; i-- {
- if L[i] == k && J[i] < lastj {
- seq[k] = pair{xi[i], yi[J[i]]}
- k--
- }
- }
- seq[0] = pair{0, 0} // sentinel at start
- return seq
-}
diff --git a/vendor/github.com/golangci/gofmt/gofmt/readme.md b/vendor/github.com/golangci/gofmt/gofmt/readme.md
deleted file mode 100644
index be08179e6..000000000
--- a/vendor/github.com/golangci/gofmt/gofmt/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Hard Fork of gofmt
-
-- https://github.com/golang/go/blob/master/src/cmd/gofmt/
-- https://github.com/golang/go/blob/master/src/internal/testenv
-- https://github.com/golang/go/blob/master/src/internal/platform
-- https://github.com/golang/go/blob/master/src/internal/txtar
-- https://github.com/golang/go/blob/master/src/internal/diff
-- https://github.com/golang/go/blob/master/src/internal/cfg
-
-## Updates
-
-- 2024-08-17: Sync with go1.22.6
-- 2023-02-28: Sync with go1.21.7
-- 2023-10-04: Sync with go1.20.8
-- 2023-10-04: Sync with go1.19.13
-- 2022-08-31: Sync with go1.18.5
diff --git a/vendor/github.com/golangci/gofmt/gofmt/rewrite.go b/vendor/github.com/golangci/gofmt/gofmt/rewrite.go
deleted file mode 100644
index c95d44f61..000000000
--- a/vendor/github.com/golangci/gofmt/gofmt/rewrite.go
+++ /dev/null
@@ -1,309 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package gofmt
-
-import (
- "fmt"
- "go/ast"
- "go/parser"
- "go/token"
- "os"
- "reflect"
- "strings"
- "unicode"
- "unicode/utf8"
-)
-
-func initRewrite() {
- if *rewriteRule == "" {
- rewrite = nil // disable any previous rewrite
- return
- }
- f := strings.Split(*rewriteRule, "->")
- if len(f) != 2 {
- fmt.Fprintf(os.Stderr, "rewrite rule must be of the form 'pattern -> replacement'\n")
- os.Exit(2)
- }
- pattern := parseExpr(f[0], "pattern")
- replace := parseExpr(f[1], "replacement")
- rewrite = func(fset *token.FileSet, p *ast.File) *ast.File {
- return rewriteFile(fset, pattern, replace, p)
- }
-}
-
-// parseExpr parses s as an expression.
-// It might make sense to expand this to allow statement patterns,
-// but there are problems with preserving formatting and also
-// with what a wildcard for a statement looks like.
-func parseExpr(s, what string) ast.Expr {
- x, err := parser.ParseExpr(s)
- if err != nil {
- fmt.Fprintf(os.Stderr, "parsing %s %s at %s\n", what, s, err)
- os.Exit(2)
- }
- return x
-}
-
-// Keep this function for debugging.
-/*
-func dump(msg string, val reflect.Value) {
- fmt.Printf("%s:\n", msg)
- ast.Print(fileSet, val.Interface())
- fmt.Println()
-}
-*/
-
-// rewriteFile applies the rewrite rule 'pattern -> replace' to an entire file.
-func rewriteFile(fileSet *token.FileSet, pattern, replace ast.Expr, p *ast.File) *ast.File {
- cmap := ast.NewCommentMap(fileSet, p, p.Comments)
- m := make(map[string]reflect.Value)
- pat := reflect.ValueOf(pattern)
- repl := reflect.ValueOf(replace)
-
- var rewriteVal func(val reflect.Value) reflect.Value
- rewriteVal = func(val reflect.Value) reflect.Value {
- // don't bother if val is invalid to start with
- if !val.IsValid() {
- return reflect.Value{}
- }
- val = apply(rewriteVal, val)
- clear(m)
- if match(m, pat, val) {
- val = subst(m, repl, reflect.ValueOf(val.Interface().(ast.Node).Pos()))
- }
- return val
- }
-
- r := apply(rewriteVal, reflect.ValueOf(p)).Interface().(*ast.File)
- r.Comments = cmap.Filter(r).Comments() // recreate comments list
- return r
-}
-
-// set is a wrapper for x.Set(y); it protects the caller from panics if x cannot be changed to y.
-func set(x, y reflect.Value) {
- // don't bother if x cannot be set or y is invalid
- if !x.CanSet() || !y.IsValid() {
- return
- }
- defer func() {
- if x := recover(); x != nil {
- if s, ok := x.(string); ok &&
- (strings.Contains(s, "type mismatch") || strings.Contains(s, "not assignable")) {
- // x cannot be set to y - ignore this rewrite
- return
- }
- panic(x)
- }
- }()
- x.Set(y)
-}
-
-// Values/types for special cases.
-var (
- objectPtrNil = reflect.ValueOf((*ast.Object)(nil))
- scopePtrNil = reflect.ValueOf((*ast.Scope)(nil))
-
- identType = reflect.TypeOf((*ast.Ident)(nil))
- objectPtrType = reflect.TypeOf((*ast.Object)(nil))
- positionType = reflect.TypeOf(token.NoPos)
- callExprType = reflect.TypeOf((*ast.CallExpr)(nil))
- scopePtrType = reflect.TypeOf((*ast.Scope)(nil))
-)
-
-// apply replaces each AST field x in val with f(x), returning val.
-// To avoid extra conversions, f operates on the reflect.Value form.
-func apply(f func(reflect.Value) reflect.Value, val reflect.Value) reflect.Value {
- if !val.IsValid() {
- return reflect.Value{}
- }
-
- // *ast.Objects introduce cycles and are likely incorrect after
- // rewrite; don't follow them but replace with nil instead
- if val.Type() == objectPtrType {
- return objectPtrNil
- }
-
- // similarly for scopes: they are likely incorrect after a rewrite;
- // replace them with nil
- if val.Type() == scopePtrType {
- return scopePtrNil
- }
-
- switch v := reflect.Indirect(val); v.Kind() {
- case reflect.Slice:
- for i := 0; i < v.Len(); i++ {
- e := v.Index(i)
- set(e, f(e))
- }
- case reflect.Struct:
- for i := 0; i < v.NumField(); i++ {
- e := v.Field(i)
- set(e, f(e))
- }
- case reflect.Interface:
- e := v.Elem()
- set(v, f(e))
- }
- return val
-}
-
-func isWildcard(s string) bool {
- rune, size := utf8.DecodeRuneInString(s)
- return size == len(s) && unicode.IsLower(rune)
-}
-
-// match reports whether pattern matches val,
-// recording wildcard submatches in m.
-// If m == nil, match checks whether pattern == val.
-func match(m map[string]reflect.Value, pattern, val reflect.Value) bool {
- // Wildcard matches any expression. If it appears multiple
- // times in the pattern, it must match the same expression
- // each time.
- if m != nil && pattern.IsValid() && pattern.Type() == identType {
- name := pattern.Interface().(*ast.Ident).Name
- if isWildcard(name) && val.IsValid() {
- // wildcards only match valid (non-nil) expressions.
- if _, ok := val.Interface().(ast.Expr); ok && !val.IsNil() {
- if old, ok := m[name]; ok {
- return match(nil, old, val)
- }
- m[name] = val
- return true
- }
- }
- }
-
- // Otherwise, pattern and val must match recursively.
- if !pattern.IsValid() || !val.IsValid() {
- return !pattern.IsValid() && !val.IsValid()
- }
- if pattern.Type() != val.Type() {
- return false
- }
-
- // Special cases.
- switch pattern.Type() {
- case identType:
- // For identifiers, only the names need to match
- // (and none of the other *ast.Object information).
- // This is a common case, handle it all here instead
- // of recursing down any further via reflection.
- p := pattern.Interface().(*ast.Ident)
- v := val.Interface().(*ast.Ident)
- return p == nil && v == nil || p != nil && v != nil && p.Name == v.Name
- case objectPtrType, positionType:
- // object pointers and token positions always match
- return true
- case callExprType:
- // For calls, the Ellipsis fields (token.Pos) must
- // match since that is how f(x) and f(x...) are different.
- // Check them here but fall through for the remaining fields.
- p := pattern.Interface().(*ast.CallExpr)
- v := val.Interface().(*ast.CallExpr)
- if p.Ellipsis.IsValid() != v.Ellipsis.IsValid() {
- return false
- }
- }
-
- p := reflect.Indirect(pattern)
- v := reflect.Indirect(val)
- if !p.IsValid() || !v.IsValid() {
- return !p.IsValid() && !v.IsValid()
- }
-
- switch p.Kind() {
- case reflect.Slice:
- if p.Len() != v.Len() {
- return false
- }
- for i := 0; i < p.Len(); i++ {
- if !match(m, p.Index(i), v.Index(i)) {
- return false
- }
- }
- return true
-
- case reflect.Struct:
- for i := 0; i < p.NumField(); i++ {
- if !match(m, p.Field(i), v.Field(i)) {
- return false
- }
- }
- return true
-
- case reflect.Interface:
- return match(m, p.Elem(), v.Elem())
- }
-
- // Handle token integers, etc.
- return p.Interface() == v.Interface()
-}
-
-// subst returns a copy of pattern with values from m substituted in place
-// of wildcards and pos used as the position of tokens from the pattern.
-// if m == nil, subst returns a copy of pattern and doesn't change the line
-// number information.
-func subst(m map[string]reflect.Value, pattern reflect.Value, pos reflect.Value) reflect.Value {
- if !pattern.IsValid() {
- return reflect.Value{}
- }
-
- // Wildcard gets replaced with map value.
- if m != nil && pattern.Type() == identType {
- name := pattern.Interface().(*ast.Ident).Name
- if isWildcard(name) {
- if old, ok := m[name]; ok {
- return subst(nil, old, reflect.Value{})
- }
- }
- }
-
- if pos.IsValid() && pattern.Type() == positionType {
- // use new position only if old position was valid in the first place
- if old := pattern.Interface().(token.Pos); !old.IsValid() {
- return pattern
- }
- return pos
- }
-
- // Otherwise copy.
- switch p := pattern; p.Kind() {
- case reflect.Slice:
- if p.IsNil() {
- // Do not turn nil slices into empty slices. go/ast
- // guarantees that certain lists will be nil if not
- // populated.
- return reflect.Zero(p.Type())
- }
- v := reflect.MakeSlice(p.Type(), p.Len(), p.Len())
- for i := 0; i < p.Len(); i++ {
- v.Index(i).Set(subst(m, p.Index(i), pos))
- }
- return v
-
- case reflect.Struct:
- v := reflect.New(p.Type()).Elem()
- for i := 0; i < p.NumField(); i++ {
- v.Field(i).Set(subst(m, p.Field(i), pos))
- }
- return v
-
- case reflect.Pointer:
- v := reflect.New(p.Type()).Elem()
- if elem := p.Elem(); elem.IsValid() {
- v.Set(subst(m, elem, pos).Addr())
- }
- return v
-
- case reflect.Interface:
- v := reflect.New(p.Type()).Elem()
- if elem := p.Elem(); elem.IsValid() {
- v.Set(subst(m, elem, pos))
- }
- return v
- }
-
- return pattern
-}
diff --git a/vendor/github.com/golangci/gofmt/gofmt/simplify.go b/vendor/github.com/golangci/gofmt/gofmt/simplify.go
deleted file mode 100644
index 3b34d562b..000000000
--- a/vendor/github.com/golangci/gofmt/gofmt/simplify.go
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2010 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package gofmt
-
-import (
- "go/ast"
- "go/token"
- "reflect"
-)
-
-type simplifier struct{}
-
-func (s simplifier) Visit(node ast.Node) ast.Visitor {
- switch n := node.(type) {
- case *ast.CompositeLit:
- // array, slice, and map composite literals may be simplified
- outer := n
- var keyType, eltType ast.Expr
- switch typ := outer.Type.(type) {
- case *ast.ArrayType:
- eltType = typ.Elt
- case *ast.MapType:
- keyType = typ.Key
- eltType = typ.Value
- }
-
- if eltType != nil {
- var ktyp reflect.Value
- if keyType != nil {
- ktyp = reflect.ValueOf(keyType)
- }
- typ := reflect.ValueOf(eltType)
- for i, x := range outer.Elts {
- px := &outer.Elts[i]
- // look at value of indexed/named elements
- if t, ok := x.(*ast.KeyValueExpr); ok {
- if keyType != nil {
- s.simplifyLiteral(ktyp, keyType, t.Key, &t.Key)
- }
- x = t.Value
- px = &t.Value
- }
- s.simplifyLiteral(typ, eltType, x, px)
- }
- // node was simplified - stop walk (there are no subnodes to simplify)
- return nil
- }
-
- case *ast.SliceExpr:
- // a slice expression of the form: s[a:len(s)]
- // can be simplified to: s[a:]
- // if s is "simple enough" (for now we only accept identifiers)
- //
- // Note: This may not be correct because len may have been redeclared in
- // the same package. However, this is extremely unlikely and so far
- // (April 2022, after years of supporting this rewrite feature)
- // has never come up, so let's keep it working as is (see also #15153).
- //
- // Also note that this code used to use go/ast's object tracking,
- // which was removed in exchange for go/parser.Mode.SkipObjectResolution.
- // False positives are extremely unlikely as described above,
- // and go/ast's object tracking is incomplete in any case.
- if n.Max != nil {
- // - 3-index slices always require the 2nd and 3rd index
- break
- }
- if s, _ := n.X.(*ast.Ident); s != nil {
- // the array/slice object is a single identifier
- if call, _ := n.High.(*ast.CallExpr); call != nil && len(call.Args) == 1 && !call.Ellipsis.IsValid() {
- // the high expression is a function call with a single argument
- if fun, _ := call.Fun.(*ast.Ident); fun != nil && fun.Name == "len" {
- // the function called is "len"
- if arg, _ := call.Args[0].(*ast.Ident); arg != nil && arg.Name == s.Name {
- // the len argument is the array/slice object
- n.High = nil
- }
- }
- }
- }
- // Note: We could also simplify slice expressions of the form s[0:b] to s[:b]
- // but we leave them as is since sometimes we want to be very explicit
- // about the lower bound.
- // An example where the 0 helps:
- // x, y, z := b[0:2], b[2:4], b[4:6]
- // An example where it does not:
- // x, y := b[:n], b[n:]
-
- case *ast.RangeStmt:
- // - a range of the form: for x, _ = range v {...}
- // can be simplified to: for x = range v {...}
- // - a range of the form: for _ = range v {...}
- // can be simplified to: for range v {...}
- if isBlank(n.Value) {
- n.Value = nil
- }
- if isBlank(n.Key) && n.Value == nil {
- n.Key = nil
- }
- }
-
- return s
-}
-
-func (s simplifier) simplifyLiteral(typ reflect.Value, astType, x ast.Expr, px *ast.Expr) {
- ast.Walk(s, x) // simplify x
-
- // if the element is a composite literal and its literal type
- // matches the outer literal's element type exactly, the inner
- // literal type may be omitted
- if inner, ok := x.(*ast.CompositeLit); ok {
- if match(nil, typ, reflect.ValueOf(inner.Type)) {
- inner.Type = nil
- }
- }
- // if the outer literal's element type is a pointer type *T
- // and the element is & of a composite literal of type T,
- // the inner &T may be omitted.
- if ptr, ok := astType.(*ast.StarExpr); ok {
- if addr, ok := x.(*ast.UnaryExpr); ok && addr.Op == token.AND {
- if inner, ok := addr.X.(*ast.CompositeLit); ok {
- if match(nil, reflect.ValueOf(ptr.X), reflect.ValueOf(inner.Type)) {
- inner.Type = nil // drop T
- *px = inner // drop &
- }
- }
- }
- }
-}
-
-func isBlank(x ast.Expr) bool {
- ident, ok := x.(*ast.Ident)
- return ok && ident.Name == "_"
-}
-
-func simplify(f *ast.File) {
- // remove empty declarations such as "const ()", etc
- removeEmptyDeclGroups(f)
-
- var s simplifier
- ast.Walk(s, f)
-}
-
-func removeEmptyDeclGroups(f *ast.File) {
- i := 0
- for _, d := range f.Decls {
- if g, ok := d.(*ast.GenDecl); !ok || !isEmpty(f, g) {
- f.Decls[i] = d
- i++
- }
- }
- f.Decls = f.Decls[:i]
-}
-
-func isEmpty(f *ast.File, g *ast.GenDecl) bool {
- if g.Doc != nil || g.Specs != nil {
- return false
- }
-
- for _, c := range f.Comments {
- // if there is a comment in the declaration, it is not considered empty
- if g.Pos() <= c.Pos() && c.End() <= g.End() {
- return false
- }
- }
-
- return true
-}
diff --git a/vendor/github.com/golangci/gofmt/goimports/LICENSE b/vendor/github.com/golangci/gofmt/goimports/LICENSE
deleted file mode 100644
index 6a66aea5e..000000000
--- a/vendor/github.com/golangci/gofmt/goimports/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2009 The Go Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/github.com/golangci/gofmt/goimports/goimports.go b/vendor/github.com/golangci/gofmt/goimports/goimports.go
deleted file mode 100644
index 556f2bd7e..000000000
--- a/vendor/github.com/golangci/gofmt/goimports/goimports.go
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package goimports
-
-import (
- "bytes"
- "fmt"
- "os"
- "os/exec"
- "path/filepath"
- "runtime"
-)
-
-// Extracted from golang.org/x/tools@v0.24.0/cmd/goimports/goimports.go
-
-func writeTempFile(dir, prefix string, data []byte) (string, error) {
- file, err := os.CreateTemp(dir, prefix)
- if err != nil {
- return "", err
- }
- _, err = file.Write(data)
- if err1 := file.Close(); err == nil {
- err = err1
- }
- if err != nil {
- os.Remove(file.Name())
- return "", err
- }
- return file.Name(), nil
-}
-
-func diff(b1, b2 []byte, filename string) (data []byte, err error) {
- f1, err := writeTempFile("", "gofmt", b1)
- if err != nil {
- return
- }
- defer os.Remove(f1)
-
- f2, err := writeTempFile("", "gofmt", b2)
- if err != nil {
- return
- }
- defer os.Remove(f2)
-
- cmd := "diff"
- if runtime.GOOS == "plan9" {
- cmd = "/bin/ape/diff"
- }
-
- data, err = exec.Command(cmd, "-u", f1, f2).CombinedOutput()
- if len(data) > 0 {
- // diff exits with a non-zero status when the files don't match.
- // Ignore that failure as long as we get output.
- return replaceTempFilename(data, filename)
- }
- return
-}
-
-// replaceTempFilename replaces temporary filenames in diff with actual one.
-//
-// --- /tmp/gofmt316145376 2017-02-03 19:13:00.280468375 -0500
-// +++ /tmp/gofmt617882815 2017-02-03 19:13:00.280468375 -0500
-// ...
-// ->
-// --- path/to/file.go.orig 2017-02-03 19:13:00.280468375 -0500
-// +++ path/to/file.go 2017-02-03 19:13:00.280468375 -0500
-// ...
-func replaceTempFilename(diff []byte, filename string) ([]byte, error) {
- bs := bytes.SplitN(diff, []byte{'\n'}, 3)
- if len(bs) < 3 {
- return nil, fmt.Errorf("got unexpected diff for %s", filename)
- }
- // Preserve timestamps.
- var t0, t1 []byte
- if i := bytes.LastIndexByte(bs[0], '\t'); i != -1 {
- t0 = bs[0][i:]
- }
- if i := bytes.LastIndexByte(bs[1], '\t'); i != -1 {
- t1 = bs[1][i:]
- }
- // Always print filepath with slash separator.
- f := filepath.ToSlash(filename)
- bs[0] = []byte(fmt.Sprintf("--- %s%s", f+".orig", t0))
- bs[1] = []byte(fmt.Sprintf("+++ %s%s", f, t1))
- return bytes.Join(bs, []byte{'\n'}), nil
-}
diff --git a/vendor/github.com/golangci/gofmt/goimports/golangci.go b/vendor/github.com/golangci/gofmt/goimports/golangci.go
deleted file mode 100644
index 6ff286ae0..000000000
--- a/vendor/github.com/golangci/gofmt/goimports/golangci.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package goimports
-
-import (
- "bytes"
- "fmt"
- "os"
-
- "golang.org/x/tools/imports"
-)
-
-// Run runs goimports.
-// The local prefixes (comma separated) must be defined through the global variable imports.LocalPrefix.
-func Run(filename string) ([]byte, error) {
- src, err := os.ReadFile(filename)
- if err != nil {
- return nil, err
- }
-
- res, err := imports.Process(filename, src, nil)
- if err != nil {
- return nil, err
- }
-
- if bytes.Equal(src, res) {
- return nil, nil
- }
-
- // formatting has changed
- data, err := diff(src, res, filename)
- if err != nil {
- return nil, fmt.Errorf("error computing diff: %s", err)
- }
-
- return data, nil
-}
diff --git a/vendor/github.com/golangci/gofmt/goimports/readme.md b/vendor/github.com/golangci/gofmt/goimports/readme.md
deleted file mode 100644
index 23eecf82f..000000000
--- a/vendor/github.com/golangci/gofmt/goimports/readme.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Hard Fork of goimports
-
-- https://github.com/golang/tools/tree/master/cmd/goimports
-
-## Updates
-
-- 2024-08-17: Sync with golang.org/x/tools v0.24.0
-- 2024-02-28: Sync with golang.org/x/tools v0.18.0
-- 2023-10-04: Sync with golang.org/x/tools v0.13.0
-- 2022-08-31: Sync with golang.org/x/tools v0.1.12
diff --git a/vendor/github.com/golangci/golangci-lint/LICENSE b/vendor/github.com/golangci/golangci-lint/LICENSE
deleted file mode 100644
index e72bfddab..000000000
--- a/vendor/github.com/golangci/golangci-lint/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<https://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<https://www.gnu.org/licenses/why-not-lgpl.html>. \ No newline at end of file
diff --git a/vendor/github.com/golangci/golangci-lint/cmd/golangci-lint/main.go b/vendor/github.com/golangci/golangci-lint/cmd/golangci-lint/main.go
deleted file mode 100644
index 413e071d6..000000000
--- a/vendor/github.com/golangci/golangci-lint/cmd/golangci-lint/main.go
+++ /dev/null
@@ -1,81 +0,0 @@
-package main
-
-import (
- "fmt"
- "os"
- "runtime/debug"
-
- "github.com/golangci/golangci-lint/pkg/commands"
- "github.com/golangci/golangci-lint/pkg/exitcodes"
-)
-
-var (
- goVersion = "unknown"
-
- // Populated by goreleaser during build
- version = "unknown"
- commit = "?"
- date = ""
-)
-
-func main() {
- info := createBuildInfo()
-
- if err := commands.Execute(info); err != nil {
- _, _ = fmt.Fprintf(os.Stderr, "Failed executing command with error: %v\n", err)
- os.Exit(exitcodes.Failure)
- }
-}
-
-func createBuildInfo() commands.BuildInfo {
- info := commands.BuildInfo{
- Commit: commit,
- Version: version,
- GoVersion: goVersion,
- Date: date,
- }
-
- buildInfo, available := debug.ReadBuildInfo()
- if !available {
- return info
- }
-
- info.GoVersion = buildInfo.GoVersion
-
- if date != "" {
- return info
- }
-
- info.Version = buildInfo.Main.Version
-
- var revision string
- var modified string
- for _, setting := range buildInfo.Settings {
- // The `vcs.xxx` information is only available with `go build`.
- // This information is not available with `go install` or `go run`.
- switch setting.Key {
- case "vcs.time":
- info.Date = setting.Value
- case "vcs.revision":
- revision = setting.Value
- case "vcs.modified":
- modified = setting.Value
- }
- }
-
- if revision == "" {
- revision = "unknown"
- }
-
- if modified == "" {
- modified = "?"
- }
-
- if info.Date == "" {
- info.Date = "(unknown)"
- }
-
- info.Commit = fmt.Sprintf("(%s, modified: %s, mod sum: %q)", revision, modified, buildInfo.Main.Sum)
-
- return info
-}
diff --git a/vendor/github.com/golangci/golangci-lint/cmd/golangci-lint/plugins.go b/vendor/github.com/golangci/golangci-lint/cmd/golangci-lint/plugins.go
deleted file mode 100644
index 541ff7624..000000000
--- a/vendor/github.com/golangci/golangci-lint/cmd/golangci-lint/plugins.go
+++ /dev/null
@@ -1,3 +0,0 @@
-package main
-
-// This file is used to declare module plugins.
diff --git a/vendor/github.com/golangci/golangci-lint/internal/cache/cache.go b/vendor/github.com/golangci/golangci-lint/internal/cache/cache.go
deleted file mode 100644
index c249084e1..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/cache/cache.go
+++ /dev/null
@@ -1,298 +0,0 @@
-package cache
-
-import (
- "bytes"
- "encoding/gob"
- "encoding/hex"
- "errors"
- "fmt"
- "runtime"
- "slices"
- "strings"
- "sync"
-
- "golang.org/x/exp/maps"
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/internal/go/cache"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/timeutils"
-)
-
-type HashMode int
-
-const (
- HashModeNeedOnlySelf HashMode = iota
- HashModeNeedDirectDeps
- HashModeNeedAllDeps
-)
-
-var ErrMissing = errors.New("missing data")
-
-type hashResults map[HashMode]string
-
-// Cache is a per-package data cache.
-// A cached data is invalidated when package,
-// or it's dependencies change.
-type Cache struct {
- lowLevelCache cache.Cache
- pkgHashes sync.Map
- sw *timeutils.Stopwatch
- log logutils.Log
- ioSem chan struct{} // semaphore limiting parallel IO
-}
-
-func NewCache(sw *timeutils.Stopwatch, log logutils.Log) (*Cache, error) {
- return &Cache{
- lowLevelCache: cache.Default(),
- sw: sw,
- log: log,
- ioSem: make(chan struct{}, runtime.GOMAXPROCS(-1)),
- }, nil
-}
-
-func (c *Cache) Close() {
- err := c.sw.TrackStageErr("close", c.lowLevelCache.Close)
- if err != nil {
- c.log.Errorf("cache close: %v", err)
- }
-}
-
-func (c *Cache) Put(pkg *packages.Package, mode HashMode, key string, data any) error {
- buf, err := c.encode(data)
- if err != nil {
- return err
- }
-
- actionID, err := c.buildKey(pkg, mode, key)
- if err != nil {
- return fmt.Errorf("failed to calculate package %s action id: %w", pkg.Name, err)
- }
-
- err = c.putBytes(actionID, buf)
- if err != nil {
- return fmt.Errorf("failed to save data to low-level cache by key %s for package %s: %w", key, pkg.Name, err)
- }
-
- return nil
-}
-
-func (c *Cache) Get(pkg *packages.Package, mode HashMode, key string, data any) error {
- actionID, err := c.buildKey(pkg, mode, key)
- if err != nil {
- return fmt.Errorf("failed to calculate package %s action id: %w", pkg.Name, err)
- }
-
- cachedData, err := c.getBytes(actionID)
- if err != nil {
- if cache.IsErrMissing(err) {
- return ErrMissing
- }
- return fmt.Errorf("failed to get data from low-level cache by key %s for package %s: %w", key, pkg.Name, err)
- }
-
- return c.decode(cachedData, data)
-}
-
-func (c *Cache) buildKey(pkg *packages.Package, mode HashMode, key string) (cache.ActionID, error) {
- return timeutils.TrackStage(c.sw, "key build", func() (cache.ActionID, error) {
- actionID, err := c.pkgActionID(pkg, mode)
- if err != nil {
- return actionID, err
- }
-
- subkey, subkeyErr := cache.Subkey(actionID, key)
- if subkeyErr != nil {
- return actionID, fmt.Errorf("failed to build subkey: %w", subkeyErr)
- }
-
- return subkey, nil
- })
-}
-
-func (c *Cache) pkgActionID(pkg *packages.Package, mode HashMode) (cache.ActionID, error) {
- hash, err := c.packageHash(pkg, mode)
- if err != nil {
- return cache.ActionID{}, fmt.Errorf("failed to get package hash: %w", err)
- }
-
- key, err := cache.NewHash("action ID")
- if err != nil {
- return cache.ActionID{}, fmt.Errorf("failed to make a hash: %w", err)
- }
-
- fmt.Fprintf(key, "pkgpath %s\n", pkg.PkgPath)
- fmt.Fprintf(key, "pkghash %s\n", hash)
-
- return key.Sum(), nil
-}
-
-func (c *Cache) packageHash(pkg *packages.Package, mode HashMode) (string, error) {
- results, found := c.pkgHashes.Load(pkg)
- if found {
- hashRes := results.(hashResults)
- if result, ok := hashRes[mode]; ok {
- return result, nil
- }
-
- return "", fmt.Errorf("no mode %d in hash result", mode)
- }
-
- hashRes, err := c.computePkgHash(pkg)
- if err != nil {
- return "", err
- }
-
- result, found := hashRes[mode]
- if !found {
- return "", fmt.Errorf("invalid mode %d", mode)
- }
-
- c.pkgHashes.Store(pkg, hashRes)
-
- return result, nil
-}
-
-// computePkgHash computes a package's hash.
-// The hash is based on all Go files that make up the package,
-// as well as the hashes of imported packages.
-func (c *Cache) computePkgHash(pkg *packages.Package) (hashResults, error) {
- key, err := cache.NewHash("package hash")
- if err != nil {
- return nil, fmt.Errorf("failed to make a hash: %w", err)
- }
-
- hashRes := hashResults{}
-
- fmt.Fprintf(key, "pkgpath %s\n", pkg.PkgPath)
-
- for _, f := range pkg.CompiledGoFiles {
- h, fErr := c.fileHash(f)
- if fErr != nil {
- return nil, fmt.Errorf("failed to calculate file %s hash: %w", f, fErr)
- }
-
- fmt.Fprintf(key, "file %s %x\n", f, h)
- }
-
- curSum := key.Sum()
- hashRes[HashModeNeedOnlySelf] = hex.EncodeToString(curSum[:])
-
- imps := maps.Values(pkg.Imports)
-
- slices.SortFunc(imps, func(a, b *packages.Package) int {
- return strings.Compare(a.PkgPath, b.PkgPath)
- })
-
- if err := c.computeDepsHash(HashModeNeedOnlySelf, imps, key); err != nil {
- return nil, err
- }
-
- curSum = key.Sum()
- hashRes[HashModeNeedDirectDeps] = hex.EncodeToString(curSum[:])
-
- if err := c.computeDepsHash(HashModeNeedAllDeps, imps, key); err != nil {
- return nil, err
- }
-
- curSum = key.Sum()
- hashRes[HashModeNeedAllDeps] = hex.EncodeToString(curSum[:])
-
- return hashRes, nil
-}
-
-func (c *Cache) computeDepsHash(depMode HashMode, imps []*packages.Package, key *cache.Hash) error {
- for _, dep := range imps {
- if dep.PkgPath == "unsafe" {
- continue
- }
-
- depHash, err := c.packageHash(dep, depMode)
- if err != nil {
- return fmt.Errorf("failed to calculate hash for dependency %s with mode %d: %w", dep.Name, depMode, err)
- }
-
- fmt.Fprintf(key, "import %s %s\n", dep.PkgPath, depHash)
- }
-
- return nil
-}
-
-func (c *Cache) putBytes(actionID cache.ActionID, buf *bytes.Buffer) error {
- c.ioSem <- struct{}{}
-
- err := c.sw.TrackStageErr("cache io", func() error {
- return cache.PutBytes(c.lowLevelCache, actionID, buf.Bytes())
- })
-
- <-c.ioSem
-
- if err != nil {
- return err
- }
-
- return nil
-}
-
-func (c *Cache) getBytes(actionID cache.ActionID) ([]byte, error) {
- c.ioSem <- struct{}{}
-
- cachedData, err := timeutils.TrackStage(c.sw, "cache io", func() ([]byte, error) {
- b, _, errGB := cache.GetBytes(c.lowLevelCache, actionID)
- return b, errGB
- })
-
- <-c.ioSem
-
- if err != nil {
- return nil, err
- }
-
- return cachedData, nil
-}
-
-func (c *Cache) fileHash(f string) ([cache.HashSize]byte, error) {
- c.ioSem <- struct{}{}
-
- h, err := cache.FileHash(f)
-
- <-c.ioSem
-
- if err != nil {
- return [cache.HashSize]byte{}, err
- }
-
- return h, nil
-}
-
-func (c *Cache) encode(data any) (*bytes.Buffer, error) {
- buf := &bytes.Buffer{}
- err := c.sw.TrackStageErr("gob", func() error {
- return gob.NewEncoder(buf).Encode(data)
- })
- if err != nil {
- return nil, fmt.Errorf("failed to gob encode: %w", err)
- }
-
- return buf, nil
-}
-
-func (c *Cache) decode(b []byte, data any) error {
- err := c.sw.TrackStageErr("gob", func() error {
- return gob.NewDecoder(bytes.NewReader(b)).Decode(data)
- })
- if err != nil {
- return fmt.Errorf("failed to gob decode: %w", err)
- }
-
- return nil
-}
-
-func SetSalt(b *bytes.Buffer) {
- cache.SetSalt(b.Bytes())
-}
-
-func DefaultDir() string {
- cacheDir, _ := cache.DefaultDir()
- return cacheDir
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/errorutil/errors.go b/vendor/github.com/golangci/golangci-lint/internal/errorutil/errors.go
deleted file mode 100644
index c8a3a0357..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/errorutil/errors.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package errorutil
-
-import (
- "fmt"
-)
-
-// PanicError can be used to not print stacktrace twice
-type PanicError struct {
- recovered any
- stack []byte
-}
-
-func NewPanicError(recovered any, stack []byte) *PanicError {
- return &PanicError{recovered: recovered, stack: stack}
-}
-
-func (e PanicError) Error() string {
- return fmt.Sprint(e.recovered)
-}
-
-func (e PanicError) Stack() []byte {
- return e.stack
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/LICENSE b/vendor/github.com/golangci/golangci-lint/internal/go/LICENSE
deleted file mode 100644
index 6a66aea5e..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2009 The Go Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/cache/cache.go b/vendor/github.com/golangci/golangci-lint/internal/go/cache/cache.go
deleted file mode 100644
index 85899ebc9..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/cache/cache.go
+++ /dev/null
@@ -1,663 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package cache implements a build artifact cache.
-//
-// This package is a slightly modified fork of Go's
-// cmd/go/internal/cache package.
-package cache
-
-import (
- "bytes"
- "crypto/sha256"
- "encoding/hex"
- "errors"
- "fmt"
- "io"
- "io/fs"
- "os"
- "path/filepath"
- "strconv"
- "strings"
- "time"
-
- "github.com/golangci/golangci-lint/internal/go/mmap"
- "github.com/golangci/golangci-lint/internal/go/robustio"
- "github.com/rogpeppe/go-internal/lockedfile"
-)
-
-// An ActionID is a cache action key, the hash of a complete description of a
-// repeatable computation (command line, environment variables,
-// input file contents, executable contents).
-type ActionID [HashSize]byte
-
-// An OutputID is a cache output key, the hash of an output of a computation.
-type OutputID [HashSize]byte
-
-// Cache is the interface as used by the cmd/go.
-type Cache interface {
- // Get returns the cache entry for the provided ActionID.
- // On miss, the error type should be of type *entryNotFoundError.
- //
- // After a success call to Get, OutputFile(Entry.OutputID) must
- // exist on disk for until Close is called (at the end of the process).
- Get(ActionID) (Entry, error)
-
- // Put adds an item to the cache.
- //
- // The seeker is only used to seek to the beginning. After a call to Put,
- // the seek position is not guaranteed to be in any particular state.
- //
- // As a special case, if the ReadSeeker is of type noVerifyReadSeeker,
- // the verification from GODEBUG=goverifycache=1 is skipped.
- //
- // After a success call to Get, OutputFile(Entry.OutputID) must
- // exist on disk for until Close is called (at the end of the process).
- Put(ActionID, io.ReadSeeker) (_ OutputID, size int64, _ error)
-
- // Close is called at the end of the go process. Implementations can do
- // cache cleanup work at this phase, or wait for and report any errors from
- // background cleanup work started earlier. Any cache trimming should in one
- // process should not violate cause the invariants of this interface to be
- // violated in another process. Namely, a cache trim from one process should
- // not delete an ObjectID from disk that was recently Get or Put from
- // another process. As a rule of thumb, don't trim things used in the last
- // day.
- Close() error
-
- // OutputFile returns the path on disk where OutputID is stored.
- //
- // It's only called after a successful get or put call so it doesn't need
- // to return an error; it's assumed that if the previous get or put succeeded,
- // it's already on disk.
- OutputFile(OutputID) string
-
- // FuzzDir returns where fuzz files are stored.
- FuzzDir() string
-}
-
-// A Cache is a package cache, backed by a file system directory tree.
-type DiskCache struct {
- dir string
- now func() time.Time
-}
-
-// Open opens and returns the cache in the given directory.
-//
-// It is safe for multiple processes on a single machine to use the
-// same cache directory in a local file system simultaneously.
-// They will coordinate using operating system file locks and may
-// duplicate effort but will not corrupt the cache.
-//
-// However, it is NOT safe for multiple processes on different machines
-// to share a cache directory (for example, if the directory were stored
-// in a network file system). File locking is notoriously unreliable in
-// network file systems and may not suffice to protect the cache.
-func Open(dir string) (*DiskCache, error) {
- info, err := os.Stat(dir)
- if err != nil {
- return nil, err
- }
- if !info.IsDir() {
- return nil, &fs.PathError{Op: "open", Path: dir, Err: fmt.Errorf("not a directory")}
- }
- for i := 0; i < 256; i++ {
- name := filepath.Join(dir, fmt.Sprintf("%02x", i))
- if err := os.MkdirAll(name, 0744); err != nil {
- return nil, err
- }
- }
- c := &DiskCache{
- dir: dir,
- now: time.Now,
- }
- return c, nil
-}
-
-// fileName returns the name of the file corresponding to the given id.
-func (c *DiskCache) fileName(id [HashSize]byte, key string) string {
- return filepath.Join(c.dir, fmt.Sprintf("%02x", id[0]), fmt.Sprintf("%x", id)+"-"+key)
-}
-
-// An entryNotFoundError indicates that a cache entry was not found, with an
-// optional underlying reason.
-type entryNotFoundError struct {
- Err error
-}
-
-func (e *entryNotFoundError) Error() string {
- if e.Err == nil {
- return "cache entry not found"
- }
- return fmt.Sprintf("cache entry not found: %v", e.Err)
-}
-
-func (e *entryNotFoundError) Unwrap() error {
- return e.Err
-}
-
-const (
- // action entry file is "v1 <hex id> <hex out> <decimal size space-padded to 20 bytes> <unixnano space-padded to 20 bytes>\n"
- hexSize = HashSize * 2
- entrySize = 2 + 1 + hexSize + 1 + hexSize + 1 + 20 + 1 + 20 + 1
-)
-
-// verify controls whether to run the cache in verify mode.
-// In verify mode, the cache always returns errMissing from Get
-// but then double-checks in Put that the data being written
-// exactly matches any existing entry. This provides an easy
-// way to detect program behavior that would have been different
-// had the cache entry been returned from Get.
-//
-// verify is enabled by setting the environment variable
-// GODEBUG=gocacheverify=1.
-var verify = false
-
-var errVerifyMode = errors.New("gocacheverify=1")
-
-// DebugTest is set when GODEBUG=gocachetest=1 is in the environment.
-var DebugTest = false
-
-// func init() { initEnv() }
-
-// var (
-// gocacheverify = godebug.New("gocacheverify")
-// gocachehash = godebug.New("gocachehash")
-// gocachetest = godebug.New("gocachetest")
-// )
-
-// func initEnv() {
-// if gocacheverify.Value() == "1" {
-// gocacheverify.IncNonDefault()
-// verify = true
-// }
-// if gocachehash.Value() == "1" {
-// gocachehash.IncNonDefault()
-// debugHash = true
-// }
-// if gocachetest.Value() == "1" {
-// gocachetest.IncNonDefault()
-// DebugTest = true
-// }
-// }
-
-// Get looks up the action ID in the cache,
-// returning the corresponding output ID and file size, if any.
-// Note that finding an output ID does not guarantee that the
-// saved file for that output ID is still available.
-func (c *DiskCache) Get(id ActionID) (Entry, error) {
- if verify {
- return Entry{}, &entryNotFoundError{Err: errVerifyMode}
- }
- return c.get(id)
-}
-
-type Entry struct {
- OutputID OutputID
- Size int64
- Time time.Time // when added to cache
-}
-
-// get is Get but does not respect verify mode, so that Put can use it.
-func (c *DiskCache) get(id ActionID) (Entry, error) {
- missing := func(reason error) (Entry, error) {
- return Entry{}, &entryNotFoundError{Err: reason}
- }
- f, err := os.Open(c.fileName(id, "a"))
- if err != nil {
- return missing(err)
- }
- defer f.Close()
- entry := make([]byte, entrySize+1) // +1 to detect whether f is too long
- if n, err := io.ReadFull(f, entry); n > entrySize {
- return missing(errors.New("too long"))
- } else if err != io.ErrUnexpectedEOF {
- if err == io.EOF {
- return missing(errors.New("file is empty"))
- }
- return missing(err)
- } else if n < entrySize {
- return missing(errors.New("entry file incomplete"))
- }
- if entry[0] != 'v' || entry[1] != '1' || entry[2] != ' ' || entry[3+hexSize] != ' ' || entry[3+hexSize+1+hexSize] != ' ' || entry[3+hexSize+1+hexSize+1+20] != ' ' || entry[entrySize-1] != '\n' {
- return missing(errors.New("invalid header"))
- }
- eid, entry := entry[3:3+hexSize], entry[3+hexSize:]
- eout, entry := entry[1:1+hexSize], entry[1+hexSize:]
- esize, entry := entry[1:1+20], entry[1+20:]
- etime, entry := entry[1:1+20], entry[1+20:]
- var buf [HashSize]byte
- if _, err := hex.Decode(buf[:], eid); err != nil {
- return missing(fmt.Errorf("decoding ID: %v", err))
- } else if buf != id {
- return missing(errors.New("mismatched ID"))
- }
- if _, err := hex.Decode(buf[:], eout); err != nil {
- return missing(fmt.Errorf("decoding output ID: %v", err))
- }
- i := 0
- for i < len(esize) && esize[i] == ' ' {
- i++
- }
- size, err := strconv.ParseInt(string(esize[i:]), 10, 64)
- if err != nil {
- return missing(fmt.Errorf("parsing size: %v", err))
- } else if size < 0 {
- return missing(errors.New("negative size"))
- }
- i = 0
- for i < len(etime) && etime[i] == ' ' {
- i++
- }
- tm, err := strconv.ParseInt(string(etime[i:]), 10, 64)
- if err != nil {
- return missing(fmt.Errorf("parsing timestamp: %v", err))
- } else if tm < 0 {
- return missing(errors.New("negative timestamp"))
- }
-
- err = c.used(c.fileName(id, "a"))
- if err != nil {
- return Entry{}, fmt.Errorf("failed to mark %s as used: %w", c.fileName(id, "a"), err)
- }
-
- return Entry{buf, size, time.Unix(0, tm)}, nil
-}
-
-// GetFile looks up the action ID in the cache and returns
-// the name of the corresponding data file.
-func GetFile(c Cache, id ActionID) (file string, entry Entry, err error) {
- entry, err = c.Get(id)
- if err != nil {
- return "", Entry{}, err
- }
- file = c.OutputFile(entry.OutputID)
- info, err := os.Stat(file)
- if err != nil {
- return "", Entry{}, &entryNotFoundError{Err: err}
- }
- if info.Size() != entry.Size {
- return "", Entry{}, &entryNotFoundError{Err: errors.New("file incomplete")}
- }
- return file, entry, nil
-}
-
-// GetBytes looks up the action ID in the cache and returns
-// the corresponding output bytes.
-// GetBytes should only be used for data that can be expected to fit in memory.
-func GetBytes(c Cache, id ActionID) ([]byte, Entry, error) {
- entry, err := c.Get(id)
- if err != nil {
- return nil, entry, err
- }
- data, err := robustio.ReadFile(c.OutputFile(entry.OutputID))
- if err != nil {
- return nil, entry, &entryNotFoundError{Err: err}
- }
- if sha256.Sum256(data) != entry.OutputID {
- return nil, entry, &entryNotFoundError{Err: errors.New("bad checksum")}
- }
- return data, entry, nil
-}
-
-// GetMmap looks up the action ID in the cache and returns
-// the corresponding output bytes.
-// GetMmap should only be used for data that can be expected to fit in memory.
-func GetMmap(c Cache, id ActionID) ([]byte, Entry, error) {
- entry, err := c.Get(id)
- if err != nil {
- return nil, entry, err
- }
- md, err := mmap.Mmap(c.OutputFile(entry.OutputID))
- if err != nil {
- return nil, Entry{}, err
- }
- if int64(len(md.Data)) != entry.Size {
- return nil, Entry{}, &entryNotFoundError{Err: errors.New("file incomplete")}
- }
- return md.Data, entry, nil
-}
-
-// OutputFile returns the name of the cache file storing output with the given OutputID.
-func (c *DiskCache) OutputFile(out OutputID) string {
- file := c.fileName(out, "d")
- c.used(file)
- return file
-}
-
-// Time constants for cache expiration.
-//
-// We set the mtime on a cache file on each use, but at most one per mtimeInterval (1 hour),
-// to avoid causing many unnecessary inode updates. The mtimes therefore
-// roughly reflect "time of last use" but may in fact be older by at most an hour.
-//
-// We scan the cache for entries to delete at most once per trimInterval (1 day).
-//
-// When we do scan the cache, we delete entries that have not been used for
-// at least trimLimit (5 days). Statistics gathered from a month of usage by
-// Go developers found that essentially all reuse of cached entries happened
-// within 5 days of the previous reuse. See golang.org/issue/22990.
-const (
- mtimeInterval = 1 * time.Hour
- trimInterval = 24 * time.Hour
- trimLimit = 5 * 24 * time.Hour
-)
-
-// used makes a best-effort attempt to update mtime on file,
-// so that mtime reflects cache access time.
-//
-// Because the reflection only needs to be approximate,
-// and to reduce the amount of disk activity caused by using
-// cache entries, used only updates the mtime if the current
-// mtime is more than an hour old. This heuristic eliminates
-// nearly all of the mtime updates that would otherwise happen,
-// while still keeping the mtimes useful for cache trimming.
-func (c *DiskCache) used(file string) error {
- info, err := os.Stat(file)
- if err == nil && c.now().Sub(info.ModTime()) < mtimeInterval {
- return nil
- }
-
- if err != nil {
- if os.IsNotExist(err) {
- return &entryNotFoundError{Err: err}
- }
- return &entryNotFoundError{Err: fmt.Errorf("failed to stat file %s: %w", file, err)}
- }
-
- err = os.Chtimes(file, c.now(), c.now())
- if err != nil {
- return fmt.Errorf("failed to change time of file %s: %w", file, err)
- }
-
- return nil
-}
-
-func (c *DiskCache) Close() error { return c.Trim() }
-
-// Trim removes old cache entries that are likely not to be reused.
-func (c *DiskCache) Trim() error {
- now := c.now()
-
- // We maintain in dir/trim.txt the time of the last completed cache trim.
- // If the cache has been trimmed recently enough, do nothing.
- // This is the common case.
- // If the trim file is corrupt, detected if the file can't be parsed, or the
- // trim time is too far in the future, attempt the trim anyway. It's possible that
- // the cache was full when the corruption happened. Attempting a trim on
- // an empty cache is cheap, so there wouldn't be a big performance hit in that case.
- if data, err := lockedfile.Read(filepath.Join(c.dir, "trim.txt")); err == nil {
- if t, err := strconv.ParseInt(strings.TrimSpace(string(data)), 10, 64); err == nil {
- lastTrim := time.Unix(t, 0)
- if d := now.Sub(lastTrim); d < trimInterval && d > -mtimeInterval {
- return nil
- }
- }
- }
-
- // Trim each of the 256 subdirectories.
- // We subtract an additional mtimeInterval
- // to account for the imprecision of our "last used" mtimes.
- cutoff := now.Add(-trimLimit - mtimeInterval)
- for i := 0; i < 256; i++ {
- subdir := filepath.Join(c.dir, fmt.Sprintf("%02x", i))
- c.trimSubdir(subdir, cutoff)
- }
-
- // Ignore errors from here: if we don't write the complete timestamp, the
- // cache will appear older than it is, and we'll trim it again next time.
- var b bytes.Buffer
- fmt.Fprintf(&b, "%d", now.Unix())
- if err := lockedfile.Write(filepath.Join(c.dir, "trim.txt"), &b, 0666); err != nil {
- return err
- }
-
- return nil
-}
-
-// trimSubdir trims a single cache subdirectory.
-func (c *DiskCache) trimSubdir(subdir string, cutoff time.Time) {
- // Read all directory entries from subdir before removing
- // any files, in case removing files invalidates the file offset
- // in the directory scan. Also, ignore error from f.Readdirnames,
- // because we don't care about reporting the error and we still
- // want to process any entries found before the error.
- f, err := os.Open(subdir)
- if err != nil {
- return
- }
- names, _ := f.Readdirnames(-1)
- f.Close()
-
- for _, name := range names {
- // Remove only cache entries (xxxx-a and xxxx-d).
- if !strings.HasSuffix(name, "-a") && !strings.HasSuffix(name, "-d") {
- continue
- }
- entry := filepath.Join(subdir, name)
- info, err := os.Stat(entry)
- if err == nil && info.ModTime().Before(cutoff) {
- os.Remove(entry)
- }
- }
-}
-
-// putIndexEntry adds an entry to the cache recording that executing the action
-// with the given id produces an output with the given output id (hash) and size.
-func (c *DiskCache) putIndexEntry(id ActionID, out OutputID, size int64, allowVerify bool) error {
- // Note: We expect that for one reason or another it may happen
- // that repeating an action produces a different output hash
- // (for example, if the output contains a time stamp or temp dir name).
- // While not ideal, this is also not a correctness problem, so we
- // don't make a big deal about it. In particular, we leave the action
- // cache entries writable specifically so that they can be overwritten.
- //
- // Setting GODEBUG=gocacheverify=1 does make a big deal:
- // in verify mode we are double-checking that the cache entries
- // are entirely reproducible. As just noted, this may be unrealistic
- // in some cases but the check is also useful for shaking out real bugs.
- entry := fmt.Sprintf("v1 %x %x %20d %20d\n", id, out, size, time.Now().UnixNano())
- if verify && allowVerify {
- old, err := c.get(id)
- if err == nil && (old.OutputID != out || old.Size != size) {
- // panic to show stack trace, so we can see what code is generating this cache entry.
- msg := fmt.Sprintf("go: internal cache error: cache verify failed: id=%x changed:<<<\n%s\n>>>\nold: %x %d\nnew: %x %d", id, reverseHash(id), out, size, old.OutputID, old.Size)
- panic(msg)
- }
- }
- file := c.fileName(id, "a")
-
- // Copy file to cache directory.
- mode := os.O_WRONLY | os.O_CREATE
- f, err := os.OpenFile(file, mode, 0666)
- if err != nil {
- return err
- }
- _, err = f.WriteString(entry)
- if err == nil {
- // Truncate the file only *after* writing it.
- // (This should be a no-op, but truncate just in case of previous corruption.)
- //
- // This differs from os.WriteFile, which truncates to 0 *before* writing
- // via os.O_TRUNC. Truncating only after writing ensures that a second write
- // of the same content to the same file is idempotent, and does not — even
- // temporarily! — undo the effect of the first write.
- err = f.Truncate(int64(len(entry)))
- }
- if closeErr := f.Close(); err == nil {
- err = closeErr
- }
- if err != nil {
- // TODO(bcmills): This Remove potentially races with another go command writing to file.
- // Can we eliminate it?
- os.Remove(file)
- return err
- }
- err = os.Chtimes(file, c.now(), c.now()) // mainly for tests
- if err != nil {
- return fmt.Errorf("failed to change time of file %s: %w", file, err)
- }
-
- return nil
-}
-
-// noVerifyReadSeeker is an io.ReadSeeker wrapper sentinel type
-// that says that Cache.Put should skip the verify check
-// (from GODEBUG=goverifycache=1).
-type noVerifyReadSeeker struct {
- io.ReadSeeker
-}
-
-// Put stores the given output in the cache as the output for the action ID.
-// It may read file twice. The content of file must not change between the two passes.
-func (c *DiskCache) Put(id ActionID, file io.ReadSeeker) (OutputID, int64, error) {
- wrapper, isNoVerify := file.(noVerifyReadSeeker)
- if isNoVerify {
- file = wrapper.ReadSeeker
- }
- return c.put(id, file, !isNoVerify)
-}
-
-// PutNoVerify is like Put but disables the verify check
-// when GODEBUG=goverifycache=1 is set.
-// It is meant for data that is OK to cache but that we expect to vary slightly from run to run,
-// like test output containing times and the like.
-func PutNoVerify(c Cache, id ActionID, file io.ReadSeeker) (OutputID, int64, error) {
- return c.Put(id, noVerifyReadSeeker{file})
-}
-
-func (c *DiskCache) put(id ActionID, file io.ReadSeeker, allowVerify bool) (OutputID, int64, error) {
- // Compute output ID.
- h := sha256.New()
- if _, err := file.Seek(0, 0); err != nil {
- return OutputID{}, 0, err
- }
- size, err := io.Copy(h, file)
- if err != nil {
- return OutputID{}, 0, err
- }
- var out OutputID
- h.Sum(out[:0])
-
- // Copy to cached output file (if not already present).
- if err := c.copyFile(file, out, size); err != nil {
- return out, size, err
- }
-
- // Add to cache index.
- return out, size, c.putIndexEntry(id, out, size, allowVerify)
-}
-
-// PutBytes stores the given bytes in the cache as the output for the action ID.
-func PutBytes(c Cache, id ActionID, data []byte) error {
- _, _, err := c.Put(id, bytes.NewReader(data))
- return err
-}
-
-// copyFile copies file into the cache, expecting it to have the given
-// output ID and size, if that file is not present already.
-func (c *DiskCache) copyFile(file io.ReadSeeker, out OutputID, size int64) error {
- name := c.fileName(out, "d")
- info, err := os.Stat(name)
- if err == nil && info.Size() == size {
- // Check hash.
- if f, err := os.Open(name); err == nil {
- h := sha256.New()
- _, copyErr := io.Copy(h, f)
- if copyErr != nil {
- return fmt.Errorf("failed to copy to sha256: %w", copyErr)
- }
-
- f.Close()
- var out2 OutputID
- h.Sum(out2[:0])
- if out == out2 {
- return nil
- }
- }
- // Hash did not match. Fall through and rewrite file.
- }
-
- // Copy file to cache directory.
- mode := os.O_RDWR | os.O_CREATE
- if err == nil && info.Size() > size { // shouldn't happen but fix in case
- mode |= os.O_TRUNC
- }
- f, err := os.OpenFile(name, mode, 0666)
- if err != nil {
- return err
- }
- defer f.Close()
- if size == 0 {
- // File now exists with correct size.
- // Only one possible zero-length file, so contents are OK too.
- // Early return here makes sure there's a "last byte" for code below.
- return nil
- }
-
- // From here on, if any of the I/O writing the file fails,
- // we make a best-effort attempt to truncate the file f
- // before returning, to avoid leaving bad bytes in the file.
-
- // Copy file to f, but also into h to double-check hash.
- if _, err := file.Seek(0, 0); err != nil {
- f.Truncate(0)
- return err
- }
- h := sha256.New()
- w := io.MultiWriter(f, h)
- if _, err := io.CopyN(w, file, size-1); err != nil {
- f.Truncate(0)
- return err
- }
- // Check last byte before writing it; writing it will make the size match
- // what other processes expect to find and might cause them to start
- // using the file.
- buf := make([]byte, 1)
- if _, err := file.Read(buf); err != nil {
- f.Truncate(0)
- return err
- }
- n, wErr := h.Write(buf)
- if n != len(buf) {
- return fmt.Errorf("wrote to hash %d/%d bytes with error %w", n, len(buf), wErr)
- }
-
- sum := h.Sum(nil)
- if !bytes.Equal(sum, out[:]) {
- f.Truncate(0)
- return fmt.Errorf("file content changed underfoot")
- }
-
- // Commit cache file entry.
- if _, err := f.Write(buf); err != nil {
- f.Truncate(0)
- return err
- }
- if err := f.Close(); err != nil {
- // Data might not have been written,
- // but file may look like it is the right size.
- // To be extra careful, remove cached file.
- os.Remove(name)
- return err
- }
- err = os.Chtimes(name, c.now(), c.now()) // mainly for tests
- if err != nil {
- return fmt.Errorf("failed to change time of file %s: %w", name, err)
- }
-
- return nil
-}
-
-// FuzzDir returns a subdirectory within the cache for storing fuzzing data.
-// The subdirectory may not exist.
-//
-// This directory is managed by the internal/fuzz package. Files in this
-// directory aren't removed by the 'go clean -cache' command or by Trim.
-// They may be removed with 'go clean -fuzzcache'.
-//
-// TODO(#48526): make Trim remove unused files from this directory.
-func (c *DiskCache) FuzzDir() string {
- return filepath.Join(c.dir, "fuzz")
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/cache/cache_gcil.go b/vendor/github.com/golangci/golangci-lint/internal/go/cache/cache_gcil.go
deleted file mode 100644
index b4f07738e..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/cache/cache_gcil.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package cache
-
-import (
- "errors"
-)
-
-// IsErrMissing allows to access to the internal error.
-// TODO(ldez) the handling of this error inside runner_action.go should be refactored.
-func IsErrMissing(err error) bool {
- var errENF *entryNotFoundError
- return errors.As(err, &errENF)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/cache/default.go b/vendor/github.com/golangci/golangci-lint/internal/go/cache/default.go
deleted file mode 100644
index 7232f1ef3..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/cache/default.go
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package cache
-
-import (
- "fmt"
- base "log"
- "os"
- "path/filepath"
- "sync"
-)
-
-// Default returns the default cache to use.
-// It never returns nil.
-func Default() Cache {
- defaultOnce.Do(initDefaultCache)
- return defaultCache
-}
-
-var (
- defaultOnce sync.Once
- defaultCache Cache
-)
-
-// cacheREADME is a message stored in a README in the cache directory.
-// Because the cache lives outside the normal Go trees, we leave the
-// README as a courtesy to explain where it came from.
-const cacheREADME = `This directory holds cached build artifacts from golangci-lint.
-`
-
-// initDefaultCache does the work of finding the default cache
-// the first time Default is called.
-func initDefaultCache() {
- dir, _ := DefaultDir()
- if dir == "off" {
- if defaultDirErr != nil {
- base.Fatalf("build cache is required, but could not be located: %v", defaultDirErr)
- }
- base.Fatalf("build cache is disabled by %s=off, but required", envGolangciLintCache)
- }
- if err := os.MkdirAll(dir, 0744); err != nil {
- base.Fatalf("failed to initialize build cache at %s: %s\n", dir, err)
- }
- if _, err := os.Stat(filepath.Join(dir, "README")); err != nil {
- // Best effort.
- if wErr := os.WriteFile(filepath.Join(dir, "README"), []byte(cacheREADME), 0666); wErr != nil {
- base.Fatalf("Failed to write README file to cache dir %s: %s", dir, err)
- }
- }
-
- diskCache, err := Open(dir)
- if err != nil {
- base.Fatalf("failed to initialize build cache at %s: %s\n", dir, err)
- }
-
- if v := os.Getenv(envGolangciLintCacheProg); v != "" {
- defaultCache = startCacheProg(v, diskCache)
- } else {
- defaultCache = diskCache
- }
-}
-
-var (
- defaultDirOnce sync.Once
- defaultDir string
- defaultDirChanged bool // effective value differs from $GOLANGCI_LINT_CACHE
- defaultDirErr error
-)
-
-// DefaultDir returns the effective GOLANGCI_LINT_CACHE setting.
-// It returns "off" if the cache is disabled,
-// and reports whether the effective value differs from GOLANGCI_LINT_CACHE.
-func DefaultDir() (string, bool) {
- // Save the result of the first call to DefaultDir for later use in
- // initDefaultCache. cmd/go/main.go explicitly sets GOCACHE so that
- // subprocesses will inherit it, but that means initDefaultCache can't
- // otherwise distinguish between an explicit "off" and a UserCacheDir error.
-
- defaultDirOnce.Do(func() {
- defaultDir = os.Getenv(envGolangciLintCache)
- if defaultDir != "" {
- defaultDirChanged = true
- if filepath.IsAbs(defaultDir) || defaultDir == "off" {
- return
- }
- defaultDir = "off"
- defaultDirErr = fmt.Errorf("%s is not an absolute path", envGolangciLintCache)
- return
- }
-
- // Compute default location.
- dir, err := os.UserCacheDir()
- if err != nil {
- defaultDir = "off"
- defaultDirChanged = true
- defaultDirErr = fmt.Errorf("%s is not defined and %w", envGolangciLintCache, err)
- return
- }
- defaultDir = filepath.Join(dir, "golangci-lint")
- })
-
- return defaultDir, defaultDirChanged
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/cache/default_gcil.go b/vendor/github.com/golangci/golangci-lint/internal/go/cache/default_gcil.go
deleted file mode 100644
index a801f67f4..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/cache/default_gcil.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package cache
-
-const (
- envGolangciLintCache = "GOLANGCI_LINT_CACHE"
- envGolangciLintCacheProg = "GOLANGCI_LINT_CACHEPROG"
-)
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/cache/hash.go b/vendor/github.com/golangci/golangci-lint/internal/go/cache/hash.go
deleted file mode 100644
index d5169dd4c..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/cache/hash.go
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package cache
-
-import (
- "bytes"
- "crypto/sha256"
- "fmt"
- "hash"
- "io"
- "os"
- "strings"
- "sync"
-)
-
-var debugHash = false // set when GODEBUG=gocachehash=1
-
-// HashSize is the number of bytes in a hash.
-const HashSize = 32
-
-// A Hash provides access to the canonical hash function used to index the cache.
-// The current implementation uses salted SHA256, but clients must not assume this.
-type Hash struct {
- h hash.Hash
- name string // for debugging
- buf *bytes.Buffer // for verify
-}
-
-// hashSalt is a salt string added to the beginning of every hash
-// created by NewHash. Using the golangci-lint version makes sure that different
-// versions of the command do not address the same cache
-// entries, so that a bug in one version does not affect the execution
-// of other versions. This salt will result in additional ActionID files
-// in the cache, but not additional copies of the large output files,
-// which are still addressed by unsalted SHA256.
-var hashSalt []byte
-
-// stripExperiment strips any GOEXPERIMENT configuration from the Go
-// version string.
-func stripExperiment(version string) string {
- if i := strings.Index(version, " X:"); i >= 0 {
- return version[:i]
- }
- return version
-}
-
-// Subkey returns an action ID corresponding to mixing a parent
-// action ID with a string description of the subkey.
-func Subkey(parent ActionID, desc string) (ActionID, error) {
- h := sha256.New()
- h.Write([]byte(("subkey:")))
- n, err := h.Write(parent[:])
- if n != len(parent) {
- return ActionID{}, fmt.Errorf("wrote %d/%d bytes of parent with error %s", n, len(parent), err)
- }
- n, err = h.Write([]byte(desc))
- if n != len(desc) {
- return ActionID{}, fmt.Errorf("wrote %d/%d bytes of desc with error %s", n, len(desc), err)
- }
-
- var out ActionID
- h.Sum(out[:0])
- if debugHash {
- fmt.Fprintf(os.Stderr, "HASH subkey %x %q = %x\n", parent, desc, out)
- }
- if verify {
- hashDebug.Lock()
- hashDebug.m[out] = fmt.Sprintf("subkey %x %q", parent, desc)
- hashDebug.Unlock()
- }
- return out, nil
-}
-
-// NewHash returns a new Hash.
-// The caller is expected to Write data to it and then call Sum.
-func NewHash(name string) (*Hash, error) {
- h := &Hash{h: sha256.New(), name: name}
- if debugHash {
- fmt.Fprintf(os.Stderr, "HASH[%s]\n", h.name)
- }
- n, err := h.Write(hashSalt)
- if n != len(hashSalt) {
- return nil, fmt.Errorf("wrote %d/%d bytes of hash salt with error %s", n, len(hashSalt), err)
- }
- if verify {
- h.buf = new(bytes.Buffer)
- }
- return h, nil
-}
-
-// Write writes data to the running hash.
-func (h *Hash) Write(b []byte) (int, error) {
- if debugHash {
- fmt.Fprintf(os.Stderr, "HASH[%s]: %q\n", h.name, b)
- }
- if h.buf != nil {
- h.buf.Write(b)
- }
- return h.h.Write(b)
-}
-
-// Sum returns the hash of the data written previously.
-func (h *Hash) Sum() [HashSize]byte {
- var out [HashSize]byte
- h.h.Sum(out[:0])
- if debugHash {
- fmt.Fprintf(os.Stderr, "HASH[%s]: %x\n", h.name, out)
- }
- if h.buf != nil {
- hashDebug.Lock()
- if hashDebug.m == nil {
- hashDebug.m = make(map[[HashSize]byte]string)
- }
- hashDebug.m[out] = h.buf.String()
- hashDebug.Unlock()
- }
- return out
-}
-
-// In GODEBUG=gocacheverify=1 mode,
-// hashDebug holds the input to every computed hash ID,
-// so that we can work backward from the ID involved in a
-// cache entry mismatch to a description of what should be there.
-var hashDebug struct {
- sync.Mutex
- m map[[HashSize]byte]string
-}
-
-// reverseHash returns the input used to compute the hash id.
-func reverseHash(id [HashSize]byte) string {
- hashDebug.Lock()
- s := hashDebug.m[id]
- hashDebug.Unlock()
- return s
-}
-
-var hashFileCache struct {
- sync.Mutex
- m map[string][HashSize]byte
-}
-
-// FileHash returns the hash of the named file.
-// It caches repeated lookups for a given file,
-// and the cache entry for a file can be initialized
-// using SetFileHash.
-// The hash used by FileHash is not the same as
-// the hash used by NewHash.
-func FileHash(file string) ([HashSize]byte, error) {
- hashFileCache.Lock()
- out, ok := hashFileCache.m[file]
- hashFileCache.Unlock()
-
- if ok {
- return out, nil
- }
-
- h := sha256.New()
- f, err := os.Open(file)
- if err != nil {
- if debugHash {
- fmt.Fprintf(os.Stderr, "HASH %s: %v\n", file, err)
- }
- return [HashSize]byte{}, err
- }
- _, err = io.Copy(h, f)
- f.Close()
- if err != nil {
- if debugHash {
- fmt.Fprintf(os.Stderr, "HASH %s: %v\n", file, err)
- }
- return [HashSize]byte{}, err
- }
- h.Sum(out[:0])
- if debugHash {
- fmt.Fprintf(os.Stderr, "HASH %s: %x\n", file, out)
- }
-
- SetFileHash(file, out)
- return out, nil
-}
-
-// SetFileHash sets the hash returned by FileHash for file.
-func SetFileHash(file string, sum [HashSize]byte) {
- hashFileCache.Lock()
- if hashFileCache.m == nil {
- hashFileCache.m = make(map[string][HashSize]byte)
- }
- hashFileCache.m[file] = sum
- hashFileCache.Unlock()
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/cache/hash_gcil.go b/vendor/github.com/golangci/golangci-lint/internal/go/cache/hash_gcil.go
deleted file mode 100644
index 08749036b..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/cache/hash_gcil.go
+++ /dev/null
@@ -1,5 +0,0 @@
-package cache
-
-func SetSalt(b []byte) {
- hashSalt = b
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/cache/prog.go b/vendor/github.com/golangci/golangci-lint/internal/go/cache/prog.go
deleted file mode 100644
index a93740a3c..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/cache/prog.go
+++ /dev/null
@@ -1,428 +0,0 @@
-// Copyright 2023 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package cache
-
-import (
- "bufio"
- "context"
- "crypto/sha256"
- "encoding/base64"
- "encoding/json"
- "errors"
- "fmt"
- "io"
- "log"
- base "log"
- "os"
- "os/exec"
- "sync"
- "sync/atomic"
- "time"
-
- "github.com/golangci/golangci-lint/internal/go/quoted"
-)
-
-// ProgCache implements Cache via JSON messages over stdin/stdout to a child
-// helper process which can then implement whatever caching policy/mechanism it
-// wants.
-//
-// See https://github.com/golang/go/issues/59719
-type ProgCache struct {
- cmd *exec.Cmd
- stdout io.ReadCloser // from the child process
- stdin io.WriteCloser // to the child process
- bw *bufio.Writer // to stdin
- jenc *json.Encoder // to bw
-
- // can are the commands that the child process declared that it supports.
- // This is effectively the versioning mechanism.
- can map[ProgCmd]bool
-
- // fuzzDirCache is another Cache implementation to use for the FuzzDir
- // method. In practice this is the default GOCACHE disk-based
- // implementation.
- //
- // TODO(bradfitz): maybe this isn't ideal. But we'd need to extend the Cache
- // interface and the fuzzing callers to be less disk-y to do more here.
- fuzzDirCache Cache
-
- closing atomic.Bool
- ctx context.Context // valid until Close via ctxClose
- ctxCancel context.CancelFunc // called on Close
- readLoopDone chan struct{} // closed when readLoop returns
-
- mu sync.Mutex // guards following fields
- nextID int64
- inFlight map[int64]chan<- *ProgResponse
- outputFile map[OutputID]string // object => abs path on disk
-
- // writeMu serializes writing to the child process.
- // It must never be held at the same time as mu.
- writeMu sync.Mutex
-}
-
-// ProgCmd is a command that can be issued to a child process.
-//
-// If the interface needs to grow, we can add new commands or new versioned
-// commands like "get2".
-type ProgCmd string
-
-const (
- cmdGet = ProgCmd("get")
- cmdPut = ProgCmd("put")
- cmdClose = ProgCmd("close")
-)
-
-// ProgRequest is the JSON-encoded message that's sent from cmd/go to
-// the GOLANGCI_LINT_CACHEPROG child process over stdin. Each JSON object is on its
-// own line. A ProgRequest of Type "put" with BodySize > 0 will be followed
-// by a line containing a base64-encoded JSON string literal of the body.
-type ProgRequest struct {
- // ID is a unique number per process across all requests.
- // It must be echoed in the ProgResponse from the child.
- ID int64
-
- // Command is the type of request.
- // The cmd/go tool will only send commands that were declared
- // as supported by the child.
- Command ProgCmd
-
- // ActionID is non-nil for get and puts.
- ActionID []byte `json:",omitempty"` // or nil if not used
-
- // ObjectID is set for Type "put" and "output-file".
- ObjectID []byte `json:",omitempty"` // or nil if not used
-
- // Body is the body for "put" requests. It's sent after the JSON object
- // as a base64-encoded JSON string when BodySize is non-zero.
- // It's sent as a separate JSON value instead of being a struct field
- // send in this JSON object so large values can be streamed in both directions.
- // The base64 string body of a ProgRequest will always be written
- // immediately after the JSON object and a newline.
- Body io.Reader `json:"-"`
-
- // BodySize is the number of bytes of Body. If zero, the body isn't written.
- BodySize int64 `json:",omitempty"`
-}
-
-// ProgResponse is the JSON response from the child process to cmd/go.
-//
-// With the exception of the first protocol message that the child writes to its
-// stdout with ID==0 and KnownCommands populated, these are only sent in
-// response to a ProgRequest from cmd/go.
-//
-// ProgResponses can be sent in any order. The ID must match the request they're
-// replying to.
-type ProgResponse struct {
- ID int64 // that corresponds to ProgRequest; they can be answered out of order
- Err string `json:",omitempty"` // if non-empty, the error
-
- // KnownCommands is included in the first message that cache helper program
- // writes to stdout on startup (with ID==0). It includes the
- // ProgRequest.Command types that are supported by the program.
- //
- // This lets us extend the protocol gracefully over time (adding "get2",
- // etc), or fail gracefully when needed. It also lets us verify the program
- // wants to be a cache helper.
- KnownCommands []ProgCmd `json:",omitempty"`
-
- // For Get requests.
-
- Miss bool `json:",omitempty"` // cache miss
- OutputID []byte `json:",omitempty"`
- Size int64 `json:",omitempty"` // in bytes
- Time *time.Time `json:",omitempty"` // an Entry.Time; when the object was added to the docs
-
- // DiskPath is the absolute path on disk of the ObjectID corresponding
- // a "get" request's ActionID (on cache hit) or a "put" request's
- // provided ObjectID.
- DiskPath string `json:",omitempty"`
-}
-
-// startCacheProg starts the prog binary (with optional space-separated flags)
-// and returns a Cache implementation that talks to it.
-//
-// It blocks a few seconds to wait for the child process to successfully start
-// and advertise its capabilities.
-func startCacheProg(progAndArgs string, fuzzDirCache Cache) Cache {
- if fuzzDirCache == nil {
- panic("missing fuzzDirCache")
- }
- args, err := quoted.Split(progAndArgs)
- if err != nil {
- base.Fatalf("%s args: %v", envGolangciLintCacheProg, err)
- }
- var prog string
- if len(args) > 0 {
- prog = args[0]
- args = args[1:]
- }
-
- ctx, ctxCancel := context.WithCancel(context.Background())
-
- cmd := exec.CommandContext(ctx, prog, args...)
- out, err := cmd.StdoutPipe()
- if err != nil {
- base.Fatalf("StdoutPipe to %s: %v", envGolangciLintCacheProg, err)
- }
- in, err := cmd.StdinPipe()
- if err != nil {
- base.Fatalf("StdinPipe to %s: %v", envGolangciLintCacheProg, err)
- }
- cmd.Stderr = os.Stderr
- cmd.Cancel = in.Close
-
- if err := cmd.Start(); err != nil {
- base.Fatalf("error starting %s program %q: %v", envGolangciLintCacheProg, prog, err)
- }
-
- pc := &ProgCache{
- ctx: ctx,
- ctxCancel: ctxCancel,
- fuzzDirCache: fuzzDirCache,
- cmd: cmd,
- stdout: out,
- stdin: in,
- bw: bufio.NewWriter(in),
- inFlight: make(map[int64]chan<- *ProgResponse),
- outputFile: make(map[OutputID]string),
- readLoopDone: make(chan struct{}),
- }
-
- // Register our interest in the initial protocol message from the child to
- // us, saying what it can do.
- capResc := make(chan *ProgResponse, 1)
- pc.inFlight[0] = capResc
-
- pc.jenc = json.NewEncoder(pc.bw)
- go pc.readLoop(pc.readLoopDone)
-
- // Give the child process a few seconds to report its capabilities. This
- // should be instant and not require any slow work by the program.
- timer := time.NewTicker(5 * time.Second)
- defer timer.Stop()
- for {
- select {
- case <-timer.C:
- log.Printf("# still waiting for %s %v ...", envGolangciLintCacheProg, prog)
- case capRes := <-capResc:
- can := map[ProgCmd]bool{}
- for _, cmd := range capRes.KnownCommands {
- can[cmd] = true
- }
- if len(can) == 0 {
- base.Fatalf("%s %v declared no supported commands", envGolangciLintCacheProg, prog)
- }
- pc.can = can
- return pc
- }
- }
-}
-
-func (c *ProgCache) readLoop(readLoopDone chan<- struct{}) {
- defer close(readLoopDone)
- jd := json.NewDecoder(c.stdout)
- for {
- res := new(ProgResponse)
- if err := jd.Decode(res); err != nil {
- if c.closing.Load() {
- return // quietly
- }
- if err == io.EOF {
- c.mu.Lock()
- inFlight := len(c.inFlight)
- c.mu.Unlock()
- base.Fatalf("%s exited pre-Close with %v pending requests", envGolangciLintCacheProg, inFlight)
- }
- base.Fatalf("error reading JSON from %s: %v", envGolangciLintCacheProg, err)
- }
- c.mu.Lock()
- ch, ok := c.inFlight[res.ID]
- delete(c.inFlight, res.ID)
- c.mu.Unlock()
- if ok {
- ch <- res
- } else {
- base.Fatalf("%s sent response for unknown request ID %v", envGolangciLintCacheProg, res.ID)
- }
- }
-}
-
-func (c *ProgCache) send(ctx context.Context, req *ProgRequest) (*ProgResponse, error) {
- resc := make(chan *ProgResponse, 1)
- if err := c.writeToChild(req, resc); err != nil {
- return nil, err
- }
- select {
- case res := <-resc:
- if res.Err != "" {
- return nil, errors.New(res.Err)
- }
- return res, nil
- case <-ctx.Done():
- return nil, ctx.Err()
- }
-}
-
-func (c *ProgCache) writeToChild(req *ProgRequest, resc chan<- *ProgResponse) (err error) {
- c.mu.Lock()
- c.nextID++
- req.ID = c.nextID
- c.inFlight[req.ID] = resc
- c.mu.Unlock()
-
- defer func() {
- if err != nil {
- c.mu.Lock()
- delete(c.inFlight, req.ID)
- c.mu.Unlock()
- }
- }()
-
- c.writeMu.Lock()
- defer c.writeMu.Unlock()
-
- if err := c.jenc.Encode(req); err != nil {
- return err
- }
- if err := c.bw.WriteByte('\n'); err != nil {
- return err
- }
- if req.Body != nil && req.BodySize > 0 {
- if err := c.bw.WriteByte('"'); err != nil {
- return err
- }
- e := base64.NewEncoder(base64.StdEncoding, c.bw)
- wrote, err := io.Copy(e, req.Body)
- if err != nil {
- return err
- }
- if err := e.Close(); err != nil {
- return nil
- }
- if wrote != req.BodySize {
- return fmt.Errorf("short write writing body to %s for action %x, object %x: wrote %v; expected %v",
- envGolangciLintCacheProg, req.ActionID, req.ObjectID, wrote, req.BodySize)
- }
- if _, err := c.bw.WriteString("\"\n"); err != nil {
- return err
- }
- }
- if err := c.bw.Flush(); err != nil {
- return err
- }
- return nil
-}
-
-func (c *ProgCache) Get(a ActionID) (Entry, error) {
- if !c.can[cmdGet] {
- // They can't do a "get". Maybe they're a write-only cache.
- //
- // TODO(bradfitz,bcmills): figure out the proper error type here. Maybe
- // errors.ErrUnsupported? Is entryNotFoundError even appropriate? There
- // might be places where we rely on the fact that a recent Put can be
- // read through a corresponding Get. Audit callers and check, and document
- // error types on the Cache interface.
- return Entry{}, &entryNotFoundError{}
- }
- res, err := c.send(c.ctx, &ProgRequest{
- Command: cmdGet,
- ActionID: a[:],
- })
- if err != nil {
- return Entry{}, err // TODO(bradfitz): or entryNotFoundError? Audit callers.
- }
- if res.Miss {
- return Entry{}, &entryNotFoundError{}
- }
- e := Entry{
- Size: res.Size,
- }
- if res.Time != nil {
- e.Time = *res.Time
- } else {
- e.Time = time.Now()
- }
- if res.DiskPath == "" {
- return Entry{}, &entryNotFoundError{fmt.Errorf("%s didn't populate DiskPath on get hit", envGolangciLintCacheProg)}
- }
- if copy(e.OutputID[:], res.OutputID) != len(res.OutputID) {
- return Entry{}, &entryNotFoundError{errors.New("incomplete ProgResponse OutputID")}
- }
- c.noteOutputFile(e.OutputID, res.DiskPath)
- return e, nil
-}
-
-func (c *ProgCache) noteOutputFile(o OutputID, diskPath string) {
- c.mu.Lock()
- defer c.mu.Unlock()
- c.outputFile[o] = diskPath
-}
-
-func (c *ProgCache) OutputFile(o OutputID) string {
- c.mu.Lock()
- defer c.mu.Unlock()
- return c.outputFile[o]
-}
-
-func (c *ProgCache) Put(a ActionID, file io.ReadSeeker) (_ OutputID, size int64, _ error) {
- // Compute output ID.
- h := sha256.New()
- if _, err := file.Seek(0, 0); err != nil {
- return OutputID{}, 0, err
- }
- size, err := io.Copy(h, file)
- if err != nil {
- return OutputID{}, 0, err
- }
- var out OutputID
- h.Sum(out[:0])
-
- if _, err := file.Seek(0, 0); err != nil {
- return OutputID{}, 0, err
- }
-
- if !c.can[cmdPut] {
- // Child is a read-only cache. Do nothing.
- return out, size, nil
- }
-
- res, err := c.send(c.ctx, &ProgRequest{
- Command: cmdPut,
- ActionID: a[:],
- ObjectID: out[:],
- Body: file,
- BodySize: size,
- })
- if err != nil {
- return OutputID{}, 0, err
- }
- if res.DiskPath == "" {
- return OutputID{}, 0, fmt.Errorf("%s didn't return DiskPath in put response", envGolangciLintCacheProg)
- }
- c.noteOutputFile(out, res.DiskPath)
- return out, size, err
-}
-
-func (c *ProgCache) Close() error {
- c.closing.Store(true)
- var err error
-
- // First write a "close" message to the child so it can exit nicely
- // and clean up if it wants. Only after that exchange do we cancel
- // the context that kills the process.
- if c.can[cmdClose] {
- _, err = c.send(c.ctx, &ProgRequest{Command: cmdClose})
- }
- c.ctxCancel()
- <-c.readLoopDone
- return err
-}
-
-func (c *ProgCache) FuzzDir() string {
- // TODO(bradfitz): figure out what to do here. For now just use the
- // disk-based default.
- return c.fuzzDirCache.FuzzDir()
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/cache/readme.md b/vendor/github.com/golangci/golangci-lint/internal/go/cache/readme.md
deleted file mode 100644
index 5be600e42..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/cache/readme.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# cache
-
-Extracted from `go/src/cmd/go/internal/cache/`.
-
-The main modifications are:
-- The errors management
- - Some methods return error.
- - Some errors are returned instead of being ignored.
-- The name of the env vars:
- - `GOCACHE` -> `GOLANGCI_LINT_CACHE`
- - `GOCACHEPROG` -> `GOLANGCI_LINT_CACHEPROG`
-
-## History
-
-- https://github.com/golangci/golangci-lint/pull/5100
- - Move package from `internal/cache` to `internal/go/cache`
-- https://github.com/golangci/golangci-lint/pull/5098
- - sync with go1.23.2
- - sync with go1.22.8
- - sync with go1.21.13
- - sync with go1.20.14
- - sync with go1.19.13
- - sync with go1.18.10
- - sync with go1.17.13
- - sync with go1.16.15
- - sync with go1.15.15
- - sync with go1.14.15
-
-## Previous History
-
-Based on the initial PR/commit the based in a mix between go1.12 and go1.13:
-- cache.go (go1.13)
-- cache_test.go (go1.12?)
-- default.go (go1.12?)
-- hash.go (go1.13 and go1.12 are identical)
-- hash_test.go -> (go1.12?)
-
-Adapted for golangci-lint:
-- https://github.com/golangci/golangci-lint/pull/699: initial code (contains modifications of the files)
-- https://github.com/golangci/golangci-lint/pull/779: just a nolint (`cache.go`)
-- https://github.com/golangci/golangci-lint/pull/788: only directory permissions changes (0777 -> 0744) (`cache.go`, `cache_test.go`, `default.go`)
-- https://github.com/golangci/golangci-lint/pull/808: mainly related to logs and errors (`cache.go`, `default.go`, `hash.go`, `hash_test.go`)
-- https://github.com/golangci/golangci-lint/pull/1063: `ioutil` -> `robustio` (`cache.go`)
-- https://github.com/golangci/golangci-lint/pull/1070: add `t.Parallel()` inside `cache_test.go`
-- https://github.com/golangci/golangci-lint/pull/1162: errors inside `cache.go`
-- https://github.com/golangci/golangci-lint/pull/2318: `ioutil` -> `os` (`cache.go`, `cache_test.go`, `default.go`, `hash_test.go`)
-- https://github.com/golangci/golangci-lint/pull/2352: Go doc typos
-- https://github.com/golangci/golangci-lint/pull/3012: errors inside `cache.go` (`cache.go`, `default.go`)
-- https://github.com/golangci/golangci-lint/pull/3196: constant for `GOLANGCI_LINT_CACHE` (`cache.go`)
-- https://github.com/golangci/golangci-lint/pull/3204: add this file and `%w` in `fmt.Errorf` (`cache.go`)
-- https://github.com/golangci/golangci-lint/pull/3604: remove `github.com/pkg/errors` (`cache.go`)
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap.go b/vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap.go
deleted file mode 100644
index fcbd3e08c..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This package is a lightly modified version of the mmap code
-// in github.com/google/codesearch/index.
-
-// The mmap package provides an abstraction for memory mapping files
-// on different platforms.
-package mmap
-
-import (
- "os"
-)
-
-// Data is mmap'ed read-only data from a file.
-// The backing file is never closed, so Data
-// remains valid for the lifetime of the process.
-type Data struct {
- f *os.File
- Data []byte
-}
-
-// Mmap maps the given file into memory.
-func Mmap(file string) (Data, error) {
- f, err := os.Open(file)
- if err != nil {
- return Data{}, err
- }
- return mmapFile(f)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap_other.go b/vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap_other.go
deleted file mode 100644
index 4d2844fc3..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap_other.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2022 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build (js && wasm) || wasip1 || plan9
-
-package mmap
-
-import (
- "io"
- "os"
-)
-
-// mmapFile on other systems doesn't mmap the file. It just reads everything.
-func mmapFile(f *os.File) (Data, error) {
- b, err := io.ReadAll(f)
- if err != nil {
- return Data{}, err
- }
- return Data{f, b}, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap_unix.go b/vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap_unix.go
deleted file mode 100644
index 5dce87236..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap_unix.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build unix
-
-package mmap
-
-import (
- "fmt"
- "io/fs"
- "os"
- "syscall"
-)
-
-func mmapFile(f *os.File) (Data, error) {
- st, err := f.Stat()
- if err != nil {
- return Data{}, err
- }
- size := st.Size()
- pagesize := int64(os.Getpagesize())
- if int64(int(size+(pagesize-1))) != size+(pagesize-1) {
- return Data{}, fmt.Errorf("%s: too large for mmap", f.Name())
- }
- n := int(size)
- if n == 0 {
- return Data{f, nil}, nil
- }
- mmapLength := int(((size + pagesize - 1) / pagesize) * pagesize) // round up to page size
- data, err := syscall.Mmap(int(f.Fd()), 0, mmapLength, syscall.PROT_READ, syscall.MAP_SHARED)
- if err != nil {
- return Data{}, &fs.PathError{Op: "mmap", Path: f.Name(), Err: err}
- }
- return Data{f, data[:n]}, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap_windows.go b/vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap_windows.go
deleted file mode 100644
index 479ee3075..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/mmap/mmap_windows.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package mmap
-
-import (
- "fmt"
- "os"
- "syscall"
- "unsafe"
-
- "golang.org/x/sys/windows"
-)
-
-func mmapFile(f *os.File) (Data, error) {
- st, err := f.Stat()
- if err != nil {
- return Data{}, err
- }
- size := st.Size()
- if size == 0 {
- return Data{f, nil}, nil
- }
- h, err := syscall.CreateFileMapping(syscall.Handle(f.Fd()), nil, syscall.PAGE_READONLY, 0, 0, nil)
- if err != nil {
- return Data{}, fmt.Errorf("CreateFileMapping %s: %w", f.Name(), err)
- }
-
- addr, err := syscall.MapViewOfFile(h, syscall.FILE_MAP_READ, 0, 0, 0)
- if err != nil {
- return Data{}, fmt.Errorf("MapViewOfFile %s: %w", f.Name(), err)
- }
- var info windows.MemoryBasicInformation
- err = windows.VirtualQuery(addr, &info, unsafe.Sizeof(info))
- if err != nil {
- return Data{}, fmt.Errorf("VirtualQuery %s: %w", f.Name(), err)
- }
- data := unsafe.Slice((*byte)(unsafe.Pointer(addr)), int(info.RegionSize))
- return Data{f, data}, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/mmap/readme.md b/vendor/github.com/golangci/golangci-lint/internal/go/mmap/readme.md
deleted file mode 100644
index f68aef097..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/mmap/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# mmap
-
-Extracted from `go/src/cmd/go/internal/mmap/` (related to `cache`).
-This is just a copy of the Go code without any changes.
-
-## History
-
-- https://github.com/golangci/golangci-lint/pull/5100
- - Move package from `internal/mmap` to `internal/go/mmap`
-- https://github.com/golangci/golangci-lint/pull/5098
- - sync with go1.23.2
- - sync with go1.22.8
- - sync with go1.21.13
- - sync with go1.20.14
- - sync with go1.19.13
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/quoted/quoted.go b/vendor/github.com/golangci/golangci-lint/internal/go/quoted/quoted.go
deleted file mode 100644
index a81227507..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/quoted/quoted.go
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package quoted provides string manipulation utilities.
-package quoted
-
-import (
- "flag"
- "fmt"
- "strings"
- "unicode"
-)
-
-func isSpaceByte(c byte) bool {
- return c == ' ' || c == '\t' || c == '\n' || c == '\r'
-}
-
-// Split splits s into a list of fields,
-// allowing single or double quotes around elements.
-// There is no unescaping or other processing within
-// quoted fields.
-//
-// Keep in sync with cmd/dist/quoted.go
-func Split(s string) ([]string, error) {
- // Split fields allowing '' or "" around elements.
- // Quotes further inside the string do not count.
- var f []string
- for len(s) > 0 {
- for len(s) > 0 && isSpaceByte(s[0]) {
- s = s[1:]
- }
- if len(s) == 0 {
- break
- }
- // Accepted quoted string. No unescaping inside.
- if s[0] == '"' || s[0] == '\'' {
- quote := s[0]
- s = s[1:]
- i := 0
- for i < len(s) && s[i] != quote {
- i++
- }
- if i >= len(s) {
- return nil, fmt.Errorf("unterminated %c string", quote)
- }
- f = append(f, s[:i])
- s = s[i+1:]
- continue
- }
- i := 0
- for i < len(s) && !isSpaceByte(s[i]) {
- i++
- }
- f = append(f, s[:i])
- s = s[i:]
- }
- return f, nil
-}
-
-// Join joins a list of arguments into a string that can be parsed
-// with Split. Arguments are quoted only if necessary; arguments
-// without spaces or quotes are kept as-is. No argument may contain both
-// single and double quotes.
-func Join(args []string) (string, error) {
- var buf []byte
- for i, arg := range args {
- if i > 0 {
- buf = append(buf, ' ')
- }
- var sawSpace, sawSingleQuote, sawDoubleQuote bool
- for _, c := range arg {
- switch {
- case c > unicode.MaxASCII:
- continue
- case isSpaceByte(byte(c)):
- sawSpace = true
- case c == '\'':
- sawSingleQuote = true
- case c == '"':
- sawDoubleQuote = true
- }
- }
- switch {
- case !sawSpace && !sawSingleQuote && !sawDoubleQuote:
- buf = append(buf, arg...)
-
- case !sawSingleQuote:
- buf = append(buf, '\'')
- buf = append(buf, arg...)
- buf = append(buf, '\'')
-
- case !sawDoubleQuote:
- buf = append(buf, '"')
- buf = append(buf, arg...)
- buf = append(buf, '"')
-
- default:
- return "", fmt.Errorf("argument %q contains both single and double quotes and cannot be quoted", arg)
- }
- }
- return string(buf), nil
-}
-
-// A Flag parses a list of string arguments encoded with Join.
-// It is useful for flags like cmd/link's -extldflags.
-type Flag []string
-
-var _ flag.Value = (*Flag)(nil)
-
-func (f *Flag) Set(v string) error {
- fs, err := Split(v)
- if err != nil {
- return err
- }
- *f = fs[:len(fs):len(fs)]
- return nil
-}
-
-func (f *Flag) String() string {
- if f == nil {
- return ""
- }
- s, err := Join(*f)
- if err != nil {
- return strings.Join(*f, " ")
- }
- return s
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/quoted/readme.md b/vendor/github.com/golangci/golangci-lint/internal/go/quoted/readme.md
deleted file mode 100644
index a5e4c4bb3..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/quoted/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# quoted
-
-Extracted from `go/src/cmd/internal/quoted/` (related to `cache`).
-This is just a copy of the Go code without any changes.
-
-## History
-
-- https://github.com/golangci/golangci-lint/pull/5100
- - Move package from `internal/quoted` to `internal/go/quoted`
-- https://github.com/golangci/golangci-lint/pull/5098
- - sync go1.23.2
- - sync go1.22.8
- - sync go1.21.13
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/robustio/readme.md b/vendor/github.com/golangci/golangci-lint/internal/go/robustio/readme.md
deleted file mode 100644
index f4dbc1626..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/robustio/readme.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# robustio
-
-Extracted from go1.19.1/src/cmd/go/internal/robustio
-
-There is only one modification:
-- ERROR_SHARING_VIOLATION extracted from go1.19.1/src/internal/syscall/windows/syscall_windows.go to remove the dependencies to `internal/syscall/windows`
-
-## History
-
-- https://github.com/golangci/golangci-lint/pull/5100
- - Move package from `internal/robustio` to `internal/go/robustio`
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio.go b/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio.go
deleted file mode 100644
index 15b33773c..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio.go
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package robustio wraps I/O functions that are prone to failure on Windows,
-// transparently retrying errors up to an arbitrary timeout.
-//
-// Errors are classified heuristically and retries are bounded, so the functions
-// in this package do not completely eliminate spurious errors. However, they do
-// significantly reduce the rate of failure in practice.
-//
-// If so, the error will likely wrap one of:
-// The functions in this package do not completely eliminate spurious errors,
-// but substantially reduce their rate of occurrence in practice.
-package robustio
-
-// Rename is like os.Rename, but on Windows retries errors that may occur if the
-// file is concurrently read or overwritten.
-//
-// (See golang.org/issue/31247 and golang.org/issue/32188.)
-func Rename(oldpath, newpath string) error {
- return rename(oldpath, newpath)
-}
-
-// ReadFile is like os.ReadFile, but on Windows retries errors that may
-// occur if the file is concurrently replaced.
-//
-// (See golang.org/issue/31247 and golang.org/issue/32188.)
-func ReadFile(filename string) ([]byte, error) {
- return readFile(filename)
-}
-
-// RemoveAll is like os.RemoveAll, but on Windows retries errors that may occur
-// if an executable file in the directory has recently been executed.
-//
-// (See golang.org/issue/19491.)
-func RemoveAll(path string) error {
- return removeAll(path)
-}
-
-// IsEphemeralError reports whether err is one of the errors that the functions
-// in this package attempt to mitigate.
-//
-// Errors considered ephemeral include:
-// - syscall.ERROR_ACCESS_DENIED
-// - syscall.ERROR_FILE_NOT_FOUND
-// - internal/syscall/windows.ERROR_SHARING_VIOLATION
-//
-// This set may be expanded in the future; programs must not rely on the
-// non-ephemerality of any given error.
-func IsEphemeralError(err error) bool {
- return isEphemeralError(err)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_darwin.go b/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_darwin.go
deleted file mode 100644
index 99fd8ebc2..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_darwin.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package robustio
-
-import (
- "errors"
- "syscall"
-)
-
-const errFileNotFound = syscall.ENOENT
-
-// isEphemeralError returns true if err may be resolved by waiting.
-func isEphemeralError(err error) bool {
- var errno syscall.Errno
- if errors.As(err, &errno) {
- return errno == errFileNotFound
- }
- return false
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_flaky.go b/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_flaky.go
deleted file mode 100644
index c56e36ca6..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_flaky.go
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build windows || darwin
-
-package robustio
-
-import (
- "errors"
- "math/rand"
- "os"
- "syscall"
- "time"
-)
-
-const arbitraryTimeout = 2000 * time.Millisecond
-
-// retry retries ephemeral errors from f up to an arbitrary timeout
-// to work around filesystem flakiness on Windows and Darwin.
-func retry(f func() (err error, mayRetry bool)) error {
- var (
- bestErr error
- lowestErrno syscall.Errno
- start time.Time
- nextSleep time.Duration = 1 * time.Millisecond
- )
- for {
- err, mayRetry := f()
- if err == nil || !mayRetry {
- return err
- }
-
- var errno syscall.Errno
- if errors.As(err, &errno) && (lowestErrno == 0 || errno < lowestErrno) {
- bestErr = err
- lowestErrno = errno
- } else if bestErr == nil {
- bestErr = err
- }
-
- if start.IsZero() {
- start = time.Now()
- } else if d := time.Since(start) + nextSleep; d >= arbitraryTimeout {
- break
- }
- time.Sleep(nextSleep)
- nextSleep += time.Duration(rand.Int63n(int64(nextSleep)))
- }
-
- return bestErr
-}
-
-// rename is like os.Rename, but retries ephemeral errors.
-//
-// On Windows it wraps os.Rename, which (as of 2019-06-04) uses MoveFileEx with
-// MOVEFILE_REPLACE_EXISTING.
-//
-// Windows also provides a different system call, ReplaceFile,
-// that provides similar semantics, but perhaps preserves more metadata. (The
-// documentation on the differences between the two is very sparse.)
-//
-// Empirical error rates with MoveFileEx are lower under modest concurrency, so
-// for now we're sticking with what the os package already provides.
-func rename(oldpath, newpath string) (err error) {
- return retry(func() (err error, mayRetry bool) {
- err = os.Rename(oldpath, newpath)
- return err, isEphemeralError(err)
- })
-}
-
-// readFile is like os.ReadFile, but retries ephemeral errors.
-func readFile(filename string) ([]byte, error) {
- var b []byte
- err := retry(func() (err error, mayRetry bool) {
- b, err = os.ReadFile(filename)
-
- // Unlike in rename, we do not retry errFileNotFound here: it can occur
- // as a spurious error, but the file may also genuinely not exist, so the
- // increase in robustness is probably not worth the extra latency.
- return err, isEphemeralError(err) && !errors.Is(err, errFileNotFound)
- })
- return b, err
-}
-
-func removeAll(path string) error {
- return retry(func() (err error, mayRetry bool) {
- err = os.RemoveAll(path)
- return err, isEphemeralError(err)
- })
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_other.go b/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_other.go
deleted file mode 100644
index da9a46e4f..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_other.go
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !windows && !darwin
-
-package robustio
-
-import (
- "os"
-)
-
-func rename(oldpath, newpath string) error {
- return os.Rename(oldpath, newpath)
-}
-
-func readFile(filename string) ([]byte, error) {
- return os.ReadFile(filename)
-}
-
-func removeAll(path string) error {
- return os.RemoveAll(path)
-}
-
-func isEphemeralError(err error) bool {
- return false
-}
diff --git a/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_windows.go b/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_windows.go
deleted file mode 100644
index fe1728954..000000000
--- a/vendor/github.com/golangci/golangci-lint/internal/go/robustio/robustio_windows.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package robustio
-
-import (
- "errors"
- "syscall"
-)
-
-const errFileNotFound = syscall.ERROR_FILE_NOT_FOUND
-
-// ERROR_SHARING_VIOLATION (ldez) extract from go1.19.1/src/internal/syscall/windows/syscall_windows.go.
-// This is the only modification of this file.
-const ERROR_SHARING_VIOLATION syscall.Errno = 32
-
-// isEphemeralError returns true if err may be resolved by waiting.
-func isEphemeralError(err error) bool {
- var errno syscall.Errno
- if errors.As(err, &errno) {
- switch errno {
- case syscall.ERROR_ACCESS_DENIED,
- syscall.ERROR_FILE_NOT_FOUND,
- ERROR_SHARING_VIOLATION:
- return true
- }
- }
- return false
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/cache.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/cache.go
deleted file mode 100644
index 4f2c812dc..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/cache.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package commands
-
-import (
- "fmt"
- "os"
- "path/filepath"
-
- "github.com/spf13/cobra"
-
- "github.com/golangci/golangci-lint/internal/cache"
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-type cacheCommand struct {
- cmd *cobra.Command
-}
-
-func newCacheCommand() *cacheCommand {
- c := &cacheCommand{}
-
- cacheCmd := &cobra.Command{
- Use: "cache",
- Short: "Cache control and information",
- Args: cobra.NoArgs,
- RunE: func(cmd *cobra.Command, _ []string) error {
- return cmd.Help()
- },
- }
-
- cacheCmd.AddCommand(
- &cobra.Command{
- Use: "clean",
- Short: "Clean cache",
- Args: cobra.NoArgs,
- ValidArgsFunction: cobra.NoFileCompletions,
- RunE: c.executeClean,
- },
- &cobra.Command{
- Use: "status",
- Short: "Show cache status",
- Args: cobra.NoArgs,
- ValidArgsFunction: cobra.NoFileCompletions,
- Run: c.executeStatus,
- },
- )
-
- c.cmd = cacheCmd
-
- return c
-}
-
-func (*cacheCommand) executeClean(_ *cobra.Command, _ []string) error {
- cacheDir := cache.DefaultDir()
-
- if err := os.RemoveAll(cacheDir); err != nil {
- return fmt.Errorf("failed to remove dir %s: %w", cacheDir, err)
- }
-
- return nil
-}
-
-func (*cacheCommand) executeStatus(_ *cobra.Command, _ []string) {
- cacheDir := cache.DefaultDir()
-
- _, _ = fmt.Fprintf(logutils.StdOut, "Dir: %s\n", cacheDir)
-
- cacheSizeBytes, err := dirSizeBytes(cacheDir)
- if err == nil {
- _, _ = fmt.Fprintf(logutils.StdOut, "Size: %s\n", fsutils.PrettifyBytesCount(cacheSizeBytes))
- }
-}
-
-func dirSizeBytes(path string) (int64, error) {
- var size int64
- err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error {
- if err == nil && !info.IsDir() {
- size += info.Size()
- }
- return err
- })
- return size, err
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/config.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/config.go
deleted file mode 100644
index 935ec5e86..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/config.go
+++ /dev/null
@@ -1,122 +0,0 @@
-package commands
-
-import (
- "fmt"
- "os"
-
- "github.com/fatih/color"
- "github.com/spf13/cobra"
- "github.com/spf13/viper"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/exitcodes"
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-type configCommand struct {
- viper *viper.Viper
- cmd *cobra.Command
-
- opts config.LoaderOptions
- verifyOpts verifyOptions
-
- buildInfo BuildInfo
-
- log logutils.Log
-}
-
-func newConfigCommand(log logutils.Log, info BuildInfo) *configCommand {
- c := &configCommand{
- viper: viper.New(),
- log: log,
- buildInfo: info,
- }
-
- configCmd := &cobra.Command{
- Use: "config",
- Short: "Config file information",
- Args: cobra.NoArgs,
- RunE: func(cmd *cobra.Command, _ []string) error {
- return cmd.Help()
- },
- PersistentPreRunE: c.preRunE,
- }
-
- verifyCommand := &cobra.Command{
- Use: "verify",
- Short: "Verify configuration against JSON schema",
- Args: cobra.NoArgs,
- ValidArgsFunction: cobra.NoFileCompletions,
- RunE: c.executeVerify,
- SilenceUsage: true,
- SilenceErrors: true,
- }
-
- configCmd.AddCommand(
- &cobra.Command{
- Use: "path",
- Short: "Print used config path",
- Args: cobra.NoArgs,
- ValidArgsFunction: cobra.NoFileCompletions,
- Run: c.executePath,
- },
- verifyCommand,
- )
-
- flagSet := configCmd.PersistentFlags()
- flagSet.SortFlags = false // sort them as they are defined here
-
- setupConfigFileFlagSet(flagSet, &c.opts)
-
- // ex: --schema jsonschema/golangci.next.jsonschema.json
- verifyFlagSet := verifyCommand.Flags()
- verifyFlagSet.StringVar(&c.verifyOpts.schemaURL, "schema", "", color.GreenString("JSON schema URL"))
- _ = verifyFlagSet.MarkHidden("schema")
-
- c.cmd = configCmd
-
- return c
-}
-
-func (c *configCommand) preRunE(cmd *cobra.Command, args []string) error {
- // The command doesn't depend on the real configuration.
- // It only needs to know the path of the configuration file.
- cfg := config.NewDefault()
-
- loader := config.NewLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts, cfg, args)
-
- err := loader.Load(config.LoadOptions{})
- if err != nil {
- return fmt.Errorf("can't load config: %w", err)
- }
-
- return nil
-}
-
-func (c *configCommand) executePath(cmd *cobra.Command, _ []string) {
- usedConfigFile := c.getUsedConfig()
- if usedConfigFile == "" {
- c.log.Warnf("No config file detected")
- os.Exit(exitcodes.NoConfigFileDetected)
- }
-
- cmd.Println(usedConfigFile)
-}
-
-// getUsedConfig returns the resolved path to the golangci config file,
-// or the empty string if no configuration could be found.
-func (c *configCommand) getUsedConfig() string {
- usedConfigFile := c.viper.ConfigFileUsed()
- if usedConfigFile == "" {
- return ""
- }
-
- prettyUsedConfigFile, err := fsutils.ShortestRelPath(usedConfigFile, "")
- if err != nil {
- c.log.Warnf("Can't pretty print config file path: %s", err)
- return usedConfigFile
- }
-
- return prettyUsedConfigFile
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/config_verify.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/config_verify.go
deleted file mode 100644
index 89017e9bf..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/config_verify.go
+++ /dev/null
@@ -1,179 +0,0 @@
-package commands
-
-import (
- "errors"
- "fmt"
- "net/http"
- "os"
- "path/filepath"
- "strings"
- "time"
-
- hcversion "github.com/hashicorp/go-version"
- "github.com/pelletier/go-toml/v2"
- "github.com/santhosh-tekuri/jsonschema/v5"
- "github.com/santhosh-tekuri/jsonschema/v5/httploader"
- "github.com/spf13/cobra"
- "github.com/spf13/pflag"
- "gopkg.in/yaml.v3"
-
- "github.com/golangci/golangci-lint/pkg/exitcodes"
-)
-
-type verifyOptions struct {
- schemaURL string // For debugging purpose only (Flag only).
-}
-
-func (c *configCommand) executeVerify(cmd *cobra.Command, _ []string) error {
- usedConfigFile := c.getUsedConfig()
- if usedConfigFile == "" {
- c.log.Warnf("No config file detected")
- os.Exit(exitcodes.NoConfigFileDetected)
- }
-
- schemaURL, err := createSchemaURL(cmd.Flags(), c.buildInfo)
- if err != nil {
- return fmt.Errorf("get JSON schema: %w", err)
- }
-
- err = validateConfiguration(schemaURL, usedConfigFile)
- if err != nil {
- var v *jsonschema.ValidationError
- if !errors.As(err, &v) {
- return fmt.Errorf("[%s] validate: %w", usedConfigFile, err)
- }
-
- detail := v.DetailedOutput()
-
- printValidationDetail(cmd, &detail)
-
- return errors.New("the configuration contains invalid elements")
- }
-
- return nil
-}
-
-func createSchemaURL(flags *pflag.FlagSet, buildInfo BuildInfo) (string, error) {
- schemaURL, err := flags.GetString("schema")
- if err != nil {
- return "", fmt.Errorf("get schema flag: %w", err)
- }
-
- if schemaURL != "" {
- return schemaURL, nil
- }
-
- switch {
- case buildInfo.Version != "" && buildInfo.Version != "(devel)":
- version, err := hcversion.NewVersion(buildInfo.Version)
- if err != nil {
- return "", fmt.Errorf("parse version: %w", err)
- }
-
- schemaURL = fmt.Sprintf("https://golangci-lint.run/jsonschema/golangci.v%d.%d.jsonschema.json",
- version.Segments()[0], version.Segments()[1])
-
- case buildInfo.Commit != "" && buildInfo.Commit != "?":
- if buildInfo.Commit == "unknown" {
- return "", errors.New("unknown commit information")
- }
-
- commit := buildInfo.Commit
-
- if strings.HasPrefix(commit, "(") {
- c, _, ok := strings.Cut(strings.TrimPrefix(commit, "("), ",")
- if !ok {
- return "", errors.New("commit information not found")
- }
-
- commit = c
- }
-
- schemaURL = fmt.Sprintf("https://raw.githubusercontent.com/golangci/golangci-lint/%s/jsonschema/golangci.next.jsonschema.json",
- commit)
-
- default:
- return "", errors.New("version not found")
- }
-
- return schemaURL, nil
-}
-
-func validateConfiguration(schemaPath, targetFile string) error {
- httploader.Client = &http.Client{Timeout: 2 * time.Second}
-
- compiler := jsonschema.NewCompiler()
- compiler.Draft = jsonschema.Draft7
-
- schema, err := compiler.Compile(schemaPath)
- if err != nil {
- return fmt.Errorf("compile schema: %w", err)
- }
-
- var m any
-
- switch strings.ToLower(filepath.Ext(targetFile)) {
- case ".yaml", ".yml", ".json":
- m, err = decodeYamlFile(targetFile)
- if err != nil {
- return err
- }
-
- case ".toml":
- m, err = decodeTomlFile(targetFile)
- if err != nil {
- return err
- }
-
- default:
- // unsupported
- return errors.New("unsupported configuration format")
- }
-
- return schema.Validate(m)
-}
-
-func printValidationDetail(cmd *cobra.Command, detail *jsonschema.Detailed) {
- if detail.Error != "" {
- cmd.PrintErrf("jsonschema: %q does not validate with %q: %s\n",
- strings.ReplaceAll(strings.TrimPrefix(detail.InstanceLocation, "/"), "/", "."), detail.KeywordLocation, detail.Error)
- }
-
- for _, d := range detail.Errors {
- printValidationDetail(cmd, &d)
- }
-}
-
-func decodeYamlFile(filename string) (any, error) {
- file, err := os.Open(filename)
- if err != nil {
- return nil, fmt.Errorf("[%s] file open: %w", filename, err)
- }
-
- defer func() { _ = file.Close() }()
-
- var m any
- err = yaml.NewDecoder(file).Decode(&m)
- if err != nil {
- return nil, fmt.Errorf("[%s] YAML decode: %w", filename, err)
- }
-
- return m, nil
-}
-
-func decodeTomlFile(filename string) (any, error) {
- file, err := os.Open(filename)
- if err != nil {
- return nil, fmt.Errorf("[%s] file open: %w", filename, err)
- }
-
- defer func() { _ = file.Close() }()
-
- var m any
- err = toml.NewDecoder(file).Decode(&m)
- if err != nil {
- return nil, fmt.Errorf("[%s] TOML decode: %w", filename, err)
- }
-
- return m, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/custom.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/custom.go
deleted file mode 100644
index 1bc9f9014..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/custom.go
+++ /dev/null
@@ -1,79 +0,0 @@
-package commands
-
-import (
- "fmt"
- "log"
- "os"
-
- "github.com/spf13/cobra"
-
- "github.com/golangci/golangci-lint/pkg/commands/internal"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-const envKeepTempFiles = "CUSTOM_GCL_KEEP_TEMP_FILES"
-
-type customCommand struct {
- cmd *cobra.Command
-
- cfg *internal.Configuration
-
- log logutils.Log
-}
-
-func newCustomCommand(logger logutils.Log) *customCommand {
- c := &customCommand{log: logger}
-
- customCmd := &cobra.Command{
- Use: "custom",
- Short: "Build a version of golangci-lint with custom linters",
- Args: cobra.NoArgs,
- PreRunE: c.preRunE,
- RunE: c.runE,
- SilenceUsage: true,
- }
-
- c.cmd = customCmd
-
- return c
-}
-
-func (c *customCommand) preRunE(_ *cobra.Command, _ []string) error {
- cfg, err := internal.LoadConfiguration()
- if err != nil {
- return err
- }
-
- err = cfg.Validate()
- if err != nil {
- return err
- }
-
- c.cfg = cfg
-
- return nil
-}
-
-func (c *customCommand) runE(cmd *cobra.Command, _ []string) error {
- tmp, err := os.MkdirTemp(os.TempDir(), "custom-gcl")
- if err != nil {
- return fmt.Errorf("create temporary directory: %w", err)
- }
-
- defer func() {
- if os.Getenv(envKeepTempFiles) != "" {
- log.Printf("WARN: The env var %s has been detected: the temporary directory is preserved: %s", envKeepTempFiles, tmp)
-
- return
- }
-
- _ = os.RemoveAll(tmp)
- }()
-
- err = internal.NewBuilder(c.log, c.cfg, tmp).Build(cmd.Context())
- if err != nil {
- return fmt.Errorf("build process: %w", err)
- }
-
- return nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/flagsets.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/flagsets.go
deleted file mode 100644
index 608f6b9de..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/flagsets.go
+++ /dev/null
@@ -1,146 +0,0 @@
-package commands
-
-import (
- "fmt"
- "strings"
-
- "github.com/fatih/color"
- "github.com/spf13/pflag"
- "github.com/spf13/viper"
-
- "github.com/golangci/golangci-lint/pkg/commands/internal"
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/exitcodes"
- "github.com/golangci/golangci-lint/pkg/lint/lintersdb"
- "github.com/golangci/golangci-lint/pkg/result/processors"
-)
-
-const defaultMaxIssuesPerLinter = 50
-
-func setupLintersFlagSet(v *viper.Viper, fs *pflag.FlagSet) {
- internal.AddHackedStringSliceP(fs, "disable", "D", color.GreenString("Disable specific linter"))
- internal.AddFlagAndBind(v, fs, fs.Bool, "disable-all", "linters.disable-all", false, color.GreenString("Disable all linters"))
-
- internal.AddHackedStringSliceP(fs, "enable", "E", color.GreenString("Enable specific linter"))
- internal.AddFlagAndBind(v, fs, fs.Bool, "enable-all", "linters.enable-all", false, color.GreenString("Enable all linters"))
-
- internal.AddFlagAndBind(v, fs, fs.Bool, "fast", "linters.fast", false,
- color.GreenString("Enable only fast linters from enabled linters set (first run won't be fast)"))
-
- internal.AddHackedStringSliceP(fs, "presets", "p",
- color.GreenString(fmt.Sprintf("Enable presets (%s) of linters.\n"+
- "Run 'golangci-lint help linters' to see them.\n"+
- "This option implies option --disable-all",
- strings.Join(lintersdb.AllPresets(), "|"),
- )))
-
- fs.StringSlice("enable-only", nil,
- color.GreenString("Override linters configuration section to only run the specific linter(s)")) // Flags only.
-}
-
-func setupRunFlagSet(v *viper.Viper, fs *pflag.FlagSet) {
- internal.AddFlagAndBindP(v, fs, fs.IntP, "concurrency", "j", "run.concurrency", getDefaultConcurrency(),
- color.GreenString("Number of CPUs to use (Default: number of logical CPUs)"))
-
- internal.AddFlagAndBind(v, fs, fs.String, "modules-download-mode", "run.modules-download-mode", "",
- color.GreenString("Modules download mode. If not empty, passed as -mod=<mode> to go tools"))
- internal.AddFlagAndBind(v, fs, fs.Int, "issues-exit-code", "run.issues-exit-code", exitcodes.IssuesFound,
- color.GreenString("Exit code when issues were found"))
- internal.AddFlagAndBind(v, fs, fs.String, "go", "run.go", "", color.GreenString("Targeted Go version"))
- internal.AddHackedStringSlice(fs, "build-tags", color.GreenString("Build tags"))
-
- internal.AddFlagAndBind(v, fs, fs.Duration, "timeout", "run.timeout", defaultTimeout, color.GreenString("Timeout for total work"))
-
- internal.AddFlagAndBind(v, fs, fs.Bool, "tests", "run.tests", true, color.GreenString("Analyze tests (*_test.go)"))
-
- internal.AddDeprecatedHackedStringSlice(fs, "skip-files", color.GreenString("Regexps of files to skip"))
- internal.AddDeprecatedHackedStringSlice(fs, "skip-dirs", color.GreenString("Regexps of directories to skip"))
- internal.AddDeprecatedFlagAndBind(v, fs, fs.Bool, "skip-dirs-use-default", "run.skip-dirs-use-default", true,
- getDefaultDirectoryExcludeHelp())
-
- const allowParallelDesc = "Allow multiple parallel golangci-lint instances running.\n" +
- "If false (default) - golangci-lint acquires file lock on start."
- internal.AddFlagAndBind(v, fs, fs.Bool, "allow-parallel-runners", "run.allow-parallel-runners", false,
- color.GreenString(allowParallelDesc))
- const allowSerialDesc = "Allow multiple golangci-lint instances running, but serialize them around a lock.\n" +
- "If false (default) - golangci-lint exits with an error if it fails to acquire file lock on start."
- internal.AddFlagAndBind(v, fs, fs.Bool, "allow-serial-runners", "run.allow-serial-runners", false, color.GreenString(allowSerialDesc))
-}
-
-func setupOutputFlagSet(v *viper.Viper, fs *pflag.FlagSet) {
- internal.AddFlagAndBind(v, fs, fs.String, "out-format", "output.formats", config.OutFormatColoredLineNumber,
- color.GreenString(fmt.Sprintf("Formats of output: %s", strings.Join(config.AllOutputFormats, "|"))))
- internal.AddFlagAndBind(v, fs, fs.Bool, "print-issued-lines", "output.print-issued-lines", true,
- color.GreenString("Print lines of code with issue"))
- internal.AddFlagAndBind(v, fs, fs.Bool, "print-linter-name", "output.print-linter-name", true,
- color.GreenString("Print linter name in issue line"))
- internal.AddFlagAndBind(v, fs, fs.Bool, "uniq-by-line", "output.uniq-by-line", true,
- color.GreenString("Make issues output unique by line"))
- internal.AddFlagAndBind(v, fs, fs.Bool, "sort-results", "output.sort-results", false,
- color.GreenString("Sort linter results"))
- internal.AddFlagAndBind(v, fs, fs.StringSlice, "sort-order", "output.sort-order", nil,
- color.GreenString("Sort order of linter results"))
- internal.AddFlagAndBind(v, fs, fs.String, "path-prefix", "output.path-prefix", "",
- color.GreenString("Path prefix to add to output"))
- internal.AddFlagAndBind(v, fs, fs.Bool, "show-stats", "output.show-stats", false, color.GreenString("Show statistics per linter"))
-}
-
-//nolint:gomnd // magic numbers here is ok
-func setupIssuesFlagSet(v *viper.Viper, fs *pflag.FlagSet) {
- internal.AddHackedStringSliceP(fs, "exclude", "e", color.GreenString("Exclude issue by regexp"))
- internal.AddFlagAndBind(v, fs, fs.Bool, "exclude-use-default", "issues.exclude-use-default", true,
- getDefaultIssueExcludeHelp())
- internal.AddFlagAndBind(v, fs, fs.Bool, "exclude-case-sensitive", "issues.exclude-case-sensitive", false,
- color.GreenString("If set to true exclude and exclude rules regular expressions are case-sensitive"))
-
- internal.AddFlagAndBind(v, fs, fs.Int, "max-issues-per-linter", "issues.max-issues-per-linter", defaultMaxIssuesPerLinter,
- color.GreenString("Maximum issues count per one linter. Set to 0 to disable"))
- internal.AddFlagAndBind(v, fs, fs.Int, "max-same-issues", "issues.max-same-issues", 3,
- color.GreenString("Maximum count of issues with the same text. Set to 0 to disable"))
-
- internal.AddHackedStringSlice(fs, "exclude-files", color.GreenString("Regexps of files to exclude"))
- internal.AddHackedStringSlice(fs, "exclude-dirs", color.GreenString("Regexps of directories to exclude"))
- internal.AddFlagAndBind(v, fs, fs.Bool, "exclude-dirs-use-default", "issues.exclude-dirs-use-default", true,
- getDefaultDirectoryExcludeHelp())
-
- internal.AddFlagAndBind(v, fs, fs.String, "exclude-generated", "issues.exclude-generated", processors.AutogeneratedModeLax,
- color.GreenString("Mode of the generated files analysis"))
-
- const newDesc = "Show only new issues: if there are unstaged changes or untracked files, only those changes " +
- "are analyzed, else only changes in HEAD~ are analyzed.\nIt's a super-useful option for integration " +
- "of golangci-lint into existing large codebase.\nIt's not practical to fix all existing issues at " +
- "the moment of integration: much better to not allow issues in new code.\nFor CI setups, prefer " +
- "--new-from-rev=HEAD~, as --new can skip linting the current patch if any scripts generate " +
- "unstaged files before golangci-lint runs."
- internal.AddFlagAndBindP(v, fs, fs.BoolP, "new", "n", "issues.new", false, color.GreenString(newDesc))
- internal.AddFlagAndBind(v, fs, fs.String, "new-from-rev", "issues.new-from-rev", "",
- color.GreenString("Show only new issues created after git revision `REV`"))
- internal.AddFlagAndBind(v, fs, fs.String, "new-from-patch", "issues.new-from-patch", "",
- color.GreenString("Show only new issues created in git patch with file path `PATH`"))
- internal.AddFlagAndBind(v, fs, fs.Bool, "whole-files", "issues.whole-files", false,
- color.GreenString("Show issues in any part of update files (requires new-from-rev or new-from-patch)"))
- internal.AddFlagAndBind(v, fs, fs.Bool, "fix", "issues.fix", false,
- color.GreenString("Fix found issues (if it's supported by the linter)"))
-}
-
-func getDefaultIssueExcludeHelp() string {
- parts := []string{color.GreenString("Use or not use default excludes:")}
-
- for _, ep := range config.DefaultExcludePatterns {
- parts = append(parts,
- fmt.Sprintf(" - %s (%s): %s", color.BlueString(ep.ID), color.CyanString(ep.Linter), ep.Why),
- fmt.Sprintf(` Pattern: %s`, color.YellowString(`'`+ep.Pattern+`'`)),
- )
- }
-
- return strings.Join(parts, "\n")
-}
-
-func getDefaultDirectoryExcludeHelp() string {
- parts := []string{color.GreenString("Use or not use default excluded directories:")}
- for _, dir := range processors.StdExcludeDirRegexps {
- parts = append(parts, fmt.Sprintf(" - %s", color.YellowString(dir)))
- }
- parts = append(parts, "")
- return strings.Join(parts, "\n")
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/help.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/help.go
deleted file mode 100644
index 094e5d190..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/help.go
+++ /dev/null
@@ -1,142 +0,0 @@
-package commands
-
-import (
- "fmt"
- "slices"
- "sort"
- "strings"
-
- "github.com/fatih/color"
- "github.com/spf13/cobra"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/lint/lintersdb"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-type helpCommand struct {
- cmd *cobra.Command
-
- dbManager *lintersdb.Manager
-
- log logutils.Log
-}
-
-func newHelpCommand(logger logutils.Log) *helpCommand {
- c := &helpCommand{log: logger}
-
- helpCmd := &cobra.Command{
- Use: "help",
- Short: "Help",
- Args: cobra.NoArgs,
- RunE: func(cmd *cobra.Command, _ []string) error {
- return cmd.Help()
- },
- }
-
- helpCmd.AddCommand(
- &cobra.Command{
- Use: "linters",
- Short: "Help about linters",
- Args: cobra.NoArgs,
- ValidArgsFunction: cobra.NoFileCompletions,
- Run: c.execute,
- PreRunE: c.preRunE,
- },
- )
-
- c.cmd = helpCmd
-
- return c
-}
-
-func (c *helpCommand) preRunE(_ *cobra.Command, _ []string) error {
- // The command doesn't depend on the real configuration.
- // It just needs the list of all plugins and all presets.
- dbManager, err := lintersdb.NewManager(c.log.Child(logutils.DebugKeyLintersDB), config.NewDefault(), lintersdb.NewLinterBuilder())
- if err != nil {
- return err
- }
-
- c.dbManager = dbManager
-
- return nil
-}
-
-func (c *helpCommand) execute(_ *cobra.Command, _ []string) {
- var enabledLCs, disabledLCs []*linter.Config
- for _, lc := range c.dbManager.GetAllSupportedLinterConfigs() {
- if lc.Internal {
- continue
- }
-
- if lc.EnabledByDefault {
- enabledLCs = append(enabledLCs, lc)
- } else {
- disabledLCs = append(disabledLCs, lc)
- }
- }
-
- color.Green("Enabled by default linters:\n")
- printLinters(enabledLCs)
-
- color.Red("\nDisabled by default linters:\n")
- printLinters(disabledLCs)
-
- color.Green("\nLinters presets:")
- c.printPresets()
-}
-
-func (c *helpCommand) printPresets() {
- for _, p := range lintersdb.AllPresets() {
- linters := c.dbManager.GetAllLinterConfigsForPreset(p)
-
- var linterNames []string
- for _, lc := range linters {
- if lc.Internal {
- continue
- }
-
- linterNames = append(linterNames, lc.Name())
- }
- sort.Strings(linterNames)
-
- _, _ = fmt.Fprintf(logutils.StdOut, "%s: %s\n", color.YellowString(p), strings.Join(linterNames, ", "))
- }
-}
-
-func printLinters(lcs []*linter.Config) {
- slices.SortFunc(lcs, func(a, b *linter.Config) int {
- if a.IsDeprecated() && b.IsDeprecated() {
- return strings.Compare(a.Name(), b.Name())
- }
-
- if a.IsDeprecated() {
- return 1
- }
-
- if b.IsDeprecated() {
- return -1
- }
-
- return strings.Compare(a.Name(), b.Name())
- })
-
- for _, lc := range lcs {
- // If the linter description spans multiple lines, truncate everything following the first newline
- linterDescription := lc.Linter.Desc()
- firstNewline := strings.IndexRune(linterDescription, '\n')
- if firstNewline > 0 {
- linterDescription = linterDescription[:firstNewline]
- }
-
- deprecatedMark := ""
- if lc.IsDeprecated() {
- deprecatedMark = " [" + color.RedString("deprecated") + "]"
- }
-
- _, _ = fmt.Fprintf(logutils.StdOut, "%s%s: %s [fast: %t, auto-fix: %t]\n",
- color.YellowString(lc.Name()), deprecatedMark, linterDescription, !lc.IsSlowLinter(), lc.CanAutoFix)
- }
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/internal/builder.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/internal/builder.go
deleted file mode 100644
index f0e259fb0..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/internal/builder.go
+++ /dev/null
@@ -1,250 +0,0 @@
-package internal
-
-import (
- "context"
- "fmt"
- "io"
- "os"
- "os/exec"
- "path/filepath"
- "runtime"
- "strings"
- "time"
- "unicode"
-
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-// Builder runs all the required commands to build a binary.
-type Builder struct {
- cfg *Configuration
-
- log logutils.Log
-
- root string
- repo string
-}
-
-// NewBuilder creates a new Builder.
-func NewBuilder(logger logutils.Log, cfg *Configuration, root string) *Builder {
- return &Builder{
- cfg: cfg,
- log: logger,
- root: root,
- repo: filepath.Join(root, "golangci-lint"),
- }
-}
-
-// Build builds the custom binary.
-func (b Builder) Build(ctx context.Context) error {
- b.log.Infof("Cloning golangci-lint repository")
-
- err := b.clone(ctx)
- if err != nil {
- return fmt.Errorf("clone golangci-lint: %w", err)
- }
-
- b.log.Infof("Adding plugin imports")
-
- err = b.updatePluginsFile()
- if err != nil {
- return fmt.Errorf("update plugin file: %w", err)
- }
-
- b.log.Infof("Adding replace directives")
-
- err = b.addToGoMod(ctx)
- if err != nil {
- return fmt.Errorf("add to go.mod: %w", err)
- }
-
- b.log.Infof("Running go mod tidy")
-
- err = b.goModTidy(ctx)
- if err != nil {
- return fmt.Errorf("go mod tidy: %w", err)
- }
-
- b.log.Infof("Building golangci-lint binary")
-
- binaryName := b.getBinaryName()
-
- err = b.goBuild(ctx, binaryName)
- if err != nil {
- return fmt.Errorf("build golangci-lint binary: %w", err)
- }
-
- b.log.Infof("Moving golangci-lint binary")
-
- err = b.copyBinary(binaryName)
- if err != nil {
- return fmt.Errorf("move golangci-lint binary: %w", err)
- }
-
- return nil
-}
-
-func (b Builder) clone(ctx context.Context) error {
- //nolint:gosec // the variable is sanitized.
- cmd := exec.CommandContext(ctx,
- "git", "clone", "--branch", sanitizeVersion(b.cfg.Version),
- "--single-branch", "--depth", "1", "-c advice.detachedHead=false", "-q",
- "https://github.com/golangci/golangci-lint.git",
- )
- cmd.Dir = b.root
-
- output, err := cmd.CombinedOutput()
- if err != nil {
- b.log.Infof("%s", string(output))
-
- return fmt.Errorf("%s: %w", strings.Join(cmd.Args, " "), err)
- }
-
- return nil
-}
-
-func (b Builder) addToGoMod(ctx context.Context) error {
- for _, plugin := range b.cfg.Plugins {
- if plugin.Path != "" {
- err := b.addReplaceDirective(ctx, plugin)
- if err != nil {
- return err
- }
-
- continue
- }
-
- err := b.goGet(ctx, plugin)
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func (b Builder) goGet(ctx context.Context, plugin *Plugin) error {
- //nolint:gosec // the variables are user related.
- cmd := exec.CommandContext(ctx, "go", "get", plugin.Module+"@"+plugin.Version)
- cmd.Dir = b.repo
-
- b.log.Infof("run: %s", strings.Join(cmd.Args, " "))
-
- output, err := cmd.CombinedOutput()
- if err != nil {
- b.log.Warnf("%s", string(output))
-
- return fmt.Errorf("%s: %w", strings.Join(cmd.Args, " "), err)
- }
-
- return nil
-}
-
-func (b Builder) addReplaceDirective(ctx context.Context, plugin *Plugin) error {
- replace := fmt.Sprintf("%s=%s", plugin.Module, plugin.Path)
-
- cmd := exec.CommandContext(ctx, "go", "mod", "edit", "-replace", replace)
- cmd.Dir = b.repo
-
- b.log.Infof("run: %s", strings.Join(cmd.Args, " "))
-
- output, err := cmd.CombinedOutput()
- if err != nil {
- b.log.Warnf("%s", string(output))
-
- return fmt.Errorf("%s: %w", strings.Join(cmd.Args, " "), err)
- }
-
- return nil
-}
-
-func (b Builder) goModTidy(ctx context.Context) error {
- cmd := exec.CommandContext(ctx, "go", "mod", "tidy")
- cmd.Dir = b.repo
-
- output, err := cmd.CombinedOutput()
- if err != nil {
- b.log.Warnf("%s", string(output))
-
- return fmt.Errorf("%s: %w", strings.Join(cmd.Args, " "), err)
- }
-
- return nil
-}
-
-func (b Builder) goBuild(ctx context.Context, binaryName string) error {
- //nolint:gosec // the variable is sanitized.
- cmd := exec.CommandContext(ctx, "go", "build",
- "-ldflags",
- fmt.Sprintf(
- "-s -w -X 'main.version=%s-custom-gcl' -X 'main.date=%s'",
- sanitizeVersion(b.cfg.Version), time.Now().UTC().String(),
- ),
- "-o", binaryName,
- "./cmd/golangci-lint",
- )
- cmd.Dir = b.repo
-
- output, err := cmd.CombinedOutput()
- if err != nil {
- b.log.Warnf("%s", string(output))
-
- return fmt.Errorf("%s: %w", strings.Join(cmd.Args, " "), err)
- }
-
- return nil
-}
-
-func (b Builder) copyBinary(binaryName string) error {
- src := filepath.Join(b.repo, binaryName)
-
- source, err := os.Open(filepath.Clean(src))
- if err != nil {
- return fmt.Errorf("open source file: %w", err)
- }
-
- defer func() { _ = source.Close() }()
-
- info, err := source.Stat()
- if err != nil {
- return fmt.Errorf("stat source file: %w", err)
- }
-
- if b.cfg.Destination != "" {
- err = os.MkdirAll(b.cfg.Destination, os.ModePerm)
- if err != nil {
- return fmt.Errorf("create destination directory: %w", err)
- }
- }
-
- dst, err := os.OpenFile(filepath.Join(b.cfg.Destination, binaryName), os.O_RDWR|os.O_CREATE|os.O_TRUNC, info.Mode())
- if err != nil {
- return fmt.Errorf("create destination file: %w", err)
- }
-
- defer func() { _ = dst.Close() }()
-
- _, err = io.Copy(dst, source)
- if err != nil {
- return fmt.Errorf("copy source to destination: %w", err)
- }
-
- return nil
-}
-
-func (b Builder) getBinaryName() string {
- name := b.cfg.Name
- if runtime.GOOS == "windows" {
- name += ".exe"
- }
-
- return name
-}
-
-func sanitizeVersion(v string) string {
- fn := func(c rune) bool {
- return !(unicode.IsLetter(c) || unicode.IsNumber(c) || c == '.' || c == '/')
- }
-
- return strings.Join(strings.FieldsFunc(v, fn), "")
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/internal/configuration.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/internal/configuration.go
deleted file mode 100644
index f9de4c47a..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/internal/configuration.go
+++ /dev/null
@@ -1,140 +0,0 @@
-package internal
-
-import (
- "errors"
- "fmt"
- "os"
- "path/filepath"
- "strings"
-
- "gopkg.in/yaml.v3"
-)
-
-const base = ".custom-gcl"
-
-const defaultBinaryName = "custom-gcl"
-
-// Configuration represents the configuration file.
-type Configuration struct {
- // golangci-lint version.
- Version string `yaml:"version"`
-
- // Name of the binary.
- Name string `yaml:"name,omitempty"`
-
- // Destination is the path to a directory to store the binary.
- Destination string `yaml:"destination,omitempty"`
-
- // Plugins information.
- Plugins []*Plugin `yaml:"plugins,omitempty"`
-}
-
-// Validate checks and clean the configuration.
-func (c *Configuration) Validate() error {
- if strings.TrimSpace(c.Version) == "" {
- return errors.New("root field 'version' is required")
- }
-
- if strings.TrimSpace(c.Name) == "" {
- c.Name = defaultBinaryName
- }
-
- if len(c.Plugins) == 0 {
- return errors.New("no plugins defined")
- }
-
- for _, plugin := range c.Plugins {
- if strings.TrimSpace(plugin.Module) == "" {
- return errors.New("field 'module' is required")
- }
-
- if strings.TrimSpace(plugin.Import) == "" {
- plugin.Import = plugin.Module
- }
-
- if strings.TrimSpace(plugin.Path) == "" && strings.TrimSpace(plugin.Version) == "" {
- return errors.New("missing information: 'version' or 'path' should be provided")
- }
-
- if strings.TrimSpace(plugin.Path) != "" && strings.TrimSpace(plugin.Version) != "" {
- return errors.New("invalid configuration: 'version' and 'path' should not be provided at the same time")
- }
-
- if strings.TrimSpace(plugin.Path) == "" {
- continue
- }
-
- abs, err := filepath.Abs(plugin.Path)
- if err != nil {
- return err
- }
-
- plugin.Path = abs
- }
-
- return nil
-}
-
-// Plugin represents information about a plugin.
-type Plugin struct {
- // Module name.
- Module string `yaml:"module"`
-
- // Import to use.
- Import string `yaml:"import,omitempty"`
-
- // Version of the module.
- // Only for module available through a Go proxy.
- Version string `yaml:"version,omitempty"`
-
- // Path to the local module.
- // Only for local module.
- Path string `yaml:"path,omitempty"`
-}
-
-func LoadConfiguration() (*Configuration, error) {
- configFilePath, err := findConfigurationFile()
- if err != nil {
- return nil, fmt.Errorf("file %s not found: %w", configFilePath, err)
- }
-
- file, err := os.Open(configFilePath)
- if err != nil {
- return nil, fmt.Errorf("file %s open: %w", configFilePath, err)
- }
-
- defer func() { _ = file.Close() }()
-
- var cfg Configuration
-
- err = yaml.NewDecoder(file).Decode(&cfg)
- if err != nil {
- return nil, fmt.Errorf("YAML decoding: %w", err)
- }
-
- return &cfg, nil
-}
-
-func findConfigurationFile() (string, error) {
- entries, err := os.ReadDir(".")
- if err != nil {
- return "", fmt.Errorf("read directory: %w", err)
- }
-
- for _, entry := range entries {
- ext := filepath.Ext(entry.Name())
-
- switch strings.ToLower(strings.TrimPrefix(ext, ".")) {
- case "yml", "yaml", "json":
- if isConf(ext, entry.Name()) {
- return entry.Name(), nil
- }
- }
- }
-
- return "", errors.New("configuration file not found")
-}
-
-func isConf(ext, name string) bool {
- return base+ext == name
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/internal/imports.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/internal/imports.go
deleted file mode 100644
index 3bebf596b..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/internal/imports.go
+++ /dev/null
@@ -1,69 +0,0 @@
-package internal
-
-import (
- "bytes"
- "fmt"
- "go/format"
- "os"
- "path/filepath"
- "text/template"
-)
-
-const importsTemplate = `
-package main
-
-import (
-{{range .Imports -}}
- _ "{{.}}"
-{{end -}}
-)
-`
-
-func (b Builder) updatePluginsFile() error {
- importsDest := filepath.Join(b.repo, "cmd", "golangci-lint", "plugins.go")
-
- info, err := os.Stat(importsDest)
- if err != nil {
- return fmt.Errorf("file %s not found: %w", importsDest, err)
- }
-
- source, err := generateImports(b.cfg)
- if err != nil {
- return fmt.Errorf("generate imports: %w", err)
- }
-
- b.log.Infof("generated imports info %s:\n%s\n", importsDest, source)
-
- err = os.WriteFile(filepath.Clean(importsDest), source, info.Mode())
- if err != nil {
- return fmt.Errorf("write file %s: %w", importsDest, err)
- }
-
- return nil
-}
-
-func generateImports(cfg *Configuration) ([]byte, error) {
- impTmpl, err := template.New("plugins.go").Parse(importsTemplate)
- if err != nil {
- return nil, fmt.Errorf("parse template: %w", err)
- }
-
- var imps []string
- for _, plugin := range cfg.Plugins {
- imps = append(imps, plugin.Import)
- }
-
- buf := &bytes.Buffer{}
-
- err = impTmpl.Execute(buf, map[string]any{"Imports": imps})
- if err != nil {
- return nil, fmt.Errorf("execute template: %w", err)
- }
-
- source, err := format.Source(buf.Bytes())
- if err != nil {
- return nil, fmt.Errorf("format source: %w", err)
- }
-
- return source, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/internal/vibra.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/internal/vibra.go
deleted file mode 100644
index ece2483fe..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/internal/vibra.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package internal
-
-import (
- "fmt"
-
- "github.com/spf13/pflag"
- "github.com/spf13/viper"
-)
-
-type FlagFunc[T any] func(name string, value T, usage string) *T
-
-type FlagPFunc[T any] func(name, shorthand string, value T, usage string) *T
-
-// AddFlagAndBind adds a Cobra/pflag flag and binds it with Viper.
-func AddFlagAndBind[T any](v *viper.Viper, fs *pflag.FlagSet, pfn FlagFunc[T], name, bind string, value T, usage string) {
- pfn(name, value, usage)
-
- err := v.BindPFlag(bind, fs.Lookup(name))
- if err != nil {
- panic(fmt.Sprintf("failed to bind flag %s: %v", name, err))
- }
-}
-
-// AddFlagAndBindP adds a Cobra/pflag flag and binds it with Viper.
-func AddFlagAndBindP[T any](v *viper.Viper, fs *pflag.FlagSet, pfn FlagPFunc[T], name, shorthand, bind string, value T, usage string) {
- pfn(name, shorthand, value, usage)
-
- err := v.BindPFlag(bind, fs.Lookup(name))
- if err != nil {
- panic(fmt.Sprintf("failed to bind flag %s: %v", name, err))
- }
-}
-
-// AddDeprecatedFlagAndBind similar to AddFlagAndBind but deprecate the flag.
-func AddDeprecatedFlagAndBind[T any](v *viper.Viper, fs *pflag.FlagSet, pfn FlagFunc[T], name, bind string, value T, usage string) {
- AddFlagAndBind(v, fs, pfn, name, bind, value, usage)
- deprecateFlag(fs, name)
-}
-
-// AddHackedStringSliceP Hack for slice, see Loader.applyStringSliceHack.
-func AddHackedStringSliceP(fs *pflag.FlagSet, name, shorthand, usage string) {
- fs.StringSliceP(name, shorthand, nil, usage)
-}
-
-// AddHackedStringSlice Hack for slice, see Loader.applyStringSliceHack.
-func AddHackedStringSlice(fs *pflag.FlagSet, name, usage string) {
- AddHackedStringSliceP(fs, name, "", usage)
-}
-
-// AddDeprecatedHackedStringSlice similar to AddHackedStringSlice but deprecate the flag.
-func AddDeprecatedHackedStringSlice(fs *pflag.FlagSet, name, usage string) {
- AddHackedStringSlice(fs, name, usage)
- deprecateFlag(fs, name)
-}
-
-func deprecateFlag(fs *pflag.FlagSet, name string) {
- _ = fs.MarkHidden(name)
- _ = fs.MarkDeprecated(name, "check the documentation for more information.")
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/linters.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/linters.go
deleted file mode 100644
index a93814f0f..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/linters.go
+++ /dev/null
@@ -1,107 +0,0 @@
-package commands
-
-import (
- "fmt"
-
- "github.com/fatih/color"
- "github.com/spf13/cobra"
- "github.com/spf13/viper"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/lint/lintersdb"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-type lintersOptions struct {
- config.LoaderOptions
-}
-
-type lintersCommand struct {
- viper *viper.Viper
- cmd *cobra.Command
-
- opts lintersOptions
-
- cfg *config.Config
-
- log logutils.Log
-
- dbManager *lintersdb.Manager
-}
-
-func newLintersCommand(logger logutils.Log) *lintersCommand {
- c := &lintersCommand{
- viper: viper.New(),
- cfg: config.NewDefault(),
- log: logger,
- }
-
- lintersCmd := &cobra.Command{
- Use: "linters",
- Short: "List current linters configuration",
- Args: cobra.NoArgs,
- ValidArgsFunction: cobra.NoFileCompletions,
- RunE: c.execute,
- PreRunE: c.preRunE,
- SilenceUsage: true,
- }
-
- fs := lintersCmd.Flags()
- fs.SortFlags = false // sort them as they are defined here
-
- setupConfigFileFlagSet(fs, &c.opts.LoaderOptions)
- setupLintersFlagSet(c.viper, fs)
-
- c.cmd = lintersCmd
-
- return c
-}
-
-func (c *lintersCommand) preRunE(cmd *cobra.Command, args []string) error {
- loader := config.NewLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts.LoaderOptions, c.cfg, args)
-
- err := loader.Load(config.LoadOptions{Validation: true})
- if err != nil {
- return fmt.Errorf("can't load config: %w", err)
- }
-
- dbManager, err := lintersdb.NewManager(c.log.Child(logutils.DebugKeyLintersDB), c.cfg,
- lintersdb.NewLinterBuilder(), lintersdb.NewPluginModuleBuilder(c.log), lintersdb.NewPluginGoBuilder(c.log))
- if err != nil {
- return err
- }
-
- c.dbManager = dbManager
-
- return nil
-}
-
-func (c *lintersCommand) execute(_ *cobra.Command, _ []string) error {
- enabledLintersMap, err := c.dbManager.GetEnabledLintersMap()
- if err != nil {
- return fmt.Errorf("can't get enabled linters: %w", err)
- }
-
- var enabledLinters []*linter.Config
- var disabledLCs []*linter.Config
-
- for _, lc := range c.dbManager.GetAllSupportedLinterConfigs() {
- if lc.Internal {
- continue
- }
-
- if enabledLintersMap[lc.Name()] == nil {
- disabledLCs = append(disabledLCs, lc)
- } else {
- enabledLinters = append(enabledLinters, lc)
- }
- }
-
- color.Green("Enabled by your configuration linters:\n")
- printLinters(enabledLinters)
- color.Red("\nDisabled by your configuration linters:\n")
- printLinters(disabledLCs)
-
- return nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/root.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/root.go
deleted file mode 100644
index cbb838aac..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/root.go
+++ /dev/null
@@ -1,167 +0,0 @@
-package commands
-
-import (
- "errors"
- "fmt"
- "os"
- "slices"
-
- "github.com/fatih/color"
- "github.com/spf13/cobra"
- "github.com/spf13/pflag"
-
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-func Execute(info BuildInfo) error {
- return newRootCommand(info).Execute()
-}
-
-type rootOptions struct {
- PrintVersion bool // Flag only.
-
- Verbose bool // Flag only.
- Color string // Flag only.
-}
-
-type rootCommand struct {
- cmd *cobra.Command
- opts rootOptions
-
- log logutils.Log
-}
-
-func newRootCommand(info BuildInfo) *rootCommand {
- c := &rootCommand{}
-
- rootCmd := &cobra.Command{
- Use: "golangci-lint",
- Short: "golangci-lint is a smart linters runner.",
- Long: `Smart, fast linters runner.`,
- Args: cobra.NoArgs,
- RunE: func(cmd *cobra.Command, _ []string) error {
- if c.opts.PrintVersion {
- _ = printVersion(logutils.StdOut, info)
- return nil
- }
-
- return cmd.Help()
- },
- }
-
- fs := rootCmd.Flags()
- fs.BoolVar(&c.opts.PrintVersion, "version", false, color.GreenString("Print version"))
-
- setupRootPersistentFlags(rootCmd.PersistentFlags(), &c.opts)
-
- log := logutils.NewStderrLog(logutils.DebugKeyEmpty)
-
- // Each command uses a dedicated configuration structure to avoid side effects of bindings.
- rootCmd.AddCommand(
- newLintersCommand(log).cmd,
- newRunCommand(log, info).cmd,
- newCacheCommand().cmd,
- newConfigCommand(log, info).cmd,
- newVersionCommand(info).cmd,
- newCustomCommand(log).cmd,
- )
-
- rootCmd.SetHelpCommand(newHelpCommand(log).cmd)
-
- c.log = log
- c.cmd = rootCmd
-
- return c
-}
-
-func (c *rootCommand) Execute() error {
- err := setupLogger(c.log)
- if err != nil {
- return err
- }
-
- return c.cmd.Execute()
-}
-
-func setupRootPersistentFlags(fs *pflag.FlagSet, opts *rootOptions) {
- fs.BoolP("help", "h", false, color.GreenString("Help for a command"))
- fs.BoolVarP(&opts.Verbose, "verbose", "v", false, color.GreenString("Verbose output"))
- fs.StringVar(&opts.Color, "color", "auto", color.GreenString("Use color when printing; can be 'always', 'auto', or 'never'"))
-}
-
-func setupLogger(logger logutils.Log) error {
- opts, err := forceRootParsePersistentFlags()
- if err != nil && !errors.Is(err, pflag.ErrHelp) {
- return err
- }
-
- if opts == nil {
- return nil
- }
-
- logutils.SetupVerboseLog(logger, opts.Verbose)
-
- switch opts.Color {
- case "always":
- color.NoColor = false
- case "never":
- color.NoColor = true
- case "auto":
- // nothing
- default:
- logger.Fatalf("invalid value %q for --color; must be 'always', 'auto', or 'never'", opts.Color)
- }
-
- return nil
-}
-
-func forceRootParsePersistentFlags() (*rootOptions, error) {
- // We use another pflag.FlagSet here to not set `changed` flag on cmd.Flags() options.
- // Otherwise, string slice options will be duplicated.
- fs := pflag.NewFlagSet("config flag set", pflag.ContinueOnError)
-
- // Ignore unknown flags because we will parse the command flags later.
- fs.ParseErrorsWhitelist = pflag.ParseErrorsWhitelist{UnknownFlags: true}
-
- opts := &rootOptions{}
-
- // Don't do `fs.AddFlagSet(cmd.Flags())` because it shares flags representations:
- // `changed` variable inside string slice vars will be shared.
- // Use another config variable here,
- // to not affect main parsing by this parsing of only config option.
- setupRootPersistentFlags(fs, opts)
-
- fs.Usage = func() {} // otherwise, help text will be printed twice
-
- if err := fs.Parse(safeArgs(fs, os.Args)); err != nil {
- if errors.Is(err, pflag.ErrHelp) {
- return nil, err
- }
-
- return nil, fmt.Errorf("can't parse args: %w", err)
- }
-
- return opts, nil
-}
-
-// Shorthands are a problem because pflag, with UnknownFlags, will try to parse all the letters as options.
-// A shorthand can aggregate several letters (ex `ps -aux`)
-// The function replaces non-supported shorthands by a dumb flag.
-func safeArgs(fs *pflag.FlagSet, args []string) []string {
- var shorthands []string
- fs.VisitAll(func(flag *pflag.Flag) {
- shorthands = append(shorthands, flag.Shorthand)
- })
-
- var cleanArgs []string
- for _, arg := range args {
- if len(arg) > 1 && arg[0] == '-' && arg[1] != '-' && !slices.Contains(shorthands, string(arg[1])) {
- cleanArgs = append(cleanArgs, "--potato")
- continue
- }
-
- cleanArgs = append(cleanArgs, arg)
- }
-
- return cleanArgs
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/run.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/run.go
deleted file mode 100644
index ff7c5e467..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/run.go
+++ /dev/null
@@ -1,690 +0,0 @@
-package commands
-
-import (
- "bytes"
- "context"
- "crypto/sha256"
- "errors"
- "fmt"
- "io"
- "log"
- "os"
- "path/filepath"
- "runtime"
- "runtime/pprof"
- "runtime/trace"
- "sort"
- "strconv"
- "strings"
- "time"
-
- "github.com/fatih/color"
- "github.com/gofrs/flock"
- "github.com/spf13/cobra"
- "github.com/spf13/pflag"
- "github.com/spf13/viper"
- "go.uber.org/automaxprocs/maxprocs"
- "golang.org/x/exp/maps"
- "gopkg.in/yaml.v3"
-
- "github.com/golangci/golangci-lint/internal/cache"
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/exitcodes"
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/goanalysis/load"
- "github.com/golangci/golangci-lint/pkg/goutil"
- "github.com/golangci/golangci-lint/pkg/lint"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/lint/lintersdb"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/printers"
- "github.com/golangci/golangci-lint/pkg/report"
- "github.com/golangci/golangci-lint/pkg/result"
- "github.com/golangci/golangci-lint/pkg/timeutils"
-)
-
-const defaultTimeout = time.Minute
-
-const (
- // envFailOnWarnings value: "1"
- envFailOnWarnings = "FAIL_ON_WARNINGS"
- // envMemLogEvery value: "1"
- envMemLogEvery = "GL_MEM_LOG_EVERY"
-)
-
-const (
- // envHelpRun value: "1".
- envHelpRun = "HELP_RUN"
- envMemProfileRate = "GL_MEM_PROFILE_RATE"
-)
-
-type runOptions struct {
- config.LoaderOptions
-
- CPUProfilePath string // Flag only.
- MemProfilePath string // Flag only.
- TracePath string // Flag only.
-
- PrintResourcesUsage bool // Flag only.
-}
-
-type runCommand struct {
- viper *viper.Viper
- cmd *cobra.Command
-
- opts runOptions
-
- cfg *config.Config
-
- buildInfo BuildInfo
-
- dbManager *lintersdb.Manager
-
- printer *printers.Printer
-
- log logutils.Log
- debugf logutils.DebugFunc
- reportData *report.Data
-
- contextBuilder *lint.ContextBuilder
- goenv *goutil.Env
-
- fileCache *fsutils.FileCache
- lineCache *fsutils.LineCache
-
- flock *flock.Flock
-
- exitCode int
-}
-
-func newRunCommand(logger logutils.Log, info BuildInfo) *runCommand {
- reportData := &report.Data{}
-
- c := &runCommand{
- viper: viper.New(),
- log: report.NewLogWrapper(logger, reportData),
- debugf: logutils.Debug(logutils.DebugKeyExec),
- cfg: config.NewDefault(),
- reportData: reportData,
- buildInfo: info,
- }
-
- runCmd := &cobra.Command{
- Use: "run",
- Short: "Run the linters",
- Run: c.execute,
- PreRunE: c.preRunE,
- PostRun: c.postRun,
- PersistentPreRunE: c.persistentPreRunE,
- PersistentPostRunE: c.persistentPostRunE,
- SilenceUsage: true,
- }
-
- runCmd.SetOut(logutils.StdOut) // use custom output to properly color it in Windows terminals
- runCmd.SetErr(logutils.StdErr)
-
- fs := runCmd.Flags()
- fs.SortFlags = false // sort them as they are defined here
-
- // Only for testing purpose.
- // Don't add other flags here.
- fs.BoolVar(&c.cfg.InternalCmdTest, "internal-cmd-test", false,
- color.GreenString("Option is used only for testing golangci-lint command, don't use it"))
- _ = fs.MarkHidden("internal-cmd-test")
-
- setupConfigFileFlagSet(fs, &c.opts.LoaderOptions)
-
- setupLintersFlagSet(c.viper, fs)
- setupRunFlagSet(c.viper, fs)
- setupOutputFlagSet(c.viper, fs)
- setupIssuesFlagSet(c.viper, fs)
-
- setupRunPersistentFlags(runCmd.PersistentFlags(), &c.opts)
-
- c.cmd = runCmd
-
- return c
-}
-
-func (c *runCommand) persistentPreRunE(cmd *cobra.Command, args []string) error {
- if err := c.startTracing(); err != nil {
- return err
- }
-
- c.log.Infof("%s", c.buildInfo.String())
-
- loader := config.NewLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, cmd.Flags(), c.opts.LoaderOptions, c.cfg, args)
-
- err := loader.Load(config.LoadOptions{CheckDeprecation: true, Validation: true})
- if err != nil {
- return fmt.Errorf("can't load config: %w", err)
- }
-
- if c.cfg.Run.Concurrency == 0 {
- backup := runtime.GOMAXPROCS(0)
-
- // Automatically set GOMAXPROCS to match Linux container CPU quota.
- _, err := maxprocs.Set(maxprocs.Logger(c.log.Infof))
- if err != nil {
- runtime.GOMAXPROCS(backup)
- }
- } else {
- runtime.GOMAXPROCS(c.cfg.Run.Concurrency)
- }
-
- return nil
-}
-
-func (c *runCommand) persistentPostRunE(_ *cobra.Command, _ []string) error {
- if err := c.stopTracing(); err != nil {
- return err
- }
-
- os.Exit(c.exitCode)
-
- return nil
-}
-
-func (c *runCommand) preRunE(_ *cobra.Command, args []string) error {
- dbManager, err := lintersdb.NewManager(c.log.Child(logutils.DebugKeyLintersDB), c.cfg,
- lintersdb.NewLinterBuilder(), lintersdb.NewPluginModuleBuilder(c.log), lintersdb.NewPluginGoBuilder(c.log))
- if err != nil {
- return err
- }
-
- c.dbManager = dbManager
-
- printer, err := printers.NewPrinter(c.log, &c.cfg.Output, c.reportData)
- if err != nil {
- return err
- }
-
- c.printer = printer
-
- c.goenv = goutil.NewEnv(c.log.Child(logutils.DebugKeyGoEnv))
-
- c.fileCache = fsutils.NewFileCache()
- c.lineCache = fsutils.NewLineCache(c.fileCache)
-
- sw := timeutils.NewStopwatch("pkgcache", c.log.Child(logutils.DebugKeyStopwatch))
-
- pkgCache, err := cache.NewCache(sw, c.log.Child(logutils.DebugKeyPkgCache))
- if err != nil {
- return fmt.Errorf("failed to build packages cache: %w", err)
- }
-
- guard := load.NewGuard()
-
- pkgLoader := lint.NewPackageLoader(c.log.Child(logutils.DebugKeyLoader), c.cfg, args, c.goenv, guard)
-
- c.contextBuilder = lint.NewContextBuilder(c.cfg, pkgLoader, c.fileCache, pkgCache, guard)
-
- if err = initHashSalt(c.buildInfo.Version, c.cfg); err != nil {
- return fmt.Errorf("failed to init hash salt: %w", err)
- }
-
- if ok := c.acquireFileLock(); !ok {
- return errors.New("parallel golangci-lint is running")
- }
-
- return nil
-}
-
-func (c *runCommand) postRun(_ *cobra.Command, _ []string) {
- c.releaseFileLock()
-}
-
-func (c *runCommand) execute(_ *cobra.Command, args []string) {
- needTrackResources := logutils.IsVerbose() || c.opts.PrintResourcesUsage
-
- trackResourcesEndCh := make(chan struct{})
- defer func() { // XXX: this defer must be before ctx.cancel defer
- if needTrackResources { // wait until resource tracking finished to print properly
- <-trackResourcesEndCh
- }
- }()
-
- ctx, cancel := context.WithTimeout(context.Background(), c.cfg.Run.Timeout)
- defer cancel()
-
- if needTrackResources {
- go watchResources(ctx, trackResourcesEndCh, c.log, c.debugf)
- }
-
- if err := c.runAndPrint(ctx, args); err != nil {
- c.log.Errorf("Running error: %s", err)
- if c.exitCode == exitcodes.Success {
- var exitErr *exitcodes.ExitError
- if errors.As(err, &exitErr) {
- c.exitCode = exitErr.Code
- } else {
- c.exitCode = exitcodes.Failure
- }
- }
- }
-
- c.setupExitCode(ctx)
-}
-
-func (c *runCommand) startTracing() error {
- if c.opts.CPUProfilePath != "" {
- f, err := os.Create(c.opts.CPUProfilePath)
- if err != nil {
- return fmt.Errorf("can't create file %s: %w", c.opts.CPUProfilePath, err)
- }
- if err := pprof.StartCPUProfile(f); err != nil {
- return fmt.Errorf("can't start CPU profiling: %w", err)
- }
- }
-
- if c.opts.MemProfilePath != "" {
- if rate := os.Getenv(envMemProfileRate); rate != "" {
- runtime.MemProfileRate, _ = strconv.Atoi(rate)
- }
- }
-
- if c.opts.TracePath != "" {
- f, err := os.Create(c.opts.TracePath)
- if err != nil {
- return fmt.Errorf("can't create file %s: %w", c.opts.TracePath, err)
- }
- if err = trace.Start(f); err != nil {
- return fmt.Errorf("can't start tracing: %w", err)
- }
- }
-
- return nil
-}
-
-func (c *runCommand) stopTracing() error {
- if c.opts.CPUProfilePath != "" {
- pprof.StopCPUProfile()
- }
-
- if c.opts.MemProfilePath != "" {
- f, err := os.Create(c.opts.MemProfilePath)
- if err != nil {
- return fmt.Errorf("can't create file %s: %w", c.opts.MemProfilePath, err)
- }
-
- var ms runtime.MemStats
- runtime.ReadMemStats(&ms)
- printMemStats(&ms, c.log)
-
- if err := pprof.WriteHeapProfile(f); err != nil {
- return fmt.Errorf("can't write heap profile: %w", err)
- }
- _ = f.Close()
- }
-
- if c.opts.TracePath != "" {
- trace.Stop()
- }
-
- return nil
-}
-
-func (c *runCommand) runAndPrint(ctx context.Context, args []string) error {
- if err := c.goenv.Discover(ctx); err != nil {
- c.log.Warnf("Failed to discover go env: %s", err)
- }
-
- if !logutils.HaveDebugTag(logutils.DebugKeyLintersOutput) {
- // Don't allow linters and loader to print anything
- log.SetOutput(io.Discard)
- savedStdout, savedStderr := c.setOutputToDevNull()
- defer func() {
- os.Stdout, os.Stderr = savedStdout, savedStderr
- }()
- }
-
- enabledLintersMap, err := c.dbManager.GetEnabledLintersMap()
- if err != nil {
- return err
- }
-
- c.printDeprecatedLinterMessages(enabledLintersMap)
-
- issues, err := c.runAnalysis(ctx, args)
- if err != nil {
- return err // XXX: don't lose type
- }
-
- // Fills linters information for the JSON printer.
- for _, lc := range c.dbManager.GetAllSupportedLinterConfigs() {
- isEnabled := enabledLintersMap[lc.Name()] != nil
- c.reportData.AddLinter(lc.Name(), isEnabled, lc.EnabledByDefault)
- }
-
- err = c.printer.Print(issues)
- if err != nil {
- return err
- }
-
- c.printStats(issues)
-
- c.setExitCodeIfIssuesFound(issues)
-
- c.fileCache.PrintStats(c.log)
-
- return nil
-}
-
-// runAnalysis executes the linters that have been enabled in the configuration.
-func (c *runCommand) runAnalysis(ctx context.Context, args []string) ([]result.Issue, error) {
- lintersToRun, err := c.dbManager.GetOptimizedLinters()
- if err != nil {
- return nil, err
- }
-
- lintCtx, err := c.contextBuilder.Build(ctx, c.log.Child(logutils.DebugKeyLintersContext), lintersToRun)
- if err != nil {
- return nil, fmt.Errorf("context loading failed: %w", err)
- }
-
- runner, err := lint.NewRunner(c.log.Child(logutils.DebugKeyRunner), c.cfg, args,
- c.goenv, c.lineCache, c.fileCache, c.dbManager, lintCtx)
- if err != nil {
- return nil, err
- }
-
- return runner.Run(ctx, lintersToRun)
-}
-
-func (c *runCommand) setOutputToDevNull() (savedStdout, savedStderr *os.File) {
- savedStdout, savedStderr = os.Stdout, os.Stderr
- devNull, err := os.Open(os.DevNull)
- if err != nil {
- c.log.Warnf("Can't open null device %q: %s", os.DevNull, err)
- return
- }
-
- os.Stdout, os.Stderr = devNull, devNull
- return
-}
-
-func (c *runCommand) setExitCodeIfIssuesFound(issues []result.Issue) {
- if len(issues) != 0 {
- c.exitCode = c.cfg.Run.ExitCodeIfIssuesFound
- }
-}
-
-func (c *runCommand) printDeprecatedLinterMessages(enabledLinters map[string]*linter.Config) {
- if c.cfg.InternalCmdTest || os.Getenv(logutils.EnvTestRun) == "1" {
- return
- }
-
- for name, lc := range enabledLinters {
- if !lc.IsDeprecated() {
- continue
- }
-
- var extra string
- if lc.Deprecation.Replacement != "" {
- extra = fmt.Sprintf("Replaced by %s.", lc.Deprecation.Replacement)
- }
-
- c.log.Warnf("The linter '%s' is deprecated (since %s) due to: %s %s", name, lc.Deprecation.Since, lc.Deprecation.Message, extra)
- }
-}
-
-func (c *runCommand) printStats(issues []result.Issue) {
- if !c.cfg.Output.ShowStats {
- return
- }
-
- if len(issues) == 0 {
- c.cmd.Println("0 issues.")
- return
- }
-
- stats := map[string]int{}
- for idx := range issues {
- stats[issues[idx].FromLinter]++
- }
-
- c.cmd.Printf("%d issues:\n", len(issues))
-
- keys := maps.Keys(stats)
- sort.Strings(keys)
-
- for _, key := range keys {
- c.cmd.Printf("* %s: %d\n", key, stats[key])
- }
-}
-
-func (c *runCommand) setupExitCode(ctx context.Context) {
- if ctx.Err() != nil {
- c.exitCode = exitcodes.Timeout
- c.log.Errorf("Timeout exceeded: try increasing it by passing --timeout option")
- return
- }
-
- if c.exitCode != exitcodes.Success {
- return
- }
-
- needFailOnWarnings := os.Getenv(logutils.EnvTestRun) == "1" || os.Getenv(envFailOnWarnings) == "1"
- if needFailOnWarnings && len(c.reportData.Warnings) != 0 {
- c.exitCode = exitcodes.WarningInTest
- return
- }
-
- if c.reportData.Error != "" {
- // it's a case e.g. when typecheck linter couldn't parse and error and just logged it
- c.exitCode = exitcodes.ErrorWasLogged
- return
- }
-}
-
-func (c *runCommand) acquireFileLock() bool {
- if c.cfg.Run.AllowParallelRunners {
- c.debugf("Parallel runners are allowed, no locking")
- return true
- }
-
- lockFile := filepath.Join(os.TempDir(), "golangci-lint.lock")
- c.debugf("Locking on file %s...", lockFile)
- f := flock.New(lockFile)
- const retryDelay = time.Second
-
- ctx := context.Background()
- if !c.cfg.Run.AllowSerialRunners {
- const totalTimeout = 5 * time.Second
- var cancel context.CancelFunc
- ctx, cancel = context.WithTimeout(ctx, totalTimeout)
- defer cancel()
- }
- if ok, _ := f.TryLockContext(ctx, retryDelay); !ok {
- return false
- }
-
- c.flock = f
- return true
-}
-
-func (c *runCommand) releaseFileLock() {
- if c.cfg.Run.AllowParallelRunners {
- return
- }
-
- if err := c.flock.Unlock(); err != nil {
- c.debugf("Failed to unlock on file: %s", err)
- }
- if err := os.Remove(c.flock.Path()); err != nil {
- c.debugf("Failed to remove lock file: %s", err)
- }
-}
-
-func watchResources(ctx context.Context, done chan struct{}, logger logutils.Log, debugf logutils.DebugFunc) {
- startedAt := time.Now()
- debugf("Started tracking time")
-
- var maxRSSMB, totalRSSMB float64
- var iterationsCount int
-
- const intervalMS = 100
- ticker := time.NewTicker(intervalMS * time.Millisecond)
- defer ticker.Stop()
-
- logEveryRecord := os.Getenv(envMemLogEvery) == "1"
- const MB = 1024 * 1024
-
- track := func() {
- var m runtime.MemStats
- runtime.ReadMemStats(&m)
-
- if logEveryRecord {
- debugf("Stopping memory tracing iteration, printing ...")
- printMemStats(&m, logger)
- }
-
- rssMB := float64(m.Sys) / MB
- if rssMB > maxRSSMB {
- maxRSSMB = rssMB
- }
- totalRSSMB += rssMB
- iterationsCount++
- }
-
- for {
- track()
-
- stop := false
- select {
- case <-ctx.Done():
- stop = true
- debugf("Stopped resources tracking")
- case <-ticker.C:
- }
-
- if stop {
- break
- }
- }
- track()
-
- avgRSSMB := totalRSSMB / float64(iterationsCount)
-
- logger.Infof("Memory: %d samples, avg is %.1fMB, max is %.1fMB",
- iterationsCount, avgRSSMB, maxRSSMB)
- logger.Infof("Execution took %s", time.Since(startedAt))
- close(done)
-}
-
-func setupConfigFileFlagSet(fs *pflag.FlagSet, cfg *config.LoaderOptions) {
- fs.StringVarP(&cfg.Config, "config", "c", "", color.GreenString("Read config from file path `PATH`"))
- fs.BoolVar(&cfg.NoConfig, "no-config", false, color.GreenString("Don't read config file"))
-}
-
-func setupRunPersistentFlags(fs *pflag.FlagSet, opts *runOptions) {
- fs.BoolVar(&opts.PrintResourcesUsage, "print-resources-usage", false,
- color.GreenString("Print avg and max memory usage of golangci-lint and total time"))
-
- fs.StringVar(&opts.CPUProfilePath, "cpu-profile-path", "", color.GreenString("Path to CPU profile output file"))
- fs.StringVar(&opts.MemProfilePath, "mem-profile-path", "", color.GreenString("Path to memory profile output file"))
- fs.StringVar(&opts.TracePath, "trace-path", "", color.GreenString("Path to trace output file"))
-}
-
-func getDefaultConcurrency() int {
- if os.Getenv(envHelpRun) == "1" {
- // Make stable concurrency for generating help documentation.
- const prettyConcurrency = 8
- return prettyConcurrency
- }
-
- return runtime.NumCPU()
-}
-
-func printMemStats(ms *runtime.MemStats, logger logutils.Log) {
- logger.Infof("Mem stats: alloc=%s total_alloc=%s sys=%s "+
- "heap_alloc=%s heap_sys=%s heap_idle=%s heap_released=%s heap_in_use=%s "+
- "stack_in_use=%s stack_sys=%s "+
- "mspan_sys=%s mcache_sys=%s buck_hash_sys=%s gc_sys=%s other_sys=%s "+
- "mallocs_n=%d frees_n=%d heap_objects_n=%d gc_cpu_fraction=%.2f",
- formatMemory(ms.Alloc), formatMemory(ms.TotalAlloc), formatMemory(ms.Sys),
- formatMemory(ms.HeapAlloc), formatMemory(ms.HeapSys),
- formatMemory(ms.HeapIdle), formatMemory(ms.HeapReleased), formatMemory(ms.HeapInuse),
- formatMemory(ms.StackInuse), formatMemory(ms.StackSys),
- formatMemory(ms.MSpanSys), formatMemory(ms.MCacheSys), formatMemory(ms.BuckHashSys),
- formatMemory(ms.GCSys), formatMemory(ms.OtherSys),
- ms.Mallocs, ms.Frees, ms.HeapObjects, ms.GCCPUFraction)
-}
-
-func formatMemory(memBytes uint64) string {
- const Kb = 1024
- const Mb = Kb * 1024
-
- if memBytes < Kb {
- return fmt.Sprintf("%db", memBytes)
- }
- if memBytes < Mb {
- return fmt.Sprintf("%dkb", memBytes/Kb)
- }
- return fmt.Sprintf("%dmb", memBytes/Mb)
-}
-
-// Related to cache.
-
-func initHashSalt(version string, cfg *config.Config) error {
- binSalt, err := computeBinarySalt(version)
- if err != nil {
- return fmt.Errorf("failed to calculate binary salt: %w", err)
- }
-
- configSalt, err := computeConfigSalt(cfg)
- if err != nil {
- return fmt.Errorf("failed to calculate config salt: %w", err)
- }
-
- b := bytes.NewBuffer(binSalt)
- b.Write(configSalt)
- cache.SetSalt(b)
- return nil
-}
-
-func computeBinarySalt(version string) ([]byte, error) {
- if version != "" && version != "(devel)" {
- return []byte(version), nil
- }
-
- if logutils.HaveDebugTag(logutils.DebugKeyBinSalt) {
- return []byte("debug"), nil
- }
-
- p, err := os.Executable()
- if err != nil {
- return nil, err
- }
- f, err := os.Open(p)
- if err != nil {
- return nil, err
- }
- defer f.Close()
- h := sha256.New()
- if _, err := io.Copy(h, f); err != nil {
- return nil, err
- }
- return h.Sum(nil), nil
-}
-
-// computeConfigSalt computes configuration hash.
-// We don't hash all config fields to reduce meaningless cache invalidations.
-// At least, it has a huge impact on tests speed.
-// Fields: `LintersSettings` and `Run.BuildTags`.
-func computeConfigSalt(cfg *config.Config) ([]byte, error) {
- lintersSettingsBytes, err := yaml.Marshal(cfg.LintersSettings)
- if err != nil {
- return nil, fmt.Errorf("failed to JSON marshal config linter settings: %w", err)
- }
-
- configData := bytes.NewBufferString("linters-settings=")
- configData.Write(lintersSettingsBytes)
- configData.WriteString("\nbuild-tags=%s" + strings.Join(cfg.Run.BuildTags, ","))
-
- h := sha256.New()
- if _, err := h.Write(configData.Bytes()); err != nil {
- return nil, err
- }
- return h.Sum(nil), nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/commands/version.go b/vendor/github.com/golangci/golangci-lint/pkg/commands/version.go
deleted file mode 100644
index ac665f4c5..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/commands/version.go
+++ /dev/null
@@ -1,102 +0,0 @@
-package commands
-
-import (
- "encoding/json"
- "fmt"
- "io"
- "os"
- "runtime/debug"
- "strings"
-
- "github.com/fatih/color"
- "github.com/spf13/cobra"
-)
-
-type BuildInfo struct {
- GoVersion string `json:"goVersion"`
- Version string `json:"version"`
- Commit string `json:"commit"`
- Date string `json:"date"`
-}
-
-func (b BuildInfo) String() string {
- return fmt.Sprintf("golangci-lint has version %s built with %s from %s on %s",
- b.Version, b.GoVersion, b.Commit, b.Date)
-}
-
-type versionInfo struct {
- Info BuildInfo
- BuildInfo *debug.BuildInfo
-}
-
-type versionOptions struct {
- Format string
- Debug bool
-}
-
-type versionCommand struct {
- cmd *cobra.Command
- opts versionOptions
-
- info BuildInfo
-}
-
-func newVersionCommand(info BuildInfo) *versionCommand {
- c := &versionCommand{info: info}
-
- versionCmd := &cobra.Command{
- Use: "version",
- Short: "Version",
- Args: cobra.NoArgs,
- ValidArgsFunction: cobra.NoFileCompletions,
- RunE: c.execute,
- }
-
- fs := versionCmd.Flags()
- fs.SortFlags = false // sort them as they are defined here
-
- fs.StringVar(&c.opts.Format, "format", "", color.GreenString("The version's format can be: 'short', 'json'"))
- fs.BoolVar(&c.opts.Debug, "debug", false, color.GreenString("Add build information"))
-
- c.cmd = versionCmd
-
- return c
-}
-
-func (c *versionCommand) execute(_ *cobra.Command, _ []string) error {
- if c.opts.Debug {
- info, ok := debug.ReadBuildInfo()
- if !ok {
- return nil
- }
-
- switch strings.ToLower(c.opts.Format) {
- case "json":
- return json.NewEncoder(os.Stdout).Encode(versionInfo{
- Info: c.info,
- BuildInfo: info,
- })
-
- default:
- fmt.Println(info.String())
- return printVersion(os.Stdout, c.info)
- }
- }
-
- switch strings.ToLower(c.opts.Format) {
- case "short":
- fmt.Println(c.info.Version)
- return nil
-
- case "json":
- return json.NewEncoder(os.Stdout).Encode(c.info)
-
- default:
- return printVersion(os.Stdout, c.info)
- }
-}
-
-func printVersion(w io.Writer, info BuildInfo) error {
- _, err := fmt.Fprintln(w, info.String())
- return err
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/config/config.go b/vendor/github.com/golangci/golangci-lint/pkg/config/config.go
deleted file mode 100644
index b863b329f..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/config/config.go
+++ /dev/null
@@ -1,112 +0,0 @@
-package config
-
-import (
- "os"
- "strings"
-
- hcversion "github.com/hashicorp/go-version"
- "github.com/ldez/gomoddirectives"
-)
-
-// Config encapsulates the config data specified in the golangci-lint YAML config file.
-type Config struct {
- cfgDir string // The directory containing the golangci-lint config file.
-
- Run Run `mapstructure:"run"`
-
- Output Output `mapstructure:"output"`
-
- LintersSettings LintersSettings `mapstructure:"linters-settings"`
- Linters Linters `mapstructure:"linters"`
- Issues Issues `mapstructure:"issues"`
- Severity Severity `mapstructure:"severity"`
-
- InternalCmdTest bool // Option is used only for testing golangci-lint command, don't use it
- InternalTest bool // Option is used only for testing golangci-lint code, don't use it
-}
-
-// GetConfigDir returns the directory that contains golangci config file.
-func (c *Config) GetConfigDir() string {
- return c.cfgDir
-}
-
-func (c *Config) Validate() error {
- validators := []func() error{
- c.Run.Validate,
- c.Output.Validate,
- c.LintersSettings.Validate,
- c.Linters.Validate,
- c.Issues.Validate,
- c.Severity.Validate,
- }
-
- for _, v := range validators {
- if err := v(); err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func NewDefault() *Config {
- return &Config{
- LintersSettings: defaultLintersSettings,
- }
-}
-
-type Version struct {
- Format string `mapstructure:"format"`
- Debug bool `mapstructure:"debug"`
-}
-
-func IsGoGreaterThanOrEqual(current, limit string) bool {
- v1, err := hcversion.NewVersion(strings.TrimPrefix(current, "go"))
- if err != nil {
- return false
- }
-
- l, err := hcversion.NewVersion(limit)
- if err != nil {
- return false
- }
-
- return v1.GreaterThanOrEqual(l)
-}
-
-func detectGoVersion() string {
- goVersion := detectGoVersionFromGoMod()
- if goVersion != "" {
- return goVersion
- }
-
- v := os.Getenv("GOVERSION")
- if v != "" {
- return v
- }
-
- return "1.17"
-}
-
-// detectGoVersionFromGoMod tries to get Go version from go.mod.
-// It returns `toolchain` version if present,
-// else it returns `go` version if present,
-// else it returns empty.
-func detectGoVersionFromGoMod() string {
- file, _ := gomoddirectives.GetModuleFile()
- if file == nil {
- return ""
- }
-
- // The toolchain exists only if 'toolchain' version > 'go' version.
- // If 'toolchain' version <= 'go' version, `go mod tidy` will remove 'toolchain' version from go.mod.
- if file.Toolchain != nil && file.Toolchain.Name != "" {
- return strings.TrimPrefix(file.Toolchain.Name, "go")
- }
-
- if file.Go != nil && file.Go.Version != "" {
- return file.Go.Version
- }
-
- return ""
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/config/issues.go b/vendor/github.com/golangci/golangci-lint/pkg/config/issues.go
deleted file mode 100644
index 2ee9364aa..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/config/issues.go
+++ /dev/null
@@ -1,246 +0,0 @@
-package config
-
-import (
- "errors"
- "fmt"
- "regexp"
-)
-
-const excludeRuleMinConditionsCount = 2
-
-var DefaultExcludePatterns = []ExcludePattern{
- {
- ID: "EXC0001",
- Pattern: "Error return value of .((os\\.)?std(out|err)\\..*|.*Close" +
- "|.*Flush|os\\.Remove(All)?|.*print(f|ln)?|os\\.(Un)?Setenv). is not checked",
- Linter: "errcheck",
- Why: "Almost all programs ignore errors on these functions and in most cases it's ok.",
- },
- {
- ID: "EXC0002", // TODO(ldez): should be remove in v2
- Pattern: "(comment on exported (method|function|type|const)|" +
- "should have( a package)? comment|comment should be of the form)",
- Linter: "golint",
- Why: "Annoying issue about not having a comment. The rare codebase has such comments.",
- },
- {
- ID: "EXC0003", // TODO(ldez): should be remove in v2
- Pattern: "func name will be used as test\\.Test.* by other packages, and that stutters; consider calling this",
- Linter: "golint",
- Why: "False positive when tests are defined in package 'test'.",
- },
- {
- ID: "EXC0004",
- Pattern: "(possible misuse of unsafe.Pointer|should have signature)",
- Linter: "govet",
- Why: "Common false positives.",
- },
- {
- ID: "EXC0005",
- Pattern: "SA4011", // CheckScopedBreak
- Linter: "staticcheck",
- Why: "Developers tend to write in C-style with an explicit 'break' in a 'switch', so it's ok to ignore.",
- },
- {
- ID: "EXC0006",
- Pattern: "G103: Use of unsafe calls should be audited",
- Linter: "gosec",
- Why: "Too many false-positives on 'unsafe' usage.",
- },
- {
- ID: "EXC0007",
- Pattern: "G204: Subprocess launched with variable",
- Linter: "gosec",
- Why: "Too many false-positives for parametrized shell calls.",
- },
- {
- ID: "EXC0008",
- Pattern: "G104", // Errors unhandled.
- Linter: "gosec",
- Why: "Duplicated errcheck checks.",
- },
- {
- ID: "EXC0009",
- Pattern: "(G301|G302|G307): Expect (directory permissions to be 0750|file permissions to be 0600) or less",
- Linter: "gosec",
- Why: "Too many issues in popular repos.",
- },
- {
- ID: "EXC0010",
- Pattern: "G304: Potential file inclusion via variable",
- Linter: "gosec",
- Why: "False positive is triggered by 'src, err := ioutil.ReadFile(filename)'.",
- },
- {
- ID: "EXC0011",
- Pattern: "(ST1000|ST1020|ST1021|ST1022)", // CheckPackageComment, CheckExportedFunctionDocs, CheckExportedTypeDocs, CheckExportedVarDocs
- Linter: "stylecheck",
- Why: "Annoying issue about not having a comment. The rare codebase has such comments.",
- },
- {
- ID: "EXC0012",
- Pattern: `exported (.+) should have comment( \(or a comment on this block\))? or be unexported`, // rule: exported
- Linter: "revive",
- Why: "Annoying issue about not having a comment. The rare codebase has such comments.",
- },
- {
- ID: "EXC0013",
- Pattern: `package comment should be of the form "(.+)..."`, // rule: package-comments
- Linter: "revive",
- Why: "Annoying issue about not having a comment. The rare codebase has such comments.",
- },
- {
- ID: "EXC0014",
- Pattern: `comment on exported (.+) should be of the form "(.+)..."`, // rule: exported
- Linter: "revive",
- Why: "Annoying issue about not having a comment. The rare codebase has such comments.",
- },
- {
- ID: "EXC0015",
- Pattern: `should have a package comment`, // rule: package-comments
- Linter: "revive",
- Why: "Annoying issue about not having a comment. The rare codebase has such comments.",
- },
-}
-
-type Issues struct {
- IncludeDefaultExcludes []string `mapstructure:"include"`
- ExcludeCaseSensitive bool `mapstructure:"exclude-case-sensitive"`
- ExcludePatterns []string `mapstructure:"exclude"`
- ExcludeRules []ExcludeRule `mapstructure:"exclude-rules"`
- UseDefaultExcludes bool `mapstructure:"exclude-use-default"`
-
- ExcludeGenerated string `mapstructure:"exclude-generated"`
-
- ExcludeFiles []string `mapstructure:"exclude-files"`
- ExcludeDirs []string `mapstructure:"exclude-dirs"`
-
- UseDefaultExcludeDirs bool `mapstructure:"exclude-dirs-use-default"`
-
- MaxIssuesPerLinter int `mapstructure:"max-issues-per-linter"`
- MaxSameIssues int `mapstructure:"max-same-issues"`
-
- DiffFromRevision string `mapstructure:"new-from-rev"`
- DiffPatchFilePath string `mapstructure:"new-from-patch"`
- WholeFiles bool `mapstructure:"whole-files"`
- Diff bool `mapstructure:"new"`
-
- NeedFix bool `mapstructure:"fix"`
-
- ExcludeGeneratedStrict bool `mapstructure:"exclude-generated-strict"` // Deprecated: use ExcludeGenerated instead.
-}
-
-func (i *Issues) Validate() error {
- for i, rule := range i.ExcludeRules {
- if err := rule.Validate(); err != nil {
- return fmt.Errorf("error in exclude rule #%d: %w", i, err)
- }
- }
-
- return nil
-}
-
-type ExcludeRule struct {
- BaseRule `mapstructure:",squash"`
-}
-
-func (e *ExcludeRule) Validate() error {
- return e.BaseRule.Validate(excludeRuleMinConditionsCount)
-}
-
-type BaseRule struct {
- Linters []string
- Path string
- PathExcept string `mapstructure:"path-except"`
- Text string
- Source string
-}
-
-func (b *BaseRule) Validate(minConditionsCount int) error {
- if err := validateOptionalRegex(b.Path); err != nil {
- return fmt.Errorf("invalid path regex: %w", err)
- }
-
- if err := validateOptionalRegex(b.PathExcept); err != nil {
- return fmt.Errorf("invalid path-except regex: %w", err)
- }
-
- if err := validateOptionalRegex(b.Text); err != nil {
- return fmt.Errorf("invalid text regex: %w", err)
- }
-
- if err := validateOptionalRegex(b.Source); err != nil {
- return fmt.Errorf("invalid source regex: %w", err)
- }
-
- if b.Path != "" && b.PathExcept != "" {
- return errors.New("path and path-except should not be set at the same time")
- }
-
- nonBlank := 0
- if len(b.Linters) > 0 {
- nonBlank++
- }
-
- // Filtering by path counts as one condition, regardless how it is done (one or both).
- // Otherwise, a rule with Path and PathExcept set would pass validation
- // whereas before the introduction of path-except that wouldn't have been precise enough.
- if b.Path != "" || b.PathExcept != "" {
- nonBlank++
- }
-
- if b.Text != "" {
- nonBlank++
- }
-
- if b.Source != "" {
- nonBlank++
- }
-
- if nonBlank < minConditionsCount {
- return fmt.Errorf("at least %d of (text, source, path[-except], linters) should be set", minConditionsCount)
- }
-
- return nil
-}
-
-func validateOptionalRegex(value string) error {
- if value == "" {
- return nil
- }
-
- _, err := regexp.Compile(value)
- return err
-}
-
-type ExcludePattern struct {
- ID string
- Pattern string
- Linter string
- Why string
-}
-
-func GetDefaultExcludePatternsStrings() []string {
- ret := make([]string, len(DefaultExcludePatterns))
- for i, p := range DefaultExcludePatterns {
- ret[i] = p.Pattern
- }
- return ret
-}
-
-// TODO(ldez): this behavior must be changed in v2, because this is confusing.
-func GetExcludePatterns(include []string) []ExcludePattern {
- includeMap := make(map[string]struct{}, len(include))
- for _, inc := range include {
- includeMap[inc] = struct{}{}
- }
-
- var ret []ExcludePattern
- for _, p := range DefaultExcludePatterns {
- if _, ok := includeMap[p.ID]; !ok {
- ret = append(ret, p)
- }
- }
-
- return ret
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/config/linters.go b/vendor/github.com/golangci/golangci-lint/pkg/config/linters.go
deleted file mode 100644
index 5c2628272..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/config/linters.go
+++ /dev/null
@@ -1,65 +0,0 @@
-package config
-
-import (
- "errors"
- "fmt"
-)
-
-type Linters struct {
- Enable []string
- Disable []string
- EnableAll bool `mapstructure:"enable-all"`
- DisableAll bool `mapstructure:"disable-all"`
- Fast bool
-
- Presets []string
-}
-
-func (l *Linters) Validate() error {
- if err := l.validateAllDisableEnableOptions(); err != nil {
- return err
- }
-
- if err := l.validateDisabledAndEnabledAtOneMoment(); err != nil {
- return err
- }
-
- return nil
-}
-
-func (l *Linters) validateAllDisableEnableOptions() error {
- if l.EnableAll && l.DisableAll {
- return errors.New("--enable-all and --disable-all options must not be combined")
- }
-
- if l.DisableAll {
- if len(l.Enable) == 0 && len(l.Presets) == 0 {
- return errors.New("all linters were disabled, but no one linter was enabled: must enable at least one")
- }
-
- if len(l.Disable) != 0 {
- return errors.New("can't combine options --disable-all and --disable")
- }
- }
-
- if l.EnableAll && len(l.Enable) != 0 && !l.Fast {
- return errors.New("can't combine options --enable-all and --enable")
- }
-
- return nil
-}
-
-func (l *Linters) validateDisabledAndEnabledAtOneMoment() error {
- enabledLintersSet := map[string]bool{}
- for _, name := range l.Enable {
- enabledLintersSet[name] = true
- }
-
- for _, name := range l.Disable {
- if enabledLintersSet[name] {
- return fmt.Errorf("linter %q can't be disabled and enabled at one moment", name)
- }
- }
-
- return nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/config/linters_settings.go b/vendor/github.com/golangci/golangci-lint/pkg/config/linters_settings.go
deleted file mode 100644
index b182d1e0f..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/config/linters_settings.go
+++ /dev/null
@@ -1,1041 +0,0 @@
-package config
-
-import (
- "encoding"
- "errors"
- "fmt"
- "runtime"
-
- "gopkg.in/yaml.v3"
-)
-
-var defaultLintersSettings = LintersSettings{
- Asasalint: AsasalintSettings{
- UseBuiltinExclusions: true,
- },
- Decorder: DecorderSettings{
- DecOrder: []string{"type", "const", "var", "func"},
- DisableDecNumCheck: true,
- DisableDecOrderCheck: true,
- DisableInitFuncFirstCheck: true,
- },
- Dogsled: DogsledSettings{
- MaxBlankIdentifiers: 2,
- },
- Dupl: DuplSettings{
- Threshold: 150,
- },
- ErrorLint: ErrorLintSettings{
- Errorf: true,
- ErrorfMulti: true,
- Asserts: true,
- Comparison: true,
- },
- Exhaustive: ExhaustiveSettings{
- Check: []string{"switch"},
- CheckGenerated: false,
- DefaultSignifiesExhaustive: false,
- IgnoreEnumMembers: "",
- PackageScopeOnly: false,
- ExplicitExhaustiveMap: false,
- ExplicitExhaustiveSwitch: false,
- },
- Forbidigo: ForbidigoSettings{
- ExcludeGodocExamples: true,
- },
- Gci: GciSettings{
- Sections: []string{"standard", "default"},
- SkipGenerated: true,
- },
- GoChecksumType: GoChecksumTypeSettings{
- DefaultSignifiesExhaustive: true,
- },
- Gocognit: GocognitSettings{
- MinComplexity: 30,
- },
- Goconst: GoConstSettings{
- MatchWithConstants: true,
- MinStringLen: 3,
- MinOccurrencesCount: 3,
- NumberMin: 3,
- NumberMax: 3,
- IgnoreCalls: true,
- },
- Gocritic: GoCriticSettings{
- SettingsPerCheck: map[string]GoCriticCheckSettings{},
- },
- Gocyclo: GoCycloSettings{
- MinComplexity: 30,
- },
- Godox: GodoxSettings{
- Keywords: []string{},
- },
- Godot: GodotSettings{
- Scope: "declarations",
- Period: true,
- },
- Gofmt: GoFmtSettings{
- Simplify: true,
- },
- Gofumpt: GofumptSettings{
- LangVersion: "",
- ModulePath: "",
- ExtraRules: false,
- },
- Gosec: GoSecSettings{
- Concurrency: runtime.NumCPU(),
- },
- Gosmopolitan: GosmopolitanSettings{
- AllowTimeLocal: false,
- EscapeHatches: []string{},
- IgnoreTests: true,
- WatchForScripts: []string{"Han"},
- },
- Inamedparam: INamedParamSettings{
- SkipSingleParam: false,
- },
- InterfaceBloat: InterfaceBloatSettings{
- Max: 10,
- },
- Lll: LllSettings{
- LineLength: 120,
- TabWidth: 1,
- },
- LoggerCheck: LoggerCheckSettings{
- Kitlog: true,
- Klog: true,
- Logr: true,
- Zap: true,
- RequireStringKey: false,
- NoPrintfLike: false,
- Rules: nil,
- },
- MaintIdx: MaintIdxSettings{
- Under: 20,
- },
- Nakedret: NakedretSettings{
- MaxFuncLines: 30,
- },
- Nestif: NestifSettings{
- MinComplexity: 5,
- },
- NoLintLint: NoLintLintSettings{
- RequireExplanation: false,
- RequireSpecific: false,
- AllowUnused: false,
- },
- PerfSprint: PerfSprintSettings{
- IntConversion: true,
- ErrError: false,
- ErrorF: true,
- SprintF1: true,
- StrConcat: true,
- },
- Prealloc: PreallocSettings{
- Simple: true,
- RangeLoops: true,
- ForLoops: false,
- },
- Predeclared: PredeclaredSettings{
- Ignore: "",
- Qualified: false,
- },
- SlogLint: SlogLintSettings{
- NoMixedArgs: true,
- KVOnly: false,
- AttrOnly: false,
- NoGlobal: "",
- Context: "",
- StaticMsg: false,
- NoRawKeys: false,
- KeyNamingCase: "",
- ForbiddenKeys: nil,
- ArgsOnSepLines: false,
- },
- TagAlign: TagAlignSettings{
- Align: true,
- Sort: true,
- Order: nil,
- Strict: false,
- },
- Testpackage: TestpackageSettings{
- SkipRegexp: `(export|internal)_test\.go`,
- AllowPackages: []string{"main"},
- },
- Unparam: UnparamSettings{
- Algo: "cha",
- },
- Unused: UnusedSettings{
- FieldWritesAreUses: true,
- PostStatementsAreReads: false,
- ExportedIsUsed: true,
- ExportedFieldsAreUsed: true,
- ParametersAreUsed: true,
- LocalVariablesAreUsed: true,
- GeneratedIsUsed: true,
- },
- UseStdlibVars: UseStdlibVarsSettings{
- HTTPMethod: true,
- HTTPStatusCode: true,
- },
- Varnamelen: VarnamelenSettings{
- MaxDistance: 5,
- MinNameLength: 3,
- },
- WSL: WSLSettings{
- StrictAppend: true,
- AllowAssignAndCallCuddle: true,
- AllowAssignAndAnythingCuddle: false,
- AllowMultiLineAssignCuddle: true,
- ForceCaseTrailingWhitespaceLimit: 0,
- AllowTrailingComment: false,
- AllowSeparatedLeadingComment: false,
- AllowCuddleDeclaration: false,
- AllowCuddleWithCalls: []string{"Lock", "RLock"},
- AllowCuddleWithRHS: []string{"Unlock", "RUnlock"},
- ForceCuddleErrCheckAndAssign: false,
- ErrorVariableNames: []string{"err"},
- ForceExclusiveShortDeclarations: false,
- },
-}
-
-type LintersSettings struct {
- Asasalint AsasalintSettings
- BiDiChk BiDiChkSettings
- CopyLoopVar CopyLoopVarSettings
- Cyclop Cyclop
- Decorder DecorderSettings
- Depguard DepGuardSettings
- Dogsled DogsledSettings
- Dupl DuplSettings
- DupWord DupWordSettings
- Errcheck ErrcheckSettings
- ErrChkJSON ErrChkJSONSettings
- ErrorLint ErrorLintSettings
- Exhaustive ExhaustiveSettings
- Exhaustruct ExhaustructSettings
- Forbidigo ForbidigoSettings
- Funlen FunlenSettings
- Gci GciSettings
- GinkgoLinter GinkgoLinterSettings
- Gocognit GocognitSettings
- GoChecksumType GoChecksumTypeSettings
- Goconst GoConstSettings
- Gocritic GoCriticSettings
- Gocyclo GoCycloSettings
- Godot GodotSettings
- Godox GodoxSettings
- Gofmt GoFmtSettings
- Gofumpt GofumptSettings
- Goheader GoHeaderSettings
- Goimports GoImportsSettings
- GoModDirectives GoModDirectivesSettings
- Gomodguard GoModGuardSettings
- Gosec GoSecSettings
- Gosimple StaticCheckSettings
- Gosmopolitan GosmopolitanSettings
- Govet GovetSettings
- Grouper GrouperSettings
- Iface IfaceSettings
- ImportAs ImportAsSettings
- Inamedparam INamedParamSettings
- InterfaceBloat InterfaceBloatSettings
- Ireturn IreturnSettings
- Lll LllSettings
- LoggerCheck LoggerCheckSettings
- MaintIdx MaintIdxSettings
- Makezero MakezeroSettings
- Misspell MisspellSettings
- Mnd MndSettings
- MustTag MustTagSettings
- Nakedret NakedretSettings
- Nestif NestifSettings
- NilNil NilNilSettings
- Nlreturn NlreturnSettings
- NoLintLint NoLintLintSettings
- NoNamedReturns NoNamedReturnsSettings
- ParallelTest ParallelTestSettings
- PerfSprint PerfSprintSettings
- Prealloc PreallocSettings
- Predeclared PredeclaredSettings
- Promlinter PromlinterSettings
- ProtoGetter ProtoGetterSettings
- Reassign ReassignSettings
- Revive ReviveSettings
- RowsErrCheck RowsErrCheckSettings
- SlogLint SlogLintSettings
- Spancheck SpancheckSettings
- Staticcheck StaticCheckSettings
- Stylecheck StaticCheckSettings
- TagAlign TagAlignSettings
- Tagliatelle TagliatelleSettings
- Tenv TenvSettings
- Testifylint TestifylintSettings
- Testpackage TestpackageSettings
- Thelper ThelperSettings
- Unconvert UnconvertSettings
- Unparam UnparamSettings
- Unused UnusedSettings
- UseStdlibVars UseStdlibVarsSettings
- Varnamelen VarnamelenSettings
- Whitespace WhitespaceSettings
- Wrapcheck WrapcheckSettings
- WSL WSLSettings
-
- Custom map[string]CustomLinterSettings
-}
-
-func (s *LintersSettings) Validate() error {
- if err := s.Govet.Validate(); err != nil {
- return err
- }
-
- for name, settings := range s.Custom {
- if err := settings.Validate(); err != nil {
- return fmt.Errorf("custom linter %q: %w", name, err)
- }
- }
-
- return nil
-}
-
-type AsasalintSettings struct {
- Exclude []string `mapstructure:"exclude"`
- UseBuiltinExclusions bool `mapstructure:"use-builtin-exclusions"`
- IgnoreTest bool `mapstructure:"ignore-test"`
-}
-
-type BiDiChkSettings struct {
- LeftToRightEmbedding bool `mapstructure:"left-to-right-embedding"`
- RightToLeftEmbedding bool `mapstructure:"right-to-left-embedding"`
- PopDirectionalFormatting bool `mapstructure:"pop-directional-formatting"`
- LeftToRightOverride bool `mapstructure:"left-to-right-override"`
- RightToLeftOverride bool `mapstructure:"right-to-left-override"`
- LeftToRightIsolate bool `mapstructure:"left-to-right-isolate"`
- RightToLeftIsolate bool `mapstructure:"right-to-left-isolate"`
- FirstStrongIsolate bool `mapstructure:"first-strong-isolate"`
- PopDirectionalIsolate bool `mapstructure:"pop-directional-isolate"`
-}
-
-type CopyLoopVarSettings struct {
- IgnoreAlias bool `mapstructure:"ignore-alias"` // Deprecated: use CheckAlias
- CheckAlias bool `mapstructure:"check-alias"`
-}
-
-type Cyclop struct {
- MaxComplexity int `mapstructure:"max-complexity"`
- PackageAverage float64 `mapstructure:"package-average"`
- SkipTests bool `mapstructure:"skip-tests"`
-}
-
-type DepGuardSettings struct {
- Rules map[string]*DepGuardList `mapstructure:"rules"`
-}
-
-type DepGuardList struct {
- ListMode string `mapstructure:"list-mode"`
- Files []string `mapstructure:"files"`
- Allow []string `mapstructure:"allow"`
- Deny []DepGuardDeny `mapstructure:"deny"`
-}
-
-type DepGuardDeny struct {
- Pkg string `mapstructure:"pkg"`
- Desc string `mapstructure:"desc"`
-}
-
-type DecorderSettings struct {
- DecOrder []string `mapstructure:"dec-order"`
- IgnoreUnderscoreVars bool `mapstructure:"ignore-underscore-vars"`
- DisableDecNumCheck bool `mapstructure:"disable-dec-num-check"`
- DisableTypeDecNumCheck bool `mapstructure:"disable-type-dec-num-check"`
- DisableConstDecNumCheck bool `mapstructure:"disable-const-dec-num-check"`
- DisableVarDecNumCheck bool `mapstructure:"disable-var-dec-num-check"`
- DisableDecOrderCheck bool `mapstructure:"disable-dec-order-check"`
- DisableInitFuncFirstCheck bool `mapstructure:"disable-init-func-first-check"`
-}
-
-type DogsledSettings struct {
- MaxBlankIdentifiers int `mapstructure:"max-blank-identifiers"`
-}
-
-type DuplSettings struct {
- Threshold int
-}
-
-type DupWordSettings struct {
- Keywords []string `mapstructure:"keywords"`
- Ignore []string `mapstructure:"ignore"`
-}
-
-type ErrcheckSettings struct {
- DisableDefaultExclusions bool `mapstructure:"disable-default-exclusions"`
- CheckTypeAssertions bool `mapstructure:"check-type-assertions"`
- CheckAssignToBlank bool `mapstructure:"check-blank"`
- ExcludeFunctions []string `mapstructure:"exclude-functions"`
-
- // Deprecated: use ExcludeFunctions instead
- Exclude string `mapstructure:"exclude"`
-
- // Deprecated: use ExcludeFunctions instead
- Ignore string `mapstructure:"ignore"`
-}
-
-type ErrChkJSONSettings struct {
- CheckErrorFreeEncoding bool `mapstructure:"check-error-free-encoding"`
- ReportNoExported bool `mapstructure:"report-no-exported"`
-}
-
-type ErrorLintSettings struct {
- Errorf bool `mapstructure:"errorf"`
- ErrorfMulti bool `mapstructure:"errorf-multi"`
- Asserts bool `mapstructure:"asserts"`
- Comparison bool `mapstructure:"comparison"`
- AllowedErrors []ErrorLintAllowPair `mapstructure:"allowed-errors"`
- AllowedErrorsWildcard []ErrorLintAllowPair `mapstructure:"allowed-errors-wildcard"`
-}
-
-type ErrorLintAllowPair struct {
- Err string `mapstructure:"err"`
- Fun string `mapstructure:"fun"`
-}
-
-type ExhaustiveSettings struct {
- Check []string `mapstructure:"check"`
- CheckGenerated bool `mapstructure:"check-generated"`
- DefaultSignifiesExhaustive bool `mapstructure:"default-signifies-exhaustive"`
- IgnoreEnumMembers string `mapstructure:"ignore-enum-members"`
- IgnoreEnumTypes string `mapstructure:"ignore-enum-types"`
- PackageScopeOnly bool `mapstructure:"package-scope-only"`
- ExplicitExhaustiveMap bool `mapstructure:"explicit-exhaustive-map"`
- ExplicitExhaustiveSwitch bool `mapstructure:"explicit-exhaustive-switch"`
- DefaultCaseRequired bool `mapstructure:"default-case-required"`
-}
-
-type ExhaustructSettings struct {
- Include []string `mapstructure:"include"`
- Exclude []string `mapstructure:"exclude"`
-}
-
-type ForbidigoSettings struct {
- Forbid []ForbidigoPattern `mapstructure:"forbid"`
- ExcludeGodocExamples bool `mapstructure:"exclude-godoc-examples"`
- AnalyzeTypes bool `mapstructure:"analyze-types"`
-}
-
-var _ encoding.TextUnmarshaler = &ForbidigoPattern{}
-
-// ForbidigoPattern corresponds to forbidigo.pattern and adds mapstructure support.
-// The YAML field names must match what forbidigo expects.
-type ForbidigoPattern struct {
- // patternString gets populated when the config contains a string as entry in ForbidigoSettings.Forbid[]
- // because ForbidigoPattern implements encoding.TextUnmarshaler
- // and the reader uses the mapstructure.TextUnmarshallerHookFunc as decoder hook.
- //
- // If the entry is a map, then the other fields are set as usual by mapstructure.
- patternString string
-
- Pattern string `yaml:"p" mapstructure:"p"`
- Package string `yaml:"pkg,omitempty" mapstructure:"pkg,omitempty"`
- Msg string `yaml:"msg,omitempty" mapstructure:"msg,omitempty"`
-}
-
-func (p *ForbidigoPattern) UnmarshalText(text []byte) error {
- // Validation happens when instantiating forbidigo.
- p.patternString = string(text)
- return nil
-}
-
-// MarshalString converts the pattern into a string as needed by forbidigo.NewLinter.
-//
-// MarshalString is intentionally not called MarshalText,
-// although it has the same signature
-// because implementing encoding.TextMarshaler led to infinite recursion when yaml.Marshal called MarshalText.
-func (p *ForbidigoPattern) MarshalString() ([]byte, error) {
- if p.patternString != "" {
- return []byte(p.patternString), nil
- }
-
- return yaml.Marshal(p)
-}
-
-type FunlenSettings struct {
- Lines int
- Statements int
- IgnoreComments bool `mapstructure:"ignore-comments"`
-}
-
-type GciSettings struct {
- Sections []string `mapstructure:"sections"`
- SkipGenerated bool `mapstructure:"skip-generated"`
- CustomOrder bool `mapstructure:"custom-order"`
- NoLexOrder bool `mapstructure:"no-lex-order"`
-
- // Deprecated: use Sections instead.
- LocalPrefixes string `mapstructure:"local-prefixes"`
-}
-
-type GinkgoLinterSettings struct {
- SuppressLenAssertion bool `mapstructure:"suppress-len-assertion"`
- SuppressNilAssertion bool `mapstructure:"suppress-nil-assertion"`
- SuppressErrAssertion bool `mapstructure:"suppress-err-assertion"`
- SuppressCompareAssertion bool `mapstructure:"suppress-compare-assertion"`
- SuppressAsyncAssertion bool `mapstructure:"suppress-async-assertion"`
- SuppressTypeCompareWarning bool `mapstructure:"suppress-type-compare-assertion"`
- ForbidFocusContainer bool `mapstructure:"forbid-focus-container"`
- AllowHaveLenZero bool `mapstructure:"allow-havelen-zero"`
- ForceExpectTo bool `mapstructure:"force-expect-to"`
- ValidateAsyncIntervals bool `mapstructure:"validate-async-intervals"`
- ForbidSpecPollution bool `mapstructure:"forbid-spec-pollution"`
- ForceSucceedForFuncs bool `mapstructure:"force-succeed"`
-}
-
-type GoChecksumTypeSettings struct {
- DefaultSignifiesExhaustive bool `mapstructure:"default-signifies-exhaustive"`
-}
-
-type GocognitSettings struct {
- MinComplexity int `mapstructure:"min-complexity"`
-}
-
-type GoConstSettings struct {
- IgnoreStrings string `mapstructure:"ignore-strings"`
- IgnoreTests bool `mapstructure:"ignore-tests"`
- MatchWithConstants bool `mapstructure:"match-constant"`
- MinStringLen int `mapstructure:"min-len"`
- MinOccurrencesCount int `mapstructure:"min-occurrences"`
- ParseNumbers bool `mapstructure:"numbers"`
- NumberMin int `mapstructure:"min"`
- NumberMax int `mapstructure:"max"`
- IgnoreCalls bool `mapstructure:"ignore-calls"`
-}
-
-type GoCriticSettings struct {
- Go string `mapstructure:"-"`
- DisableAll bool `mapstructure:"disable-all"`
- EnabledChecks []string `mapstructure:"enabled-checks"`
- EnableAll bool `mapstructure:"enable-all"`
- DisabledChecks []string `mapstructure:"disabled-checks"`
- EnabledTags []string `mapstructure:"enabled-tags"`
- DisabledTags []string `mapstructure:"disabled-tags"`
- SettingsPerCheck map[string]GoCriticCheckSettings `mapstructure:"settings"`
-}
-
-type GoCriticCheckSettings map[string]any
-
-type GoCycloSettings struct {
- MinComplexity int `mapstructure:"min-complexity"`
-}
-
-type GodotSettings struct {
- Scope string `mapstructure:"scope"`
- Exclude []string `mapstructure:"exclude"`
- Capital bool `mapstructure:"capital"`
- Period bool `mapstructure:"period"`
-
- // Deprecated: use Scope instead
- CheckAll bool `mapstructure:"check-all"`
-}
-
-type GodoxSettings struct {
- Keywords []string
-}
-
-type GoFmtSettings struct {
- Simplify bool
- RewriteRules []GoFmtRewriteRule `mapstructure:"rewrite-rules"`
-}
-
-type GoFmtRewriteRule struct {
- Pattern string
- Replacement string
-}
-
-type GofumptSettings struct {
- ModulePath string `mapstructure:"module-path"`
- ExtraRules bool `mapstructure:"extra-rules"`
-
- // Deprecated: use the global `run.go` instead.
- LangVersion string `mapstructure:"lang-version"`
-}
-
-type GoHeaderSettings struct {
- Values map[string]map[string]string `mapstructure:"values"`
- Template string `mapstructure:"template"`
- TemplatePath string `mapstructure:"template-path"`
-}
-
-type GoImportsSettings struct {
- LocalPrefixes string `mapstructure:"local-prefixes"`
-}
-
-type GoModDirectivesSettings struct {
- ReplaceAllowList []string `mapstructure:"replace-allow-list"`
- ReplaceLocal bool `mapstructure:"replace-local"`
- ExcludeForbidden bool `mapstructure:"exclude-forbidden"`
- RetractAllowNoExplanation bool `mapstructure:"retract-allow-no-explanation"`
-}
-
-type GoModGuardSettings struct {
- Allowed struct {
- Modules []string `mapstructure:"modules"`
- Domains []string `mapstructure:"domains"`
- } `mapstructure:"allowed"`
- Blocked struct {
- Modules []map[string]struct {
- Recommendations []string `mapstructure:"recommendations"`
- Reason string `mapstructure:"reason"`
- } `mapstructure:"modules"`
- Versions []map[string]struct {
- Version string `mapstructure:"version"`
- Reason string `mapstructure:"reason"`
- } `mapstructure:"versions"`
- LocalReplaceDirectives bool `mapstructure:"local_replace_directives"`
- } `mapstructure:"blocked"`
-}
-
-type GoSecSettings struct {
- Includes []string `mapstructure:"includes"`
- Excludes []string `mapstructure:"excludes"`
- Severity string `mapstructure:"severity"`
- Confidence string `mapstructure:"confidence"`
- ExcludeGenerated bool `mapstructure:"exclude-generated"`
- Config map[string]any `mapstructure:"config"`
- Concurrency int `mapstructure:"concurrency"`
-}
-
-type GosmopolitanSettings struct {
- AllowTimeLocal bool `mapstructure:"allow-time-local"`
- EscapeHatches []string `mapstructure:"escape-hatches"`
- IgnoreTests bool `mapstructure:"ignore-tests"`
- WatchForScripts []string `mapstructure:"watch-for-scripts"`
-}
-
-type GovetSettings struct {
- Go string `mapstructure:"-"`
-
- Enable []string
- Disable []string
- EnableAll bool `mapstructure:"enable-all"`
- DisableAll bool `mapstructure:"disable-all"`
-
- Settings map[string]map[string]any
-
- // Deprecated: the linter should be enabled inside Enable.
- CheckShadowing bool `mapstructure:"check-shadowing"`
-}
-
-func (cfg *GovetSettings) Validate() error {
- if cfg.EnableAll && cfg.DisableAll {
- return errors.New("govet: enable-all and disable-all can't be combined")
- }
- if cfg.EnableAll && len(cfg.Enable) != 0 {
- return errors.New("govet: enable-all and enable can't be combined")
- }
- if cfg.DisableAll && len(cfg.Disable) != 0 {
- return errors.New("govet: disable-all and disable can't be combined")
- }
- return nil
-}
-
-type GrouperSettings struct {
- ConstRequireSingleConst bool `mapstructure:"const-require-single-const"`
- ConstRequireGrouping bool `mapstructure:"const-require-grouping"`
- ImportRequireSingleImport bool `mapstructure:"import-require-single-import"`
- ImportRequireGrouping bool `mapstructure:"import-require-grouping"`
- TypeRequireSingleType bool `mapstructure:"type-require-single-type"`
- TypeRequireGrouping bool `mapstructure:"type-require-grouping"`
- VarRequireSingleVar bool `mapstructure:"var-require-single-var"`
- VarRequireGrouping bool `mapstructure:"var-require-grouping"`
-}
-
-type IfaceSettings struct {
- Enable []string `mapstructure:"enable"`
- Settings map[string]map[string]any `mapstructure:"settings"`
-}
-
-type ImportAsSettings struct {
- Alias []ImportAsAlias
- NoUnaliased bool `mapstructure:"no-unaliased"`
- NoExtraAliases bool `mapstructure:"no-extra-aliases"`
-}
-
-type ImportAsAlias struct {
- Pkg string
- Alias string
-}
-
-type INamedParamSettings struct {
- SkipSingleParam bool `mapstructure:"skip-single-param"`
-}
-
-type InterfaceBloatSettings struct {
- Max int `mapstructure:"max"`
-}
-
-type IreturnSettings struct {
- Allow []string `mapstructure:"allow"`
- Reject []string `mapstructure:"reject"`
-}
-
-type LllSettings struct {
- LineLength int `mapstructure:"line-length"`
- TabWidth int `mapstructure:"tab-width"`
-}
-
-type LoggerCheckSettings struct {
- Kitlog bool `mapstructure:"kitlog"`
- Klog bool `mapstructure:"klog"`
- Logr bool `mapstructure:"logr"`
- Zap bool `mapstructure:"zap"`
- RequireStringKey bool `mapstructure:"require-string-key"`
- NoPrintfLike bool `mapstructure:"no-printf-like"`
- Rules []string `mapstructure:"rules"`
-}
-
-type MaintIdxSettings struct {
- Under int `mapstructure:"under"`
-}
-
-type MakezeroSettings struct {
- Always bool
-}
-
-type MisspellSettings struct {
- Mode string `mapstructure:"mode"`
- Locale string `mapstructure:"locale"`
- ExtraWords []MisspellExtraWords `mapstructure:"extra-words"`
- // TODO(ldez): v2 the option must be renamed to `IgnoredRules`.
- IgnoreWords []string `mapstructure:"ignore-words"`
-}
-
-type MisspellExtraWords struct {
- Typo string `mapstructure:"typo"`
- Correction string `mapstructure:"correction"`
-}
-
-type MustTagSettings struct {
- Functions []struct {
- Name string `mapstructure:"name"`
- Tag string `mapstructure:"tag"`
- ArgPos int `mapstructure:"arg-pos"`
- } `mapstructure:"functions"`
-}
-
-type NakedretSettings struct {
- MaxFuncLines uint `mapstructure:"max-func-lines"`
-}
-
-type NestifSettings struct {
- MinComplexity int `mapstructure:"min-complexity"`
-}
-
-type NilNilSettings struct {
- DetectOpposite bool `mapstructure:"detect-opposite"`
- CheckedTypes []string `mapstructure:"checked-types"`
-}
-
-type NlreturnSettings struct {
- BlockSize int `mapstructure:"block-size"`
-}
-
-type MndSettings struct {
- Checks []string `mapstructure:"checks"`
- IgnoredNumbers []string `mapstructure:"ignored-numbers"`
- IgnoredFiles []string `mapstructure:"ignored-files"`
- IgnoredFunctions []string `mapstructure:"ignored-functions"`
-}
-
-type NoLintLintSettings struct {
- RequireExplanation bool `mapstructure:"require-explanation"`
- RequireSpecific bool `mapstructure:"require-specific"`
- AllowNoExplanation []string `mapstructure:"allow-no-explanation"`
- AllowUnused bool `mapstructure:"allow-unused"`
-}
-
-type NoNamedReturnsSettings struct {
- ReportErrorInDefer bool `mapstructure:"report-error-in-defer"`
-}
-
-type ParallelTestSettings struct {
- Go string `mapstructure:"-"`
- IgnoreMissing bool `mapstructure:"ignore-missing"`
- IgnoreMissingSubtests bool `mapstructure:"ignore-missing-subtests"`
-}
-
-type PerfSprintSettings struct {
- IntConversion bool `mapstructure:"int-conversion"`
- ErrError bool `mapstructure:"err-error"`
- ErrorF bool `mapstructure:"errorf"`
- SprintF1 bool `mapstructure:"sprintf1"`
- StrConcat bool `mapstructure:"strconcat"`
-}
-
-type PreallocSettings struct {
- Simple bool
- RangeLoops bool `mapstructure:"range-loops"`
- ForLoops bool `mapstructure:"for-loops"`
-}
-
-type PredeclaredSettings struct {
- Ignore string `mapstructure:"ignore"`
- Qualified bool `mapstructure:"q"`
-}
-
-type PromlinterSettings struct {
- Strict bool `mapstructure:"strict"`
- DisabledLinters []string `mapstructure:"disabled-linters"`
-}
-
-type ProtoGetterSettings struct {
- SkipGeneratedBy []string `mapstructure:"skip-generated-by"`
- SkipFiles []string `mapstructure:"skip-files"`
- SkipAnyGenerated bool `mapstructure:"skip-any-generated"`
- ReplaceFirstArgInAppend bool `mapstructure:"replace-first-arg-in-append"`
-}
-
-type ReassignSettings struct {
- Patterns []string `mapstructure:"patterns"`
-}
-
-type ReviveSettings struct {
- Go string `mapstructure:"-"`
- MaxOpenFiles int `mapstructure:"max-open-files"`
- IgnoreGeneratedHeader bool `mapstructure:"ignore-generated-header"`
- Confidence float64
- Severity string
- EnableAllRules bool `mapstructure:"enable-all-rules"`
- Rules []struct {
- Name string
- Arguments []any
- Severity string
- Disabled bool
- Exclude []string
- }
- ErrorCode int `mapstructure:"error-code"`
- WarningCode int `mapstructure:"warning-code"`
- Directives []struct {
- Name string
- Severity string
- }
-}
-
-type RowsErrCheckSettings struct {
- Packages []string
-}
-
-type SlogLintSettings struct {
- NoMixedArgs bool `mapstructure:"no-mixed-args"`
- KVOnly bool `mapstructure:"kv-only"`
- AttrOnly bool `mapstructure:"attr-only"`
- NoGlobal string `mapstructure:"no-global"`
- Context string `mapstructure:"context"`
- StaticMsg bool `mapstructure:"static-msg"`
- NoRawKeys bool `mapstructure:"no-raw-keys"`
- KeyNamingCase string `mapstructure:"key-naming-case"`
- ForbiddenKeys []string `mapstructure:"forbidden-keys"`
- ArgsOnSepLines bool `mapstructure:"args-on-sep-lines"`
-
- // Deprecated: use Context instead.
- ContextOnly bool `mapstructure:"context-only"`
-}
-
-type SpancheckSettings struct {
- Checks []string `mapstructure:"checks"`
- IgnoreCheckSignatures []string `mapstructure:"ignore-check-signatures"`
- ExtraStartSpanSignatures []string `mapstructure:"extra-start-span-signatures"`
-}
-
-type StaticCheckSettings struct {
- Checks []string `mapstructure:"checks"`
- Initialisms []string `mapstructure:"initialisms"` // only for stylecheck
- DotImportWhitelist []string `mapstructure:"dot-import-whitelist"` // only for stylecheck
- HTTPStatusCodeWhitelist []string `mapstructure:"http-status-code-whitelist"` // only for stylecheck
-
- // Deprecated: use the global `run.go` instead.
- GoVersion string `mapstructure:"go"`
-}
-
-func (s *StaticCheckSettings) HasConfiguration() bool {
- return len(s.Initialisms) > 0 || len(s.HTTPStatusCodeWhitelist) > 0 || len(s.DotImportWhitelist) > 0 || len(s.Checks) > 0
-}
-
-type TagAlignSettings struct {
- Align bool `mapstructure:"align"`
- Sort bool `mapstructure:"sort"`
- Order []string `mapstructure:"order"`
- Strict bool `mapstructure:"strict"`
-}
-
-type TagliatelleSettings struct {
- Case struct {
- Rules map[string]string
- UseFieldName bool `mapstructure:"use-field-name"`
- }
-}
-
-type TestifylintSettings struct {
- EnableAll bool `mapstructure:"enable-all"`
- DisableAll bool `mapstructure:"disable-all"`
- EnabledCheckers []string `mapstructure:"enable"`
- DisabledCheckers []string `mapstructure:"disable"`
-
- BoolCompare struct {
- IgnoreCustomTypes bool `mapstructure:"ignore-custom-types"`
- } `mapstructure:"bool-compare"`
-
- ExpectedActual struct {
- ExpVarPattern string `mapstructure:"pattern"`
- } `mapstructure:"expected-actual"`
-
- Formatter struct {
- CheckFormatString *bool `mapstructure:"check-format-string"`
- RequireFFuncs bool `mapstructure:"require-f-funcs"`
- } `mapstructure:"formatter"`
-
- GoRequire struct {
- IgnoreHTTPHandlers bool `mapstructure:"ignore-http-handlers"`
- } `mapstructure:"go-require"`
-
- RequireError struct {
- FnPattern string `mapstructure:"fn-pattern"`
- } `mapstructure:"require-error"`
-
- SuiteExtraAssertCall struct {
- Mode string `mapstructure:"mode"`
- } `mapstructure:"suite-extra-assert-call"`
-}
-
-type TestpackageSettings struct {
- SkipRegexp string `mapstructure:"skip-regexp"`
- AllowPackages []string `mapstructure:"allow-packages"`
-}
-
-type ThelperSettings struct {
- Test ThelperOptions `mapstructure:"test"`
- Fuzz ThelperOptions `mapstructure:"fuzz"`
- Benchmark ThelperOptions `mapstructure:"benchmark"`
- TB ThelperOptions `mapstructure:"tb"`
-}
-
-type ThelperOptions struct {
- First *bool `mapstructure:"first"`
- Name *bool `mapstructure:"name"`
- Begin *bool `mapstructure:"begin"`
-}
-
-type TenvSettings struct {
- All bool `mapstructure:"all"`
-}
-
-type UseStdlibVarsSettings struct {
- HTTPMethod bool `mapstructure:"http-method"`
- HTTPStatusCode bool `mapstructure:"http-status-code"`
- TimeWeekday bool `mapstructure:"time-weekday"`
- TimeMonth bool `mapstructure:"time-month"`
- TimeLayout bool `mapstructure:"time-layout"`
- CryptoHash bool `mapstructure:"crypto-hash"`
- DefaultRPCPath bool `mapstructure:"default-rpc-path"`
- OSDevNull bool `mapstructure:"os-dev-null"` // Deprecated
- SQLIsolationLevel bool `mapstructure:"sql-isolation-level"`
- TLSSignatureScheme bool `mapstructure:"tls-signature-scheme"`
- ConstantKind bool `mapstructure:"constant-kind"`
- SyslogPriority bool `mapstructure:"syslog-priority"` // Deprecated
-}
-
-type UnconvertSettings struct {
- FastMath bool `mapstructure:"fast-math"`
- Safe bool `mapstructure:"safe"`
-}
-
-type UnparamSettings struct {
- CheckExported bool `mapstructure:"check-exported"`
- Algo string
-}
-
-type UnusedSettings struct {
- FieldWritesAreUses bool `mapstructure:"field-writes-are-uses"`
- PostStatementsAreReads bool `mapstructure:"post-statements-are-reads"`
- ExportedIsUsed bool `mapstructure:"exported-is-used"` // Deprecated
- ExportedFieldsAreUsed bool `mapstructure:"exported-fields-are-used"`
- ParametersAreUsed bool `mapstructure:"parameters-are-used"`
- LocalVariablesAreUsed bool `mapstructure:"local-variables-are-used"`
- GeneratedIsUsed bool `mapstructure:"generated-is-used"`
-}
-
-type VarnamelenSettings struct {
- MaxDistance int `mapstructure:"max-distance"`
- MinNameLength int `mapstructure:"min-name-length"`
- CheckReceiver bool `mapstructure:"check-receiver"`
- CheckReturn bool `mapstructure:"check-return"`
- CheckTypeParam bool `mapstructure:"check-type-param"`
- IgnoreNames []string `mapstructure:"ignore-names"`
- IgnoreTypeAssertOk bool `mapstructure:"ignore-type-assert-ok"`
- IgnoreMapIndexOk bool `mapstructure:"ignore-map-index-ok"`
- IgnoreChanRecvOk bool `mapstructure:"ignore-chan-recv-ok"`
- IgnoreDecls []string `mapstructure:"ignore-decls"`
-}
-
-type WhitespaceSettings struct {
- MultiIf bool `mapstructure:"multi-if"`
- MultiFunc bool `mapstructure:"multi-func"`
-}
-
-type WrapcheckSettings struct {
- // TODO(ldez): v2 the options must be renamed to use hyphen.
- IgnoreSigs []string `mapstructure:"ignoreSigs"`
- IgnoreSigRegexps []string `mapstructure:"ignoreSigRegexps"`
- IgnorePackageGlobs []string `mapstructure:"ignorePackageGlobs"`
- IgnoreInterfaceRegexps []string `mapstructure:"ignoreInterfaceRegexps"`
-}
-
-type WSLSettings struct {
- StrictAppend bool `mapstructure:"strict-append"`
- AllowAssignAndCallCuddle bool `mapstructure:"allow-assign-and-call"`
- AllowAssignAndAnythingCuddle bool `mapstructure:"allow-assign-and-anything"`
- AllowMultiLineAssignCuddle bool `mapstructure:"allow-multiline-assign"`
- ForceCaseTrailingWhitespaceLimit int `mapstructure:"force-case-trailing-whitespace"`
- AllowTrailingComment bool `mapstructure:"allow-trailing-comment"`
- AllowSeparatedLeadingComment bool `mapstructure:"allow-separated-leading-comment"`
- AllowCuddleDeclaration bool `mapstructure:"allow-cuddle-declarations"`
- AllowCuddleWithCalls []string `mapstructure:"allow-cuddle-with-calls"`
- AllowCuddleWithRHS []string `mapstructure:"allow-cuddle-with-rhs"`
- ForceCuddleErrCheckAndAssign bool `mapstructure:"force-err-cuddling"`
- ErrorVariableNames []string `mapstructure:"error-variable-names"`
- ForceExclusiveShortDeclarations bool `mapstructure:"force-short-decl-cuddling"`
-}
-
-// CustomLinterSettings encapsulates the meta-data of a private linter.
-type CustomLinterSettings struct {
- // Type plugin type.
- // It can be `goplugin` or `module`.
- Type string `mapstructure:"type"`
-
- // Path to a plugin *.so file that implements the private linter.
- // Only for Go plugin system.
- Path string
-
- // Description describes the purpose of the private linter.
- Description string
- // OriginalURL The URL containing the source code for the private linter.
- OriginalURL string `mapstructure:"original-url"`
-
- // Settings plugin settings only work with linterdb.PluginConstructor symbol.
- Settings any
-}
-
-func (s *CustomLinterSettings) Validate() error {
- if s.Type == "module" {
- if s.Path != "" {
- return errors.New("path not supported with module type")
- }
-
- return nil
- }
-
- if s.Path == "" {
- return errors.New("path is required")
- }
-
- return nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/config/loader.go b/vendor/github.com/golangci/golangci-lint/pkg/config/loader.go
deleted file mode 100644
index efeed3ca4..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/config/loader.go
+++ /dev/null
@@ -1,479 +0,0 @@
-package config
-
-import (
- "errors"
- "fmt"
- "os"
- "path/filepath"
- "slices"
-
- "github.com/go-viper/mapstructure/v2"
- "github.com/mitchellh/go-homedir"
- "github.com/spf13/pflag"
- "github.com/spf13/viper"
-
- "github.com/golangci/golangci-lint/pkg/exitcodes"
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/goutil"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-var errConfigDisabled = errors.New("config is disabled by --no-config")
-
-type LoaderOptions struct {
- Config string // Flag only. The path to the golangci config file, as specified with the --config argument.
- NoConfig bool // Flag only.
-}
-
-type LoadOptions struct {
- CheckDeprecation bool
- Validation bool
-}
-
-type Loader struct {
- opts LoaderOptions
-
- viper *viper.Viper
- fs *pflag.FlagSet
-
- log logutils.Log
-
- cfg *Config
- args []string
-}
-
-func NewLoader(log logutils.Log, v *viper.Viper, fs *pflag.FlagSet, opts LoaderOptions, cfg *Config, args []string) *Loader {
- return &Loader{
- opts: opts,
- viper: v,
- fs: fs,
- log: log,
- cfg: cfg,
- args: args,
- }
-}
-
-func (l *Loader) Load(opts LoadOptions) error {
- err := l.setConfigFile()
- if err != nil {
- return err
- }
-
- err = l.parseConfig()
- if err != nil {
- return err
- }
-
- l.applyStringSliceHack()
-
- if opts.CheckDeprecation {
- err = l.handleDeprecation()
- if err != nil {
- return err
- }
- }
-
- l.handleGoVersion()
-
- err = goutil.CheckGoVersion(l.cfg.Run.Go)
- if err != nil {
- return err
- }
-
- err = l.handleEnableOnlyOption()
- if err != nil {
- return err
- }
-
- if opts.Validation {
- err = l.cfg.Validate()
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func (l *Loader) setConfigFile() error {
- configFile, err := l.evaluateOptions()
- if err != nil {
- if errors.Is(err, errConfigDisabled) {
- return nil
- }
-
- return fmt.Errorf("can't parse --config option: %w", err)
- }
-
- if configFile != "" {
- l.viper.SetConfigFile(configFile)
-
- // Assume YAML if the file has no extension.
- if filepath.Ext(configFile) == "" {
- l.viper.SetConfigType("yaml")
- }
- } else {
- l.setupConfigFileSearch()
- }
-
- return nil
-}
-
-func (l *Loader) evaluateOptions() (string, error) {
- if l.opts.NoConfig && l.opts.Config != "" {
- return "", errors.New("can't combine option --config and --no-config")
- }
-
- if l.opts.NoConfig {
- return "", errConfigDisabled
- }
-
- configFile, err := homedir.Expand(l.opts.Config)
- if err != nil {
- return "", errors.New("failed to expand configuration path")
- }
-
- return configFile, nil
-}
-
-func (l *Loader) setupConfigFileSearch() {
- l.viper.SetConfigName(".golangci")
-
- configSearchPaths := l.getConfigSearchPaths()
-
- l.log.Infof("Config search paths: %s", configSearchPaths)
-
- for _, p := range configSearchPaths {
- l.viper.AddConfigPath(p)
- }
-}
-
-func (l *Loader) getConfigSearchPaths() []string {
- firstArg := "./..."
- if len(l.args) > 0 {
- firstArg = l.args[0]
- }
-
- absPath, err := filepath.Abs(firstArg)
- if err != nil {
- l.log.Warnf("Can't make abs path for %q: %s", firstArg, err)
- absPath = filepath.Clean(firstArg)
- }
-
- // start from it
- var currentDir string
- if fsutils.IsDir(absPath) {
- currentDir = absPath
- } else {
- currentDir = filepath.Dir(absPath)
- }
-
- // find all dirs from it up to the root
- searchPaths := []string{"./"}
-
- for {
- searchPaths = append(searchPaths, currentDir)
-
- parent := filepath.Dir(currentDir)
- if currentDir == parent || parent == "" {
- break
- }
-
- currentDir = parent
- }
-
- // find home directory for global config
- if home, err := homedir.Dir(); err != nil {
- l.log.Warnf("Can't get user's home directory: %v", err)
- } else if !slices.Contains(searchPaths, home) {
- searchPaths = append(searchPaths, home)
- }
-
- return searchPaths
-}
-
-func (l *Loader) parseConfig() error {
- if err := l.viper.ReadInConfig(); err != nil {
- var configFileNotFoundError viper.ConfigFileNotFoundError
- if errors.As(err, &configFileNotFoundError) {
- // Load configuration from flags only.
- err = l.viper.Unmarshal(l.cfg, customDecoderHook())
- if err != nil {
- return fmt.Errorf("can't unmarshal config by viper (flags): %w", err)
- }
-
- return nil
- }
-
- return fmt.Errorf("can't read viper config: %w", err)
- }
-
- err := l.setConfigDir()
- if err != nil {
- return err
- }
-
- // Load configuration from all sources (flags, file).
- if err := l.viper.Unmarshal(l.cfg, customDecoderHook()); err != nil {
- return fmt.Errorf("can't unmarshal config by viper (flags, file): %w", err)
- }
-
- if l.cfg.InternalTest { // just for testing purposes: to detect config file usage
- _, _ = fmt.Fprintln(logutils.StdOut, "test")
- os.Exit(exitcodes.Success)
- }
-
- return nil
-}
-
-func (l *Loader) setConfigDir() error {
- usedConfigFile := l.viper.ConfigFileUsed()
- if usedConfigFile == "" {
- return nil
- }
-
- if usedConfigFile == os.Stdin.Name() {
- usedConfigFile = ""
- l.log.Infof("Reading config file stdin")
- } else {
- var err error
- usedConfigFile, err = fsutils.ShortestRelPath(usedConfigFile, "")
- if err != nil {
- l.log.Warnf("Can't pretty print config file path: %v", err)
- }
-
- l.log.Infof("Used config file %s", usedConfigFile)
- }
-
- usedConfigDir, err := filepath.Abs(filepath.Dir(usedConfigFile))
- if err != nil {
- return errors.New("can't get config directory")
- }
-
- l.cfg.cfgDir = usedConfigDir
-
- return nil
-}
-
-// Hack to append values from StringSlice flags.
-// Viper always overrides StringSlice values.
-// https://github.com/spf13/viper/issues/1448
-// So StringSlice flags are not bind to Viper like that their values are obtain via Cobra Flags.
-func (l *Loader) applyStringSliceHack() {
- if l.fs == nil {
- return
- }
-
- l.appendStringSlice("enable", &l.cfg.Linters.Enable)
- l.appendStringSlice("disable", &l.cfg.Linters.Disable)
- l.appendStringSlice("presets", &l.cfg.Linters.Presets)
- l.appendStringSlice("build-tags", &l.cfg.Run.BuildTags)
- l.appendStringSlice("exclude", &l.cfg.Issues.ExcludePatterns)
-
- l.appendStringSlice("skip-dirs", &l.cfg.Run.SkipDirs)
- l.appendStringSlice("skip-files", &l.cfg.Run.SkipFiles)
- l.appendStringSlice("exclude-dirs", &l.cfg.Issues.ExcludeDirs)
- l.appendStringSlice("exclude-files", &l.cfg.Issues.ExcludeFiles)
-}
-
-func (l *Loader) appendStringSlice(name string, current *[]string) {
- if l.fs.Changed(name) {
- val, _ := l.fs.GetStringSlice(name)
- *current = append(*current, val...)
- }
-}
-
-func (l *Loader) handleGoVersion() {
- if l.cfg.Run.Go == "" {
- l.cfg.Run.Go = detectGoVersion()
- }
-
- l.cfg.LintersSettings.Govet.Go = l.cfg.Run.Go
-
- l.cfg.LintersSettings.ParallelTest.Go = l.cfg.Run.Go
-
- if l.cfg.LintersSettings.Gofumpt.LangVersion == "" {
- l.cfg.LintersSettings.Gofumpt.LangVersion = l.cfg.Run.Go
- }
-
- trimmedGoVersion := goutil.TrimGoVersion(l.cfg.Run.Go)
-
- l.cfg.LintersSettings.Revive.Go = trimmedGoVersion
-
- l.cfg.LintersSettings.Gocritic.Go = trimmedGoVersion
-
- os.Setenv("GOSECGOVERSION", l.cfg.Run.Go)
-}
-
-func (l *Loader) handleDeprecation() error {
- if l.cfg.InternalTest || l.cfg.InternalCmdTest || os.Getenv(logutils.EnvTestRun) == "1" {
- return nil
- }
-
- // Deprecated since v1.57.0
- if len(l.cfg.Run.SkipFiles) > 0 {
- l.log.Warnf("The configuration option `run.skip-files` is deprecated, please use `issues.exclude-files`.")
- l.cfg.Issues.ExcludeFiles = l.cfg.Run.SkipFiles
- }
-
- // Deprecated since v1.57.0
- if len(l.cfg.Run.SkipDirs) > 0 {
- l.log.Warnf("The configuration option `run.skip-dirs` is deprecated, please use `issues.exclude-dirs`.")
- l.cfg.Issues.ExcludeDirs = l.cfg.Run.SkipDirs
- }
-
- // The 2 options are true by default.
- // Deprecated since v1.57.0
- if !l.cfg.Run.UseDefaultSkipDirs {
- l.log.Warnf("The configuration option `run.skip-dirs-use-default` is deprecated, please use `issues.exclude-dirs-use-default`.")
- }
- l.cfg.Issues.UseDefaultExcludeDirs = l.cfg.Run.UseDefaultSkipDirs && l.cfg.Issues.UseDefaultExcludeDirs
-
- // The 2 options are false by default.
- // Deprecated since v1.57.0
- if l.cfg.Run.ShowStats {
- l.log.Warnf("The configuration option `run.show-stats` is deprecated, please use `output.show-stats`")
- }
- l.cfg.Output.ShowStats = l.cfg.Run.ShowStats || l.cfg.Output.ShowStats
-
- // Deprecated since v1.57.0
- if l.cfg.Output.Format != "" {
- l.log.Warnf("The configuration option `output.format` is deprecated, please use `output.formats`")
-
- var f OutputFormats
- err := f.UnmarshalText([]byte(l.cfg.Output.Format))
- if err != nil {
- return fmt.Errorf("unmarshal output format: %w", err)
- }
-
- l.cfg.Output.Formats = f
- }
-
- for _, format := range l.cfg.Output.Formats {
- if format.Format == OutFormatGithubActions {
- l.log.Warnf("The output format `%s` is deprecated, please use `%s`", OutFormatGithubActions, OutFormatColoredLineNumber)
- break // To avoid repeating the message if there are several usages of github-actions format.
- }
- }
-
- // Deprecated since v1.59.0
- if l.cfg.Issues.ExcludeGeneratedStrict {
- l.log.Warnf("The configuration option `issues.exclude-generated-strict` is deprecated, please use `issues.exclude-generated`")
- l.cfg.Issues.ExcludeGenerated = "strict" // Don't use the constants to avoid cyclic dependencies.
- }
-
- l.handleLinterOptionDeprecations()
-
- return nil
-}
-
-//nolint:gocyclo // the complexity cannot be reduced.
-func (l *Loader) handleLinterOptionDeprecations() {
- // Deprecated since v1.57.0,
- // but it was unofficially deprecated since v1.19 (2019) (https://github.com/golangci/golangci-lint/pull/697).
- if l.cfg.LintersSettings.Govet.CheckShadowing {
- l.log.Warnf("The configuration option `linters.govet.check-shadowing` is deprecated. " +
- "Please enable `shadow` instead, if you are not using `enable-all`.")
- }
-
- if l.cfg.LintersSettings.CopyLoopVar.IgnoreAlias {
- l.log.Warnf("The configuration option `linters.copyloopvar.ignore-alias` is deprecated and ignored," +
- "please use `linters.copyloopvar.check-alias`.")
- }
-
- // Deprecated since v1.42.0.
- if l.cfg.LintersSettings.Errcheck.Exclude != "" {
- l.log.Warnf("The configuration option `linters.errcheck.exclude` is deprecated, please use `linters.errcheck.exclude-functions`.")
- }
-
- // Deprecated since v1.59.0,
- // but it was unofficially deprecated since v1.13 (2018) (https://github.com/golangci/golangci-lint/pull/332).
- if l.cfg.LintersSettings.Errcheck.Ignore != "" {
- l.log.Warnf("The configuration option `linters.errcheck.ignore` is deprecated, please use `linters.errcheck.exclude-functions`.")
- }
-
- // Deprecated since v1.44.0.
- if l.cfg.LintersSettings.Gci.LocalPrefixes != "" {
- l.log.Warnf("The configuration option `linters.gci.local-prefixes` is deprecated, please use `prefix()` inside `linters.gci.sections`.")
- }
-
- // Deprecated since v1.33.0.
- if l.cfg.LintersSettings.Godot.CheckAll {
- l.log.Warnf("The configuration option `linters.godot.check-all` is deprecated, please use `linters.godot.scope: all`.")
- }
-
- // Deprecated since v1.47.0
- if l.cfg.LintersSettings.Gofumpt.LangVersion != "" {
- l.log.Warnf("The configuration option `linters.gofumpt.lang-version` is deprecated, please use global `run.go`.")
- }
-
- // Deprecated since v1.47.0
- if l.cfg.LintersSettings.Staticcheck.GoVersion != "" {
- l.log.Warnf("The configuration option `linters.staticcheck.go` is deprecated, please use global `run.go`.")
- }
-
- // Deprecated since v1.47.0
- if l.cfg.LintersSettings.Gosimple.GoVersion != "" {
- l.log.Warnf("The configuration option `linters.gosimple.go` is deprecated, please use global `run.go`.")
- }
-
- // Deprecated since v1.47.0
- if l.cfg.LintersSettings.Stylecheck.GoVersion != "" {
- l.log.Warnf("The configuration option `linters.stylecheck.go` is deprecated, please use global `run.go`.")
- }
-
- // Deprecated since v1.60.0
- if !l.cfg.LintersSettings.Unused.ExportedIsUsed {
- l.log.Warnf("The configuration option `linters.unused.exported-is-used` is deprecated.")
- }
-
- // Deprecated since v1.58.0
- if l.cfg.LintersSettings.SlogLint.ContextOnly {
- l.log.Warnf("The configuration option `linters.sloglint.context-only` is deprecated, please use `linters.sloglint.context`.")
- if l.cfg.LintersSettings.SlogLint.Context == "" {
- l.cfg.LintersSettings.SlogLint.Context = "all"
- }
- }
-
- // Deprecated since v1.51.0
- if l.cfg.LintersSettings.UseStdlibVars.OSDevNull {
- l.log.Warnf("The configuration option `linters.usestdlibvars.os-dev-null` is deprecated.")
- }
-
- // Deprecated since v1.51.0
- if l.cfg.LintersSettings.UseStdlibVars.SyslogPriority {
- l.log.Warnf("The configuration option `linters.usestdlibvars.syslog-priority` is deprecated.")
- }
-}
-
-func (l *Loader) handleEnableOnlyOption() error {
- lookup := l.fs.Lookup("enable-only")
- if lookup == nil {
- return nil
- }
-
- only, err := l.fs.GetStringSlice("enable-only")
- if err != nil {
- return err
- }
-
- if len(only) > 0 {
- l.cfg.Linters = Linters{
- Enable: only,
- DisableAll: true,
- }
- }
-
- return nil
-}
-
-func customDecoderHook() viper.DecoderConfigOption {
- return viper.DecodeHook(mapstructure.ComposeDecodeHookFunc(
- // Default hooks (https://github.com/spf13/viper/blob/518241257478c557633ab36e474dfcaeb9a3c623/viper.go#L135-L138).
- mapstructure.StringToTimeDurationHookFunc(),
- mapstructure.StringToSliceHookFunc(","),
-
- // Needed for forbidigo, and output.formats.
- mapstructure.TextUnmarshallerHookFunc(),
- ))
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/config/output.go b/vendor/github.com/golangci/golangci-lint/pkg/config/output.go
deleted file mode 100644
index 6a26d5773..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/config/output.go
+++ /dev/null
@@ -1,117 +0,0 @@
-package config
-
-import (
- "errors"
- "fmt"
- "slices"
- "strings"
-)
-
-const (
- OutFormatJSON = "json"
- OutFormatLineNumber = "line-number"
- OutFormatColoredLineNumber = "colored-line-number"
- OutFormatTab = "tab"
- OutFormatColoredTab = "colored-tab"
- OutFormatCheckstyle = "checkstyle"
- OutFormatCodeClimate = "code-climate"
- OutFormatHTML = "html"
- OutFormatJunitXML = "junit-xml"
- OutFormatJunitXMLExtended = "junit-xml-extended"
- OutFormatGithubActions = "github-actions" // Deprecated
- OutFormatTeamCity = "teamcity"
- OutFormatSarif = "sarif"
-)
-
-var AllOutputFormats = []string{
- OutFormatJSON,
- OutFormatLineNumber,
- OutFormatColoredLineNumber,
- OutFormatTab,
- OutFormatColoredTab,
- OutFormatCheckstyle,
- OutFormatCodeClimate,
- OutFormatHTML,
- OutFormatJunitXML,
- OutFormatJunitXMLExtended,
- OutFormatGithubActions,
- OutFormatTeamCity,
- OutFormatSarif,
-}
-
-type Output struct {
- Formats OutputFormats `mapstructure:"formats"`
- PrintIssuedLine bool `mapstructure:"print-issued-lines"`
- PrintLinterName bool `mapstructure:"print-linter-name"`
- UniqByLine bool `mapstructure:"uniq-by-line"`
- SortResults bool `mapstructure:"sort-results"`
- SortOrder []string `mapstructure:"sort-order"`
- PathPrefix string `mapstructure:"path-prefix"`
- ShowStats bool `mapstructure:"show-stats"`
-
- // Deprecated: use Formats instead.
- Format string `mapstructure:"format"`
-}
-
-func (o *Output) Validate() error {
- if !o.SortResults && len(o.SortOrder) > 0 {
- return errors.New("sort-results should be 'true' to use sort-order")
- }
-
- validOrders := []string{"linter", "file", "severity"}
-
- all := strings.Join(o.SortOrder, " ")
-
- for _, order := range o.SortOrder {
- if strings.Count(all, order) > 1 {
- return fmt.Errorf("the sort-order name %q is repeated several times", order)
- }
-
- if !slices.Contains(validOrders, order) {
- return fmt.Errorf("unsupported sort-order name %q", order)
- }
- }
-
- for _, format := range o.Formats {
- err := format.Validate()
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-type OutputFormat struct {
- Format string `mapstructure:"format"`
- Path string `mapstructure:"path"`
-}
-
-func (o *OutputFormat) Validate() error {
- if o.Format == "" {
- return errors.New("the format is required")
- }
-
- if !slices.Contains(AllOutputFormats, o.Format) {
- return fmt.Errorf("unsupported output format %q", o.Format)
- }
-
- return nil
-}
-
-type OutputFormats []OutputFormat
-
-func (p *OutputFormats) UnmarshalText(text []byte) error {
- formats := strings.Split(string(text), ",")
-
- for _, item := range formats {
- format, path, _ := strings.Cut(item, ":")
-
- *p = append(*p, OutputFormat{
- Path: path,
- Format: format,
- })
- }
-
- return nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/config/run.go b/vendor/github.com/golangci/golangci-lint/pkg/config/run.go
deleted file mode 100644
index 2f6523c0b..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/config/run.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package config
-
-import (
- "fmt"
- "slices"
- "strings"
- "time"
-)
-
-// Run encapsulates the config options for running the linter analysis.
-type Run struct {
- Timeout time.Duration `mapstructure:"timeout"`
-
- Concurrency int `mapstructure:"concurrency"`
-
- Go string `mapstructure:"go"`
-
- BuildTags []string `mapstructure:"build-tags"`
- ModulesDownloadMode string `mapstructure:"modules-download-mode"`
-
- ExitCodeIfIssuesFound int `mapstructure:"issues-exit-code"`
- AnalyzeTests bool `mapstructure:"tests"`
-
- AllowParallelRunners bool `mapstructure:"allow-parallel-runners"`
- AllowSerialRunners bool `mapstructure:"allow-serial-runners"`
-
- // Deprecated: use Issues.ExcludeFiles instead.
- SkipFiles []string `mapstructure:"skip-files"`
- // Deprecated: use Issues.ExcludeDirs instead.
- SkipDirs []string `mapstructure:"skip-dirs"`
- // Deprecated: use Issues.UseDefaultExcludeDirs instead.
- UseDefaultSkipDirs bool `mapstructure:"skip-dirs-use-default"`
-
- // Deprecated: use Output.ShowStats instead.
- ShowStats bool `mapstructure:"show-stats"`
-}
-
-func (r *Run) Validate() error {
- // go help modules
- allowedMods := []string{"mod", "readonly", "vendor"}
-
- if r.ModulesDownloadMode != "" && !slices.Contains(allowedMods, r.ModulesDownloadMode) {
- return fmt.Errorf("invalid modules download path %s, only (%s) allowed", r.ModulesDownloadMode, strings.Join(allowedMods, "|"))
- }
-
- return nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/config/severity.go b/vendor/github.com/golangci/golangci-lint/pkg/config/severity.go
deleted file mode 100644
index a6d2c9ec3..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/config/severity.go
+++ /dev/null
@@ -1,41 +0,0 @@
-package config
-
-import (
- "errors"
- "fmt"
-)
-
-const severityRuleMinConditionsCount = 1
-
-type Severity struct {
- Default string `mapstructure:"default-severity"`
- CaseSensitive bool `mapstructure:"case-sensitive"`
- Rules []SeverityRule `mapstructure:"rules"`
-}
-
-func (s *Severity) Validate() error {
- if len(s.Rules) > 0 && s.Default == "" {
- return errors.New("can't set severity rule option: no default severity defined")
- }
-
- for i, rule := range s.Rules {
- if err := rule.Validate(); err != nil {
- return fmt.Errorf("error in severity rule #%d: %w", i, err)
- }
- }
-
- return nil
-}
-
-type SeverityRule struct {
- BaseRule `mapstructure:",squash"`
- Severity string
-}
-
-func (s *SeverityRule) Validate() error {
- if s.Severity == "" {
- return errors.New("severity should be set")
- }
-
- return s.BaseRule.Validate(severityRuleMinConditionsCount)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/exitcodes/exitcodes.go b/vendor/github.com/golangci/golangci-lint/pkg/exitcodes/exitcodes.go
deleted file mode 100644
index 83331dbe7..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/exitcodes/exitcodes.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package exitcodes
-
-const (
- Success = iota
- IssuesFound
- WarningInTest
- Failure
- Timeout
- NoGoFiles
- NoConfigFileDetected
- ErrorWasLogged
-)
-
-type ExitError struct {
- Message string
- Code int
-}
-
-func (e ExitError) Error() string {
- return e.Message
-}
-
-var (
- ErrNoGoFiles = &ExitError{
- Message: "no go files to analyze",
- Code: NoGoFiles,
- }
- ErrFailure = &ExitError{
- Message: "failed to analyze",
- Code: Failure,
- }
-)
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/fsutils/filecache.go b/vendor/github.com/golangci/golangci-lint/pkg/fsutils/filecache.go
deleted file mode 100644
index e8e5ba19b..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/fsutils/filecache.go
+++ /dev/null
@@ -1,65 +0,0 @@
-package fsutils
-
-import (
- "fmt"
- "os"
- "sync"
-
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-type FileCache struct {
- files sync.Map
-}
-
-func NewFileCache() *FileCache {
- return &FileCache{}
-}
-
-func (fc *FileCache) GetFileBytes(filePath string) ([]byte, error) {
- cachedBytes, ok := fc.files.Load(filePath)
- if ok {
- return cachedBytes.([]byte), nil
- }
-
- fileBytes, err := os.ReadFile(filePath)
- if err != nil {
- return nil, fmt.Errorf("can't read file %s: %w", filePath, err)
- }
-
- fc.files.Store(filePath, fileBytes)
- return fileBytes, nil
-}
-
-func PrettifyBytesCount(n int64) string {
- const (
- Multiplexer = 1024
- KiB = 1 * Multiplexer
- MiB = KiB * Multiplexer
- GiB = MiB * Multiplexer
- )
-
- if n >= GiB {
- return fmt.Sprintf("%.1fGiB", float64(n)/GiB)
- }
- if n >= MiB {
- return fmt.Sprintf("%.1fMiB", float64(n)/MiB)
- }
- if n >= KiB {
- return fmt.Sprintf("%.1fKiB", float64(n)/KiB)
- }
- return fmt.Sprintf("%dB", n)
-}
-
-func (fc *FileCache) PrintStats(log logutils.Log) {
- var size int64
- var mapLen int
- fc.files.Range(func(_, fileBytes any) bool {
- mapLen++
- size += int64(len(fileBytes.([]byte)))
-
- return true
- })
-
- log.Infof("File cache stats: %d entries of total size %s", mapLen, PrettifyBytesCount(size))
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/fsutils/files.go b/vendor/github.com/golangci/golangci-lint/pkg/fsutils/files.go
deleted file mode 100644
index 4398ab9fc..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/fsutils/files.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package fsutils
-
-import "path/filepath"
-
-// Files combines different operations related to handling file paths and content.
-type Files struct {
- *LineCache
- pathPrefix string
-}
-
-func NewFiles(lc *LineCache, pathPrefix string) *Files {
- return &Files{
- LineCache: lc,
- pathPrefix: pathPrefix,
- }
-}
-
-// WithPathPrefix takes a path that is relative to the current directory (as used in issues)
-// and adds the configured path prefix, if there is one.
-// The resulting path then can be shown to the user or compared against paths specified in the configuration.
-func (f *Files) WithPathPrefix(relativePath string) string {
- return WithPathPrefix(f.pathPrefix, relativePath)
-}
-
-// WithPathPrefix takes a path that is relative to the current directory (as used in issues)
-// and adds the configured path prefix, if there is one.
-// The resulting path then can be shown to the user or compared against paths specified in the configuration.
-func WithPathPrefix(pathPrefix, relativePath string) string {
- if pathPrefix == "" {
- return relativePath
- }
- return filepath.Join(pathPrefix, relativePath)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/fsutils/fsutils.go b/vendor/github.com/golangci/golangci-lint/pkg/fsutils/fsutils.go
deleted file mode 100644
index 80bb9c5b4..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/fsutils/fsutils.go
+++ /dev/null
@@ -1,102 +0,0 @@
-package fsutils
-
-import (
- "fmt"
- "os"
- "path/filepath"
- "sync"
-)
-
-func IsDir(filename string) bool {
- fi, err := os.Stat(filename)
- return err == nil && fi.IsDir()
-}
-
-var (
- cachedWd string
- cachedWdError error
- getWdOnce sync.Once
- useCache = true
-)
-
-func UseWdCache(use bool) {
- useCache = use
-}
-
-func Getwd() (string, error) {
- if !useCache { // for tests
- return os.Getwd()
- }
-
- getWdOnce.Do(func() {
- cachedWd, cachedWdError = os.Getwd()
- if cachedWdError != nil {
- return
- }
-
- evaledWd, err := EvalSymlinks(cachedWd)
- if err != nil {
- cachedWd, cachedWdError = "", fmt.Errorf("can't eval symlinks on wd %s: %w", cachedWd, err)
- return
- }
-
- cachedWd = evaledWd
- })
-
- return cachedWd, cachedWdError
-}
-
-var evalSymlinkCache sync.Map
-
-type evalSymlinkRes struct {
- path string
- err error
-}
-
-func EvalSymlinks(path string) (string, error) {
- r, ok := evalSymlinkCache.Load(path)
- if ok {
- er := r.(evalSymlinkRes)
- return er.path, er.err
- }
-
- var er evalSymlinkRes
- er.path, er.err = filepath.EvalSymlinks(path)
- evalSymlinkCache.Store(path, er)
-
- return er.path, er.err
-}
-
-func ShortestRelPath(path, wd string) (string, error) {
- if wd == "" { // get it if user don't have cached working dir
- var err error
- wd, err = Getwd()
- if err != nil {
- return "", fmt.Errorf("can't get working directory: %w", err)
- }
- }
-
- evaledPath, err := EvalSymlinks(path)
- if err != nil {
- return "", fmt.Errorf("can't eval symlinks for path %s: %w", path, err)
- }
- path = evaledPath
-
- // make path absolute and then relative to be able to fix this case:
- // we are in /test dir, we want to normalize ../test, and have file file.go in this dir;
- // it must have normalized path file.go, not ../test/file.go,
- var absPath string
- if filepath.IsAbs(path) {
- absPath = path
- } else {
- absPath = filepath.Join(wd, path)
- }
-
- relPath, err := filepath.Rel(wd, absPath)
- if err != nil {
- return "", fmt.Errorf("can't get relative path for path %s and root %s: %w",
- absPath, wd, err)
- }
-
- return relPath, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/fsutils/linecache.go b/vendor/github.com/golangci/golangci-lint/pkg/fsutils/linecache.go
deleted file mode 100644
index 2e9226484..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/fsutils/linecache.go
+++ /dev/null
@@ -1,68 +0,0 @@
-package fsutils
-
-import (
- "bytes"
- "fmt"
- "sync"
-)
-
-type fileLinesCache [][]byte
-
-type LineCache struct {
- files sync.Map
- fileCache *FileCache
-}
-
-func NewLineCache(fc *FileCache) *LineCache {
- return &LineCache{
- fileCache: fc,
- }
-}
-
-// GetLine returns the index1-th (1-based index) line from the file on filePath
-func (lc *LineCache) GetLine(filePath string, index1 int) (string, error) {
- if index1 == 0 { // some linters, e.g. gosec can do it: it really means first line
- index1 = 1
- }
-
- const index1To0Offset = -1
- rawLine, err := lc.getRawLine(filePath, index1+index1To0Offset)
- if err != nil {
- return "", err
- }
-
- return string(bytes.Trim(rawLine, "\r")), nil
-}
-
-func (lc *LineCache) getRawLine(filePath string, index0 int) ([]byte, error) {
- fc, err := lc.getFileCache(filePath)
- if err != nil {
- return nil, fmt.Errorf("failed to get file %s lines cache: %w", filePath, err)
- }
-
- if index0 < 0 {
- return nil, fmt.Errorf("invalid file line index0 < 0: %d", index0)
- }
-
- if index0 >= len(fc) {
- return nil, fmt.Errorf("invalid file line index0 (%d) >= len(fc) (%d)", index0, len(fc))
- }
-
- return fc[index0], nil
-}
-
-func (lc *LineCache) getFileCache(filePath string) (fileLinesCache, error) {
- loadedFc, ok := lc.files.Load(filePath)
- if ok {
- return loadedFc.(fileLinesCache), nil
- }
-
- fileBytes, err := lc.fileCache.GetFileBytes(filePath)
- if err != nil {
- return nil, fmt.Errorf("can't get file %s bytes from cache: %w", filePath, err)
- }
-
- fc := bytes.Split(fileBytes, []byte("\n"))
- lc.files.Store(filePath, fileLinesCache(fc))
- return fc, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/fsutils/path_unix.go b/vendor/github.com/golangci/golangci-lint/pkg/fsutils/path_unix.go
deleted file mode 100644
index 2a171ecc0..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/fsutils/path_unix.go
+++ /dev/null
@@ -1,8 +0,0 @@
-//go:build !windows
-
-package fsutils
-
-// NormalizePathInRegex it's a noop function on Unix.
-func NormalizePathInRegex(path string) string {
- return path
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/fsutils/path_windows.go b/vendor/github.com/golangci/golangci-lint/pkg/fsutils/path_windows.go
deleted file mode 100644
index 650aae1e1..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/fsutils/path_windows.go
+++ /dev/null
@@ -1,28 +0,0 @@
-//go:build windows
-
-package fsutils
-
-import (
- "path/filepath"
- "regexp"
- "strings"
-)
-
-var separatorToReplace = regexp.QuoteMeta(string(filepath.Separator))
-
-// NormalizePathInRegex normalizes path in regular expressions.
-// noop on Unix.
-// This replacing should be safe because "/" are disallowed in Windows
-// https://docs.microsoft.com/windows/win32/fileio/naming-a-file
-func NormalizePathInRegex(path string) string {
- // remove redundant character escape "\/" https://github.com/golangci/golangci-lint/issues/3277
- clean := regexp.MustCompile(`\\+/`).
- ReplaceAllStringFunc(path, func(s string) string {
- if strings.Count(s, "\\")%2 == 0 {
- return s
- }
- return s[1:]
- })
-
- return strings.ReplaceAll(clean, "/", separatorToReplace)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/issue.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/issue.go
deleted file mode 100644
index 15d8dd2b3..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/issue.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package goanalysis
-
-import (
- "go/token"
-
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-type Issue struct {
- result.Issue
- Pass *analysis.Pass
-}
-
-func NewIssue(issue *result.Issue, pass *analysis.Pass) Issue {
- return Issue{
- Issue: *issue,
- Pass: pass,
- }
-}
-
-type EncodingIssue struct {
- FromLinter string
- Text string
- Severity string
- Pos token.Position
- LineRange *result.Range
- Replacement *result.Replacement
- ExpectNoLint bool
- ExpectedNoLintLinter string
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/linter.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/linter.go
deleted file mode 100644
index 13d3a09a5..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/linter.go
+++ /dev/null
@@ -1,217 +0,0 @@
-package goanalysis
-
-import (
- "context"
- "errors"
- "flag"
- "fmt"
- "strings"
-
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const (
- TheOnlyAnalyzerName = "the_only_name"
- TheOnlyanalyzerDoc = "the_only_doc"
-)
-
-type LoadMode int
-
-func (loadMode LoadMode) String() string {
- switch loadMode {
- case LoadModeNone:
- return "none"
- case LoadModeSyntax:
- return "syntax"
- case LoadModeTypesInfo:
- return "types info"
- case LoadModeWholeProgram:
- return "whole program"
- }
- panic(fmt.Sprintf("unknown load mode %d", loadMode))
-}
-
-const (
- LoadModeNone LoadMode = iota
- LoadModeSyntax
- LoadModeTypesInfo
- LoadModeWholeProgram
-)
-
-type Linter struct {
- name, desc string
- analyzers []*analysis.Analyzer
- cfg map[string]map[string]any
- issuesReporter func(*linter.Context) []Issue
- contextSetter func(*linter.Context)
- loadMode LoadMode
- needUseOriginalPackages bool
-}
-
-func NewLinter(name, desc string, analyzers []*analysis.Analyzer, cfg map[string]map[string]any) *Linter {
- return &Linter{name: name, desc: desc, analyzers: analyzers, cfg: cfg}
-}
-
-func (lnt *Linter) Run(_ context.Context, lintCtx *linter.Context) ([]result.Issue, error) {
- if err := lnt.preRun(lintCtx); err != nil {
- return nil, err
- }
-
- return runAnalyzers(lnt, lintCtx)
-}
-
-func (lnt *Linter) UseOriginalPackages() {
- lnt.needUseOriginalPackages = true
-}
-
-func (lnt *Linter) LoadMode() LoadMode {
- return lnt.loadMode
-}
-
-func (lnt *Linter) WithLoadMode(loadMode LoadMode) *Linter {
- lnt.loadMode = loadMode
- return lnt
-}
-
-func (lnt *Linter) WithIssuesReporter(r func(*linter.Context) []Issue) *Linter {
- lnt.issuesReporter = r
- return lnt
-}
-
-func (lnt *Linter) WithContextSetter(cs func(*linter.Context)) *Linter {
- lnt.contextSetter = cs
- return lnt
-}
-
-func (lnt *Linter) Name() string {
- return lnt.name
-}
-
-func (lnt *Linter) Desc() string {
- return lnt.desc
-}
-
-func (lnt *Linter) allAnalyzerNames() []string {
- var ret []string
- for _, a := range lnt.analyzers {
- ret = append(ret, a.Name)
- }
- return ret
-}
-
-func (*Linter) configureAnalyzer(a *analysis.Analyzer, cfg map[string]any) error {
- for k, v := range cfg {
- f := a.Flags.Lookup(k)
- if f == nil {
- validFlagNames := allFlagNames(&a.Flags)
- if len(validFlagNames) == 0 {
- return errors.New("analyzer doesn't have settings")
- }
-
- return fmt.Errorf("analyzer doesn't have setting %q, valid settings: %v",
- k, validFlagNames)
- }
-
- if err := f.Value.Set(valueToString(v)); err != nil {
- return fmt.Errorf("failed to set analyzer setting %q with value %q: %w", k, v, err)
- }
- }
-
- return nil
-}
-
-func (lnt *Linter) configure() error {
- analyzersMap := map[string]*analysis.Analyzer{}
- for _, a := range lnt.analyzers {
- analyzersMap[a.Name] = a
- }
-
- for analyzerName, analyzerSettings := range lnt.cfg {
- a := analyzersMap[analyzerName]
- if a == nil {
- return fmt.Errorf("settings key %q must be valid analyzer name, valid analyzers: %v",
- analyzerName, lnt.allAnalyzerNames())
- }
-
- if err := lnt.configureAnalyzer(a, analyzerSettings); err != nil {
- return fmt.Errorf("failed to configure analyzer %s: %w", analyzerName, err)
- }
- }
-
- return nil
-}
-
-func (lnt *Linter) preRun(lintCtx *linter.Context) error {
- if err := analysis.Validate(lnt.analyzers); err != nil {
- return fmt.Errorf("failed to validate analyzers: %w", err)
- }
-
- if err := lnt.configure(); err != nil {
- return fmt.Errorf("failed to configure analyzers: %w", err)
- }
-
- if lnt.contextSetter != nil {
- lnt.contextSetter(lintCtx)
- }
-
- return nil
-}
-
-func (lnt *Linter) getName() string {
- return lnt.name
-}
-
-func (lnt *Linter) getLinterNameForDiagnostic(*Diagnostic) string {
- return lnt.name
-}
-
-func (lnt *Linter) getAnalyzers() []*analysis.Analyzer {
- return lnt.analyzers
-}
-
-func (lnt *Linter) useOriginalPackages() bool {
- return lnt.needUseOriginalPackages
-}
-
-func (lnt *Linter) reportIssues(lintCtx *linter.Context) []Issue {
- if lnt.issuesReporter != nil {
- return lnt.issuesReporter(lintCtx)
- }
- return nil
-}
-
-func (lnt *Linter) getLoadMode() LoadMode {
- return lnt.loadMode
-}
-
-func allFlagNames(fs *flag.FlagSet) []string {
- var ret []string
- fs.VisitAll(func(f *flag.Flag) {
- ret = append(ret, f.Name)
- })
- return ret
-}
-
-func valueToString(v any) string {
- if ss, ok := v.([]string); ok {
- return strings.Join(ss, ",")
- }
-
- if is, ok := v.([]any); ok {
- var ss []string
- for _, i := range is {
- ss = append(ss, fmt.Sprint(i))
- }
-
- return valueToString(ss)
- }
-
- return fmt.Sprint(v)
-}
-
-func DummyRun(_ *analysis.Pass) (any, error) {
- return nil, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/load/guard.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/load/guard.go
deleted file mode 100644
index ab7775cc8..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/load/guard.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package load
-
-import (
- "sync"
-
- "golang.org/x/tools/go/packages"
-)
-
-type Guard struct {
- loadMutexes map[*packages.Package]*sync.Mutex
- mutex sync.Mutex
-}
-
-func NewGuard() *Guard {
- return &Guard{
- loadMutexes: map[*packages.Package]*sync.Mutex{},
- }
-}
-
-func (g *Guard) AddMutexForPkg(pkg *packages.Package) {
- g.loadMutexes[pkg] = &sync.Mutex{}
-}
-
-func (g *Guard) MutexForPkg(pkg *packages.Package) *sync.Mutex {
- return g.loadMutexes[pkg]
-}
-
-func (g *Guard) Mutex() *sync.Mutex {
- return &g.mutex
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/metalinter.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/metalinter.go
deleted file mode 100644
index c2a794997..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/metalinter.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package goanalysis
-
-import (
- "context"
- "fmt"
-
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-type MetaLinter struct {
- linters []*Linter
- analyzerToLinterName map[*analysis.Analyzer]string
-}
-
-func NewMetaLinter(linters []*Linter) *MetaLinter {
- ml := &MetaLinter{linters: linters}
- ml.analyzerToLinterName = ml.getAnalyzerToLinterNameMapping()
- return ml
-}
-
-func (ml MetaLinter) Run(_ context.Context, lintCtx *linter.Context) ([]result.Issue, error) {
- for _, l := range ml.linters {
- if err := l.preRun(lintCtx); err != nil {
- return nil, fmt.Errorf("failed to pre-run %s: %w", l.Name(), err)
- }
- }
-
- return runAnalyzers(ml, lintCtx)
-}
-
-func (MetaLinter) Name() string {
- return "goanalysis_metalinter"
-}
-
-func (MetaLinter) Desc() string {
- return ""
-}
-
-func (ml MetaLinter) getLoadMode() LoadMode {
- loadMode := LoadModeNone
- for _, l := range ml.linters {
- if l.loadMode > loadMode {
- loadMode = l.loadMode
- }
- }
- return loadMode
-}
-
-func (ml MetaLinter) getAnalyzers() []*analysis.Analyzer {
- var allAnalyzers []*analysis.Analyzer
- for _, l := range ml.linters {
- allAnalyzers = append(allAnalyzers, l.analyzers...)
- }
- return allAnalyzers
-}
-
-func (MetaLinter) getName() string {
- return "metalinter"
-}
-
-func (MetaLinter) useOriginalPackages() bool {
- return false // `unused` can't be run by this metalinter
-}
-
-func (ml MetaLinter) reportIssues(lintCtx *linter.Context) []Issue {
- var ret []Issue
- for _, lnt := range ml.linters {
- if lnt.issuesReporter != nil {
- ret = append(ret, lnt.issuesReporter(lintCtx)...)
- }
- }
- return ret
-}
-
-func (ml MetaLinter) getLinterNameForDiagnostic(diag *Diagnostic) string {
- return ml.analyzerToLinterName[diag.Analyzer]
-}
-
-func (ml MetaLinter) getAnalyzerToLinterNameMapping() map[*analysis.Analyzer]string {
- analyzerToLinterName := map[*analysis.Analyzer]string{}
- for _, l := range ml.linters {
- for _, a := range l.analyzers {
- analyzerToLinterName[a] = l.Name()
- }
- }
- return analyzerToLinterName
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors/errors.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors/errors.go
deleted file mode 100644
index 7da659e80..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors/errors.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package pkgerrors
-
-import (
- "errors"
- "fmt"
-
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-type IllTypedError struct {
- Pkg *packages.Package
-}
-
-func (e *IllTypedError) Error() string {
- return fmt.Sprintf("errors in package: %v", e.Pkg.Errors)
-}
-
-func BuildIssuesFromIllTypedError(errs []error, lintCtx *linter.Context) ([]result.Issue, error) {
- var issues []result.Issue
- uniqReportedIssues := map[string]bool{}
-
- var other error
-
- for _, err := range errs {
- var ill *IllTypedError
- if !errors.As(err, &ill) {
- if other == nil {
- other = err
- }
- continue
- }
-
- for _, err := range extractErrors(ill.Pkg) {
- issue, perr := parseError(err)
- if perr != nil { // failed to parse
- if uniqReportedIssues[err.Msg] {
- continue
- }
- uniqReportedIssues[err.Msg] = true
- lintCtx.Log.Errorf("typechecking error: %s", err.Msg)
- } else {
- issue.Pkg = ill.Pkg // to save to cache later
- issues = append(issues, *issue)
- }
- }
- }
-
- if len(issues) == 0 && other != nil {
- return nil, other
- }
-
- return issues, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors/extract.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors/extract.go
deleted file mode 100644
index d1257e663..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors/extract.go
+++ /dev/null
@@ -1,102 +0,0 @@
-package pkgerrors
-
-import (
- "fmt"
- "regexp"
- "strings"
-
- "golang.org/x/tools/go/packages"
-)
-
-// reFile matches a line who starts with path and position.
-// ex: `/example/main.go:11:17: foobar`
-var reFile = regexp.MustCompile(`^.+\.go:\d+:\d+: .+`)
-
-func extractErrors(pkg *packages.Package) []packages.Error {
- errors := extractErrorsImpl(pkg, map[*packages.Package]bool{})
- if len(errors) == 0 {
- return errors
- }
-
- seenErrors := map[string]bool{}
- var uniqErrors []packages.Error
- for _, err := range errors {
- msg := stackCrusher(err.Error())
- if seenErrors[msg] {
- continue
- }
-
- if msg != err.Error() {
- continue
- }
-
- seenErrors[msg] = true
-
- uniqErrors = append(uniqErrors, err)
- }
-
- if len(pkg.GoFiles) != 0 {
- // errors were extracted from deps and have at least one file in package
- for i := range uniqErrors {
- if _, parseErr := parseErrorPosition(uniqErrors[i].Pos); parseErr == nil {
- continue
- }
-
- // change pos to local file to properly process it by processors (properly read line etc.)
- uniqErrors[i].Msg = fmt.Sprintf("%s: %s", uniqErrors[i].Pos, uniqErrors[i].Msg)
- uniqErrors[i].Pos = fmt.Sprintf("%s:1", pkg.GoFiles[0])
- }
-
- // some errors like "code in directory expects import" don't have Pos, set it here
- for i := range uniqErrors {
- err := &uniqErrors[i]
- if err.Pos == "" {
- err.Pos = fmt.Sprintf("%s:1", pkg.GoFiles[0])
- }
- }
- }
-
- return uniqErrors
-}
-
-func extractErrorsImpl(pkg *packages.Package, seenPackages map[*packages.Package]bool) []packages.Error {
- if seenPackages[pkg] {
- return nil
- }
- seenPackages[pkg] = true
-
- if !pkg.IllTyped { // otherwise, it may take hours to traverse all deps many times
- return nil
- }
-
- if len(pkg.Errors) > 0 {
- return pkg.Errors
- }
-
- var errors []packages.Error
- for _, iPkg := range pkg.Imports {
- iPkgErrors := extractErrorsImpl(iPkg, seenPackages)
- if iPkgErrors != nil {
- errors = append(errors, iPkgErrors...)
- }
- }
-
- return errors
-}
-
-func stackCrusher(msg string) string {
- index := strings.Index(msg, "(")
- lastIndex := strings.LastIndex(msg, ")")
-
- if index == -1 || index == len(msg)-1 || lastIndex == -1 || lastIndex != len(msg)-1 {
- return msg
- }
-
- frag := msg[index+1 : lastIndex]
-
- if !reFile.MatchString(frag) {
- return msg
- }
-
- return stackCrusher(frag)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors/parse.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors/parse.go
deleted file mode 100644
index b25b50f71..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors/parse.go
+++ /dev/null
@@ -1,54 +0,0 @@
-package pkgerrors
-
-import (
- "errors"
- "fmt"
- "go/token"
- "strconv"
- "strings"
-
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-func parseError(srcErr packages.Error) (*result.Issue, error) {
- pos, err := parseErrorPosition(srcErr.Pos)
- if err != nil {
- return nil, err
- }
-
- return &result.Issue{
- Pos: *pos,
- Text: srcErr.Msg,
- FromLinter: "typecheck",
- }, nil
-}
-
-func parseErrorPosition(pos string) (*token.Position, error) {
- // file:line(<optional>:colon)
- parts := strings.Split(pos, ":")
- if len(parts) == 1 {
- return nil, errors.New("no colons")
- }
-
- file := parts[0]
- line, err := strconv.Atoi(parts[1])
- if err != nil {
- return nil, fmt.Errorf("can't parse line number %q: %w", parts[1], err)
- }
-
- var column int
- if len(parts) == 3 { // no column
- column, err = strconv.Atoi(parts[2])
- if err != nil {
- return nil, fmt.Errorf("failed to parse column from %q: %w", parts[2], err)
- }
- }
-
- return &token.Position{
- Filename: file,
- Line: line,
- Column: column,
- }, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner.go
deleted file mode 100644
index ac03c71ec..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner.go
+++ /dev/null
@@ -1,334 +0,0 @@
-// Package goanalysis defines the implementation of the checker commands.
-// The same code drives the multi-analysis driver, the single-analysis
-// driver that is conventionally provided for convenience along with
-// each analysis package, and the test driver.
-package goanalysis
-
-import (
- "encoding/gob"
- "fmt"
- "go/token"
- "runtime"
- "sort"
- "sync"
-
- "golang.org/x/exp/maps"
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/internal/cache"
- "github.com/golangci/golangci-lint/internal/errorutil"
- "github.com/golangci/golangci-lint/pkg/goanalysis/load"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/timeutils"
-)
-
-var (
- debugf = logutils.Debug(logutils.DebugKeyGoAnalysis)
-
- analyzeDebugf = logutils.Debug(logutils.DebugKeyGoAnalysisAnalyze)
- isMemoryDebug = logutils.HaveDebugTag(logutils.DebugKeyGoAnalysisMemory)
- issuesCacheDebugf = logutils.Debug(logutils.DebugKeyGoAnalysisIssuesCache)
-
- factsDebugf = logutils.Debug(logutils.DebugKeyGoAnalysisFacts)
- factsCacheDebugf = logutils.Debug(logutils.DebugKeyGoAnalysisFactsCache)
- factsInheritDebugf = logutils.Debug(logutils.DebugKeyGoAnalysisFactsInherit)
- factsExportDebugf = logutils.Debug(logutils.DebugKeyGoAnalysisFacts)
- isFactsExportDebug = logutils.HaveDebugTag(logutils.DebugKeyGoAnalysisFactsExport)
-)
-
-type Diagnostic struct {
- analysis.Diagnostic
- Analyzer *analysis.Analyzer
- Position token.Position
- Pkg *packages.Package
-}
-
-type runner struct {
- log logutils.Log
- prefix string // ensure unique analyzer names
- pkgCache *cache.Cache
- loadGuard *load.Guard
- loadMode LoadMode
- passToPkg map[*analysis.Pass]*packages.Package
- passToPkgGuard sync.Mutex
- sw *timeutils.Stopwatch
-}
-
-func newRunner(prefix string, logger logutils.Log, pkgCache *cache.Cache, loadGuard *load.Guard,
- loadMode LoadMode, sw *timeutils.Stopwatch,
-) *runner {
- return &runner{
- prefix: prefix,
- log: logger,
- pkgCache: pkgCache,
- loadGuard: loadGuard,
- loadMode: loadMode,
- passToPkg: map[*analysis.Pass]*packages.Package{},
- sw: sw,
- }
-}
-
-// Run loads the packages specified by args using go/packages,
-// then applies the specified analyzers to them.
-// Analysis flags must already have been set.
-// It provides most of the logic for the main functions of both the
-// singlechecker and the multi-analysis commands.
-// It returns the appropriate exit code.
-func (r *runner) run(analyzers []*analysis.Analyzer, initialPackages []*packages.Package) ([]Diagnostic,
- []error, map[*analysis.Pass]*packages.Package,
-) {
- debugf("Analyzing %d packages on load mode %s", len(initialPackages), r.loadMode)
-
- roots := r.analyze(initialPackages, analyzers)
-
- diags, errs := extractDiagnostics(roots)
-
- return diags, errs, r.passToPkg
-}
-
-type actKey struct {
- *analysis.Analyzer
- *packages.Package
-}
-
-func (r *runner) markAllActions(a *analysis.Analyzer, pkg *packages.Package, markedActions map[actKey]struct{}) {
- k := actKey{a, pkg}
- if _, ok := markedActions[k]; ok {
- return
- }
-
- for _, req := range a.Requires {
- r.markAllActions(req, pkg, markedActions)
- }
-
- if len(a.FactTypes) != 0 {
- for path := range pkg.Imports {
- r.markAllActions(a, pkg.Imports[path], markedActions)
- }
- }
-
- markedActions[k] = struct{}{}
-}
-
-func (r *runner) makeAction(a *analysis.Analyzer, pkg *packages.Package,
- initialPkgs map[*packages.Package]bool, actions map[actKey]*action, actAlloc *actionAllocator,
-) *action {
- k := actKey{a, pkg}
- act, ok := actions[k]
- if ok {
- return act
- }
-
- act = actAlloc.alloc()
- act.a = a
- act.pkg = pkg
- act.r = r
- act.isInitialPkg = initialPkgs[pkg]
- act.needAnalyzeSource = initialPkgs[pkg]
- act.analysisDoneCh = make(chan struct{})
-
- depsCount := len(a.Requires)
- if len(a.FactTypes) > 0 {
- depsCount += len(pkg.Imports)
- }
- act.deps = make([]*action, 0, depsCount)
-
- // Add a dependency on each required analyzers.
- for _, req := range a.Requires {
- act.deps = append(act.deps, r.makeAction(req, pkg, initialPkgs, actions, actAlloc))
- }
-
- r.buildActionFactDeps(act, a, pkg, initialPkgs, actions, actAlloc)
-
- actions[k] = act
-
- return act
-}
-
-func (r *runner) buildActionFactDeps(act *action, a *analysis.Analyzer, pkg *packages.Package,
- initialPkgs map[*packages.Package]bool, actions map[actKey]*action, actAlloc *actionAllocator,
-) {
- // An analysis that consumes/produces facts
- // must run on the package's dependencies too.
- if len(a.FactTypes) == 0 {
- return
- }
-
- act.objectFacts = make(map[objectFactKey]analysis.Fact)
- act.packageFacts = make(map[packageFactKey]analysis.Fact)
-
- paths := maps.Keys(pkg.Imports)
- sort.Strings(paths) // for determinism
- for _, path := range paths {
- dep := r.makeAction(a, pkg.Imports[path], initialPkgs, actions, actAlloc)
- act.deps = append(act.deps, dep)
- }
-
- // Need to register fact types for pkgcache proper gob encoding.
- for _, f := range a.FactTypes {
- gob.Register(f)
- }
-}
-
-func (r *runner) prepareAnalysis(pkgs []*packages.Package,
- analyzers []*analysis.Analyzer,
-) (initialPkgs map[*packages.Package]bool, allActions, roots []*action) {
- // Construct the action graph.
-
- // Each graph node (action) is one unit of analysis.
- // Edges express package-to-package (vertical) dependencies,
- // and analysis-to-analysis (horizontal) dependencies.
-
- // This place is memory-intensive: e.g. Istio project has 120k total actions.
- // Therefore, optimize it carefully.
- markedActions := make(map[actKey]struct{}, len(analyzers)*len(pkgs))
- for _, a := range analyzers {
- for _, pkg := range pkgs {
- r.markAllActions(a, pkg, markedActions)
- }
- }
- totalActionsCount := len(markedActions)
-
- actions := make(map[actKey]*action, totalActionsCount)
- actAlloc := newActionAllocator(totalActionsCount)
-
- initialPkgs = make(map[*packages.Package]bool, len(pkgs))
- for _, pkg := range pkgs {
- initialPkgs[pkg] = true
- }
-
- // Build nodes for initial packages.
- roots = make([]*action, 0, len(pkgs)*len(analyzers))
- for _, a := range analyzers {
- for _, pkg := range pkgs {
- root := r.makeAction(a, pkg, initialPkgs, actions, actAlloc)
- root.isroot = true
- roots = append(roots, root)
- }
- }
-
- allActions = maps.Values(actions)
-
- debugf("Built %d actions", len(actions))
-
- return initialPkgs, allActions, roots
-}
-
-func (r *runner) analyze(pkgs []*packages.Package, analyzers []*analysis.Analyzer) []*action {
- initialPkgs, actions, rootActions := r.prepareAnalysis(pkgs, analyzers)
-
- actionPerPkg := map[*packages.Package][]*action{}
- for _, act := range actions {
- actionPerPkg[act.pkg] = append(actionPerPkg[act.pkg], act)
- }
-
- // Fill Imports field.
- loadingPackages := map[*packages.Package]*loadingPackage{}
- var dfs func(pkg *packages.Package)
- dfs = func(pkg *packages.Package) {
- if loadingPackages[pkg] != nil {
- return
- }
-
- imports := map[string]*loadingPackage{}
- for impPath, imp := range pkg.Imports {
- dfs(imp)
- impLp := loadingPackages[imp]
- impLp.dependents++
- imports[impPath] = impLp
- }
-
- loadingPackages[pkg] = &loadingPackage{
- pkg: pkg,
- imports: imports,
- isInitial: initialPkgs[pkg],
- log: r.log,
- actions: actionPerPkg[pkg],
- loadGuard: r.loadGuard,
- dependents: 1, // self dependent
- }
- }
- for _, act := range actions {
- dfs(act.pkg)
- }
-
- // Limit memory and IO usage.
- gomaxprocs := runtime.GOMAXPROCS(-1)
- debugf("Analyzing at most %d packages in parallel", gomaxprocs)
- loadSem := make(chan struct{}, gomaxprocs)
-
- var wg sync.WaitGroup
- debugf("There are %d initial and %d total packages", len(initialPkgs), len(loadingPackages))
- for _, lp := range loadingPackages {
- if lp.isInitial {
- wg.Add(1)
- go func(lp *loadingPackage) {
- lp.analyzeRecursive(r.loadMode, loadSem)
- wg.Done()
- }(lp)
- }
- }
- wg.Wait()
-
- return rootActions
-}
-
-func extractDiagnostics(roots []*action) (retDiags []Diagnostic, retErrors []error) {
- extracted := make(map[*action]bool)
- var extract func(*action)
- var visitAll func(actions []*action)
- visitAll = func(actions []*action) {
- for _, act := range actions {
- if !extracted[act] {
- extracted[act] = true
- visitAll(act.deps)
- extract(act)
- }
- }
- }
-
- // De-duplicate diagnostics by position (not token.Pos) to
- // avoid double-reporting in source files that belong to
- // multiple packages, such as foo and foo.test.
- type key struct {
- token.Position
- *analysis.Analyzer
- message string
- }
- seen := make(map[key]bool)
-
- extract = func(act *action) {
- if act.err != nil {
- if pe, ok := act.err.(*errorutil.PanicError); ok {
- panic(pe)
- }
- retErrors = append(retErrors, fmt.Errorf("%s: %w", act.a.Name, act.err))
- return
- }
-
- if act.isroot {
- for _, diag := range act.diagnostics {
- // We don't display a.Name/f.Category
- // as most users don't care.
-
- posn := act.pkg.Fset.Position(diag.Pos)
- k := key{posn, act.a, diag.Message}
- if seen[k] {
- continue // duplicate
- }
- seen[k] = true
-
- retDiag := Diagnostic{
- Diagnostic: diag,
- Analyzer: act.a,
- Position: posn,
- Pkg: act.pkg,
- }
- retDiags = append(retDiags, retDiag)
- }
- }
- }
- visitAll(roots)
- return retDiags, retErrors
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_action.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_action.go
deleted file mode 100644
index 152cab181..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_action.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package goanalysis
-
-import (
- "fmt"
- "runtime/debug"
-
- "github.com/golangci/golangci-lint/internal/errorutil"
-)
-
-type actionAllocator struct {
- allocatedActions []action
- nextFreeIndex int
-}
-
-func newActionAllocator(maxCount int) *actionAllocator {
- return &actionAllocator{
- allocatedActions: make([]action, maxCount),
- nextFreeIndex: 0,
- }
-}
-
-func (actAlloc *actionAllocator) alloc() *action {
- if actAlloc.nextFreeIndex == len(actAlloc.allocatedActions) {
- panic(fmt.Sprintf("Made too many allocations of actions: %d allowed", len(actAlloc.allocatedActions)))
- }
- act := &actAlloc.allocatedActions[actAlloc.nextFreeIndex]
- actAlloc.nextFreeIndex++
- return act
-}
-
-func (act *action) waitUntilDependingAnalyzersWorked() {
- for _, dep := range act.deps {
- if dep.pkg == act.pkg {
- <-dep.analysisDoneCh
- }
- }
-}
-
-func (act *action) analyzeSafe() {
- defer func() {
- if p := recover(); p != nil {
- if !act.isroot {
- // This line allows to display "hidden" panic with analyzers like buildssa.
- // Some linters are dependent of sub-analyzers but when a sub-analyzer fails the linter is not aware of that,
- // this results to another panic (ex: "interface conversion: interface {} is nil, not *buildssa.SSA").
- act.r.log.Errorf("%s: panic during analysis: %v, %s", act.a.Name, p, string(debug.Stack()))
- }
-
- act.err = errorutil.NewPanicError(fmt.Sprintf("%s: package %q (isInitialPkg: %t, needAnalyzeSource: %t): %s",
- act.a.Name, act.pkg.Name, act.isInitialPkg, act.needAnalyzeSource, p), debug.Stack())
- }
- }()
-
- act.r.sw.TrackStage(act.a.Name, act.analyze)
-}
-
-func (act *action) markDepsForAnalyzingSource() {
- // Horizontal deps (analyzer.Requires) must be loaded from source and analyzed before analyzing
- // this action.
- for _, dep := range act.deps {
- if dep.pkg == act.pkg {
- // Analyze source only for horizontal dependencies, e.g. from "buildssa".
- dep.needAnalyzeSource = true // can't be set in parallel
- }
- }
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_action_cache.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_action_cache.go
deleted file mode 100644
index fbc2f82fa..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_action_cache.go
+++ /dev/null
@@ -1,127 +0,0 @@
-package goanalysis
-
-import (
- "errors"
- "fmt"
- "io"
-
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/types/objectpath"
-
- "github.com/golangci/golangci-lint/internal/cache"
-)
-
-type Fact struct {
- Path string // non-empty only for object facts
- Fact analysis.Fact
-}
-
-func (act *action) loadCachedFacts() bool {
- if act.loadCachedFactsDone { // can't be set in parallel
- return act.loadCachedFactsOk
- }
-
- res := func() bool {
- if act.isInitialPkg {
- return true // load cached facts only for non-initial packages
- }
-
- if len(act.a.FactTypes) == 0 {
- return true // no need to load facts
- }
-
- return act.loadPersistedFacts()
- }()
- act.loadCachedFactsDone = true
- act.loadCachedFactsOk = res
- return res
-}
-
-func (act *action) persistFactsToCache() error {
- analyzer := act.a
- if len(analyzer.FactTypes) == 0 {
- return nil
- }
-
- // Merge new facts into the package and persist them.
- var facts []Fact
- for key, fact := range act.packageFacts {
- if key.pkg != act.pkg.Types {
- // The fact is from inherited facts from another package
- continue
- }
- facts = append(facts, Fact{
- Path: "",
- Fact: fact,
- })
- }
- for key, fact := range act.objectFacts {
- obj := key.obj
- if obj.Pkg() != act.pkg.Types {
- // The fact is from inherited facts from another package
- continue
- }
-
- path, err := objectpath.For(obj)
- if err != nil {
- // The object is not globally addressable
- continue
- }
-
- facts = append(facts, Fact{
- Path: string(path),
- Fact: fact,
- })
- }
-
- factsCacheDebugf("Caching %d facts for package %q and analyzer %s", len(facts), act.pkg.Name, act.a.Name)
-
- return act.r.pkgCache.Put(act.pkg, cache.HashModeNeedAllDeps, factCacheKey(analyzer), facts)
-}
-
-func (act *action) loadPersistedFacts() bool {
- var facts []Fact
-
- err := act.r.pkgCache.Get(act.pkg, cache.HashModeNeedAllDeps, factCacheKey(act.a), &facts)
- if err != nil {
- if !errors.Is(err, cache.ErrMissing) && !errors.Is(err, io.EOF) {
- act.r.log.Warnf("Failed to get persisted facts: %s", err)
- }
-
- factsCacheDebugf("No cached facts for package %q and analyzer %s", act.pkg.Name, act.a.Name)
- return false
- }
-
- factsCacheDebugf("Loaded %d cached facts for package %q and analyzer %s", len(facts), act.pkg.Name, act.a.Name)
-
- for _, f := range facts {
- if f.Path == "" { // this is a package fact
- key := packageFactKey{act.pkg.Types, act.factType(f.Fact)}
- act.packageFacts[key] = f.Fact
- continue
- }
- obj, err := objectpath.Object(act.pkg.Types, objectpath.Path(f.Path))
- if err != nil {
- // Be lenient about these errors. For example, when
- // analyzing io/ioutil from source, we may get a fact
- // for methods on the devNull type, and objectpath
- // will happily create a path for them. However, when
- // we later load io/ioutil from export data, the path
- // no longer resolves.
- //
- // If an exported type embeds the unexported type,
- // then (part of) the unexported type will become part
- // of the type information and our path will resolve
- // again.
- continue
- }
- factKey := objectFactKey{obj, act.factType(f.Fact)}
- act.objectFacts[factKey] = f.Fact
- }
-
- return true
-}
-
-func factCacheKey(a *analysis.Analyzer) string {
- return fmt.Sprintf("%s/facts", a.Name)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_base.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_base.go
deleted file mode 100644
index d868f8f5d..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_base.go
+++ /dev/null
@@ -1,370 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-//
-// Partial copy of https://github.com/golang/tools/blob/dba5486c2a1d03519930812112b23ed2c45c04fc/go/analysis/internal/checker/checker.go
-
-package goanalysis
-
-import (
- "bytes"
- "encoding/gob"
- "errors"
- "fmt"
- "go/types"
- "reflect"
- "time"
-
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors"
-)
-
-// NOTE(ldez) altered: custom fields; remove 'once' and 'duration'.
-// An action represents one unit of analysis work: the application of
-// one analysis to one package. Actions form a DAG, both within a
-// package (as different analyzers are applied, either in sequence or
-// parallel), and across packages (as dependencies are analyzed).
-type action struct {
- a *analysis.Analyzer
- pkg *packages.Package
- pass *analysis.Pass
- isroot bool
- deps []*action
- objectFacts map[objectFactKey]analysis.Fact
- packageFacts map[packageFactKey]analysis.Fact
- result any
- diagnostics []analysis.Diagnostic
- err error
-
- // NOTE(ldez) custom fields.
- r *runner
- analysisDoneCh chan struct{}
- loadCachedFactsDone bool
- loadCachedFactsOk bool
- isInitialPkg bool
- needAnalyzeSource bool
-}
-
-// NOTE(ldez) no alteration.
-type objectFactKey struct {
- obj types.Object
- typ reflect.Type
-}
-
-// NOTE(ldez) no alteration.
-type packageFactKey struct {
- pkg *types.Package
- typ reflect.Type
-}
-
-// NOTE(ldez) no alteration.
-func (act *action) String() string {
- return fmt.Sprintf("%s@%s", act.a, act.pkg)
-}
-
-// NOTE(ldez) altered version of `func (act *action) execOnce()`.
-func (act *action) analyze() {
- defer close(act.analysisDoneCh) // unblock actions depending on this action
-
- if !act.needAnalyzeSource {
- return
- }
-
- defer func(now time.Time) {
- analyzeDebugf("go/analysis: %s: %s: analyzed package %q in %s", act.r.prefix, act.a.Name, act.pkg.Name, time.Since(now))
- }(time.Now())
-
- // Report an error if any dependency failures.
- var depErrors error
- for _, dep := range act.deps {
- if dep.err != nil {
- depErrors = errors.Join(depErrors, errors.Unwrap(dep.err))
- }
- }
-
- if depErrors != nil {
- act.err = fmt.Errorf("failed prerequisites: %w", depErrors)
- return
- }
-
- // Plumb the output values of the dependencies
- // into the inputs of this action. Also facts.
- inputs := make(map[*analysis.Analyzer]any)
- act.objectFacts = make(map[objectFactKey]analysis.Fact)
- act.packageFacts = make(map[packageFactKey]analysis.Fact)
- startedAt := time.Now()
-
- for _, dep := range act.deps {
- if dep.pkg == act.pkg {
- // Same package, different analysis (horizontal edge):
- // in-memory outputs of prerequisite analyzers
- // become inputs to this analysis pass.
- inputs[dep.a] = dep.result
- } else if dep.a == act.a { // (always true)
- // Same analysis, different package (vertical edge):
- // serialized facts produced by prerequisite analysis
- // become available to this analysis pass.
- inheritFacts(act, dep)
- }
- }
-
- factsDebugf("%s: Inherited facts in %s", act, time.Since(startedAt))
-
- module := &analysis.Module{} // possibly empty (non nil) in go/analysis drivers.
- if mod := act.pkg.Module; mod != nil {
- module.Path = mod.Path
- module.Version = mod.Version
- module.GoVersion = mod.GoVersion
- }
-
- // Run the analysis.
- pass := &analysis.Pass{
- Analyzer: act.a,
- Fset: act.pkg.Fset,
- Files: act.pkg.Syntax,
- OtherFiles: act.pkg.OtherFiles,
- IgnoredFiles: act.pkg.IgnoredFiles,
- Pkg: act.pkg.Types,
- TypesInfo: act.pkg.TypesInfo,
- TypesSizes: act.pkg.TypesSizes,
- TypeErrors: act.pkg.TypeErrors,
- Module: module,
-
- ResultOf: inputs,
- Report: func(d analysis.Diagnostic) { act.diagnostics = append(act.diagnostics, d) },
- ImportObjectFact: act.importObjectFact,
- ExportObjectFact: act.exportObjectFact,
- ImportPackageFact: act.importPackageFact,
- ExportPackageFact: act.exportPackageFact,
- AllObjectFacts: act.allObjectFacts,
- AllPackageFacts: act.allPackageFacts,
- }
-
- act.pass = pass
- act.r.passToPkgGuard.Lock()
- act.r.passToPkg[pass] = act.pkg
- act.r.passToPkgGuard.Unlock()
-
- if act.pkg.IllTyped {
- // It looks like there should be !pass.Analyzer.RunDespiteErrors
- // but govet's cgocall crashes on it. Govet itself contains !pass.Analyzer.RunDespiteErrors condition here,
- // but it exits before it if packages.Load have failed.
- act.err = fmt.Errorf("analysis skipped: %w", &pkgerrors.IllTypedError{Pkg: act.pkg})
- } else {
- startedAt = time.Now()
-
- act.result, act.err = pass.Analyzer.Run(pass)
-
- analyzedIn := time.Since(startedAt)
- if analyzedIn > time.Millisecond*10 {
- debugf("%s: run analyzer in %s", act, analyzedIn)
- }
- }
-
- // disallow calls after Run
- pass.ExportObjectFact = nil
- pass.ExportPackageFact = nil
-
- err := act.persistFactsToCache()
- if err != nil {
- act.r.log.Warnf("Failed to persist facts to cache: %s", err)
- }
-}
-
-// NOTE(ldez) altered: logger; serialize.
-// inheritFacts populates act.facts with
-// those it obtains from its dependency, dep.
-func inheritFacts(act, dep *action) {
- const serialize = false
-
- for key, fact := range dep.objectFacts {
- // Filter out facts related to objects
- // that are irrelevant downstream
- // (equivalently: not in the compiler export data).
- if !exportedFrom(key.obj, dep.pkg.Types) {
- factsInheritDebugf("%v: discarding %T fact from %s for %s: %s", act, fact, dep, key.obj, fact)
- continue
- }
-
- // Optionally serialize/deserialize fact
- // to verify that it works across address spaces.
- if serialize {
- encodedFact, err := codeFact(fact)
- if err != nil {
- act.r.log.Panicf("internal error: encoding of %T fact failed in %v: %v", fact, act, err)
- }
- fact = encodedFact
- }
-
- factsInheritDebugf("%v: inherited %T fact for %s: %s", act, fact, key.obj, fact)
-
- act.objectFacts[key] = fact
- }
-
- for key, fact := range dep.packageFacts {
- // TODO: filter out facts that belong to
- // packages not mentioned in the export data
- // to prevent side channels.
-
- // Optionally serialize/deserialize fact
- // to verify that it works across address spaces
- // and is deterministic.
- if serialize {
- encodedFact, err := codeFact(fact)
- if err != nil {
- act.r.log.Panicf("internal error: encoding of %T fact failed in %v", fact, act)
- }
- fact = encodedFact
- }
-
- factsInheritDebugf("%v: inherited %T fact for %s: %s", act, fact, key.pkg.Path(), fact)
-
- act.packageFacts[key] = fact
- }
-}
-
-// NOTE(ldez) no alteration.
-// codeFact encodes then decodes a fact,
-// just to exercise that logic.
-func codeFact(fact analysis.Fact) (analysis.Fact, error) {
- // We encode facts one at a time.
- // A real modular driver would emit all facts
- // into one encoder to improve gob efficiency.
- var buf bytes.Buffer
- if err := gob.NewEncoder(&buf).Encode(fact); err != nil {
- return nil, err
- }
-
- // Encode it twice and assert that we get the same bits.
- // This helps detect nondeterministic Gob encoding (e.g. of maps).
- var buf2 bytes.Buffer
- if err := gob.NewEncoder(&buf2).Encode(fact); err != nil {
- return nil, err
- }
- if !bytes.Equal(buf.Bytes(), buf2.Bytes()) {
- return nil, fmt.Errorf("encoding of %T fact is nondeterministic", fact)
- }
-
- newFact := reflect.New(reflect.TypeOf(fact).Elem()).Interface().(analysis.Fact)
- if err := gob.NewDecoder(&buf).Decode(newFact); err != nil {
- return nil, err
- }
- return newFact, nil
-}
-
-// NOTE(ldez) no alteration.
-// exportedFrom reports whether obj may be visible to a package that imports pkg.
-// This includes not just the exported members of pkg, but also unexported
-// constants, types, fields, and methods, perhaps belonging to other packages,
-// that find there way into the API.
-// This is an over-approximation of the more accurate approach used by
-// gc export data, which walks the type graph, but it's much simpler.
-//
-// TODO(adonovan): do more accurate filtering by walking the type graph.
-func exportedFrom(obj types.Object, pkg *types.Package) bool {
- switch obj := obj.(type) {
- case *types.Func:
- return obj.Exported() && obj.Pkg() == pkg ||
- obj.Type().(*types.Signature).Recv() != nil
- case *types.Var:
- if obj.IsField() {
- return true
- }
- // we can't filter more aggressively than this because we need
- // to consider function parameters exported, but have no way
- // of telling apart function parameters from local variables.
- return obj.Pkg() == pkg
- case *types.TypeName, *types.Const:
- return true
- }
- return false // Nil, Builtin, Label, or PkgName
-}
-
-// NOTE(ldez) altered: logger; `act.factType`
-// importObjectFact implements Pass.ImportObjectFact.
-// Given a non-nil pointer ptr of type *T, where *T satisfies Fact,
-// importObjectFact copies the fact value to *ptr.
-func (act *action) importObjectFact(obj types.Object, ptr analysis.Fact) bool {
- if obj == nil {
- panic("nil object")
- }
- key := objectFactKey{obj, act.factType(ptr)}
- if v, ok := act.objectFacts[key]; ok {
- reflect.ValueOf(ptr).Elem().Set(reflect.ValueOf(v).Elem())
- return true
- }
- return false
-}
-
-// NOTE(ldez) altered: removes code related to `act.pass.ExportPackageFact`; logger; `act.factType`.
-// exportObjectFact implements Pass.ExportObjectFact.
-func (act *action) exportObjectFact(obj types.Object, fact analysis.Fact) {
- if obj.Pkg() != act.pkg.Types {
- act.r.log.Panicf("internal error: in analysis %s of package %s: Fact.Set(%s, %T): can't set facts on objects belonging another package",
- act.a, act.pkg, obj, fact)
- }
-
- key := objectFactKey{obj, act.factType(fact)}
- act.objectFacts[key] = fact // clobber any existing entry
- if isFactsExportDebug {
- objstr := types.ObjectString(obj, (*types.Package).Name)
-
- factsExportDebugf("%s: object %s has fact %s\n",
- act.pkg.Fset.Position(obj.Pos()), objstr, fact)
- }
-}
-
-// NOTE(ldez) no alteration.
-func (act *action) allObjectFacts() []analysis.ObjectFact {
- facts := make([]analysis.ObjectFact, 0, len(act.objectFacts))
- for k := range act.objectFacts {
- facts = append(facts, analysis.ObjectFact{Object: k.obj, Fact: act.objectFacts[k]})
- }
- return facts
-}
-
-// NOTE(ldez) altered: `act.factType`
-// importPackageFact implements Pass.ImportPackageFact.
-// Given a non-nil pointer ptr of type *T, where *T satisfies Fact,
-// fact copies the fact value to *ptr.
-func (act *action) importPackageFact(pkg *types.Package, ptr analysis.Fact) bool {
- if pkg == nil {
- panic("nil package")
- }
- key := packageFactKey{pkg, act.factType(ptr)}
- if v, ok := act.packageFacts[key]; ok {
- reflect.ValueOf(ptr).Elem().Set(reflect.ValueOf(v).Elem())
- return true
- }
- return false
-}
-
-// NOTE(ldez) altered: removes code related to `act.pass.ExportPackageFact`; logger; `act.factType`.
-// exportPackageFact implements Pass.ExportPackageFact.
-func (act *action) exportPackageFact(fact analysis.Fact) {
- key := packageFactKey{act.pass.Pkg, act.factType(fact)}
- act.packageFacts[key] = fact // clobber any existing entry
-
- factsDebugf("%s: package %s has fact %s\n",
- act.pkg.Fset.Position(act.pass.Files[0].Pos()), act.pass.Pkg.Path(), fact)
-}
-
-// NOTE(ldez) altered: add receiver to handle logs.
-func (act *action) factType(fact analysis.Fact) reflect.Type {
- t := reflect.TypeOf(fact)
- if t.Kind() != reflect.Ptr {
- act.r.log.Fatalf("invalid Fact type: got %T, want pointer", fact)
- }
- return t
-}
-
-// NOTE(ldez) no alteration.
-func (act *action) allPackageFacts() []analysis.PackageFact {
- facts := make([]analysis.PackageFact, 0, len(act.packageFacts))
- for k := range act.packageFacts {
- facts = append(facts, analysis.PackageFact{Package: k.pkg, Fact: act.packageFacts[k]})
- }
- return facts
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_loadingpackage.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_loadingpackage.go
deleted file mode 100644
index 44d676958..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runner_loadingpackage.go
+++ /dev/null
@@ -1,517 +0,0 @@
-package goanalysis
-
-import (
- "errors"
- "fmt"
- "go/ast"
- "go/build"
- "go/parser"
- "go/scanner"
- "go/types"
- "os"
- "reflect"
- "strings"
- "sync"
- "sync/atomic"
-
- "golang.org/x/tools/go/gcexportdata"
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis/load"
- "github.com/golangci/golangci-lint/pkg/goutil"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-const unsafePkgName = "unsafe"
-
-type loadingPackage struct {
- pkg *packages.Package
- imports map[string]*loadingPackage
- isInitial bool
- log logutils.Log
- actions []*action // all actions with this package
- loadGuard *load.Guard
- dependents int32 // number of depending on it packages
- analyzeOnce sync.Once
- decUseMutex sync.Mutex
-}
-
-func (lp *loadingPackage) analyzeRecursive(loadMode LoadMode, loadSem chan struct{}) {
- lp.analyzeOnce.Do(func() {
- // Load the direct dependencies, in parallel.
- var wg sync.WaitGroup
- wg.Add(len(lp.imports))
- for _, imp := range lp.imports {
- go func(imp *loadingPackage) {
- imp.analyzeRecursive(loadMode, loadSem)
- wg.Done()
- }(imp)
- }
- wg.Wait()
- lp.analyze(loadMode, loadSem)
- })
-}
-
-func (lp *loadingPackage) analyze(loadMode LoadMode, loadSem chan struct{}) {
- loadSem <- struct{}{}
- defer func() {
- <-loadSem
- }()
-
- // Save memory on unused more fields.
- defer lp.decUse(loadMode < LoadModeWholeProgram)
-
- if err := lp.loadWithFacts(loadMode); err != nil {
- werr := fmt.Errorf("failed to load package %s: %w", lp.pkg.Name, err)
- // Don't need to write error to errCh, it will be extracted and reported on another layer.
- // Unblock depending on actions and propagate error.
- for _, act := range lp.actions {
- close(act.analysisDoneCh)
- act.err = werr
- }
- return
- }
-
- var actsWg sync.WaitGroup
- actsWg.Add(len(lp.actions))
- for _, act := range lp.actions {
- go func(act *action) {
- defer actsWg.Done()
-
- act.waitUntilDependingAnalyzersWorked()
-
- act.analyzeSafe()
- }(act)
- }
- actsWg.Wait()
-}
-
-func (lp *loadingPackage) loadFromSource(loadMode LoadMode) error {
- pkg := lp.pkg
-
- // Many packages have few files, much fewer than there
- // are CPU cores. Additionally, parsing each individual file is
- // very fast. A naive parallel implementation of this loop won't
- // be faster, and tends to be slower due to extra scheduling,
- // bookkeeping and potentially false sharing of cache lines.
- pkg.Syntax = make([]*ast.File, 0, len(pkg.CompiledGoFiles))
- for _, file := range pkg.CompiledGoFiles {
- f, err := parser.ParseFile(pkg.Fset, file, nil, parser.ParseComments)
- if err != nil {
- pkg.Errors = append(pkg.Errors, lp.convertError(err)...)
- continue
- }
- pkg.Syntax = append(pkg.Syntax, f)
- }
- if len(pkg.Errors) != 0 {
- pkg.IllTyped = true
- return nil
- }
-
- if loadMode == LoadModeSyntax {
- return nil
- }
-
- // Call NewPackage directly with explicit name.
- // This avoids skew between golist and go/types when the files'
- // package declarations are inconsistent.
- // Subtle: we populate all Types fields with an empty Package
- // before loading export data so that export data processing
- // never has to create a types.Package for an indirect dependency,
- // which would then require that such created packages be explicitly
- // inserted back into the Import graph as a final step after export data loading.
- pkg.Types = types.NewPackage(pkg.PkgPath, pkg.Name)
-
- pkg.IllTyped = true
-
- pkg.TypesInfo = &types.Info{
- Types: make(map[ast.Expr]types.TypeAndValue),
- Instances: make(map[*ast.Ident]types.Instance),
- Defs: make(map[*ast.Ident]types.Object),
- Uses: make(map[*ast.Ident]types.Object),
- Implicits: make(map[ast.Node]types.Object),
- Scopes: make(map[ast.Node]*types.Scope),
- Selections: make(map[*ast.SelectorExpr]*types.Selection),
- }
-
- importer := func(path string) (*types.Package, error) {
- if path == unsafePkgName {
- return types.Unsafe, nil
- }
- if path == "C" {
- // go/packages doesn't tell us that cgo preprocessing
- // failed. When we subsequently try to parse the package,
- // we'll encounter the raw C import.
- return nil, errors.New("cgo preprocessing failed")
- }
- imp := pkg.Imports[path]
- if imp == nil {
- return nil, nil
- }
- if len(imp.Errors) > 0 {
- return nil, imp.Errors[0]
- }
- return imp.Types, nil
- }
-
- var goVersion string
- if pkg.Module != nil && pkg.Module.GoVersion != "" {
- goVersion = "go" + strings.TrimPrefix(pkg.Module.GoVersion, "go")
- } else {
- var err error
- goVersion, err = goutil.CleanRuntimeVersion()
- if err != nil {
- return err
- }
- }
-
- tc := &types.Config{
- Importer: importerFunc(importer),
- Error: func(err error) {
- pkg.Errors = append(pkg.Errors, lp.convertError(err)...)
- },
- GoVersion: goVersion,
- Sizes: types.SizesFor(build.Default.Compiler, build.Default.GOARCH),
- }
-
- _ = types.NewChecker(tc, pkg.Fset, pkg.Types, pkg.TypesInfo).Files(pkg.Syntax)
- // Don't handle error here: errors are adding by tc.Error function.
-
- illTyped := len(pkg.Errors) != 0
- if !illTyped {
- for _, imp := range lp.imports {
- if imp.pkg.IllTyped {
- illTyped = true
- break
- }
- }
- }
- pkg.IllTyped = illTyped
- return nil
-}
-
-func (lp *loadingPackage) loadFromExportData() error {
- pkg := lp.pkg
-
- // Call NewPackage directly with explicit name.
- // This avoids skew between golist and go/types when the files'
- // package declarations are inconsistent.
- // Subtle: we populate all Types fields with an empty Package
- // before loading export data so that export data processing
- // never has to create a types.Package for an indirect dependency,
- // which would then require that such created packages be explicitly
- // inserted back into the Import graph as a final step after export data loading.
- pkg.Types = types.NewPackage(pkg.PkgPath, pkg.Name)
-
- pkg.IllTyped = true
- for path, pkg := range pkg.Imports {
- if pkg.Types == nil {
- return fmt.Errorf("dependency %q hasn't been loaded yet", path)
- }
- }
- if pkg.ExportFile == "" {
- return fmt.Errorf("no export data for %q", pkg.ID)
- }
- f, err := os.Open(pkg.ExportFile)
- if err != nil {
- return err
- }
- defer f.Close()
-
- r, err := gcexportdata.NewReader(f)
- if err != nil {
- return err
- }
-
- view := make(map[string]*types.Package) // view seen by gcexportdata
- seen := make(map[*packages.Package]bool) // all visited packages
- var visit func(pkgs map[string]*packages.Package)
- visit = func(pkgs map[string]*packages.Package) {
- for _, pkg := range pkgs {
- if !seen[pkg] {
- seen[pkg] = true
- view[pkg.PkgPath] = pkg.Types
- visit(pkg.Imports)
- }
- }
- }
- visit(pkg.Imports)
- tpkg, err := gcexportdata.Read(r, pkg.Fset, view, pkg.PkgPath)
- if err != nil {
- return err
- }
- pkg.Types = tpkg
- pkg.IllTyped = false
- return nil
-}
-
-func (lp *loadingPackage) loadWithFacts(loadMode LoadMode) error {
- pkg := lp.pkg
-
- if pkg.PkgPath == unsafePkgName {
- // Fill in the blanks to avoid surprises.
- pkg.Syntax = []*ast.File{}
- if loadMode >= LoadModeTypesInfo {
- pkg.Types = types.Unsafe
- pkg.TypesInfo = new(types.Info)
- }
- return nil
- }
-
- if pkg.TypesInfo != nil {
- // Already loaded package, e.g. because another not go/analysis linter required types for deps.
- // Try load cached facts for it.
-
- for _, act := range lp.actions {
- if !act.loadCachedFacts() {
- // Cached facts loading failed: analyze later the action from source.
- act.needAnalyzeSource = true
- factsCacheDebugf("Loading of facts for already loaded %s failed, analyze it from source later", act)
- act.markDepsForAnalyzingSource()
- }
- }
- return nil
- }
-
- if lp.isInitial {
- // No need to load cached facts: the package will be analyzed from source
- // because it's the initial.
- return lp.loadFromSource(loadMode)
- }
-
- return lp.loadImportedPackageWithFacts(loadMode)
-}
-
-func (lp *loadingPackage) loadImportedPackageWithFacts(loadMode LoadMode) error {
- pkg := lp.pkg
-
- // Load package from export data
- if loadMode >= LoadModeTypesInfo {
- if err := lp.loadFromExportData(); err != nil {
- // We asked Go to give us up-to-date export data, yet
- // we can't load it. There must be something wrong.
- //
- // Attempt loading from source. This should fail (because
- // otherwise there would be export data); we just want to
- // get the compile errors. If loading from source succeeds
- // we discard the result, anyway. Otherwise, we'll fail
- // when trying to reload from export data later.
-
- // Otherwise, it panics because uses already existing (from exported data) types.
- pkg.Types = types.NewPackage(pkg.PkgPath, pkg.Name)
- if srcErr := lp.loadFromSource(loadMode); srcErr != nil {
- return srcErr
- }
- // Make sure this package can't be imported successfully
- pkg.Errors = append(pkg.Errors, packages.Error{
- Pos: "-",
- Msg: fmt.Sprintf("could not load export data: %s", err),
- Kind: packages.ParseError,
- })
- return fmt.Errorf("could not load export data: %w", err)
- }
- }
-
- needLoadFromSource := false
- for _, act := range lp.actions {
- if act.loadCachedFacts() {
- continue
- }
-
- // Cached facts loading failed: analyze later the action from source.
- factsCacheDebugf("Loading of facts for %s failed, analyze it from source later", act)
- act.needAnalyzeSource = true // can't be set in parallel
- needLoadFromSource = true
-
- act.markDepsForAnalyzingSource()
- }
-
- if needLoadFromSource {
- // Cached facts loading failed: analyze later the action from source. To perform
- // the analysis we need to load the package from source code.
-
- // Otherwise, it panics because uses already existing (from exported data) types.
- if loadMode >= LoadModeTypesInfo {
- pkg.Types = types.NewPackage(pkg.PkgPath, pkg.Name)
- }
- return lp.loadFromSource(loadMode)
- }
-
- return nil
-}
-
-func (lp *loadingPackage) decUse(canClearTypes bool) {
- lp.decUseMutex.Lock()
- defer lp.decUseMutex.Unlock()
-
- for _, act := range lp.actions {
- pass := act.pass
- if pass == nil {
- continue
- }
-
- pass.Files = nil
- pass.TypesInfo = nil
- pass.TypesSizes = nil
- pass.ResultOf = nil
- pass.Pkg = nil
- pass.OtherFiles = nil
- pass.AllObjectFacts = nil
- pass.AllPackageFacts = nil
- pass.ImportObjectFact = nil
- pass.ExportObjectFact = nil
- pass.ImportPackageFact = nil
- pass.ExportPackageFact = nil
- act.pass = nil
- act.deps = nil
- if act.result != nil {
- if isMemoryDebug {
- debugf("%s: decUse: nilling act result of size %d bytes", act, sizeOfValueTreeBytes(act.result))
- }
- act.result = nil
- }
- }
-
- lp.pkg.Syntax = nil
- lp.pkg.TypesInfo = nil
- lp.pkg.TypesSizes = nil
-
- // Can't set lp.pkg.Imports to nil because of loadFromExportData.visit.
-
- dependents := atomic.AddInt32(&lp.dependents, -1)
- if dependents != 0 {
- return
- }
-
- if canClearTypes {
- // canClearTypes is set to true if we can discard type
- // information after the package and its dependents have been
- // processed. This is the case when no whole program checkers (unused) are
- // being run.
- lp.pkg.Types = nil
- }
- lp.pkg = nil
-
- for _, imp := range lp.imports {
- imp.decUse(canClearTypes)
- }
- lp.imports = nil
-
- for _, act := range lp.actions {
- if !lp.isInitial {
- act.pkg = nil
- }
- act.packageFacts = nil
- act.objectFacts = nil
- }
- lp.actions = nil
-}
-
-func (lp *loadingPackage) convertError(err error) []packages.Error {
- var errs []packages.Error
- // taken from go/packages
- switch err := err.(type) {
- case packages.Error:
- // from driver
- errs = append(errs, err)
-
- case *os.PathError:
- // from parser
- errs = append(errs, packages.Error{
- Pos: err.Path + ":1",
- Msg: err.Err.Error(),
- Kind: packages.ParseError,
- })
-
- case scanner.ErrorList:
- // from parser
- for _, err := range err {
- errs = append(errs, packages.Error{
- Pos: err.Pos.String(),
- Msg: err.Msg,
- Kind: packages.ParseError,
- })
- }
-
- case types.Error:
- // from type checker
- errs = append(errs, packages.Error{
- Pos: err.Fset.Position(err.Pos).String(),
- Msg: err.Msg,
- Kind: packages.TypeError,
- })
-
- default:
- // unexpected impoverished error from parser?
- errs = append(errs, packages.Error{
- Pos: "-",
- Msg: err.Error(),
- Kind: packages.UnknownError,
- })
-
- // If you see this error message, please file a bug.
- lp.log.Warnf("Internal error: error %q (%T) without position", err, err)
- }
-
- return errs
-}
-
-func (lp *loadingPackage) String() string {
- return fmt.Sprintf("%s@%s", lp.pkg.PkgPath, lp.pkg.Name)
-}
-
-type importerFunc func(path string) (*types.Package, error)
-
-func (f importerFunc) Import(path string) (*types.Package, error) { return f(path) }
-
-func sizeOfValueTreeBytes(v any) int {
- return sizeOfReflectValueTreeBytes(reflect.ValueOf(v), map[uintptr]struct{}{})
-}
-
-func sizeOfReflectValueTreeBytes(rv reflect.Value, visitedPtrs map[uintptr]struct{}) int {
- switch rv.Kind() {
- case reflect.Ptr:
- ptrSize := int(rv.Type().Size())
- if rv.IsNil() {
- return ptrSize
- }
- ptr := rv.Pointer()
- if _, ok := visitedPtrs[ptr]; ok {
- return 0
- }
- visitedPtrs[ptr] = struct{}{}
- return ptrSize + sizeOfReflectValueTreeBytes(rv.Elem(), visitedPtrs)
- case reflect.Interface:
- if rv.IsNil() {
- return 0
- }
- return sizeOfReflectValueTreeBytes(rv.Elem(), visitedPtrs)
- case reflect.Struct:
- ret := 0
- for i := range rv.NumField() {
- ret += sizeOfReflectValueTreeBytes(rv.Field(i), visitedPtrs)
- }
- return ret
- case reflect.Slice, reflect.Array, reflect.Chan:
- return int(rv.Type().Size()) + rv.Cap()*int(rv.Type().Elem().Size())
- case reflect.Map:
- ret := 0
- for _, key := range rv.MapKeys() {
- mv := rv.MapIndex(key)
- ret += sizeOfReflectValueTreeBytes(key, visitedPtrs)
- ret += sizeOfReflectValueTreeBytes(mv, visitedPtrs)
- }
- return ret
- case reflect.String:
- return rv.Len()
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
- reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,
- reflect.Uintptr, reflect.Bool, reflect.Float32, reflect.Float64,
- reflect.Complex64, reflect.Complex128, reflect.Func, reflect.UnsafePointer:
- return int(rv.Type().Size())
- case reflect.Invalid:
- return 0
- default:
- panic("unknown rv of type " + rv.String())
- }
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runners.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runners.go
deleted file mode 100644
index a9aee03a2..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runners.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package goanalysis
-
-import (
- "fmt"
-
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis/pkgerrors"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
- "github.com/golangci/golangci-lint/pkg/timeutils"
-)
-
-type runAnalyzersConfig interface {
- getName() string
- getLinterNameForDiagnostic(*Diagnostic) string
- getAnalyzers() []*analysis.Analyzer
- useOriginalPackages() bool
- reportIssues(*linter.Context) []Issue
- getLoadMode() LoadMode
-}
-
-func runAnalyzers(cfg runAnalyzersConfig, lintCtx *linter.Context) ([]result.Issue, error) {
- log := lintCtx.Log.Child(logutils.DebugKeyGoAnalysis)
- sw := timeutils.NewStopwatch("analyzers", log)
-
- const stagesToPrint = 10
- defer sw.PrintTopStages(stagesToPrint)
-
- runner := newRunner(cfg.getName(), log, lintCtx.PkgCache, lintCtx.LoadGuard, cfg.getLoadMode(), sw)
-
- pkgs := lintCtx.Packages
- if cfg.useOriginalPackages() {
- pkgs = lintCtx.OriginalPackages
- }
-
- issues, pkgsFromCache := loadIssuesFromCache(pkgs, lintCtx, cfg.getAnalyzers())
- var pkgsToAnalyze []*packages.Package
- for _, pkg := range pkgs {
- if !pkgsFromCache[pkg] {
- pkgsToAnalyze = append(pkgsToAnalyze, pkg)
- }
- }
-
- diags, errs, passToPkg := runner.run(cfg.getAnalyzers(), pkgsToAnalyze)
-
- defer func() {
- if len(errs) == 0 {
- // If we try to save to cache even if we have compilation errors
- // we won't see them on repeated runs.
- saveIssuesToCache(pkgs, pkgsFromCache, issues, lintCtx, cfg.getAnalyzers())
- }
- }()
-
- buildAllIssues := func() []result.Issue {
- var retIssues []result.Issue
- reportedIssues := cfg.reportIssues(lintCtx)
- for i := range reportedIssues {
- issue := &reportedIssues[i].Issue
- if issue.Pkg == nil {
- issue.Pkg = passToPkg[reportedIssues[i].Pass]
- }
- retIssues = append(retIssues, *issue)
- }
- retIssues = append(retIssues, buildIssues(diags, cfg.getLinterNameForDiagnostic)...)
- return retIssues
- }
-
- errIssues, err := pkgerrors.BuildIssuesFromIllTypedError(errs, lintCtx)
- if err != nil {
- return nil, err
- }
-
- issues = append(issues, errIssues...)
- issues = append(issues, buildAllIssues()...)
-
- return issues, nil
-}
-
-func buildIssues(diags []Diagnostic, linterNameBuilder func(diag *Diagnostic) string) []result.Issue {
- var issues []result.Issue
- for i := range diags {
- diag := &diags[i]
- linterName := linterNameBuilder(diag)
-
- var text string
- if diag.Analyzer.Name == linterName {
- text = diag.Message
- } else {
- text = fmt.Sprintf("%s: %s", diag.Analyzer.Name, diag.Message)
- }
-
- issues = append(issues, result.Issue{
- FromLinter: linterName,
- Text: text,
- Pos: diag.Position,
- Pkg: diag.Pkg,
- })
-
- if len(diag.Related) > 0 {
- for _, info := range diag.Related {
- issues = append(issues, result.Issue{
- FromLinter: linterName,
- Text: fmt.Sprintf("%s(related information): %s", diag.Analyzer.Name, info.Message),
- Pos: diag.Pkg.Fset.Position(info.Pos),
- Pkg: diag.Pkg,
- })
- }
- }
- }
- return issues
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runners_cache.go b/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runners_cache.go
deleted file mode 100644
index 8c244688b..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goanalysis/runners_cache.go
+++ /dev/null
@@ -1,172 +0,0 @@
-package goanalysis
-
-import (
- "runtime"
- "sort"
- "strings"
- "sync"
- "sync/atomic"
- "time"
-
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/internal/cache"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-func saveIssuesToCache(allPkgs []*packages.Package, pkgsFromCache map[*packages.Package]bool,
- issues []result.Issue, lintCtx *linter.Context, analyzers []*analysis.Analyzer,
-) {
- startedAt := time.Now()
- perPkgIssues := map[*packages.Package][]result.Issue{}
- for ind := range issues {
- i := &issues[ind]
- perPkgIssues[i.Pkg] = append(perPkgIssues[i.Pkg], *i)
- }
-
- var savedIssuesCount int64 = 0
- lintResKey := getIssuesCacheKey(analyzers)
-
- workerCount := runtime.GOMAXPROCS(-1)
- var wg sync.WaitGroup
- wg.Add(workerCount)
-
- pkgCh := make(chan *packages.Package, len(allPkgs))
- for i := 0; i < workerCount; i++ {
- go func() {
- defer wg.Done()
- for pkg := range pkgCh {
- pkgIssues := perPkgIssues[pkg]
- encodedIssues := make([]EncodingIssue, 0, len(pkgIssues))
- for ind := range pkgIssues {
- i := &pkgIssues[ind]
- encodedIssues = append(encodedIssues, EncodingIssue{
- FromLinter: i.FromLinter,
- Text: i.Text,
- Severity: i.Severity,
- Pos: i.Pos,
- LineRange: i.LineRange,
- Replacement: i.Replacement,
- ExpectNoLint: i.ExpectNoLint,
- ExpectedNoLintLinter: i.ExpectedNoLintLinter,
- })
- }
-
- atomic.AddInt64(&savedIssuesCount, int64(len(encodedIssues)))
- if err := lintCtx.PkgCache.Put(pkg, cache.HashModeNeedAllDeps, lintResKey, encodedIssues); err != nil {
- lintCtx.Log.Infof("Failed to save package %s issues (%d) to cache: %s", pkg, len(pkgIssues), err)
- } else {
- issuesCacheDebugf("Saved package %s issues (%d) to cache", pkg, len(pkgIssues))
- }
- }
- }()
- }
-
- for _, pkg := range allPkgs {
- if pkgsFromCache[pkg] {
- continue
- }
-
- pkgCh <- pkg
- }
- close(pkgCh)
- wg.Wait()
-
- lintCtx.PkgCache.Close()
-
- issuesCacheDebugf("Saved %d issues from %d packages to cache in %s", savedIssuesCount, len(allPkgs), time.Since(startedAt))
-}
-
-func loadIssuesFromCache(pkgs []*packages.Package, lintCtx *linter.Context,
- analyzers []*analysis.Analyzer,
-) (issuesFromCache []result.Issue, pkgsFromCache map[*packages.Package]bool) {
- startedAt := time.Now()
-
- lintResKey := getIssuesCacheKey(analyzers)
- type cacheRes struct {
- issues []result.Issue
- loadErr error
- }
- pkgToCacheRes := make(map[*packages.Package]*cacheRes, len(pkgs))
- for _, pkg := range pkgs {
- pkgToCacheRes[pkg] = &cacheRes{}
- }
-
- workerCount := runtime.GOMAXPROCS(-1)
- var wg sync.WaitGroup
- wg.Add(workerCount)
-
- pkgCh := make(chan *packages.Package, len(pkgs))
- for range workerCount {
- go func() {
- defer wg.Done()
- for pkg := range pkgCh {
- var pkgIssues []EncodingIssue
- err := lintCtx.PkgCache.Get(pkg, cache.HashModeNeedAllDeps, lintResKey, &pkgIssues)
- cacheRes := pkgToCacheRes[pkg]
- cacheRes.loadErr = err
- if err != nil {
- continue
- }
- if len(pkgIssues) == 0 {
- continue
- }
-
- issues := make([]result.Issue, 0, len(pkgIssues))
- for i := range pkgIssues {
- issue := &pkgIssues[i]
- issues = append(issues, result.Issue{
- FromLinter: issue.FromLinter,
- Text: issue.Text,
- Severity: issue.Severity,
- Pos: issue.Pos,
- LineRange: issue.LineRange,
- Replacement: issue.Replacement,
- Pkg: pkg,
- ExpectNoLint: issue.ExpectNoLint,
- ExpectedNoLintLinter: issue.ExpectedNoLintLinter,
- })
- }
- cacheRes.issues = issues
- }
- }()
- }
-
- for _, pkg := range pkgs {
- pkgCh <- pkg
- }
- close(pkgCh)
- wg.Wait()
-
- loadedIssuesCount := 0
- pkgsFromCache = map[*packages.Package]bool{}
- for pkg, cacheRes := range pkgToCacheRes {
- if cacheRes.loadErr == nil {
- loadedIssuesCount += len(cacheRes.issues)
- pkgsFromCache[pkg] = true
- issuesFromCache = append(issuesFromCache, cacheRes.issues...)
- issuesCacheDebugf("Loaded package %s issues (%d) from cache", pkg, len(cacheRes.issues))
- } else {
- issuesCacheDebugf("Didn't load package %s issues from cache: %s", pkg, cacheRes.loadErr)
- }
- }
- issuesCacheDebugf("Loaded %d issues from cache in %s, analyzing %d/%d packages",
- loadedIssuesCount, time.Since(startedAt), len(pkgs)-len(pkgsFromCache), len(pkgs))
- return issuesFromCache, pkgsFromCache
-}
-
-func getIssuesCacheKey(analyzers []*analysis.Analyzer) string {
- return "lint/result:" + analyzersHashID(analyzers)
-}
-
-func analyzersHashID(analyzers []*analysis.Analyzer) string {
- names := make([]string, 0, len(analyzers))
- for _, a := range analyzers {
- names = append(names, a.Name)
- }
-
- sort.Strings(names)
- return strings.Join(names, ",")
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/asasalint/asasalint.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/asasalint/asasalint.go
deleted file mode 100644
index 653a2d514..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/asasalint/asasalint.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package asasalint
-
-import (
- "github.com/alingse/asasalint"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
-)
-
-func New(setting *config.AsasalintSettings) *goanalysis.Linter {
- cfg := asasalint.LinterSetting{}
- if setting != nil {
- cfg.Exclude = setting.Exclude
- cfg.NoBuiltinExclusions = !setting.UseBuiltinExclusions
- cfg.IgnoreTest = setting.IgnoreTest
- }
-
- a, err := asasalint.NewAnalyzer(cfg)
- if err != nil {
- internal.LinterLogger.Fatalf("asasalint: create analyzer: %v", err)
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/asciicheck/asciicheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/asciicheck/asciicheck.go
deleted file mode 100644
index 675dfc478..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/asciicheck/asciicheck.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package asciicheck
-
-import (
- "github.com/tdakkota/asciicheck"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := asciicheck.NewAnalyzer()
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/bidichk/bidichk.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/bidichk/bidichk.go
deleted file mode 100644
index 4ced901e8..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/bidichk/bidichk.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package bidichk
-
-import (
- "strings"
-
- "github.com/breml/bidichk/pkg/bidichk"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(cfg *config.BiDiChkSettings) *goanalysis.Linter {
- a := bidichk.NewAnalyzer()
-
- cfgMap := map[string]map[string]any{}
- if cfg != nil {
- var opts []string
-
- if cfg.LeftToRightEmbedding {
- opts = append(opts, "LEFT-TO-RIGHT-EMBEDDING")
- }
- if cfg.RightToLeftEmbedding {
- opts = append(opts, "RIGHT-TO-LEFT-EMBEDDING")
- }
- if cfg.PopDirectionalFormatting {
- opts = append(opts, "POP-DIRECTIONAL-FORMATTING")
- }
- if cfg.LeftToRightOverride {
- opts = append(opts, "LEFT-TO-RIGHT-OVERRIDE")
- }
- if cfg.RightToLeftOverride {
- opts = append(opts, "RIGHT-TO-LEFT-OVERRIDE")
- }
- if cfg.LeftToRightIsolate {
- opts = append(opts, "LEFT-TO-RIGHT-ISOLATE")
- }
- if cfg.RightToLeftIsolate {
- opts = append(opts, "RIGHT-TO-LEFT-ISOLATE")
- }
- if cfg.FirstStrongIsolate {
- opts = append(opts, "FIRST-STRONG-ISOLATE")
- }
- if cfg.PopDirectionalIsolate {
- opts = append(opts, "POP-DIRECTIONAL-ISOLATE")
- }
-
- cfgMap[a.Name] = map[string]any{
- "disallowed-runes": strings.Join(opts, ","),
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- "Checks for dangerous unicode character sequences",
- []*analysis.Analyzer{a},
- cfgMap,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/bodyclose/bodyclose.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/bodyclose/bodyclose.go
deleted file mode 100644
index f39814edc..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/bodyclose/bodyclose.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package bodyclose
-
-import (
- "github.com/timakin/bodyclose/passes/bodyclose"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := bodyclose.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- "checks whether HTTP response body is closed successfully",
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/canonicalheader/canonicalheader.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/canonicalheader/canonicalheader.go
deleted file mode 100644
index d721916a4..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/canonicalheader/canonicalheader.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package canonicalheader
-
-import (
- "github.com/lasiar/canonicalheader"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := canonicalheader.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/containedctx/containedctx.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/containedctx/containedctx.go
deleted file mode 100644
index 6fdb4ea6e..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/containedctx/containedctx.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package containedctx
-
-import (
- "github.com/sivchari/containedctx"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := containedctx.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/contextcheck/contextcheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/contextcheck/contextcheck.go
deleted file mode 100644
index a34c518b2..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/contextcheck/contextcheck.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package contextcheck
-
-import (
- "github.com/kkHAIKE/contextcheck"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
-)
-
-func New() *goanalysis.Linter {
- analyzer := contextcheck.NewAnalyzer(contextcheck.Configuration{})
-
- return goanalysis.NewLinter(
- analyzer.Name,
- analyzer.Doc,
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- analyzer.Run = contextcheck.NewRun(lintCtx.Packages, false)
- }).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/copyloopvar/copyloopvar.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/copyloopvar/copyloopvar.go
deleted file mode 100644
index adb4ee728..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/copyloopvar/copyloopvar.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package copyloopvar
-
-import (
- "github.com/karamaru-alpha/copyloopvar"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.CopyLoopVarSettings) *goanalysis.Linter {
- a := copyloopvar.NewAnalyzer()
-
- var cfg map[string]map[string]any
- if settings != nil {
- cfg = map[string]map[string]any{
- a.Name: {
- "check-alias": settings.CheckAlias,
- },
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/cyclop/cyclop.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/cyclop/cyclop.go
deleted file mode 100644
index 13baba5a6..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/cyclop/cyclop.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package cyclop
-
-import (
- "github.com/bkielbasa/cyclop/pkg/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.Cyclop) *goanalysis.Linter {
- a := analyzer.NewAnalyzer()
-
- var cfg map[string]map[string]any
- if settings != nil {
- d := map[string]any{
- "skipTests": settings.SkipTests,
- }
-
- if settings.MaxComplexity != 0 {
- d["maxComplexity"] = settings.MaxComplexity
- }
-
- if settings.PackageAverage != 0 {
- d["packageAverage"] = settings.PackageAverage
- }
-
- cfg = map[string]map[string]any{a.Name: d}
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/decorder/decorder.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/decorder/decorder.go
deleted file mode 100644
index a05f6a325..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/decorder/decorder.go
+++ /dev/null
@@ -1,44 +0,0 @@
-package decorder
-
-import (
- "strings"
-
- "gitlab.com/bosi/decorder"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.DecorderSettings) *goanalysis.Linter {
- a := decorder.Analyzer
-
- // disable all rules/checks by default
- cfg := map[string]any{
- "ignore-underscore-vars": false,
- "disable-dec-num-check": true,
- "disable-type-dec-num-check": false,
- "disable-const-dec-num-check": false,
- "disable-var-dec-num-check": false,
- "disable-dec-order-check": true,
- "disable-init-func-first-check": true,
- }
-
- if settings != nil {
- cfg["dec-order"] = strings.Join(settings.DecOrder, ",")
- cfg["ignore-underscore-vars"] = settings.IgnoreUnderscoreVars
- cfg["disable-dec-num-check"] = settings.DisableDecNumCheck
- cfg["disable-type-dec-num-check"] = settings.DisableTypeDecNumCheck
- cfg["disable-const-dec-num-check"] = settings.DisableConstDecNumCheck
- cfg["disable-var-dec-num-check"] = settings.DisableVarDecNumCheck
- cfg["disable-dec-order-check"] = settings.DisableDecOrderCheck
- cfg["disable-init-func-first-check"] = settings.DisableInitFuncFirstCheck
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- map[string]map[string]any{a.Name: cfg},
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/depguard/depguard.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/depguard/depguard.go
deleted file mode 100644
index d2aedf252..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/depguard/depguard.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package depguard
-
-import (
- "github.com/OpenPeeDeeP/depguard/v2"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
-)
-
-func New(settings *config.DepGuardSettings) *goanalysis.Linter {
- conf := depguard.LinterSettings{}
-
- if settings != nil {
- for s, rule := range settings.Rules {
- list := &depguard.List{
- ListMode: rule.ListMode,
- Files: rule.Files,
- Allow: rule.Allow,
- }
-
- // because of bug with Viper parsing (split on dot) we use a list of struct instead of a map.
- // https://github.com/spf13/viper/issues/324
- // https://github.com/golangci/golangci-lint/issues/3749#issuecomment-1492536630
-
- deny := map[string]string{}
- for _, r := range rule.Deny {
- deny[r.Pkg] = r.Desc
- }
- list.Deny = deny
-
- conf[s] = list
- }
- }
-
- a := depguard.NewUncompiledAnalyzer(&conf)
-
- return goanalysis.NewLinter(
- a.Analyzer.Name,
- a.Analyzer.Doc,
- []*analysis.Analyzer{a.Analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- err := a.Compile()
- if err != nil {
- lintCtx.Log.Errorf("create analyzer: %v", err)
- }
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/dogsled/dogsled.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/dogsled/dogsled.go
deleted file mode 100644
index 49108f4f1..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/dogsled/dogsled.go
+++ /dev/null
@@ -1,110 +0,0 @@
-package dogsled
-
-import (
- "fmt"
- "go/ast"
- "go/token"
- "sync"
-
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "dogsled"
-
-func New(settings *config.DogsledSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues := runDogsled(pass, settings)
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Checks assignments with too many blank identifiers (e.g. x, _, _, _, := f())",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runDogsled(pass *analysis.Pass, settings *config.DogsledSettings) []goanalysis.Issue {
- var reports []goanalysis.Issue
- for _, f := range pass.Files {
- v := &returnsVisitor{
- maxBlanks: settings.MaxBlankIdentifiers,
- f: pass.Fset,
- }
-
- ast.Walk(v, f)
-
- for i := range v.issues {
- reports = append(reports, goanalysis.NewIssue(&v.issues[i], pass))
- }
- }
-
- return reports
-}
-
-type returnsVisitor struct {
- f *token.FileSet
- maxBlanks int
- issues []result.Issue
-}
-
-func (v *returnsVisitor) Visit(node ast.Node) ast.Visitor {
- funcDecl, ok := node.(*ast.FuncDecl)
- if !ok {
- return v
- }
- if funcDecl.Body == nil {
- return v
- }
-
- for _, expr := range funcDecl.Body.List {
- assgnStmt, ok := expr.(*ast.AssignStmt)
- if !ok {
- continue
- }
-
- numBlank := 0
- for _, left := range assgnStmt.Lhs {
- ident, ok := left.(*ast.Ident)
- if !ok {
- continue
- }
- if ident.Name == "_" {
- numBlank++
- }
- }
-
- if numBlank > v.maxBlanks {
- v.issues = append(v.issues, result.Issue{
- FromLinter: linterName,
- Text: fmt.Sprintf("declaration has %v blank identifiers", numBlank),
- Pos: v.f.Position(assgnStmt.Pos()),
- })
- }
- }
- return v
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/dupl/dupl.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/dupl/dupl.go
deleted file mode 100644
index 7abcb4c4f..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/dupl/dupl.go
+++ /dev/null
@@ -1,96 +0,0 @@
-package dupl
-
-import (
- "fmt"
- "go/token"
- "sync"
-
- duplAPI "github.com/golangci/dupl"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "dupl"
-
-func New(settings *config.DuplSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues, err := runDupl(pass, settings)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Tool for code clone detection",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runDupl(pass *analysis.Pass, settings *config.DuplSettings) ([]goanalysis.Issue, error) {
- fileNames := internal.GetFileNames(pass)
-
- issues, err := duplAPI.Run(fileNames, settings.Threshold)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- res := make([]goanalysis.Issue, 0, len(issues))
-
- for _, i := range issues {
- toFilename, err := fsutils.ShortestRelPath(i.To.Filename(), "")
- if err != nil {
- return nil, fmt.Errorf("failed to get shortest rel path for %q: %w", i.To.Filename(), err)
- }
-
- dupl := fmt.Sprintf("%s:%d-%d", toFilename, i.To.LineStart(), i.To.LineEnd())
- text := fmt.Sprintf("%d-%d lines are duplicate of %s",
- i.From.LineStart(), i.From.LineEnd(),
- internal.FormatCode(dupl, nil))
-
- res = append(res, goanalysis.NewIssue(&result.Issue{
- Pos: token.Position{
- Filename: i.From.Filename(),
- Line: i.From.LineStart(),
- },
- LineRange: &result.Range{
- From: i.From.LineStart(),
- To: i.From.LineEnd(),
- },
- Text: text,
- FromLinter: linterName,
- }, pass))
- }
-
- return res, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/dupword/dupword.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/dupword/dupword.go
deleted file mode 100644
index bba4fc9e1..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/dupword/dupword.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package dupword
-
-import (
- "strings"
-
- "github.com/Abirdcfly/dupword"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(setting *config.DupWordSettings) *goanalysis.Linter {
- a := dupword.NewAnalyzer()
-
- cfgMap := map[string]map[string]any{}
- if setting != nil {
- cfgMap[a.Name] = map[string]any{
- "keyword": strings.Join(setting.Keywords, ","),
- "ignore": strings.Join(setting.Ignore, ","),
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- "checks for duplicate words in the source code",
- []*analysis.Analyzer{a},
- cfgMap,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/durationcheck/durationcheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/durationcheck/durationcheck.go
deleted file mode 100644
index 88f22c27c..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/durationcheck/durationcheck.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package durationcheck
-
-import (
- "github.com/charithe/durationcheck"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := durationcheck.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/err113/err113.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/err113/err113.go
deleted file mode 100644
index 2600128be..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/err113/err113.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package err113
-
-import (
- "github.com/Djarvur/go-err113"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := err113.NewAnalyzer()
-
- return goanalysis.NewLinter(
- a.Name,
- "Go linter to check the errors handling expressions",
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/errcheck/errcheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/errcheck/errcheck.go
deleted file mode 100644
index 9a8a2aa87..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/errcheck/errcheck.go
+++ /dev/null
@@ -1,271 +0,0 @@
-package errcheck
-
-import (
- "bufio"
- "fmt"
- "os"
- "os/user"
- "path/filepath"
- "regexp"
- "strings"
- "sync"
-
- "github.com/kisielk/errcheck/errcheck"
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "errcheck"
-
-func New(settings *config.ErrcheckSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: goanalysis.DummyRun,
- }
-
- return goanalysis.NewLinter(
- linterName,
- "errcheck is a program for checking for unchecked errors in Go code. "+
- "These unchecked errors can be critical bugs in some cases",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- // copied from errcheck
- checker, err := getChecker(settings)
- if err != nil {
- lintCtx.Log.Errorf("failed to get checker: %v", err)
- return
- }
-
- checker.Tags = lintCtx.Cfg.Run.BuildTags
-
- analyzer.Run = func(pass *analysis.Pass) (any, error) {
- issues := runErrCheck(lintCtx, pass, checker)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- }
- }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-func runErrCheck(lintCtx *linter.Context, pass *analysis.Pass, checker *errcheck.Checker) []goanalysis.Issue {
- pkg := &packages.Package{
- Fset: pass.Fset,
- Syntax: pass.Files,
- Types: pass.Pkg,
- TypesInfo: pass.TypesInfo,
- }
-
- lintIssues := checker.CheckPackage(pkg).Unique()
- if len(lintIssues.UncheckedErrors) == 0 {
- return nil
- }
-
- issues := make([]goanalysis.Issue, len(lintIssues.UncheckedErrors))
-
- for i, err := range lintIssues.UncheckedErrors {
- text := "Error return value is not checked"
-
- if err.FuncName != "" {
- code := err.SelectorName
- if err.SelectorName == "" {
- code = err.FuncName
- }
-
- text = fmt.Sprintf("Error return value of %s is not checked", internal.FormatCode(code, lintCtx.Cfg))
- }
-
- issues[i] = goanalysis.NewIssue(
- &result.Issue{
- FromLinter: linterName,
- Text: text,
- Pos: err.Pos,
- },
- pass,
- )
- }
-
- return issues
-}
-
-// parseIgnoreConfig was taken from errcheck in order to keep the API identical.
-// https://github.com/kisielk/errcheck/blob/1787c4bee836470bf45018cfbc783650db3c6501/main.go#L25-L60
-func parseIgnoreConfig(s string) (map[string]*regexp.Regexp, error) {
- if s == "" {
- return nil, nil
- }
-
- cfg := map[string]*regexp.Regexp{}
-
- for _, pair := range strings.Split(s, ",") {
- colonIndex := strings.Index(pair, ":")
- var pkg, re string
- if colonIndex == -1 {
- pkg = ""
- re = pair
- } else {
- pkg = pair[:colonIndex]
- re = pair[colonIndex+1:]
- }
- regex, err := regexp.Compile(re)
- if err != nil {
- return nil, err
- }
- cfg[pkg] = regex
- }
-
- return cfg, nil
-}
-
-func getChecker(errCfg *config.ErrcheckSettings) (*errcheck.Checker, error) {
- ignoreConfig, err := parseIgnoreConfig(errCfg.Ignore)
- if err != nil {
- return nil, fmt.Errorf("failed to parse 'ignore' directive: %w", err)
- }
-
- checker := errcheck.Checker{
- Exclusions: errcheck.Exclusions{
- BlankAssignments: !errCfg.CheckAssignToBlank,
- TypeAssertions: !errCfg.CheckTypeAssertions,
- SymbolRegexpsByPackage: map[string]*regexp.Regexp{},
- },
- }
-
- if !errCfg.DisableDefaultExclusions {
- checker.Exclusions.Symbols = append(checker.Exclusions.Symbols, errcheck.DefaultExcludedSymbols...)
- }
-
- for pkg, re := range ignoreConfig {
- checker.Exclusions.SymbolRegexpsByPackage[pkg] = re
- }
-
- if errCfg.Exclude != "" {
- exclude, err := readExcludeFile(errCfg.Exclude)
- if err != nil {
- return nil, err
- }
-
- checker.Exclusions.Symbols = append(checker.Exclusions.Symbols, exclude...)
- }
-
- checker.Exclusions.Symbols = append(checker.Exclusions.Symbols, errCfg.ExcludeFunctions...)
-
- return &checker, nil
-}
-
-func getFirstPathArg() string {
- args := os.Args
-
- // skip all args ([golangci-lint, run/linters]) before files/dirs list
- for len(args) != 0 {
- if args[0] == "run" {
- args = args[1:]
- break
- }
-
- args = args[1:]
- }
-
- // find first file/dir arg
- firstArg := "./..."
- for _, arg := range args {
- if !strings.HasPrefix(arg, "-") {
- firstArg = arg
- break
- }
- }
-
- return firstArg
-}
-
-func setupConfigFileSearch(name string) []string {
- if strings.HasPrefix(name, "~") {
- if u, err := user.Current(); err == nil {
- name = strings.Replace(name, "~", u.HomeDir, 1)
- }
- }
-
- if filepath.IsAbs(name) {
- return []string{name}
- }
-
- firstArg := getFirstPathArg()
-
- absStartPath, err := filepath.Abs(firstArg)
- if err != nil {
- absStartPath = filepath.Clean(firstArg)
- }
-
- // start from it
- var curDir string
- if fsutils.IsDir(absStartPath) {
- curDir = absStartPath
- } else {
- curDir = filepath.Dir(absStartPath)
- }
-
- // find all dirs from it up to the root
- configSearchPaths := []string{filepath.Join(".", name)}
- for {
- configSearchPaths = append(configSearchPaths, filepath.Join(curDir, name))
- newCurDir := filepath.Dir(curDir)
- if curDir == newCurDir || newCurDir == "" {
- break
- }
- curDir = newCurDir
- }
-
- return configSearchPaths
-}
-
-func readExcludeFile(name string) ([]string, error) {
- var err error
- var fh *os.File
-
- for _, path := range setupConfigFileSearch(name) {
- if fh, err = os.Open(path); err == nil {
- break
- }
- }
-
- if fh == nil {
- return nil, fmt.Errorf("failed reading exclude file: %s: %w", name, err)
- }
- defer func() { _ = fh.Close() }()
-
- scanner := bufio.NewScanner(fh)
-
- var excludes []string
- for scanner.Scan() {
- excludes = append(excludes, scanner.Text())
- }
-
- if err := scanner.Err(); err != nil {
- return nil, fmt.Errorf("failed scanning file: %s: %w", name, err)
- }
-
- return excludes, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/errchkjson/errchkjson.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/errchkjson/errchkjson.go
deleted file mode 100644
index 8389a750c..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/errchkjson/errchkjson.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package errchkjson
-
-import (
- "github.com/breml/errchkjson"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(cfg *config.ErrChkJSONSettings) *goanalysis.Linter {
- a := errchkjson.NewAnalyzer()
-
- cfgMap := map[string]map[string]any{}
- cfgMap[a.Name] = map[string]any{
- "omit-safe": true,
- }
- if cfg != nil {
- cfgMap[a.Name] = map[string]any{
- "omit-safe": !cfg.CheckErrorFreeEncoding,
- "report-no-exported": cfg.ReportNoExported,
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfgMap,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/errname/errname.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/errname/errname.go
deleted file mode 100644
index f868854c1..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/errname/errname.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package errname
-
-import (
- "github.com/Antonboom/errname/pkg/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := analyzer.New()
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/errorlint/errorlint.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/errorlint/errorlint.go
deleted file mode 100644
index 86db8552d..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/errorlint/errorlint.go
+++ /dev/null
@@ -1,54 +0,0 @@
-package errorlint
-
-import (
- "github.com/polyfloyd/go-errorlint/errorlint"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(cfg *config.ErrorLintSettings) *goanalysis.Linter {
- var opts []errorlint.Option
-
- if cfg != nil {
- ae := toAllowPairs(cfg.AllowedErrors)
- if len(ae) > 0 {
- opts = append(opts, errorlint.WithAllowedErrors(ae))
- }
-
- aew := toAllowPairs(cfg.AllowedErrorsWildcard)
- if len(aew) > 0 {
- opts = append(opts, errorlint.WithAllowedWildcard(aew))
- }
- }
-
- a := errorlint.NewAnalyzer(opts...)
-
- cfgMap := map[string]map[string]any{}
-
- if cfg != nil {
- cfgMap[a.Name] = map[string]any{
- "errorf": cfg.Errorf,
- "errorf-multi": cfg.ErrorfMulti,
- "asserts": cfg.Asserts,
- "comparison": cfg.Comparison,
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- "errorlint is a linter for that can be used to find code "+
- "that will cause problems with the error wrapping scheme introduced in Go 1.13.",
- []*analysis.Analyzer{a},
- cfgMap,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-func toAllowPairs(data []config.ErrorLintAllowPair) []errorlint.AllowPair {
- var pairs []errorlint.AllowPair
- for _, allowedError := range data {
- pairs = append(pairs, errorlint.AllowPair(allowedError))
- }
- return pairs
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/exhaustive/exhaustive.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/exhaustive/exhaustive.go
deleted file mode 100644
index 9249efb69..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/exhaustive/exhaustive.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package exhaustive
-
-import (
- "github.com/nishanths/exhaustive"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.ExhaustiveSettings) *goanalysis.Linter {
- a := exhaustive.Analyzer
-
- var cfg map[string]map[string]any
- if settings != nil {
- cfg = map[string]map[string]any{
- a.Name: {
- exhaustive.CheckFlag: settings.Check,
- exhaustive.CheckGeneratedFlag: settings.CheckGenerated,
- exhaustive.DefaultSignifiesExhaustiveFlag: settings.DefaultSignifiesExhaustive,
- exhaustive.IgnoreEnumMembersFlag: settings.IgnoreEnumMembers,
- exhaustive.IgnoreEnumTypesFlag: settings.IgnoreEnumTypes,
- exhaustive.PackageScopeOnlyFlag: settings.PackageScopeOnly,
- exhaustive.ExplicitExhaustiveMapFlag: settings.ExplicitExhaustiveMap,
- exhaustive.ExplicitExhaustiveSwitchFlag: settings.ExplicitExhaustiveSwitch,
- exhaustive.DefaultCaseRequiredFlag: settings.DefaultCaseRequired,
- },
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/exhaustruct/exhaustruct.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/exhaustruct/exhaustruct.go
deleted file mode 100644
index 53ad87154..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/exhaustruct/exhaustruct.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package exhaustruct
-
-import (
- "github.com/GaijinEntertainment/go-exhaustruct/v3/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
-)
-
-func New(settings *config.ExhaustructSettings) *goanalysis.Linter {
- var include, exclude []string
- if settings != nil {
- include = settings.Include
- exclude = settings.Exclude
- }
-
- a, err := analyzer.NewAnalyzer(include, exclude)
- if err != nil {
- internal.LinterLogger.Fatalf("exhaustruct configuration: %v", err)
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/exportloopref/exportloopref.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/exportloopref/exportloopref.go
deleted file mode 100644
index e232f8045..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/exportloopref/exportloopref.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package exportloopref
-
-import (
- "github.com/kyoh86/exportloopref"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := exportloopref.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/fatcontext/fatcontext.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/fatcontext/fatcontext.go
deleted file mode 100644
index 378025a8c..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/fatcontext/fatcontext.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package fatcontext
-
-import (
- "github.com/Crocmagnon/fatcontext/pkg/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := analyzer.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/forbidigo/forbidigo.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/forbidigo/forbidigo.go
deleted file mode 100644
index 3572b60c2..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/forbidigo/forbidigo.go
+++ /dev/null
@@ -1,103 +0,0 @@
-package forbidigo
-
-import (
- "fmt"
- "sync"
-
- "github.com/ashanbrown/forbidigo/forbidigo"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "forbidigo"
-
-func New(settings *config.ForbidigoSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues, err := runForbidigo(pass, settings)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
- return nil, nil
- },
- }
-
- // Without AnalyzeTypes, LoadModeSyntax is enough.
- // But we cannot make this depend on the settings and have to mirror the mode chosen in GetAllSupportedLinterConfigs,
- // therefore we have to use LoadModeTypesInfo in all cases.
- return goanalysis.NewLinter(
- linterName,
- "Forbids identifiers",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-func runForbidigo(pass *analysis.Pass, settings *config.ForbidigoSettings) ([]goanalysis.Issue, error) {
- options := []forbidigo.Option{
- forbidigo.OptionExcludeGodocExamples(settings.ExcludeGodocExamples),
- // disable "//permit" directives so only "//nolint" directives matters within golangci-lint
- forbidigo.OptionIgnorePermitDirectives(true),
- forbidigo.OptionAnalyzeTypes(settings.AnalyzeTypes),
- }
-
- // Convert patterns back to strings because that is what NewLinter accepts.
- var patterns []string
- for _, pattern := range settings.Forbid {
- buffer, err := pattern.MarshalString()
- if err != nil {
- return nil, err
- }
- patterns = append(patterns, string(buffer))
- }
-
- forbid, err := forbidigo.NewLinter(patterns, options...)
- if err != nil {
- return nil, fmt.Errorf("failed to create linter %q: %w", linterName, err)
- }
-
- var issues []goanalysis.Issue
- for _, file := range pass.Files {
- runConfig := forbidigo.RunConfig{
- Fset: pass.Fset,
- DebugLog: logutils.Debug(logutils.DebugKeyForbidigo),
- }
- if settings != nil && settings.AnalyzeTypes {
- runConfig.TypesInfo = pass.TypesInfo
- }
- hints, err := forbid.RunWithConfig(runConfig, file)
- if err != nil {
- return nil, fmt.Errorf("forbidigo linter failed on file %q: %w", file.Name.String(), err)
- }
-
- for _, hint := range hints {
- issues = append(issues, goanalysis.NewIssue(&result.Issue{
- Pos: hint.Position(),
- Text: hint.Details(),
- FromLinter: linterName,
- }, pass))
- }
- }
-
- return issues, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/forcetypeassert/forcetypeassert.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/forcetypeassert/forcetypeassert.go
deleted file mode 100644
index 741b57cea..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/forcetypeassert/forcetypeassert.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package forcetypeassert
-
-import (
- "github.com/gostaticanalysis/forcetypeassert"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := forcetypeassert.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- "finds forced type assertions",
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/funlen/funlen.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/funlen/funlen.go
deleted file mode 100644
index e43339394..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/funlen/funlen.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package funlen
-
-import (
- "go/token"
- "strings"
- "sync"
-
- "github.com/ultraware/funlen"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "funlen"
-
-func New(settings *config.FunlenSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues := runFunlen(pass, settings)
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Tool for detection of long functions",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runFunlen(pass *analysis.Pass, settings *config.FunlenSettings) []goanalysis.Issue {
- var lintIssues []funlen.Message
- for _, file := range pass.Files {
- fileIssues := funlen.Run(file, pass.Fset, settings.Lines, settings.Statements, settings.IgnoreComments)
- lintIssues = append(lintIssues, fileIssues...)
- }
-
- if len(lintIssues) == 0 {
- return nil
- }
-
- issues := make([]goanalysis.Issue, len(lintIssues))
- for k, i := range lintIssues {
- issues[k] = goanalysis.NewIssue(&result.Issue{
- Pos: token.Position{
- Filename: i.Pos.Filename,
- Line: i.Pos.Line,
- },
- Text: strings.TrimRight(i.Message, "\n"),
- FromLinter: linterName,
- }, pass)
- }
-
- return issues
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gci/gci.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gci/gci.go
deleted file mode 100644
index a9afb6c89..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gci/gci.go
+++ /dev/null
@@ -1,250 +0,0 @@
-package gci
-
-import (
- "fmt"
- "sort"
- "strings"
- "sync"
-
- gcicfg "github.com/daixiang0/gci/pkg/config"
- "github.com/daixiang0/gci/pkg/gci"
- "github.com/daixiang0/gci/pkg/io"
- "github.com/daixiang0/gci/pkg/log"
- "github.com/daixiang0/gci/pkg/section"
- "github.com/golangci/modinfo"
- "github.com/hexops/gotextdiff"
- "github.com/hexops/gotextdiff/myers"
- "github.com/hexops/gotextdiff/span"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
-)
-
-const linterName = "gci"
-
-func New(settings *config.GciSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: goanalysis.DummyRun,
- Requires: []*analysis.Analyzer{
- modinfo.Analyzer,
- },
- }
-
- var cfg *gcicfg.Config
- if settings != nil {
- rawCfg := gcicfg.YamlConfig{
- Cfg: gcicfg.BoolConfig{
- SkipGenerated: settings.SkipGenerated,
- CustomOrder: settings.CustomOrder,
- NoLexOrder: settings.NoLexOrder,
- },
- SectionStrings: settings.Sections,
- }
-
- if settings.LocalPrefixes != "" {
- prefix := []string{"standard", "default", fmt.Sprintf("prefix(%s)", settings.LocalPrefixes)}
- rawCfg.SectionStrings = prefix
- }
-
- var err error
- cfg, err = YamlConfig{origin: rawCfg}.Parse()
- if err != nil {
- internal.LinterLogger.Fatalf("gci: configuration parsing: %v", err)
- }
- }
-
- var lock sync.Mutex
-
- return goanalysis.NewLinter(
- linterName,
- "Gci controls Go package import order and makes it always deterministic.",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- analyzer.Run = func(pass *analysis.Pass) (any, error) {
- var err error
- cfg.Sections, err = hackSectionList(pass, cfg)
- if err != nil {
- return nil, err
- }
-
- issues, err := runGci(pass, lintCtx, cfg, &lock)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- }
- }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runGci(pass *analysis.Pass, lintCtx *linter.Context, cfg *gcicfg.Config, lock *sync.Mutex) ([]goanalysis.Issue, error) {
- fileNames := internal.GetFileNames(pass)
-
- var diffs []string
- err := diffFormattedFilesToArray(fileNames, *cfg, &diffs, lock)
- if err != nil {
- return nil, err
- }
-
- var issues []goanalysis.Issue
-
- for _, diff := range diffs {
- if diff == "" {
- continue
- }
-
- is, err := internal.ExtractIssuesFromPatch(diff, lintCtx, linterName, getIssuedTextGci)
- if err != nil {
- return nil, fmt.Errorf("can't extract issues from gci diff output %s: %w", diff, err)
- }
-
- for i := range is {
- issues = append(issues, goanalysis.NewIssue(&is[i], pass))
- }
- }
-
- return issues, nil
-}
-
-func getIssuedTextGci(settings *config.LintersSettings) string {
- text := "File is not `gci`-ed"
-
- hasOptions := settings.Gci.SkipGenerated || len(settings.Gci.Sections) > 0
- if !hasOptions {
- return text
- }
-
- text += " with"
-
- if settings.Gci.SkipGenerated {
- text += " --skip-generated"
- }
-
- if len(settings.Gci.Sections) > 0 {
- for _, sect := range settings.Gci.Sections {
- text += " -s " + sect
- }
- }
-
- if settings.Gci.CustomOrder {
- text += " --custom-order"
- }
-
- return text
-}
-
-func hackSectionList(pass *analysis.Pass, cfg *gcicfg.Config) (section.SectionList, error) {
- var sections section.SectionList
-
- for _, sect := range cfg.Sections {
- // local module hack
- if v, ok := sect.(*section.LocalModule); ok {
- info, err := modinfo.FindModuleFromPass(pass)
- if err != nil {
- return nil, err
- }
-
- if info.Path == "" {
- continue
- }
-
- v.Path = info.Path
- }
-
- sections = append(sections, sect)
- }
-
- return sections, nil
-}
-
-// diffFormattedFilesToArray is a copy of gci.DiffFormattedFilesToArray without io.StdInGenerator.
-// gci.DiffFormattedFilesToArray uses gci.processStdInAndGoFilesInPaths that uses io.StdInGenerator but stdin is not active on CI.
-// https://github.com/daixiang0/gci/blob/6f5cb16718ba07f0342a58de9b830ec5a6d58790/pkg/gci/gci.go#L63-L75
-// https://github.com/daixiang0/gci/blob/6f5cb16718ba07f0342a58de9b830ec5a6d58790/pkg/gci/gci.go#L80
-func diffFormattedFilesToArray(paths []string, cfg gcicfg.Config, diffs *[]string, lock *sync.Mutex) error {
- log.InitLogger()
- defer func() { _ = log.L().Sync() }()
-
- return gci.ProcessFiles(io.GoFilesInPathsGenerator(paths, true), cfg, func(filePath string, unmodifiedFile, formattedFile []byte) error {
- fileURI := span.URIFromPath(filePath)
- edits := myers.ComputeEdits(fileURI, string(unmodifiedFile), string(formattedFile))
- unifiedEdits := gotextdiff.ToUnified(filePath, filePath, string(unmodifiedFile), edits)
- lock.Lock()
- *diffs = append(*diffs, fmt.Sprint(unifiedEdits))
- lock.Unlock()
- return nil
- })
-}
-
-// Code below this comment is borrowed and modified from gci.
-// https://github.com/daixiang0/gci/blob/v0.13.5/pkg/config/config.go
-
-var defaultOrder = map[string]int{
- section.StandardType: 0,
- section.DefaultType: 1,
- section.CustomType: 2,
- section.BlankType: 3,
- section.DotType: 4,
- section.AliasType: 5,
- section.LocalModuleType: 6,
-}
-
-type YamlConfig struct {
- origin gcicfg.YamlConfig
-}
-
-//nolint:gocritic // code borrowed from gci and modified to fix LocalModule section behavior.
-func (g YamlConfig) Parse() (*gcicfg.Config, error) {
- var err error
-
- sections, err := section.Parse(g.origin.SectionStrings)
- if err != nil {
- return nil, err
- }
-
- if sections == nil {
- sections = section.DefaultSections()
- }
-
- // if default order sorted sections
- if !g.origin.Cfg.CustomOrder {
- sort.Slice(sections, func(i, j int) bool {
- sectionI, sectionJ := sections[i].Type(), sections[j].Type()
-
- if g.origin.Cfg.NoLexOrder || strings.Compare(sectionI, sectionJ) != 0 {
- return defaultOrder[sectionI] < defaultOrder[sectionJ]
- }
-
- return strings.Compare(sections[i].String(), sections[j].String()) < 0
- })
- }
-
- sectionSeparators, err := section.Parse(g.origin.SectionSeparatorStrings)
- if err != nil {
- return nil, err
- }
- if sectionSeparators == nil {
- sectionSeparators = section.DefaultSectionSeparators()
- }
-
- return &gcicfg.Config{BoolConfig: g.origin.Cfg, Sections: sections, SectionSeparators: sectionSeparators}, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/ginkgolinter/ginkgolinter.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/ginkgolinter/ginkgolinter.go
deleted file mode 100644
index 9873c9ba4..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/ginkgolinter/ginkgolinter.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package ginkgolinter
-
-import (
- "github.com/nunnatsa/ginkgolinter"
- "github.com/nunnatsa/ginkgolinter/types"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.GinkgoLinterSettings) *goanalysis.Linter {
- cfg := &types.Config{}
-
- if settings != nil {
- cfg = &types.Config{
- SuppressLen: types.Boolean(settings.SuppressLenAssertion),
- SuppressNil: types.Boolean(settings.SuppressNilAssertion),
- SuppressErr: types.Boolean(settings.SuppressErrAssertion),
- SuppressCompare: types.Boolean(settings.SuppressCompareAssertion),
- SuppressAsync: types.Boolean(settings.SuppressAsyncAssertion),
- ForbidFocus: types.Boolean(settings.ForbidFocusContainer),
- SuppressTypeCompare: types.Boolean(settings.SuppressTypeCompareWarning),
- AllowHaveLen0: types.Boolean(settings.AllowHaveLenZero),
- ForceExpectTo: types.Boolean(settings.ForceExpectTo),
- ValidateAsyncIntervals: types.Boolean(settings.ValidateAsyncIntervals),
- ForbidSpecPollution: types.Boolean(settings.ForbidSpecPollution),
- ForceSucceedForFuncs: types.Boolean(settings.ForceSucceedForFuncs),
- }
- }
-
- a := ginkgolinter.NewAnalyzerWithConfig(cfg)
-
- return goanalysis.NewLinter(
- a.Name,
- "enforces standards of using ginkgo and gomega",
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gocheckcompilerdirectives/gocheckcompilerdirectives.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gocheckcompilerdirectives/gocheckcompilerdirectives.go
deleted file mode 100644
index be604d805..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gocheckcompilerdirectives/gocheckcompilerdirectives.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package gocheckcompilerdirectives
-
-import (
- "4d63.com/gocheckcompilerdirectives/checkcompilerdirectives"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := checkcompilerdirectives.Analyzer()
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gochecknoglobals/gochecknoglobals.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gochecknoglobals/gochecknoglobals.go
deleted file mode 100644
index af22b2f8e..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gochecknoglobals/gochecknoglobals.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package gochecknoglobals
-
-import (
- "4d63.com/gochecknoglobals/checknoglobals"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := checknoglobals.Analyzer()
-
- // gochecknoglobals only lints test files if the `-t` flag is passed,
- // so we pass the `t` flag as true to the analyzer before running it.
- // This can be turned off by using the regular golangci-lint flags such as `--tests` or `--exclude-files`.
- linterConfig := map[string]map[string]any{
- a.Name: {"t": true},
- }
-
- return goanalysis.NewLinter(
- a.Name,
- "Check that no global variables exist.",
- []*analysis.Analyzer{a},
- linterConfig,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gochecknoinits/gochecknoinits.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gochecknoinits/gochecknoinits.go
deleted file mode 100644
index 1345eb8c2..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gochecknoinits/gochecknoinits.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package gochecknoinits
-
-import (
- "fmt"
- "go/ast"
- "go/token"
- "sync"
-
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "gochecknoinits"
-
-func New() *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- var res []goanalysis.Issue
- for _, file := range pass.Files {
- fileIssues := checkFileForInits(file, pass.Fset)
- for i := range fileIssues {
- res = append(res, goanalysis.NewIssue(&fileIssues[i], pass))
- }
- }
- if len(res) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, res...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Checks that no init functions are present in Go code",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func checkFileForInits(f *ast.File, fset *token.FileSet) []result.Issue {
- var res []result.Issue
- for _, decl := range f.Decls {
- funcDecl, ok := decl.(*ast.FuncDecl)
- if !ok {
- continue
- }
-
- fnName := funcDecl.Name.Name
- if fnName == "init" && funcDecl.Recv.NumFields() == 0 {
- res = append(res, result.Issue{
- Pos: fset.Position(funcDecl.Pos()),
- Text: fmt.Sprintf("don't use %s function", internal.FormatCode(fnName, nil)),
- FromLinter: linterName,
- })
- }
- }
-
- return res
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gochecksumtype/gochecksumtype.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gochecksumtype/gochecksumtype.go
deleted file mode 100644
index 7aab0efeb..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gochecksumtype/gochecksumtype.go
+++ /dev/null
@@ -1,82 +0,0 @@
-package gochecksumtype
-
-import (
- "strings"
- "sync"
-
- gochecksumtype "github.com/alecthomas/go-check-sumtype"
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "gochecksumtype"
-
-func New(settings *config.GoChecksumTypeSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues, err := runGoCheckSumType(pass, settings)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- `Run exhaustiveness checks on Go "sum types"`,
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(_ *linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-func runGoCheckSumType(pass *analysis.Pass, settings *config.GoChecksumTypeSettings) ([]goanalysis.Issue, error) {
- var resIssues []goanalysis.Issue
-
- pkg := &packages.Package{
- Fset: pass.Fset,
- Syntax: pass.Files,
- Types: pass.Pkg,
- TypesInfo: pass.TypesInfo,
- }
-
- var unknownError error
- errors := gochecksumtype.Run([]*packages.Package{pkg},
- gochecksumtype.Config{DefaultSignifiesExhaustive: settings.DefaultSignifiesExhaustive})
- for _, err := range errors {
- err, ok := err.(gochecksumtype.Error)
- if !ok {
- unknownError = err
- continue
- }
-
- resIssues = append(resIssues, goanalysis.NewIssue(&result.Issue{
- FromLinter: linterName,
- Text: strings.TrimPrefix(err.Error(), err.Pos().String()+": "),
- Pos: err.Pos(),
- }, pass))
- }
-
- return resIssues, unknownError
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gocognit/gocognit.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gocognit/gocognit.go
deleted file mode 100644
index 5fe0f90f0..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gocognit/gocognit.go
+++ /dev/null
@@ -1,80 +0,0 @@
-package gocognit
-
-import (
- "fmt"
- "sort"
- "sync"
-
- "github.com/uudashr/gocognit"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "gocognit"
-
-func New(settings *config.GocognitSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: goanalysis.TheOnlyAnalyzerName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues := runGocognit(pass, settings)
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Computes and checks the cognitive complexity of functions",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runGocognit(pass *analysis.Pass, settings *config.GocognitSettings) []goanalysis.Issue {
- var stats []gocognit.Stat
- for _, f := range pass.Files {
- stats = gocognit.ComplexityStats(f, pass.Fset, stats)
- }
- if len(stats) == 0 {
- return nil
- }
-
- sort.SliceStable(stats, func(i, j int) bool {
- return stats[i].Complexity > stats[j].Complexity
- })
-
- issues := make([]goanalysis.Issue, 0, len(stats))
- for _, s := range stats {
- if s.Complexity <= settings.MinComplexity {
- break // Break as the stats is already sorted from greatest to least
- }
-
- issues = append(issues, goanalysis.NewIssue(&result.Issue{
- Pos: s.Pos,
- Text: fmt.Sprintf("cognitive complexity %d of func %s is high (> %d)",
- s.Complexity, internal.FormatCode(s.FuncName, nil), settings.MinComplexity),
- FromLinter: linterName,
- }, pass))
- }
-
- return issues
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/goconst/goconst.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/goconst/goconst.go
deleted file mode 100644
index 07bed301f..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/goconst/goconst.go
+++ /dev/null
@@ -1,98 +0,0 @@
-package goconst
-
-import (
- "fmt"
- "sync"
-
- goconstAPI "github.com/jgautheron/goconst"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "goconst"
-
-func New(settings *config.GoConstSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues, err := runGoconst(pass, settings)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Finds repeated strings that could be replaced by a constant",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runGoconst(pass *analysis.Pass, settings *config.GoConstSettings) ([]goanalysis.Issue, error) {
- cfg := goconstAPI.Config{
- IgnoreStrings: settings.IgnoreStrings,
- IgnoreTests: settings.IgnoreTests,
- MatchWithConstants: settings.MatchWithConstants,
- MinStringLength: settings.MinStringLen,
- MinOccurrences: settings.MinOccurrencesCount,
- ParseNumbers: settings.ParseNumbers,
- NumberMin: settings.NumberMin,
- NumberMax: settings.NumberMax,
- ExcludeTypes: map[goconstAPI.Type]bool{},
- }
-
- if settings.IgnoreCalls {
- cfg.ExcludeTypes[goconstAPI.Call] = true
- }
-
- lintIssues, err := goconstAPI.Run(pass.Files, pass.Fset, &cfg)
- if err != nil {
- return nil, err
- }
-
- if len(lintIssues) == 0 {
- return nil, nil
- }
-
- res := make([]goanalysis.Issue, 0, len(lintIssues))
- for _, i := range lintIssues {
- text := fmt.Sprintf("string %s has %d occurrences", internal.FormatCode(i.Str, nil), i.OccurrencesCount)
-
- if i.MatchingConst == "" {
- text += ", make it a constant"
- } else {
- text += fmt.Sprintf(", but such constant %s already exists", internal.FormatCode(i.MatchingConst, nil))
- }
-
- res = append(res, goanalysis.NewIssue(&result.Issue{
- Pos: i.Pos,
- Text: text,
- FromLinter: linterName,
- }, pass))
- }
-
- return res, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gocritic/gocritic.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gocritic/gocritic.go
deleted file mode 100644
index 194ea3535..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gocritic/gocritic.go
+++ /dev/null
@@ -1,590 +0,0 @@
-package gocritic
-
-import (
- "errors"
- "fmt"
- "go/ast"
- "go/types"
- "path/filepath"
- "reflect"
- "runtime"
- "slices"
- "sort"
- "strings"
- "sync"
-
- "github.com/go-critic/go-critic/checkers"
- gocriticlinter "github.com/go-critic/go-critic/linter"
- _ "github.com/quasilyte/go-ruleguard/dsl"
- "golang.org/x/exp/maps"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "gocritic"
-
-var (
- debugf = logutils.Debug(logutils.DebugKeyGoCritic)
- isDebug = logutils.HaveDebugTag(logutils.DebugKeyGoCritic)
-)
-
-func New(settings *config.GoCriticSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- wrapper := &goCriticWrapper{
- sizes: types.SizesFor("gc", runtime.GOARCH),
- }
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues, err := wrapper.run(pass)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- `Provides diagnostics that check for bugs, performance and style issues.
-Extensible without recompilation through dynamic rules.
-Dynamic rules are written declaratively with AST patterns, filters, report message and optional suggestion.`,
- []*analysis.Analyzer{analyzer},
- nil,
- ).
- WithContextSetter(func(context *linter.Context) {
- wrapper.configDir = context.Cfg.GetConfigDir()
-
- wrapper.init(context.Log, settings)
- }).
- WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).
- WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-type goCriticWrapper struct {
- settingsWrapper *settingsWrapper
- configDir string
- sizes types.Sizes
- once sync.Once
-}
-
-func (w *goCriticWrapper) init(logger logutils.Log, settings *config.GoCriticSettings) {
- if settings == nil {
- return
- }
-
- w.once.Do(func() {
- err := checkers.InitEmbeddedRules()
- if err != nil {
- logger.Fatalf("%s: %v: setting an explicit GOROOT can fix this problem", linterName, err)
- }
- })
-
- settingsWrapper := newSettingsWrapper(settings, logger)
- settingsWrapper.InferEnabledChecks()
- // Validate must be after InferEnabledChecks, not before.
- // Because it uses gathered information about tags set and finally enabled checks.
- if err := settingsWrapper.Validate(); err != nil {
- logger.Fatalf("%s: invalid settings: %s", linterName, err)
- }
-
- w.settingsWrapper = settingsWrapper
-}
-
-func (w *goCriticWrapper) run(pass *analysis.Pass) ([]goanalysis.Issue, error) {
- if w.settingsWrapper == nil {
- return nil, errors.New("the settings wrapper is nil")
- }
-
- linterCtx := gocriticlinter.NewContext(pass.Fset, w.sizes)
-
- linterCtx.SetGoVersion(w.settingsWrapper.Go)
-
- enabledCheckers, err := w.buildEnabledCheckers(linterCtx)
- if err != nil {
- return nil, err
- }
-
- linterCtx.SetPackageInfo(pass.TypesInfo, pass.Pkg)
-
- pkgIssues := runOnPackage(linterCtx, enabledCheckers, pass.Files)
-
- issues := make([]goanalysis.Issue, 0, len(pkgIssues))
- for i := range pkgIssues {
- issues = append(issues, goanalysis.NewIssue(&pkgIssues[i], pass))
- }
-
- return issues, nil
-}
-
-func (w *goCriticWrapper) buildEnabledCheckers(linterCtx *gocriticlinter.Context) ([]*gocriticlinter.Checker, error) {
- allLowerCasedParams := w.settingsWrapper.GetLowerCasedParams()
-
- var enabledCheckers []*gocriticlinter.Checker
- for _, info := range gocriticlinter.GetCheckersInfo() {
- if !w.settingsWrapper.IsCheckEnabled(info.Name) {
- continue
- }
-
- if err := w.configureCheckerInfo(info, allLowerCasedParams); err != nil {
- return nil, err
- }
-
- c, err := gocriticlinter.NewChecker(linterCtx, info)
- if err != nil {
- return nil, err
- }
- enabledCheckers = append(enabledCheckers, c)
- }
-
- return enabledCheckers, nil
-}
-
-func (w *goCriticWrapper) configureCheckerInfo(
- info *gocriticlinter.CheckerInfo,
- allLowerCasedParams map[string]config.GoCriticCheckSettings,
-) error {
- params := allLowerCasedParams[strings.ToLower(info.Name)]
- if params == nil { // no config for this checker
- return nil
- }
-
- // To lowercase info param keys here because golangci-lint's config parser lowercases all strings.
- infoParams := normalizeMap(info.Params)
- for k, p := range params {
- v, ok := infoParams[k]
- if ok {
- v.Value = w.normalizeCheckerParamsValue(p)
- continue
- }
-
- // param `k` isn't supported
- if len(info.Params) == 0 {
- return fmt.Errorf("checker %s config param %s doesn't exist: checker doesn't have params",
- info.Name, k)
- }
-
- supportedKeys := maps.Keys(info.Params)
- sort.Strings(supportedKeys)
-
- return fmt.Errorf("checker %s config param %s doesn't exist, all existing: %s",
- info.Name, k, supportedKeys)
- }
-
- return nil
-}
-
-// normalizeCheckerParamsValue normalizes value types.
-// go-critic asserts that CheckerParam.Value has some specific types,
-// but the file parsers (TOML, YAML, JSON) don't create the same representation for raw type.
-// then we have to convert value types into the expected value types.
-// Maybe in the future, this kind of conversion will be done in go-critic itself.
-func (w *goCriticWrapper) normalizeCheckerParamsValue(p any) any {
- rv := reflect.ValueOf(p)
- switch rv.Type().Kind() {
- case reflect.Int64, reflect.Int32, reflect.Int16, reflect.Int8, reflect.Int:
- return int(rv.Int())
- case reflect.Bool:
- return rv.Bool()
- case reflect.String:
- // Perform variable substitution.
- return strings.ReplaceAll(rv.String(), "${configDir}", w.configDir)
- default:
- return p
- }
-}
-
-func runOnPackage(linterCtx *gocriticlinter.Context, checks []*gocriticlinter.Checker, files []*ast.File) []result.Issue {
- var res []result.Issue
- for _, f := range files {
- filename := filepath.Base(linterCtx.FileSet.Position(f.Pos()).Filename)
- linterCtx.SetFileInfo(filename, f)
-
- issues := runOnFile(linterCtx, f, checks)
- res = append(res, issues...)
- }
- return res
-}
-
-func runOnFile(linterCtx *gocriticlinter.Context, f *ast.File, checks []*gocriticlinter.Checker) []result.Issue {
- var res []result.Issue
-
- for _, c := range checks {
- // All checkers are expected to use *lint.Context
- // as read-only structure, so no copying is required.
- for _, warn := range c.Check(f) {
- pos := linterCtx.FileSet.Position(warn.Pos)
- issue := result.Issue{
- Pos: pos,
- Text: fmt.Sprintf("%s: %s", c.Info.Name, warn.Text),
- FromLinter: linterName,
- }
-
- if warn.HasQuickFix() {
- issue.Replacement = &result.Replacement{
- Inline: &result.InlineFix{
- StartCol: pos.Column - 1,
- Length: int(warn.Suggestion.To - warn.Suggestion.From),
- NewString: string(warn.Suggestion.Replacement),
- },
- }
- }
-
- res = append(res, issue)
- }
- }
-
- return res
-}
-
-type goCriticChecks[T any] map[string]T
-
-func (m goCriticChecks[T]) has(name string) bool {
- _, ok := m[name]
- return ok
-}
-
-type settingsWrapper struct {
- *config.GoCriticSettings
-
- logger logutils.Log
-
- allCheckers []*gocriticlinter.CheckerInfo
-
- allChecks goCriticChecks[struct{}]
- allChecksByTag goCriticChecks[[]string]
- allTagsSorted []string
- inferredEnabledChecks goCriticChecks[struct{}]
-
- // *LowerCased fields are used for GoCriticSettings.SettingsPerCheck validation only.
-
- allChecksLowerCased goCriticChecks[struct{}]
- inferredEnabledChecksLowerCased goCriticChecks[struct{}]
-}
-
-func newSettingsWrapper(settings *config.GoCriticSettings, logger logutils.Log) *settingsWrapper {
- allCheckers := gocriticlinter.GetCheckersInfo()
-
- allChecks := make(goCriticChecks[struct{}], len(allCheckers))
- allChecksLowerCased := make(goCriticChecks[struct{}], len(allCheckers))
- allChecksByTag := make(goCriticChecks[[]string])
- for _, checker := range allCheckers {
- allChecks[checker.Name] = struct{}{}
- allChecksLowerCased[strings.ToLower(checker.Name)] = struct{}{}
-
- for _, tag := range checker.Tags {
- allChecksByTag[tag] = append(allChecksByTag[tag], checker.Name)
- }
- }
-
- allTagsSorted := maps.Keys(allChecksByTag)
- sort.Strings(allTagsSorted)
-
- return &settingsWrapper{
- GoCriticSettings: settings,
- logger: logger,
- allCheckers: allCheckers,
- allChecks: allChecks,
- allChecksLowerCased: allChecksLowerCased,
- allChecksByTag: allChecksByTag,
- allTagsSorted: allTagsSorted,
- inferredEnabledChecks: make(goCriticChecks[struct{}]),
- inferredEnabledChecksLowerCased: make(goCriticChecks[struct{}]),
- }
-}
-
-func (s *settingsWrapper) IsCheckEnabled(name string) bool {
- return s.inferredEnabledChecks.has(name)
-}
-
-func (s *settingsWrapper) GetLowerCasedParams() map[string]config.GoCriticCheckSettings {
- return normalizeMap(s.SettingsPerCheck)
-}
-
-// InferEnabledChecks tries to be consistent with (lintersdb.Manager).build.
-func (s *settingsWrapper) InferEnabledChecks() {
- s.debugChecksInitialState()
-
- enabledByDefaultChecks, disabledByDefaultChecks := s.buildEnabledAndDisabledByDefaultChecks()
- debugChecksListf(enabledByDefaultChecks, "Enabled by default")
- debugChecksListf(disabledByDefaultChecks, "Disabled by default")
-
- enabledChecks := make(goCriticChecks[struct{}])
-
- if s.EnableAll {
- enabledChecks = make(goCriticChecks[struct{}], len(s.allCheckers))
- for _, info := range s.allCheckers {
- enabledChecks[info.Name] = struct{}{}
- }
- } else if !s.DisableAll {
- // enable-all/disable-all revokes the default settings.
- enabledChecks = make(goCriticChecks[struct{}], len(enabledByDefaultChecks))
- for _, check := range enabledByDefaultChecks {
- enabledChecks[check] = struct{}{}
- }
- }
-
- if len(s.EnabledTags) != 0 {
- enabledFromTags := s.expandTagsToChecks(s.EnabledTags)
- debugChecksListf(enabledFromTags, "Enabled by config tags %s", sprintSortedStrings(s.EnabledTags))
-
- for _, check := range enabledFromTags {
- enabledChecks[check] = struct{}{}
- }
- }
-
- if len(s.EnabledChecks) != 0 {
- debugChecksListf(s.EnabledChecks, "Enabled by config")
-
- for _, check := range s.EnabledChecks {
- if enabledChecks.has(check) {
- s.logger.Warnf("%s: no need to enable check %q: it's already enabled", linterName, check)
- continue
- }
- enabledChecks[check] = struct{}{}
- }
- }
-
- if len(s.DisabledTags) != 0 {
- disabledFromTags := s.expandTagsToChecks(s.DisabledTags)
- debugChecksListf(disabledFromTags, "Disabled by config tags %s", sprintSortedStrings(s.DisabledTags))
-
- for _, check := range disabledFromTags {
- delete(enabledChecks, check)
- }
- }
-
- if len(s.DisabledChecks) != 0 {
- debugChecksListf(s.DisabledChecks, "Disabled by config")
-
- for _, check := range s.DisabledChecks {
- if !enabledChecks.has(check) {
- s.logger.Warnf("%s: no need to disable check %q: it's already disabled", linterName, check)
- continue
- }
- delete(enabledChecks, check)
- }
- }
-
- s.inferredEnabledChecks = enabledChecks
- s.inferredEnabledChecksLowerCased = normalizeMap(s.inferredEnabledChecks)
- s.debugChecksFinalState()
-}
-
-func (s *settingsWrapper) buildEnabledAndDisabledByDefaultChecks() (enabled, disabled []string) {
- for _, info := range s.allCheckers {
- if enabledByDef := isEnabledByDefaultGoCriticChecker(info); enabledByDef {
- enabled = append(enabled, info.Name)
- } else {
- disabled = append(disabled, info.Name)
- }
- }
- return enabled, disabled
-}
-
-func (s *settingsWrapper) expandTagsToChecks(tags []string) []string {
- var checks []string
- for _, tag := range tags {
- checks = append(checks, s.allChecksByTag[tag]...)
- }
- return checks
-}
-
-func (s *settingsWrapper) debugChecksInitialState() {
- if !isDebug {
- return
- }
-
- debugf("All gocritic existing tags and checks:")
- for _, tag := range s.allTagsSorted {
- debugChecksListf(s.allChecksByTag[tag], " tag %q", tag)
- }
-}
-
-func (s *settingsWrapper) debugChecksFinalState() {
- if !isDebug {
- return
- }
-
- var enabledChecks []string
- var disabledChecks []string
-
- for _, checker := range s.allCheckers {
- check := checker.Name
- if s.inferredEnabledChecks.has(check) {
- enabledChecks = append(enabledChecks, check)
- } else {
- disabledChecks = append(disabledChecks, check)
- }
- }
-
- debugChecksListf(enabledChecks, "Final used")
-
- if len(disabledChecks) == 0 {
- debugf("All checks are enabled")
- } else {
- debugChecksListf(disabledChecks, "Final not used")
- }
-}
-
-// Validate tries to be consistent with (lintersdb.Validator).validateEnabledDisabledLintersConfig.
-func (s *settingsWrapper) Validate() error {
- for _, v := range []func() error{
- s.validateOptionsCombinations,
- s.validateCheckerTags,
- s.validateCheckerNames,
- s.validateDisabledAndEnabledAtOneMoment,
- s.validateAtLeastOneCheckerEnabled,
- } {
- if err := v(); err != nil {
- return err
- }
- }
- return nil
-}
-
-func (s *settingsWrapper) validateOptionsCombinations() error {
- if s.EnableAll {
- if s.DisableAll {
- return errors.New("enable-all and disable-all options must not be combined")
- }
-
- if len(s.EnabledTags) != 0 {
- return errors.New("enable-all and enabled-tags options must not be combined")
- }
-
- if len(s.EnabledChecks) != 0 {
- return errors.New("enable-all and enabled-checks options must not be combined")
- }
- }
-
- if s.DisableAll {
- if len(s.DisabledTags) != 0 {
- return errors.New("disable-all and disabled-tags options must not be combined")
- }
-
- if len(s.DisabledChecks) != 0 {
- return errors.New("disable-all and disabled-checks options must not be combined")
- }
-
- if len(s.EnabledTags) == 0 && len(s.EnabledChecks) == 0 {
- return errors.New("all checks were disabled, but no one check was enabled: at least one must be enabled")
- }
- }
-
- return nil
-}
-
-func (s *settingsWrapper) validateCheckerTags() error {
- for _, tag := range s.EnabledTags {
- if !s.allChecksByTag.has(tag) {
- return fmt.Errorf("enabled tag %q doesn't exist, see %s's documentation", tag, linterName)
- }
- }
-
- for _, tag := range s.DisabledTags {
- if !s.allChecksByTag.has(tag) {
- return fmt.Errorf("disabled tag %q doesn't exist, see %s's documentation", tag, linterName)
- }
- }
-
- return nil
-}
-
-func (s *settingsWrapper) validateCheckerNames() error {
- for _, check := range s.EnabledChecks {
- if !s.allChecks.has(check) {
- return fmt.Errorf("enabled check %q doesn't exist, see %s's documentation", check, linterName)
- }
- }
-
- for _, check := range s.DisabledChecks {
- if !s.allChecks.has(check) {
- return fmt.Errorf("disabled check %q doesn't exist, see %s documentation", check, linterName)
- }
- }
-
- for check := range s.SettingsPerCheck {
- lcName := strings.ToLower(check)
- if !s.allChecksLowerCased.has(lcName) {
- return fmt.Errorf("invalid check settings: check %q doesn't exist, see %s documentation", check, linterName)
- }
- if !s.inferredEnabledChecksLowerCased.has(lcName) {
- s.logger.Warnf("%s: settings were provided for disabled check %q", check, linterName)
- }
- }
-
- return nil
-}
-
-func (s *settingsWrapper) validateDisabledAndEnabledAtOneMoment() error {
- for _, tag := range s.DisabledTags {
- if slices.Contains(s.EnabledTags, tag) {
- return fmt.Errorf("tag %q disabled and enabled at one moment", tag)
- }
- }
-
- for _, check := range s.DisabledChecks {
- if slices.Contains(s.EnabledChecks, check) {
- return fmt.Errorf("check %q disabled and enabled at one moment", check)
- }
- }
-
- return nil
-}
-
-func (s *settingsWrapper) validateAtLeastOneCheckerEnabled() error {
- if len(s.inferredEnabledChecks) == 0 {
- return errors.New("eventually all checks were disabled: at least one must be enabled")
- }
- return nil
-}
-
-func normalizeMap[ValueT any](in map[string]ValueT) map[string]ValueT {
- ret := make(map[string]ValueT, len(in))
- for k, v := range in {
- ret[strings.ToLower(k)] = v
- }
- return ret
-}
-
-func isEnabledByDefaultGoCriticChecker(info *gocriticlinter.CheckerInfo) bool {
- // https://github.com/go-critic/go-critic/blob/5b67cfd487ae9fe058b4b19321901b3131810f65/cmd/gocritic/check.go#L342-L345
- return !info.HasTag(gocriticlinter.ExperimentalTag) &&
- !info.HasTag(gocriticlinter.OpinionatedTag) &&
- !info.HasTag(gocriticlinter.PerformanceTag) &&
- !info.HasTag(gocriticlinter.SecurityTag)
-}
-
-func debugChecksListf(checks []string, format string, args ...any) {
- if !isDebug {
- return
- }
-
- debugf("%s checks (%d): %s", fmt.Sprintf(format, args...), len(checks), sprintSortedStrings(checks))
-}
-
-func sprintSortedStrings(v []string) string {
- sort.Strings(slices.Clone(v))
- return fmt.Sprint(v)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gocyclo/gocyclo.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gocyclo/gocyclo.go
deleted file mode 100644
index 51333dc15..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gocyclo/gocyclo.go
+++ /dev/null
@@ -1,76 +0,0 @@
-package gocyclo
-
-import (
- "fmt"
- "sync"
-
- "github.com/fzipp/gocyclo"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "gocyclo"
-
-func New(settings *config.GoCycloSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues := runGoCyclo(pass, settings)
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Computes and checks the cyclomatic complexity of functions",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runGoCyclo(pass *analysis.Pass, settings *config.GoCycloSettings) []goanalysis.Issue {
- var stats gocyclo.Stats
- for _, f := range pass.Files {
- stats = gocyclo.AnalyzeASTFile(f, pass.Fset, stats)
- }
- if len(stats) == 0 {
- return nil
- }
-
- stats = stats.SortAndFilter(-1, settings.MinComplexity)
-
- issues := make([]goanalysis.Issue, 0, len(stats))
-
- for _, s := range stats {
- text := fmt.Sprintf("cyclomatic complexity %d of func %s is high (> %d)",
- s.Complexity, internal.FormatCode(s.FuncName, nil), settings.MinComplexity)
-
- issues = append(issues, goanalysis.NewIssue(&result.Issue{
- Pos: s.Pos,
- Text: text,
- FromLinter: linterName,
- }, pass))
- }
-
- return issues
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/godot/godot.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/godot/godot.go
deleted file mode 100644
index fc51b5bb8..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/godot/godot.go
+++ /dev/null
@@ -1,101 +0,0 @@
-package godot
-
-import (
- "sync"
-
- "github.com/tetafro/godot"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "godot"
-
-func New(settings *config.GodotSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- var dotSettings godot.Settings
-
- if settings != nil {
- dotSettings = godot.Settings{
- Scope: godot.Scope(settings.Scope),
- Exclude: settings.Exclude,
- Period: settings.Period,
- Capital: settings.Capital,
- }
-
- // Convert deprecated setting
- if settings.CheckAll {
- dotSettings.Scope = godot.AllScope
- }
- }
-
- if dotSettings.Scope == "" {
- dotSettings.Scope = godot.DeclScope
- }
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues, err := runGodot(pass, dotSettings)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Check if comments end in a period",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runGodot(pass *analysis.Pass, settings godot.Settings) ([]goanalysis.Issue, error) {
- var lintIssues []godot.Issue
- for _, file := range pass.Files {
- iss, err := godot.Run(file, pass.Fset, settings)
- if err != nil {
- return nil, err
- }
- lintIssues = append(lintIssues, iss...)
- }
-
- if len(lintIssues) == 0 {
- return nil, nil
- }
-
- issues := make([]goanalysis.Issue, len(lintIssues))
- for k, i := range lintIssues {
- issue := result.Issue{
- Pos: i.Pos,
- Text: i.Message,
- FromLinter: linterName,
- Replacement: &result.Replacement{
- NewLines: []string{i.Replacement},
- },
- }
-
- issues[k] = goanalysis.NewIssue(&issue, pass)
- }
-
- return issues, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/godox/godox.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/godox/godox.go
deleted file mode 100644
index d8de026ba..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/godox/godox.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package godox
-
-import (
- "go/token"
- "strings"
- "sync"
-
- "github.com/matoous/godox"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "godox"
-
-func New(settings *config.GodoxSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues := runGodox(pass, settings)
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Tool for detection of FIXME, TODO and other comment keywords",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runGodox(pass *analysis.Pass, settings *config.GodoxSettings) []goanalysis.Issue {
- var messages []godox.Message
- for _, file := range pass.Files {
- messages = append(messages, godox.Run(file, pass.Fset, settings.Keywords...)...)
- }
-
- if len(messages) == 0 {
- return nil
- }
-
- issues := make([]goanalysis.Issue, len(messages))
-
- for k, i := range messages {
- issues[k] = goanalysis.NewIssue(&result.Issue{
- Pos: token.Position{
- Filename: i.Pos.Filename,
- Line: i.Pos.Line,
- },
- Text: strings.TrimRight(i.Message, "\n"),
- FromLinter: linterName,
- }, pass)
- }
-
- return issues
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gofmt/gofmt.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gofmt/gofmt.go
deleted file mode 100644
index 289ceab8a..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gofmt/gofmt.go
+++ /dev/null
@@ -1,98 +0,0 @@
-package gofmt
-
-import (
- "fmt"
- "sync"
-
- gofmtAPI "github.com/golangci/gofmt/gofmt"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
-)
-
-const linterName = "gofmt"
-
-func New(settings *config.GoFmtSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: goanalysis.DummyRun,
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Gofmt checks whether code was gofmt-ed. By default "+
- "this tool runs with -s option to check for code simplification",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- analyzer.Run = func(pass *analysis.Pass) (any, error) {
- issues, err := runGofmt(lintCtx, pass, settings)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- }
- }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runGofmt(lintCtx *linter.Context, pass *analysis.Pass, settings *config.GoFmtSettings) ([]goanalysis.Issue, error) {
- fileNames := internal.GetFileNames(pass)
-
- var rewriteRules []gofmtAPI.RewriteRule
- for _, rule := range settings.RewriteRules {
- rewriteRules = append(rewriteRules, gofmtAPI.RewriteRule(rule))
- }
-
- var issues []goanalysis.Issue
-
- for _, f := range fileNames {
- diff, err := gofmtAPI.RunRewrite(f, settings.Simplify, rewriteRules)
- if err != nil { // TODO: skip
- return nil, err
- }
- if diff == nil {
- continue
- }
-
- is, err := internal.ExtractIssuesFromPatch(string(diff), lintCtx, linterName, getIssuedTextGoFmt)
- if err != nil {
- return nil, fmt.Errorf("can't extract issues from gofmt diff output %q: %w", string(diff), err)
- }
-
- for i := range is {
- issues = append(issues, goanalysis.NewIssue(&is[i], pass))
- }
- }
-
- return issues, nil
-}
-
-func getIssuedTextGoFmt(settings *config.LintersSettings) string {
- text := "File is not `gofmt`-ed"
- if settings.Gofmt.Simplify {
- text += " with `-s`"
- }
- for _, rule := range settings.Gofmt.RewriteRules {
- text += fmt.Sprintf(" `-r '%s -> %s'`", rule.Pattern, rule.Replacement)
- }
-
- return text
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gofumpt/gofumpt.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gofumpt/gofumpt.go
deleted file mode 100644
index 3bb7df12e..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gofumpt/gofumpt.go
+++ /dev/null
@@ -1,132 +0,0 @@
-package gofumpt
-
-import (
- "bytes"
- "fmt"
- "io"
- "os"
- "strings"
- "sync"
-
- "github.com/shazow/go-diff/difflib"
- "golang.org/x/tools/go/analysis"
- "mvdan.cc/gofumpt/format"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
-)
-
-const linterName = "gofumpt"
-
-type differ interface {
- Diff(out io.Writer, a io.ReadSeeker, b io.ReadSeeker) error
-}
-
-func New(settings *config.GofumptSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- diff := difflib.New()
-
- var options format.Options
-
- if settings != nil {
- options = format.Options{
- LangVersion: getLangVersion(settings),
- ModulePath: settings.ModulePath,
- ExtraRules: settings.ExtraRules,
- }
- }
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: goanalysis.DummyRun,
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Gofumpt checks whether code was gofumpt-ed.",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- analyzer.Run = func(pass *analysis.Pass) (any, error) {
- issues, err := runGofumpt(lintCtx, pass, diff, options)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- }
- }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runGofumpt(lintCtx *linter.Context, pass *analysis.Pass, diff differ, options format.Options) ([]goanalysis.Issue, error) {
- fileNames := internal.GetFileNames(pass)
-
- var issues []goanalysis.Issue
-
- for _, f := range fileNames {
- input, err := os.ReadFile(f)
- if err != nil {
- return nil, fmt.Errorf("unable to open file %s: %w", f, err)
- }
-
- output, err := format.Source(input, options)
- if err != nil {
- return nil, fmt.Errorf("error while running gofumpt: %w", err)
- }
-
- if !bytes.Equal(input, output) {
- out := bytes.NewBufferString(fmt.Sprintf("--- %[1]s\n+++ %[1]s\n", f))
-
- err := diff.Diff(out, bytes.NewReader(input), bytes.NewReader(output))
- if err != nil {
- return nil, fmt.Errorf("error while running gofumpt: %w", err)
- }
-
- diff := out.String()
- is, err := internal.ExtractIssuesFromPatch(diff, lintCtx, linterName, getIssuedTextGoFumpt)
- if err != nil {
- return nil, fmt.Errorf("can't extract issues from gofumpt diff output %q: %w", diff, err)
- }
-
- for i := range is {
- issues = append(issues, goanalysis.NewIssue(&is[i], pass))
- }
- }
- }
-
- return issues, nil
-}
-
-func getLangVersion(settings *config.GofumptSettings) string {
- if settings == nil || settings.LangVersion == "" {
- // TODO: defaults to "1.15", in the future (v2) must be removed.
- return "go1.15"
- }
-
- return "go" + strings.TrimPrefix(settings.LangVersion, "go")
-}
-
-func getIssuedTextGoFumpt(settings *config.LintersSettings) string {
- text := "File is not `gofumpt`-ed"
-
- if settings.Gofumpt.ExtraRules {
- text += " with `-extra`"
- }
-
- return text
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/goheader/goheader.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/goheader/goheader.go
deleted file mode 100644
index c6b1aae6b..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/goheader/goheader.go
+++ /dev/null
@@ -1,115 +0,0 @@
-package goheader
-
-import (
- "go/token"
- "sync"
-
- goheader "github.com/denis-tingaikin/go-header"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "goheader"
-
-func New(settings *config.GoHeaderSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- conf := &goheader.Configuration{}
- if settings != nil {
- conf = &goheader.Configuration{
- Values: settings.Values,
- Template: settings.Template,
- TemplatePath: settings.TemplatePath,
- }
- }
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues, err := runGoHeader(pass, conf)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Checks if file header matches to pattern",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runGoHeader(pass *analysis.Pass, conf *goheader.Configuration) ([]goanalysis.Issue, error) {
- if conf.TemplatePath == "" && conf.Template == "" {
- // User did not pass template, so then do not run go-header linter
- return nil, nil
- }
-
- template, err := conf.GetTemplate()
- if err != nil {
- return nil, err
- }
-
- values, err := conf.GetValues()
- if err != nil {
- return nil, err
- }
-
- a := goheader.New(goheader.WithTemplate(template), goheader.WithValues(values))
-
- var issues []goanalysis.Issue
- for _, file := range pass.Files {
- path := pass.Fset.Position(file.Pos()).Filename
-
- i := a.Analyze(&goheader.Target{File: file, Path: path})
-
- if i == nil {
- continue
- }
-
- issue := result.Issue{
- Pos: token.Position{
- Line: i.Location().Line + 1,
- Column: i.Location().Position,
- Filename: path,
- },
- Text: i.Message(),
- FromLinter: linterName,
- }
-
- if fix := i.Fix(); fix != nil {
- issue.LineRange = &result.Range{
- From: issue.Line(),
- To: issue.Line() + len(fix.Actual) - 1,
- }
- issue.Replacement = &result.Replacement{
- NeedOnlyDelete: len(fix.Expected) == 0,
- NewLines: fix.Expected,
- }
- }
-
- issues = append(issues, goanalysis.NewIssue(&issue, pass))
- }
-
- return issues, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/goimports/goimports.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/goimports/goimports.go
deleted file mode 100644
index de965d5c8..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/goimports/goimports.go
+++ /dev/null
@@ -1,94 +0,0 @@
-package goimports
-
-import (
- "fmt"
- "sync"
-
- goimportsAPI "github.com/golangci/gofmt/goimports"
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/imports"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
-)
-
-const linterName = "goimports"
-
-func New(settings *config.GoImportsSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: goanalysis.DummyRun,
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Check import statements are formatted according to the 'goimport' command. "+
- "Reformat imports in autofix mode.",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- imports.LocalPrefix = settings.LocalPrefixes
-
- analyzer.Run = func(pass *analysis.Pass) (any, error) {
- issues, err := runGoImports(lintCtx, pass)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- }
- }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runGoImports(lintCtx *linter.Context, pass *analysis.Pass) ([]goanalysis.Issue, error) {
- fileNames := internal.GetFileNames(pass)
-
- var issues []goanalysis.Issue
-
- for _, f := range fileNames {
- diff, err := goimportsAPI.Run(f)
- if err != nil { // TODO: skip
- return nil, err
- }
- if diff == nil {
- continue
- }
-
- is, err := internal.ExtractIssuesFromPatch(string(diff), lintCtx, linterName, getIssuedTextGoImports)
- if err != nil {
- return nil, fmt.Errorf("can't extract issues from gofmt diff output %q: %w", string(diff), err)
- }
-
- for i := range is {
- issues = append(issues, goanalysis.NewIssue(&is[i], pass))
- }
- }
-
- return issues, nil
-}
-
-func getIssuedTextGoImports(settings *config.LintersSettings) string {
- text := "File is not `goimports`-ed"
-
- if settings.Goimports.LocalPrefixes != "" {
- text += " with -local " + settings.Goimports.LocalPrefixes
- }
-
- return text
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gomoddirectives/gomoddirectives.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gomoddirectives/gomoddirectives.go
deleted file mode 100644
index 9cde7e26c..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gomoddirectives/gomoddirectives.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package gomoddirectives
-
-import (
- "sync"
-
- "github.com/ldez/gomoddirectives"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "gomoddirectives"
-
-func New(settings *config.GoModDirectivesSettings) *goanalysis.Linter {
- var issues []goanalysis.Issue
- var once sync.Once
-
- var opts gomoddirectives.Options
- if settings != nil {
- opts.ReplaceAllowLocal = settings.ReplaceLocal
- opts.ReplaceAllowList = settings.ReplaceAllowList
- opts.RetractAllowNoExplanation = settings.RetractAllowNoExplanation
- opts.ExcludeForbidden = settings.ExcludeForbidden
- }
-
- analyzer := &analysis.Analyzer{
- Name: goanalysis.TheOnlyAnalyzerName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: goanalysis.DummyRun,
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Manage the use of 'replace', 'retract', and 'excludes' directives in go.mod.",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- analyzer.Run = func(pass *analysis.Pass) (any, error) {
- once.Do(func() {
- results, err := gomoddirectives.Analyze(opts)
- if err != nil {
- lintCtx.Log.Warnf("running %s failed: %s: "+
- "if you are not using go modules it is suggested to disable this linter", linterName, err)
- return
- }
-
- for _, p := range results {
- issues = append(issues, goanalysis.NewIssue(&result.Issue{
- FromLinter: linterName,
- Pos: p.Start,
- Text: p.Reason,
- }, pass))
- }
- })
-
- return nil, nil
- }
- }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return issues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gomodguard/gomodguard.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gomodguard/gomodguard.go
deleted file mode 100644
index 8f1036b0f..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gomodguard/gomodguard.go
+++ /dev/null
@@ -1,94 +0,0 @@
-package gomodguard
-
-import (
- "sync"
-
- "github.com/ryancurrah/gomodguard"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const (
- name = "gomodguard"
- desc = "Allow and block list linter for direct Go module dependencies. " +
- "This is different from depguard where there are different block " +
- "types for example version constraints and module recommendations."
-)
-
-func New(settings *config.GoModGuardSettings) *goanalysis.Linter {
- var issues []goanalysis.Issue
- var mu sync.Mutex
-
- processorCfg := &gomodguard.Configuration{}
- if settings != nil {
- processorCfg.Allowed.Modules = settings.Allowed.Modules
- processorCfg.Allowed.Domains = settings.Allowed.Domains
- processorCfg.Blocked.LocalReplaceDirectives = settings.Blocked.LocalReplaceDirectives
-
- for n := range settings.Blocked.Modules {
- for k, v := range settings.Blocked.Modules[n] {
- m := map[string]gomodguard.BlockedModule{k: {
- Recommendations: v.Recommendations,
- Reason: v.Reason,
- }}
- processorCfg.Blocked.Modules = append(processorCfg.Blocked.Modules, m)
- break
- }
- }
-
- for n := range settings.Blocked.Versions {
- for k, v := range settings.Blocked.Versions[n] {
- m := map[string]gomodguard.BlockedVersion{k: {
- Version: v.Version,
- Reason: v.Reason,
- }}
- processorCfg.Blocked.Versions = append(processorCfg.Blocked.Versions, m)
- break
- }
- }
- }
-
- analyzer := &analysis.Analyzer{
- Name: goanalysis.TheOnlyAnalyzerName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: goanalysis.DummyRun,
- }
-
- return goanalysis.NewLinter(
- name,
- desc,
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- processor, err := gomodguard.NewProcessor(processorCfg)
- if err != nil {
- lintCtx.Log.Warnf("running gomodguard failed: %s: if you are not using go modules "+
- "it is suggested to disable this linter", err)
- return
- }
-
- analyzer.Run = func(pass *analysis.Pass) (any, error) {
- gomodguardIssues := processor.ProcessFiles(internal.GetFileNames(pass))
-
- mu.Lock()
- defer mu.Unlock()
-
- for _, gomodguardIssue := range gomodguardIssues {
- issues = append(issues, goanalysis.NewIssue(&result.Issue{
- FromLinter: name,
- Pos: gomodguardIssue.Position,
- Text: gomodguardIssue.Reason,
- }, pass))
- }
-
- return nil, nil
- }
- }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return issues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/goprintffuncname/goprintffuncname.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/goprintffuncname/goprintffuncname.go
deleted file mode 100644
index c206ffaa3..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/goprintffuncname/goprintffuncname.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package goprintffuncname
-
-import (
- "github.com/golangci/go-printf-func-name/pkg/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := analyzer.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gosec/gosec.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gosec/gosec.go
deleted file mode 100644
index a5367399b..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gosec/gosec.go
+++ /dev/null
@@ -1,247 +0,0 @@
-package gosec
-
-import (
- "fmt"
- "go/token"
- "io"
- "log"
- "strconv"
- "strings"
- "sync"
-
- "github.com/securego/gosec/v2"
- "github.com/securego/gosec/v2/analyzers"
- "github.com/securego/gosec/v2/issue"
- "github.com/securego/gosec/v2/rules"
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "gosec"
-
-func New(settings *config.GoSecSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- conf := gosec.NewConfig()
-
- var ruleFilters []rules.RuleFilter
- var analyzerFilters []analyzers.AnalyzerFilter
- if settings != nil {
- // TODO(ldez) to remove when the problem will be fixed by gosec.
- // https://github.com/securego/gosec/issues/1211
- // https://github.com/securego/gosec/issues/1209
- settings.Excludes = append(settings.Excludes, "G407")
-
- ruleFilters = createRuleFilters(settings.Includes, settings.Excludes)
- analyzerFilters = createAnalyzerFilters(settings.Includes, settings.Excludes)
- conf = toGosecConfig(settings)
- }
-
- logger := log.New(io.Discard, "", 0)
-
- ruleDefinitions := rules.Generate(false, ruleFilters...)
- analyzerDefinitions := analyzers.Generate(false, analyzerFilters...)
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: goanalysis.DummyRun,
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Inspects source code for security problems",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- analyzer.Run = func(pass *analysis.Pass) (any, error) {
- // The `gosecAnalyzer` is here because of concurrency issue.
- gosecAnalyzer := gosec.NewAnalyzer(conf, true, settings.ExcludeGenerated, false, settings.Concurrency, logger)
-
- gosecAnalyzer.LoadRules(ruleDefinitions.RulesInfo())
- gosecAnalyzer.LoadAnalyzers(analyzerDefinitions.AnalyzersInfo())
-
- issues := runGoSec(lintCtx, pass, settings, gosecAnalyzer)
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- }
- }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-func runGoSec(lintCtx *linter.Context, pass *analysis.Pass, settings *config.GoSecSettings, analyzer *gosec.Analyzer) []goanalysis.Issue {
- pkg := &packages.Package{
- Fset: pass.Fset,
- Syntax: pass.Files,
- Types: pass.Pkg,
- TypesInfo: pass.TypesInfo,
- }
-
- analyzer.CheckRules(pkg)
- analyzer.CheckAnalyzers(pkg)
-
- secIssues, _, _ := analyzer.Report()
- if len(secIssues) == 0 {
- return nil
- }
-
- severity, err := convertToScore(settings.Severity)
- if err != nil {
- lintCtx.Log.Warnf("The provided severity %v", err)
- }
-
- confidence, err := convertToScore(settings.Confidence)
- if err != nil {
- lintCtx.Log.Warnf("The provided confidence %v", err)
- }
-
- secIssues = filterIssues(secIssues, severity, confidence)
-
- issues := make([]goanalysis.Issue, 0, len(secIssues))
- for _, i := range secIssues {
- text := fmt.Sprintf("%s: %s", i.RuleID, i.What)
-
- var r *result.Range
-
- line, err := strconv.Atoi(i.Line)
- if err != nil {
- r = &result.Range{}
- if n, rerr := fmt.Sscanf(i.Line, "%d-%d", &r.From, &r.To); rerr != nil || n != 2 {
- lintCtx.Log.Warnf("Can't convert gosec line number %q of %v to int: %s", i.Line, i, err)
- continue
- }
- line = r.From
- }
-
- column, err := strconv.Atoi(i.Col)
- if err != nil {
- lintCtx.Log.Warnf("Can't convert gosec column number %q of %v to int: %s", i.Col, i, err)
- continue
- }
-
- issues = append(issues, goanalysis.NewIssue(&result.Issue{
- Severity: convertScoreToString(i.Severity),
- Pos: token.Position{
- Filename: i.File,
- Line: line,
- Column: column,
- },
- Text: text,
- LineRange: r,
- FromLinter: linterName,
- }, pass))
- }
-
- return issues
-}
-
-func toGosecConfig(settings *config.GoSecSettings) gosec.Config {
- conf := gosec.NewConfig()
-
- for k, v := range settings.Config {
- if k == gosec.Globals {
- convertGosecGlobals(v, conf)
- continue
- }
-
- // Uses ToUpper because the parsing of the map's key change the key to lowercase.
- // The value is not impacted by that: the case is respected.
- conf.Set(strings.ToUpper(k), v)
- }
-
- return conf
-}
-
-func convertScoreToString(score issue.Score) string {
- switch score {
- case issue.Low:
- return "low"
- case issue.Medium:
- return "medium"
- case issue.High:
- return "high"
- default:
- return ""
- }
-}
-
-// based on https://github.com/securego/gosec/blob/47bfd4eb6fc7395940933388550b547538b4c946/config.go#L52-L62
-func convertGosecGlobals(globalOptionFromConfig any, conf gosec.Config) {
- globalOptionMap, ok := globalOptionFromConfig.(map[string]any)
- if !ok {
- return
- }
-
- for k, v := range globalOptionMap {
- conf.SetGlobal(gosec.GlobalOption(k), fmt.Sprintf("%v", v))
- }
-}
-
-// based on https://github.com/securego/gosec/blob/81cda2f91fbe1bf4735feb55febcae03e697a92b/cmd/gosec/main.go#L258-L275
-func createAnalyzerFilters(includes, excludes []string) []analyzers.AnalyzerFilter {
- var filters []analyzers.AnalyzerFilter
-
- if len(includes) > 0 {
- filters = append(filters, analyzers.NewAnalyzerFilter(false, includes...))
- }
-
- if len(excludes) > 0 {
- filters = append(filters, analyzers.NewAnalyzerFilter(true, excludes...))
- }
-
- return filters
-}
-
-// based on https://github.com/securego/gosec/blob/569328eade2ccbad4ce2d0f21ee158ab5356a5cf/cmd/gosec/main.go#L170-L188
-func createRuleFilters(includes, excludes []string) []rules.RuleFilter {
- var filters []rules.RuleFilter
-
- if len(includes) > 0 {
- filters = append(filters, rules.NewRuleFilter(false, includes...))
- }
-
- if len(excludes) > 0 {
- filters = append(filters, rules.NewRuleFilter(true, excludes...))
- }
-
- return filters
-}
-
-// code borrowed from https://github.com/securego/gosec/blob/69213955dacfd560562e780f723486ef1ca6d486/cmd/gosec/main.go#L250-L262
-func convertToScore(str string) (issue.Score, error) {
- str = strings.ToLower(str)
- switch str {
- case "", "low":
- return issue.Low, nil
- case "medium":
- return issue.Medium, nil
- case "high":
- return issue.High, nil
- default:
- return issue.Low, fmt.Errorf("'%s' is invalid, use low instead. Valid options: low, medium, high", str)
- }
-}
-
-// code borrowed from https://github.com/securego/gosec/blob/69213955dacfd560562e780f723486ef1ca6d486/cmd/gosec/main.go#L264-L276
-func filterIssues(issues []*issue.Issue, severity, confidence issue.Score) []*issue.Issue {
- res := make([]*issue.Issue, 0)
-
- for _, i := range issues {
- if i.Severity >= severity && i.Confidence >= confidence {
- res = append(res, i)
- }
- }
-
- return res
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gosimple/gosimple.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gosimple/gosimple.go
deleted file mode 100644
index c03871adf..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gosimple/gosimple.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package gosimple
-
-import (
- "honnef.co/go/tools/simple"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
-)
-
-func New(settings *config.StaticCheckSettings) *goanalysis.Linter {
- cfg := internal.StaticCheckConfig(settings)
-
- analyzers := internal.SetupStaticCheckAnalyzers(simple.Analyzers, cfg.Checks)
-
- return goanalysis.NewLinter(
- "gosimple",
- "Linter for Go source code that specializes in simplifying code",
- analyzers,
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gosmopolitan/gosmopolitan.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/gosmopolitan/gosmopolitan.go
deleted file mode 100644
index 4f6fb8035..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/gosmopolitan/gosmopolitan.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package gosmopolitan
-
-import (
- "strings"
-
- "github.com/xen0n/gosmopolitan"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(s *config.GosmopolitanSettings) *goanalysis.Linter {
- a := gosmopolitan.NewAnalyzer()
-
- cfgMap := map[string]map[string]any{}
- if s != nil {
- cfgMap[a.Name] = map[string]any{
- "allowtimelocal": s.AllowTimeLocal,
- "escapehatches": strings.Join(s.EscapeHatches, ","),
- "lookattests": !s.IgnoreTests,
- "watchforscripts": strings.Join(s.WatchForScripts, ","),
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfgMap,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/govet/govet.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/govet/govet.go
deleted file mode 100644
index eb63a5d33..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/govet/govet.go
+++ /dev/null
@@ -1,223 +0,0 @@
-package govet
-
-import (
- "slices"
- "sort"
-
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/analysis/passes/appends"
- "golang.org/x/tools/go/analysis/passes/asmdecl"
- "golang.org/x/tools/go/analysis/passes/assign"
- "golang.org/x/tools/go/analysis/passes/atomic"
- "golang.org/x/tools/go/analysis/passes/atomicalign"
- "golang.org/x/tools/go/analysis/passes/bools"
- _ "golang.org/x/tools/go/analysis/passes/buildssa" // unused, internal analyzer
- "golang.org/x/tools/go/analysis/passes/buildtag"
- "golang.org/x/tools/go/analysis/passes/cgocall"
- "golang.org/x/tools/go/analysis/passes/composite"
- "golang.org/x/tools/go/analysis/passes/copylock"
- _ "golang.org/x/tools/go/analysis/passes/ctrlflow" // unused, internal analyzer
- "golang.org/x/tools/go/analysis/passes/deepequalerrors"
- "golang.org/x/tools/go/analysis/passes/defers"
- "golang.org/x/tools/go/analysis/passes/directive"
- "golang.org/x/tools/go/analysis/passes/errorsas"
- "golang.org/x/tools/go/analysis/passes/fieldalignment"
- "golang.org/x/tools/go/analysis/passes/findcall"
- "golang.org/x/tools/go/analysis/passes/framepointer"
- "golang.org/x/tools/go/analysis/passes/httpresponse"
- "golang.org/x/tools/go/analysis/passes/ifaceassert"
- _ "golang.org/x/tools/go/analysis/passes/inspect" // unused internal analyzer
- "golang.org/x/tools/go/analysis/passes/loopclosure"
- "golang.org/x/tools/go/analysis/passes/lostcancel"
- "golang.org/x/tools/go/analysis/passes/nilfunc"
- "golang.org/x/tools/go/analysis/passes/nilness"
- _ "golang.org/x/tools/go/analysis/passes/pkgfact" // unused, internal analyzer
- "golang.org/x/tools/go/analysis/passes/printf"
- "golang.org/x/tools/go/analysis/passes/reflectvaluecompare"
- "golang.org/x/tools/go/analysis/passes/shadow"
- "golang.org/x/tools/go/analysis/passes/shift"
- "golang.org/x/tools/go/analysis/passes/sigchanyzer"
- "golang.org/x/tools/go/analysis/passes/slog"
- "golang.org/x/tools/go/analysis/passes/sortslice"
- "golang.org/x/tools/go/analysis/passes/stdmethods"
- "golang.org/x/tools/go/analysis/passes/stringintconv"
- "golang.org/x/tools/go/analysis/passes/structtag"
- "golang.org/x/tools/go/analysis/passes/testinggoroutine"
- "golang.org/x/tools/go/analysis/passes/tests"
- "golang.org/x/tools/go/analysis/passes/timeformat"
- "golang.org/x/tools/go/analysis/passes/unmarshal"
- "golang.org/x/tools/go/analysis/passes/unreachable"
- "golang.org/x/tools/go/analysis/passes/unsafeptr"
- "golang.org/x/tools/go/analysis/passes/unusedresult"
- "golang.org/x/tools/go/analysis/passes/unusedwrite"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-var (
- allAnalyzers = []*analysis.Analyzer{
- appends.Analyzer,
- asmdecl.Analyzer,
- assign.Analyzer,
- atomic.Analyzer,
- atomicalign.Analyzer,
- bools.Analyzer,
- buildtag.Analyzer,
- cgocall.Analyzer,
- composite.Analyzer,
- copylock.Analyzer,
- deepequalerrors.Analyzer,
- defers.Analyzer,
- directive.Analyzer,
- errorsas.Analyzer,
- fieldalignment.Analyzer,
- findcall.Analyzer,
- framepointer.Analyzer,
- httpresponse.Analyzer,
- ifaceassert.Analyzer,
- loopclosure.Analyzer,
- lostcancel.Analyzer,
- nilfunc.Analyzer,
- nilness.Analyzer,
- printf.Analyzer,
- reflectvaluecompare.Analyzer,
- shadow.Analyzer,
- shift.Analyzer,
- sigchanyzer.Analyzer,
- slog.Analyzer,
- sortslice.Analyzer,
- stdmethods.Analyzer,
- stringintconv.Analyzer,
- structtag.Analyzer,
- testinggoroutine.Analyzer,
- tests.Analyzer,
- timeformat.Analyzer,
- unmarshal.Analyzer,
- unreachable.Analyzer,
- unsafeptr.Analyzer,
- unusedresult.Analyzer,
- unusedwrite.Analyzer,
- }
-
- // https://github.com/golang/go/blob/b56645a87b28840a180d64077877cb46570b4176/src/cmd/vet/main.go#L49-L81
- defaultAnalyzers = []*analysis.Analyzer{
- appends.Analyzer,
- asmdecl.Analyzer,
- assign.Analyzer,
- atomic.Analyzer,
- bools.Analyzer,
- buildtag.Analyzer,
- cgocall.Analyzer,
- composite.Analyzer,
- copylock.Analyzer,
- defers.Analyzer,
- directive.Analyzer,
- errorsas.Analyzer,
- framepointer.Analyzer,
- httpresponse.Analyzer,
- ifaceassert.Analyzer,
- loopclosure.Analyzer,
- lostcancel.Analyzer,
- nilfunc.Analyzer,
- printf.Analyzer,
- shift.Analyzer,
- sigchanyzer.Analyzer,
- slog.Analyzer,
- stdmethods.Analyzer,
- stringintconv.Analyzer,
- structtag.Analyzer,
- testinggoroutine.Analyzer,
- tests.Analyzer,
- timeformat.Analyzer,
- unmarshal.Analyzer,
- unreachable.Analyzer,
- unsafeptr.Analyzer,
- unusedresult.Analyzer,
- }
-)
-
-var (
- debugf = logutils.Debug(logutils.DebugKeyGovet)
- isDebug = logutils.HaveDebugTag(logutils.DebugKeyGovet)
-)
-
-func New(settings *config.GovetSettings) *goanalysis.Linter {
- var conf map[string]map[string]any
- if settings != nil {
- conf = settings.Settings
- }
-
- return goanalysis.NewLinter(
- "govet",
- "Vet examines Go source code and reports suspicious constructs. "+
- "It is roughly the same as 'go vet' and uses its passes.",
- analyzersFromConfig(settings),
- conf,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-func analyzersFromConfig(settings *config.GovetSettings) []*analysis.Analyzer {
- debugAnalyzersListf(allAnalyzers, "All available analyzers")
- debugAnalyzersListf(defaultAnalyzers, "Default analyzers")
-
- if settings == nil {
- return defaultAnalyzers
- }
-
- var enabledAnalyzers []*analysis.Analyzer
- for _, a := range allAnalyzers {
- if isAnalyzerEnabled(a.Name, settings, defaultAnalyzers) {
- enabledAnalyzers = append(enabledAnalyzers, a)
- }
- }
-
- debugAnalyzersListf(enabledAnalyzers, "Enabled by config analyzers")
-
- return enabledAnalyzers
-}
-
-func isAnalyzerEnabled(name string, cfg *config.GovetSettings, defaultAnalyzers []*analysis.Analyzer) bool {
- // TODO(ldez) remove loopclosure when go1.24
- if name == loopclosure.Analyzer.Name && config.IsGoGreaterThanOrEqual(cfg.Go, "1.22") {
- return false
- }
-
- // Keeping for backward compatibility.
- if cfg.CheckShadowing && name == shadow.Analyzer.Name {
- return true
- }
-
- switch {
- case cfg.EnableAll:
- return !slices.Contains(cfg.Disable, name)
-
- case slices.Contains(cfg.Enable, name):
- return true
-
- case slices.Contains(cfg.Disable, name):
- return false
-
- case cfg.DisableAll:
- return false
-
- default:
- return slices.ContainsFunc(defaultAnalyzers, func(a *analysis.Analyzer) bool { return a.Name == name })
- }
-}
-
-func debugAnalyzersListf(analyzers []*analysis.Analyzer, message string) {
- if !isDebug {
- return
- }
-
- analyzerNames := make([]string, 0, len(analyzers))
- for _, a := range analyzers {
- analyzerNames = append(analyzerNames, a.Name)
- }
-
- sort.Strings(analyzerNames)
-
- debugf("%s (%d): %s", message, len(analyzerNames), analyzerNames)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/grouper/grouper.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/grouper/grouper.go
deleted file mode 100644
index aa6ce1ceb..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/grouper/grouper.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package grouper
-
-import (
- grouper "github.com/leonklingele/grouper/pkg/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.GrouperSettings) *goanalysis.Linter {
- a := grouper.New()
-
- linterCfg := map[string]map[string]any{}
- if settings != nil {
- linterCfg[a.Name] = map[string]any{
- "const-require-single-const": settings.ConstRequireSingleConst,
- "const-require-grouping": settings.ConstRequireGrouping,
- "import-require-single-import": settings.ImportRequireSingleImport,
- "import-require-grouping": settings.ImportRequireGrouping,
- "type-require-single-type": settings.TypeRequireSingleType,
- "type-require-grouping": settings.TypeRequireGrouping,
- "var-require-single-var": settings.VarRequireSingleVar,
- "var-require-grouping": settings.VarRequireGrouping,
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- "Analyze expression groups.",
- []*analysis.Analyzer{a},
- linterCfg,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/iface/iface.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/iface/iface.go
deleted file mode 100644
index 31f88160e..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/iface/iface.go
+++ /dev/null
@@ -1,57 +0,0 @@
-package iface
-
-import (
- "slices"
-
- "github.com/uudashr/iface/identical"
- "github.com/uudashr/iface/opaque"
- "github.com/uudashr/iface/unused"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.IfaceSettings) *goanalysis.Linter {
- var conf map[string]map[string]any
- if settings != nil {
- conf = settings.Settings
- }
-
- return goanalysis.NewLinter(
- "iface",
- "Detect the incorrect use of interfaces, helping developers avoid interface pollution.",
- analyzersFromSettings(settings),
- conf,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-func analyzersFromSettings(settings *config.IfaceSettings) []*analysis.Analyzer {
- allAnalyzers := map[string]*analysis.Analyzer{
- "identical": identical.Analyzer,
- "unused": unused.Analyzer,
- "opaque": opaque.Analyzer,
- }
-
- if settings == nil || len(settings.Enable) == 0 {
- // Default enable `identical` analyzer only
- return []*analysis.Analyzer{identical.Analyzer}
- }
-
- var analyzers []*analysis.Analyzer
- for _, name := range uniqueNames(settings.Enable) {
- if _, ok := allAnalyzers[name]; !ok {
- // skip unknown analyzer
- continue
- }
-
- analyzers = append(analyzers, allAnalyzers[name])
- }
-
- return analyzers
-}
-
-func uniqueNames(names []string) []string {
- slices.Sort(names)
- return slices.Compact(names)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/importas/importas.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/importas/importas.go
deleted file mode 100644
index 45117c9a4..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/importas/importas.go
+++ /dev/null
@@ -1,67 +0,0 @@
-package importas
-
-import (
- "fmt"
- "strconv"
- "strings"
-
- "github.com/julz/importas"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
-)
-
-func New(settings *config.ImportAsSettings) *goanalysis.Linter {
- analyzer := importas.Analyzer
-
- return goanalysis.NewLinter(
- analyzer.Name,
- analyzer.Doc,
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- if settings == nil {
- return
- }
- if len(settings.Alias) == 0 {
- lintCtx.Log.Infof("importas settings found, but no aliases listed. List aliases under alias: key.")
- }
-
- if err := analyzer.Flags.Set("no-unaliased", strconv.FormatBool(settings.NoUnaliased)); err != nil {
- lintCtx.Log.Errorf("failed to parse configuration: %v", err)
- }
-
- if err := analyzer.Flags.Set("no-extra-aliases", strconv.FormatBool(settings.NoExtraAliases)); err != nil {
- lintCtx.Log.Errorf("failed to parse configuration: %v", err)
- }
-
- uniqPackages := make(map[string]config.ImportAsAlias)
- uniqAliases := make(map[string]config.ImportAsAlias)
- for _, a := range settings.Alias {
- if a.Pkg == "" {
- lintCtx.Log.Errorf("invalid configuration, empty package: pkg=%s alias=%s", a.Pkg, a.Alias)
- continue
- }
-
- if v, ok := uniqPackages[a.Pkg]; ok {
- lintCtx.Log.Errorf("invalid configuration, multiple aliases for the same package: pkg=%s aliases=[%s,%s]", a.Pkg, a.Alias, v.Alias)
- } else {
- uniqPackages[a.Pkg] = a
- }
-
- // skip the duplication check when the alias is a regular expression replacement pattern (ie. contains `$`).
- if v, ok := uniqAliases[a.Alias]; ok && !strings.Contains(a.Alias, "$") {
- lintCtx.Log.Errorf("invalid configuration, multiple packages with the same alias: alias=%s packages=[%s,%s]", a.Alias, a.Pkg, v.Pkg)
- } else {
- uniqAliases[a.Alias] = a
- }
-
- err := analyzer.Flags.Set("alias", fmt.Sprintf("%s:%s", a.Pkg, a.Alias))
- if err != nil {
- lintCtx.Log.Errorf("failed to parse configuration: %v", err)
- }
- }
- }).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/inamedparam/inamedparam.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/inamedparam/inamedparam.go
deleted file mode 100644
index 5cf06a08c..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/inamedparam/inamedparam.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package inamedparam
-
-import (
- "github.com/macabu/inamedparam"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.INamedParamSettings) *goanalysis.Linter {
- a := inamedparam.Analyzer
-
- var cfg map[string]map[string]any
-
- if settings != nil {
- cfg = map[string]map[string]any{
- a.Name: {
- "skip-single-param": settings.SkipSingleParam,
- },
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/ineffassign/ineffassign.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/ineffassign/ineffassign.go
deleted file mode 100644
index ba86fb90e..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/ineffassign/ineffassign.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package ineffassign
-
-import (
- "github.com/gordonklaus/ineffassign/pkg/ineffassign"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := ineffassign.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- "Detects when assignments to existing variables are not used",
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/interfacebloat/interfacebloat.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/interfacebloat/interfacebloat.go
deleted file mode 100644
index 88927a3d9..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/interfacebloat/interfacebloat.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package interfacebloat
-
-import (
- "github.com/sashamelentyev/interfacebloat/pkg/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.InterfaceBloatSettings) *goanalysis.Linter {
- a := analyzer.New()
-
- var cfg map[string]map[string]any
- if settings != nil {
- cfg = map[string]map[string]any{
- a.Name: {
- analyzer.InterfaceMaxMethodsFlag: settings.Max,
- },
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/commons.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/commons.go
deleted file mode 100644
index c21dd0092..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/commons.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package internal
-
-import "github.com/golangci/golangci-lint/pkg/logutils"
-
-// LinterLogger must be use only when the context logger is not available.
-var LinterLogger = logutils.NewStderrLog(logutils.DebugKeyLinter)
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/diff.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/diff.go
deleted file mode 100644
index f919c5b2a..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/diff.go
+++ /dev/null
@@ -1,264 +0,0 @@
-package internal
-
-import (
- "bytes"
- "fmt"
- "go/token"
- "strings"
-
- diffpkg "github.com/sourcegraph/go-diff/diff"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-type Change struct {
- LineRange result.Range
- Replacement result.Replacement
-}
-
-type diffLineType string
-
-const (
- diffLineAdded diffLineType = "added"
- diffLineOriginal diffLineType = "original"
- diffLineDeleted diffLineType = "deleted"
-)
-
-type fmtTextFormatter func(settings *config.LintersSettings) string
-
-type diffLine struct {
- originalNumber int // 1-based original line number
- typ diffLineType
- data string // "+" or "-" stripped line
-}
-
-type hunkChangesParser struct {
- // needed because we merge currently added lines with the last original line
- lastOriginalLine *diffLine
-
- // if the first line of diff is an adding we save all additions to replacementLinesToPrepend
- replacementLinesToPrepend []string
-
- log logutils.Log
-
- lines []diffLine
-
- ret []Change
-}
-
-func (p *hunkChangesParser) parseDiffLines(h *diffpkg.Hunk) {
- lines := bytes.Split(h.Body, []byte{'\n'})
- currentOriginalLineNumber := int(h.OrigStartLine)
- var ret []diffLine
-
- for i, line := range lines {
- dl := diffLine{
- originalNumber: currentOriginalLineNumber,
- }
-
- lineStr := string(line)
-
- if strings.HasPrefix(lineStr, "-") {
- dl.typ = diffLineDeleted
- dl.data = strings.TrimPrefix(lineStr, "-")
- currentOriginalLineNumber++
- } else if strings.HasPrefix(lineStr, "+") {
- dl.typ = diffLineAdded
- dl.data = strings.TrimPrefix(lineStr, "+")
- } else {
- if i == len(lines)-1 && lineStr == "" {
- // handle last \n: don't add an empty original line
- break
- }
-
- dl.typ = diffLineOriginal
- dl.data = strings.TrimPrefix(lineStr, " ")
- currentOriginalLineNumber++
- }
-
- ret = append(ret, dl)
- }
-
- // if > 0, then the original file had a 'No newline at end of file' mark
- if h.OrigNoNewlineAt > 0 {
- dl := diffLine{
- originalNumber: currentOriginalLineNumber + 1,
- typ: diffLineAdded,
- data: "",
- }
- ret = append(ret, dl)
- }
-
- p.lines = ret
-}
-
-func (p *hunkChangesParser) handleOriginalLine(line diffLine, i *int) {
- if len(p.replacementLinesToPrepend) == 0 {
- p.lastOriginalLine = &line
- *i++
- return
- }
-
- // check following added lines for the case:
- // + added line 1
- // original line
- // + added line 2
-
- *i++
- var followingAddedLines []string
- for ; *i < len(p.lines) && p.lines[*i].typ == diffLineAdded; *i++ {
- followingAddedLines = append(followingAddedLines, p.lines[*i].data)
- }
-
- p.ret = append(p.ret, Change{
- LineRange: result.Range{
- From: line.originalNumber,
- To: line.originalNumber,
- },
- Replacement: result.Replacement{
- NewLines: append(p.replacementLinesToPrepend, append([]string{line.data}, followingAddedLines...)...),
- },
- })
- p.replacementLinesToPrepend = nil
- p.lastOriginalLine = &line
-}
-
-func (p *hunkChangesParser) handleDeletedLines(deletedLines []diffLine, addedLines []string) {
- change := Change{
- LineRange: result.Range{
- From: deletedLines[0].originalNumber,
- To: deletedLines[len(deletedLines)-1].originalNumber,
- },
- }
-
- if len(addedLines) != 0 {
- change.Replacement.NewLines = append([]string{}, p.replacementLinesToPrepend...)
- change.Replacement.NewLines = append(change.Replacement.NewLines, addedLines...)
- if len(p.replacementLinesToPrepend) != 0 {
- p.replacementLinesToPrepend = nil
- }
-
- p.ret = append(p.ret, change)
- return
- }
-
- // delete-only change with possible prepending
- if len(p.replacementLinesToPrepend) != 0 {
- change.Replacement.NewLines = p.replacementLinesToPrepend
- p.replacementLinesToPrepend = nil
- } else {
- change.Replacement.NeedOnlyDelete = true
- }
-
- p.ret = append(p.ret, change)
-}
-
-func (p *hunkChangesParser) handleAddedOnlyLines(addedLines []string) {
- if p.lastOriginalLine == nil {
- // the first line is added; the diff looks like:
- // 1. + ...
- // 2. - ...
- // or
- // 1. + ...
- // 2. ...
-
- p.replacementLinesToPrepend = addedLines
- return
- }
-
- // add-only change merged into the last original line with possible prepending
- p.ret = append(p.ret, Change{
- LineRange: result.Range{
- From: p.lastOriginalLine.originalNumber,
- To: p.lastOriginalLine.originalNumber,
- },
- Replacement: result.Replacement{
- NewLines: append(p.replacementLinesToPrepend, append([]string{p.lastOriginalLine.data}, addedLines...)...),
- },
- })
- p.replacementLinesToPrepend = nil
-}
-
-func (p *hunkChangesParser) parse(h *diffpkg.Hunk) []Change {
- p.parseDiffLines(h)
-
- for i := 0; i < len(p.lines); {
- line := p.lines[i]
- if line.typ == diffLineOriginal {
- p.handleOriginalLine(line, &i)
- continue
- }
-
- var deletedLines []diffLine
- for ; i < len(p.lines) && p.lines[i].typ == diffLineDeleted; i++ {
- deletedLines = append(deletedLines, p.lines[i])
- }
-
- var addedLines []string
- for ; i < len(p.lines) && p.lines[i].typ == diffLineAdded; i++ {
- addedLines = append(addedLines, p.lines[i].data)
- }
-
- if len(deletedLines) != 0 {
- p.handleDeletedLines(deletedLines, addedLines)
- continue
- }
-
- // no deletions, only additions
- p.handleAddedOnlyLines(addedLines)
- }
-
- if len(p.replacementLinesToPrepend) != 0 {
- p.log.Infof("The diff contains only additions: no original or deleted lines: %#v", p.lines)
- return nil
- }
-
- return p.ret
-}
-
-func ExtractIssuesFromPatch(patch string, lintCtx *linter.Context, linterName string, formatter fmtTextFormatter) ([]result.Issue, error) {
- diffs, err := diffpkg.ParseMultiFileDiff([]byte(patch))
- if err != nil {
- return nil, fmt.Errorf("can't parse patch: %w", err)
- }
-
- if len(diffs) == 0 {
- return nil, fmt.Errorf("got no diffs from patch parser: %v", patch)
- }
-
- var issues []result.Issue
- for _, d := range diffs {
- if len(d.Hunks) == 0 {
- lintCtx.Log.Warnf("Got no hunks in diff %+v", d)
- continue
- }
-
- for _, hunk := range d.Hunks {
- p := hunkChangesParser{log: lintCtx.Log}
-
- changes := p.parse(hunk)
-
- for _, change := range changes {
- i := result.Issue{
- FromLinter: linterName,
- Pos: token.Position{
- Filename: d.NewName,
- Line: change.LineRange.From,
- },
- Text: formatter(lintCtx.Settings()),
- Replacement: &change.Replacement,
- }
- if change.LineRange.From != change.LineRange.To {
- i.LineRange = &change.LineRange
- }
-
- issues = append(issues, i)
- }
- }
- }
-
- return issues, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/staticcheck_common.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/staticcheck_common.go
deleted file mode 100644
index e5a0e33b7..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/staticcheck_common.go
+++ /dev/null
@@ -1,143 +0,0 @@
-package internal
-
-import (
- "strings"
- "unicode"
-
- "golang.org/x/tools/go/analysis"
- "honnef.co/go/tools/analysis/lint"
- scconfig "honnef.co/go/tools/config"
-
- "github.com/golangci/golangci-lint/pkg/config"
-)
-
-func SetupStaticCheckAnalyzers(src []*lint.Analyzer, checks []string) []*analysis.Analyzer {
- var names []string
- for _, a := range src {
- names = append(names, a.Analyzer.Name)
- }
-
- filter := filterAnalyzerNames(names, checks)
-
- var ret []*analysis.Analyzer
- for _, a := range src {
- if filter[a.Analyzer.Name] {
- ret = append(ret, a.Analyzer)
- }
- }
-
- return ret
-}
-
-func StaticCheckConfig(settings *config.StaticCheckSettings) *scconfig.Config {
- var cfg *scconfig.Config
-
- if settings == nil || !settings.HasConfiguration() {
- return &scconfig.Config{
- Checks: []string{"*"}, // override for compatibility reason. Must drop in the next major version.
- Initialisms: scconfig.DefaultConfig.Initialisms,
- DotImportWhitelist: scconfig.DefaultConfig.DotImportWhitelist,
- HTTPStatusCodeWhitelist: scconfig.DefaultConfig.HTTPStatusCodeWhitelist,
- }
- }
-
- cfg = &scconfig.Config{
- Checks: settings.Checks,
- Initialisms: settings.Initialisms,
- DotImportWhitelist: settings.DotImportWhitelist,
- HTTPStatusCodeWhitelist: settings.HTTPStatusCodeWhitelist,
- }
-
- if len(cfg.Checks) == 0 {
- cfg.Checks = append(cfg.Checks, "*") // override for compatibility reason. Must drop in the next major version.
- }
-
- if len(cfg.Initialisms) == 0 {
- cfg.Initialisms = append(cfg.Initialisms, scconfig.DefaultConfig.Initialisms...)
- }
-
- if len(cfg.DotImportWhitelist) == 0 {
- cfg.DotImportWhitelist = append(cfg.DotImportWhitelist, scconfig.DefaultConfig.DotImportWhitelist...)
- }
-
- if len(cfg.HTTPStatusCodeWhitelist) == 0 {
- cfg.HTTPStatusCodeWhitelist = append(cfg.HTTPStatusCodeWhitelist, scconfig.DefaultConfig.HTTPStatusCodeWhitelist...)
- }
-
- cfg.Checks = normalizeList(cfg.Checks)
- cfg.Initialisms = normalizeList(cfg.Initialisms)
- cfg.DotImportWhitelist = normalizeList(cfg.DotImportWhitelist)
- cfg.HTTPStatusCodeWhitelist = normalizeList(cfg.HTTPStatusCodeWhitelist)
-
- return cfg
-}
-
-// https://github.com/dominikh/go-tools/blob/9bf17c0388a65710524ba04c2d821469e639fdc2/lintcmd/lint.go#L437-L477
-//
-//nolint:gocritic // Keep the original source code.
-func filterAnalyzerNames(analyzers []string, checks []string) map[string]bool {
- allowedChecks := map[string]bool{}
-
- for _, check := range checks {
- b := true
- if len(check) > 1 && check[0] == '-' {
- b = false
- check = check[1:]
- }
-
- if check == "*" || check == "all" {
- // Match all
- for _, c := range analyzers {
- allowedChecks[c] = b
- }
- } else if strings.HasSuffix(check, "*") {
- // Glob
- prefix := check[:len(check)-1]
- isCat := strings.IndexFunc(prefix, func(r rune) bool { return unicode.IsNumber(r) }) == -1
-
- for _, a := range analyzers {
- idx := strings.IndexFunc(a, func(r rune) bool { return unicode.IsNumber(r) })
- if isCat {
- // Glob is S*, which should match S1000 but not SA1000
- cat := a[:idx]
- if prefix == cat {
- allowedChecks[a] = b
- }
- } else {
- // Glob is S1*
- if strings.HasPrefix(a, prefix) {
- allowedChecks[a] = b
- }
- }
- }
- } else {
- // Literal check name
- allowedChecks[check] = b
- }
- }
- return allowedChecks
-}
-
-// https://github.com/dominikh/go-tools/blob/9bf17c0388a65710524ba04c2d821469e639fdc2/config/config.go#L95-L116
-func normalizeList(list []string) []string {
- if len(list) > 1 {
- nlist := make([]string, 0, len(list))
- nlist = append(nlist, list[0])
- for i, el := range list[1:] {
- if el != list[i] {
- nlist = append(nlist, el)
- }
- }
- list = nlist
- }
-
- for _, el := range list {
- if el == "inherit" {
- // This should never happen, because the default config
- // should not use "inherit"
- panic(`unresolved "inherit"`)
- }
- }
-
- return list
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/util.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/util.go
deleted file mode 100644
index 80b194dd2..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/internal/util.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package internal
-
-import (
- "fmt"
- "path/filepath"
- "strings"
-
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
-)
-
-func FormatCode(code string, _ *config.Config) string {
- if strings.Contains(code, "`") {
- return code // TODO: properly escape or remove
- }
-
- return fmt.Sprintf("`%s`", code)
-}
-
-func GetFileNames(pass *analysis.Pass) []string {
- var fileNames []string
- for _, f := range pass.Files {
- fileName := pass.Fset.PositionFor(f.Pos(), true).Filename
- ext := filepath.Ext(fileName)
- if ext != "" && ext != ".go" {
- // position has been adjusted to a non-go file, revert to original file
- fileName = pass.Fset.PositionFor(f.Pos(), false).Filename
- }
- fileNames = append(fileNames, fileName)
- }
- return fileNames
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/intrange/intrange.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/intrange/intrange.go
deleted file mode 100644
index d5ffd4345..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/intrange/intrange.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package intrange
-
-import (
- "github.com/ckaznocha/intrange"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := intrange.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/ireturn/ireturn.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/ireturn/ireturn.go
deleted file mode 100644
index 57de57111..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/ireturn/ireturn.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package ireturn
-
-import (
- "strings"
-
- "github.com/butuzov/ireturn/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.IreturnSettings) *goanalysis.Linter {
- a := analyzer.NewAnalyzer()
-
- cfg := map[string]map[string]any{}
- if settings != nil {
- cfg[a.Name] = map[string]any{
- "allow": strings.Join(settings.Allow, ","),
- "reject": strings.Join(settings.Reject, ","),
- "nonolint": true,
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/lll/lll.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/lll/lll.go
deleted file mode 100644
index 67f89eecb..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/lll/lll.go
+++ /dev/null
@@ -1,157 +0,0 @@
-package lll
-
-import (
- "bufio"
- "errors"
- "fmt"
- "go/token"
- "os"
- "strings"
- "sync"
- "unicode/utf8"
-
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "lll"
-
-const goCommentDirectivePrefix = "//go:"
-
-func New(settings *config.LllSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues, err := runLll(pass, settings)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Reports long lines",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runLll(pass *analysis.Pass, settings *config.LllSettings) ([]goanalysis.Issue, error) {
- fileNames := internal.GetFileNames(pass)
-
- spaces := strings.Repeat(" ", settings.TabWidth)
-
- var issues []goanalysis.Issue
- for _, f := range fileNames {
- lintIssues, err := getLLLIssuesForFile(f, settings.LineLength, spaces)
- if err != nil {
- return nil, err
- }
-
- for i := range lintIssues {
- issues = append(issues, goanalysis.NewIssue(&lintIssues[i], pass))
- }
- }
-
- return issues, nil
-}
-
-func getLLLIssuesForFile(filename string, maxLineLen int, tabSpaces string) ([]result.Issue, error) {
- var res []result.Issue
-
- f, err := os.Open(filename)
- if err != nil {
- return nil, fmt.Errorf("can't open file %s: %w", filename, err)
- }
- defer f.Close()
-
- lineNumber := 0
- multiImportEnabled := false
-
- scanner := bufio.NewScanner(f)
- for scanner.Scan() {
- lineNumber++
-
- line := scanner.Text()
- line = strings.ReplaceAll(line, "\t", tabSpaces)
-
- if strings.HasPrefix(line, goCommentDirectivePrefix) {
- continue
- }
-
- if strings.HasPrefix(line, "import") {
- multiImportEnabled = strings.HasSuffix(line, "(")
- continue
- }
-
- if multiImportEnabled {
- if line == ")" {
- multiImportEnabled = false
- }
-
- continue
- }
-
- lineLen := utf8.RuneCountInString(line)
- if lineLen > maxLineLen {
- res = append(res, result.Issue{
- Pos: token.Position{
- Filename: filename,
- Line: lineNumber,
- },
- Text: fmt.Sprintf("the line is %d characters long, which exceeds the maximum of %d characters.", lineLen, maxLineLen),
- FromLinter: linterName,
- })
- }
- }
-
- if err := scanner.Err(); err != nil {
- if errors.Is(err, bufio.ErrTooLong) && maxLineLen < bufio.MaxScanTokenSize {
- // scanner.Scan() might fail if the line is longer than bufio.MaxScanTokenSize
- // In the case where the specified maxLineLen is smaller than bufio.MaxScanTokenSize
- // we can return this line as a long line instead of returning an error.
- // The reason for this change is that this case might happen with autogenerated files
- // The go-bindata tool for instance might generate a file with a very long line.
- // In this case, as it's an auto generated file, the warning returned by lll will
- // be ignored.
- // But if we return a linter error here, and this error happens for an autogenerated
- // file the error will be discarded (fine), but all the subsequent errors for lll will
- // be discarded for other files, and we'll miss legit error.
- res = append(res, result.Issue{
- Pos: token.Position{
- Filename: filename,
- Line: lineNumber,
- Column: 1,
- },
- Text: fmt.Sprintf("line is more than %d characters", bufio.MaxScanTokenSize),
- FromLinter: linterName,
- })
- } else {
- return nil, fmt.Errorf("can't scan file %s: %w", filename, err)
- }
- }
-
- return res, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/loggercheck/loggercheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/loggercheck/loggercheck.go
deleted file mode 100644
index 077e8a512..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/loggercheck/loggercheck.go
+++ /dev/null
@@ -1,44 +0,0 @@
-package loggercheck
-
-import (
- "github.com/timonwong/loggercheck"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.LoggerCheckSettings) *goanalysis.Linter {
- var opts []loggercheck.Option
-
- if settings != nil {
- var disable []string
- if !settings.Kitlog {
- disable = append(disable, "kitlog")
- }
- if !settings.Klog {
- disable = append(disable, "klog")
- }
- if !settings.Logr {
- disable = append(disable, "logr")
- }
- if !settings.Zap {
- disable = append(disable, "zap")
- }
-
- opts = []loggercheck.Option{
- loggercheck.WithDisable(disable),
- loggercheck.WithRequireStringKey(settings.RequireStringKey),
- loggercheck.WithRules(settings.Rules),
- loggercheck.WithNoPrintfLike(settings.NoPrintfLike),
- }
- }
-
- analyzer := loggercheck.NewAnalyzer(opts...)
- return goanalysis.NewLinter(
- analyzer.Name,
- analyzer.Doc,
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/maintidx/maintidx.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/maintidx/maintidx.go
deleted file mode 100644
index 08f12369e..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/maintidx/maintidx.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package maintidx
-
-import (
- "github.com/yagipy/maintidx"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(cfg *config.MaintIdxSettings) *goanalysis.Linter {
- analyzer := maintidx.Analyzer
-
- cfgMap := map[string]map[string]any{
- analyzer.Name: {"under": 20},
- }
-
- if cfg != nil {
- cfgMap[analyzer.Name] = map[string]any{
- "under": cfg.Under,
- }
- }
-
- return goanalysis.NewLinter(
- analyzer.Name,
- analyzer.Doc,
- []*analysis.Analyzer{analyzer},
- cfgMap,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/makezero/makezero.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/makezero/makezero.go
deleted file mode 100644
index ae4bf2184..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/makezero/makezero.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package makezero
-
-import (
- "fmt"
- "sync"
-
- "github.com/ashanbrown/makezero/makezero"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "makezero"
-
-func New(settings *config.MakezeroSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues, err := runMakeZero(pass, settings)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Finds slice declarations with non-zero initial length",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-func runMakeZero(pass *analysis.Pass, settings *config.MakezeroSettings) ([]goanalysis.Issue, error) {
- zero := makezero.NewLinter(settings.Always)
-
- var issues []goanalysis.Issue
-
- for _, file := range pass.Files {
- hints, err := zero.Run(pass.Fset, pass.TypesInfo, file)
- if err != nil {
- return nil, fmt.Errorf("makezero linter failed on file %q: %w", file.Name.String(), err)
- }
-
- for _, hint := range hints {
- issues = append(issues, goanalysis.NewIssue(&result.Issue{
- Pos: hint.Position(),
- Text: hint.Details(),
- FromLinter: linterName,
- }, pass))
- }
- }
-
- return issues, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/mirror/mirror.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/mirror/mirror.go
deleted file mode 100644
index 34b880b52..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/mirror/mirror.go
+++ /dev/null
@@ -1,70 +0,0 @@
-package mirror
-
-import (
- "sync"
-
- "github.com/butuzov/mirror"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-func New() *goanalysis.Linter {
- var (
- mu sync.Mutex
- issues []goanalysis.Issue
- )
-
- a := mirror.NewAnalyzer()
- a.Run = func(pass *analysis.Pass) (any, error) {
- // mirror only lints test files if the `--with-tests` flag is passed,
- // so we pass the `with-tests` flag as true to the analyzer before running it.
- // This can be turned off by using the regular golangci-lint flags such as `--tests` or `--skip-files`
- // or can be disabled per linter via exclude rules.
- // (see https://github.com/golangci/golangci-lint/issues/2527#issuecomment-1023707262)
- violations := mirror.Run(pass, true)
-
- if len(violations) == 0 {
- return nil, nil
- }
-
- for index := range violations {
- i := violations[index].Issue(pass.Fset)
-
- issue := result.Issue{
- FromLinter: a.Name,
- Text: i.Message,
- Pos: i.Start,
- }
-
- if i.InlineFix != "" {
- issue.Replacement = &result.Replacement{
- Inline: &result.InlineFix{
- StartCol: i.Start.Column - 1,
- Length: len(i.Original),
- NewString: i.InlineFix,
- },
- }
- }
-
- mu.Lock()
- issues = append(issues, goanalysis.NewIssue(&issue, pass))
- mu.Unlock()
- }
-
- return nil, nil
- }
-
- analyzer := goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return issues
- }).WithLoadMode(goanalysis.LoadModeTypesInfo)
-
- return analyzer
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/misspell/misspell.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/misspell/misspell.go
deleted file mode 100644
index 44409cec9..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/misspell/misspell.go
+++ /dev/null
@@ -1,189 +0,0 @@
-package misspell
-
-import (
- "fmt"
- "go/token"
- "strings"
- "sync"
- "unicode"
-
- "github.com/golangci/misspell"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "misspell"
-
-func New(settings *config.MisspellSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: goanalysis.DummyRun,
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Finds commonly misspelled English words",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- replacer, ruleErr := createMisspellReplacer(settings)
-
- analyzer.Run = func(pass *analysis.Pass) (any, error) {
- if ruleErr != nil {
- return nil, ruleErr
- }
-
- issues, err := runMisspell(lintCtx, pass, replacer, settings.Mode)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- }
- }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runMisspell(lintCtx *linter.Context, pass *analysis.Pass, replacer *misspell.Replacer, mode string) ([]goanalysis.Issue, error) {
- fileNames := internal.GetFileNames(pass)
-
- var issues []goanalysis.Issue
- for _, filename := range fileNames {
- lintIssues, err := runMisspellOnFile(lintCtx, filename, replacer, mode)
- if err != nil {
- return nil, err
- }
-
- for i := range lintIssues {
- issues = append(issues, goanalysis.NewIssue(&lintIssues[i], pass))
- }
- }
-
- return issues, nil
-}
-
-func createMisspellReplacer(settings *config.MisspellSettings) (*misspell.Replacer, error) {
- replacer := &misspell.Replacer{
- Replacements: misspell.DictMain,
- }
-
- // Figure out regional variations
- switch strings.ToUpper(settings.Locale) {
- case "":
- // nothing
- case "US":
- replacer.AddRuleList(misspell.DictAmerican)
- case "UK", "GB":
- replacer.AddRuleList(misspell.DictBritish)
- case "NZ", "AU", "CA":
- return nil, fmt.Errorf("unknown locale: %q", settings.Locale)
- }
-
- err := appendExtraWords(replacer, settings.ExtraWords)
- if err != nil {
- return nil, fmt.Errorf("process extra words: %w", err)
- }
-
- if len(settings.IgnoreWords) != 0 {
- replacer.RemoveRule(settings.IgnoreWords)
- }
-
- // It can panic.
- replacer.Compile()
-
- return replacer, nil
-}
-
-func runMisspellOnFile(lintCtx *linter.Context, filename string, replacer *misspell.Replacer, mode string) ([]result.Issue, error) {
- fileContent, err := lintCtx.FileCache.GetFileBytes(filename)
- if err != nil {
- return nil, fmt.Errorf("can't get file %s contents: %w", filename, err)
- }
-
- // `r.ReplaceGo` doesn't find issues inside strings: it searches only inside comments.
- // `r.Replace` searches all words: it treats input as a plain text.
- // The standalone misspell tool uses `r.Replace` by default.
- var replace func(input string) (string, []misspell.Diff)
- switch strings.ToLower(mode) {
- case "restricted":
- replace = replacer.ReplaceGo
- default:
- replace = replacer.Replace
- }
-
- _, diffs := replace(string(fileContent))
-
- var res []result.Issue
-
- for _, diff := range diffs {
- text := fmt.Sprintf("`%s` is a misspelling of `%s`", diff.Original, diff.Corrected)
-
- pos := token.Position{
- Filename: filename,
- Line: diff.Line,
- Column: diff.Column + 1,
- }
-
- replacement := &result.Replacement{
- Inline: &result.InlineFix{
- StartCol: diff.Column,
- Length: len(diff.Original),
- NewString: diff.Corrected,
- },
- }
-
- res = append(res, result.Issue{
- Pos: pos,
- Text: text,
- FromLinter: linterName,
- Replacement: replacement,
- })
- }
-
- return res, nil
-}
-
-func appendExtraWords(replacer *misspell.Replacer, extraWords []config.MisspellExtraWords) error {
- if len(extraWords) == 0 {
- return nil
- }
-
- extra := make([]string, 0, len(extraWords)*2)
-
- for _, word := range extraWords {
- if word.Typo == "" || word.Correction == "" {
- return fmt.Errorf("typo (%q) and correction (%q) fields should not be empty", word.Typo, word.Correction)
- }
-
- if strings.ContainsFunc(word.Typo, func(r rune) bool { return !unicode.IsLetter(r) }) {
- return fmt.Errorf("the word %q in the 'typo' field should only contain letters", word.Typo)
- }
- if strings.ContainsFunc(word.Correction, func(r rune) bool { return !unicode.IsLetter(r) }) {
- return fmt.Errorf("the word %q in the 'correction' field should only contain letters", word.Correction)
- }
-
- extra = append(extra, strings.ToLower(word.Typo), strings.ToLower(word.Correction))
- }
-
- replacer.AddRuleList(extra)
-
- return nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/mnd/mnd.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/mnd/mnd.go
deleted file mode 100644
index fe64653b9..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/mnd/mnd.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package mnd
-
-import (
- mnd "github.com/tommy-muehle/go-mnd/v2"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.MndSettings) *goanalysis.Linter {
- return newMND(mnd.Analyzer, settings, nil)
-}
-
-func newMND(a *analysis.Analyzer, settings *config.MndSettings, linterCfg map[string]map[string]any) *goanalysis.Linter {
- if len(linterCfg) == 0 && settings != nil {
- cfg := make(map[string]any)
- if len(settings.Checks) > 0 {
- cfg["checks"] = settings.Checks
- }
- if len(settings.IgnoredNumbers) > 0 {
- cfg["ignored-numbers"] = settings.IgnoredNumbers
- }
- if len(settings.IgnoredFiles) > 0 {
- cfg["ignored-files"] = settings.IgnoredFiles
- }
- if len(settings.IgnoredFunctions) > 0 {
- cfg["ignored-functions"] = settings.IgnoredFunctions
- }
-
- linterCfg = map[string]map[string]any{
- a.Name: cfg,
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- "An analyzer to detect magic numbers.",
- []*analysis.Analyzer{a},
- linterCfg,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/musttag/musttag.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/musttag/musttag.go
deleted file mode 100644
index 30047abfc..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/musttag/musttag.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package musttag
-
-import (
- "go-simpler.org/musttag"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(setting *config.MustTagSettings) *goanalysis.Linter {
- var funcs []musttag.Func
-
- if setting != nil {
- for _, fn := range setting.Functions {
- funcs = append(funcs, musttag.Func{
- Name: fn.Name,
- Tag: fn.Tag,
- ArgPos: fn.ArgPos,
- })
- }
- }
-
- a := musttag.New(funcs...)
-
- return goanalysis.
- NewLinter(a.Name, a.Doc, []*analysis.Analyzer{a}, nil).
- WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nakedret/nakedret.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/nakedret/nakedret.go
deleted file mode 100644
index e69fa5e9f..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nakedret/nakedret.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package nakedret
-
-import (
- "github.com/alexkohler/nakedret/v2"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.NakedretSettings) *goanalysis.Linter {
- var maxLines uint
- if settings != nil {
- maxLines = settings.MaxFuncLines
- }
-
- a := nakedret.NakedReturnAnalyzer(maxLines, false)
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nestif/nestif.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/nestif/nestif.go
deleted file mode 100644
index 43be973b0..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nestif/nestif.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package nestif
-
-import (
- "sort"
- "sync"
-
- "github.com/nakabonne/nestif"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "nestif"
-
-func New(settings *config.NestifSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: goanalysis.TheOnlyAnalyzerName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues := runNestIf(pass, settings)
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Reports deeply nested if statements",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runNestIf(pass *analysis.Pass, settings *config.NestifSettings) []goanalysis.Issue {
- checker := &nestif.Checker{
- MinComplexity: settings.MinComplexity,
- }
-
- var lintIssues []nestif.Issue
- for _, f := range pass.Files {
- lintIssues = append(lintIssues, checker.Check(f, pass.Fset)...)
- }
-
- if len(lintIssues) == 0 {
- return nil
- }
-
- sort.SliceStable(lintIssues, func(i, j int) bool {
- return lintIssues[i].Complexity > lintIssues[j].Complexity
- })
-
- issues := make([]goanalysis.Issue, 0, len(lintIssues))
- for _, i := range lintIssues {
- issues = append(issues, goanalysis.NewIssue(&result.Issue{
- Pos: i.Pos,
- Text: i.Message,
- FromLinter: linterName,
- }, pass))
- }
-
- return issues
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nilerr/nilerr.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/nilerr/nilerr.go
deleted file mode 100644
index c9e466905..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nilerr/nilerr.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package nilerr
-
-import (
- "github.com/gostaticanalysis/nilerr"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := nilerr.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- "Finds the code that returns nil even if it checks that the error is not nil.",
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nilnil/nilnil.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/nilnil/nilnil.go
deleted file mode 100644
index d8d677d99..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nilnil/nilnil.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package nilnil
-
-import (
- "github.com/Antonboom/nilnil/pkg/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.NilNilSettings) *goanalysis.Linter {
- a := analyzer.New()
-
- cfgMap := make(map[string]map[string]any)
- if settings != nil {
- cfgMap[a.Name] = map[string]any{
- "detect-opposite": settings.DetectOpposite,
- }
- if len(settings.CheckedTypes) != 0 {
- cfgMap[a.Name]["checked-types"] = settings.CheckedTypes
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfgMap,
- ).
- WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nlreturn/nlreturn.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/nlreturn/nlreturn.go
deleted file mode 100644
index 509218808..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nlreturn/nlreturn.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package nlreturn
-
-import (
- "github.com/ssgreg/nlreturn/v2/pkg/nlreturn"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.NlreturnSettings) *goanalysis.Linter {
- a := nlreturn.NewAnalyzer()
-
- cfg := map[string]map[string]any{}
- if settings != nil {
- cfg[a.Name] = map[string]any{
- "block-size": settings.BlockSize,
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- "nlreturn checks for a new line before return and branch statements to increase code clarity",
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/noctx/noctx.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/noctx/noctx.go
deleted file mode 100644
index 8a063c613..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/noctx/noctx.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package noctx
-
-import (
- "github.com/sonatard/noctx"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := noctx.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- "Finds sending http request without context.Context",
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nolintlint/internal/README.md b/vendor/github.com/golangci/golangci-lint/pkg/golinters/nolintlint/internal/README.md
deleted file mode 100644
index e4d48f012..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nolintlint/internal/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# nolintlint
-
-nolintlint is a Go static analysis tool to find ill-formed or insufficiently explained `//nolint` directives for golangci-lint
-(or any other linter, using this package)
-
-## Purpose
-
-To ensure that lint exceptions have explanations. Consider the case below:
-
-```Go
-import "crypto/md5" //nolint:all
-
-func hash(data []byte) []byte {
- return md5.New().Sum(data) //nolint:all
-}
-```
-
-In the above case, nolint directives are present, but the user has no idea why this is being done or which linter
-is being suppressed (in this case, gosec recommends against use of md5). `nolintlint` can require that the code provide an explanation, which might look as follows:
-
-```Go
-import "crypto/md5" //nolint:gosec // this is not used in a secure application
-
-func hash(data []byte) []byte {
- return md5.New().Sum(data) //nolint:gosec // this result is not used in a secure application
-}
-```
-
-`nolintlint` can also identify cases where you may have written `// nolint`. Finally, `nolintlint`, can also enforce that you
-use the machine-readable nolint directive format `//nolint:all` and that you mention what linter is being suppressed, as shown above when we write `//nolint:gosec`.
-
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nolintlint/internal/nolintlint.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/nolintlint/internal/nolintlint.go
deleted file mode 100644
index 08dd74378..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nolintlint/internal/nolintlint.go
+++ /dev/null
@@ -1,311 +0,0 @@
-// Package internal provides a linter to ensure that all //nolint directives are followed by explanations
-package internal
-
-import (
- "fmt"
- "go/ast"
- "go/token"
- "regexp"
- "strings"
- "unicode"
-
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-type BaseIssue struct {
- fullDirective string
- directiveWithOptionalLeadingSpace string
- position token.Position
- replacement *result.Replacement
-}
-
-//nolint:gocritic // TODO(ldez) must be change in the future.
-func (b BaseIssue) Position() token.Position {
- return b.position
-}
-
-//nolint:gocritic // TODO(ldez) must be change in the future.
-func (b BaseIssue) Replacement() *result.Replacement {
- return b.replacement
-}
-
-type ExtraLeadingSpace struct {
- BaseIssue
-}
-
-//nolint:gocritic // TODO(ldez) must be change in the future.
-func (i ExtraLeadingSpace) Details() string {
- return fmt.Sprintf("directive `%s` should not have more than one leading space", i.fullDirective)
-}
-
-func (i ExtraLeadingSpace) String() string { return toString(i) }
-
-type NotMachine struct {
- BaseIssue
-}
-
-//nolint:gocritic // TODO(ldez) must be change in the future.
-func (i NotMachine) Details() string {
- expected := i.fullDirective[:2] + strings.TrimLeftFunc(i.fullDirective[2:], unicode.IsSpace)
- return fmt.Sprintf("directive `%s` should be written without leading space as `%s`",
- i.fullDirective, expected)
-}
-
-func (i NotMachine) String() string { return toString(i) }
-
-type NotSpecific struct {
- BaseIssue
-}
-
-//nolint:gocritic // TODO(ldez) must be change in the future.
-func (i NotSpecific) Details() string {
- return fmt.Sprintf("directive `%s` should mention specific linter such as `%s:my-linter`",
- i.fullDirective, i.directiveWithOptionalLeadingSpace)
-}
-
-func (i NotSpecific) String() string { return toString(i) }
-
-type ParseError struct {
- BaseIssue
-}
-
-//nolint:gocritic // TODO(ldez) must be change in the future.
-func (i ParseError) Details() string {
- return fmt.Sprintf("directive `%s` should match `%s[:<comma-separated-linters>] [// <explanation>]`",
- i.fullDirective,
- i.directiveWithOptionalLeadingSpace)
-}
-
-func (i ParseError) String() string { return toString(i) }
-
-type NoExplanation struct {
- BaseIssue
- fullDirectiveWithoutExplanation string
-}
-
-//nolint:gocritic // TODO(ldez) must be change in the future.
-func (i NoExplanation) Details() string {
- return fmt.Sprintf("directive `%s` should provide explanation such as `%s // this is why`",
- i.fullDirective, i.fullDirectiveWithoutExplanation)
-}
-
-func (i NoExplanation) String() string { return toString(i) }
-
-type UnusedCandidate struct {
- BaseIssue
- ExpectedLinter string
-}
-
-//nolint:gocritic // TODO(ldez) must be change in the future.
-func (i UnusedCandidate) Details() string {
- details := fmt.Sprintf("directive `%s` is unused", i.fullDirective)
- if i.ExpectedLinter != "" {
- details += fmt.Sprintf(" for linter %q", i.ExpectedLinter)
- }
- return details
-}
-
-func (i UnusedCandidate) String() string { return toString(i) }
-
-func toString(issue Issue) string {
- return fmt.Sprintf("%s at %s", issue.Details(), issue.Position())
-}
-
-type Issue interface {
- Details() string
- Position() token.Position
- String() string
- Replacement() *result.Replacement
-}
-
-type Needs uint
-
-const (
- NeedsMachineOnly Needs = 1 << iota
- NeedsSpecific
- NeedsExplanation
- NeedsUnused
- NeedsAll = NeedsMachineOnly | NeedsSpecific | NeedsExplanation
-)
-
-var commentPattern = regexp.MustCompile(`^//\s*(nolint)(:\s*[\w-]+\s*(?:,\s*[\w-]+\s*)*)?\b`)
-
-// matches a complete nolint directive
-var fullDirectivePattern = regexp.MustCompile(`^//\s*nolint(?::(\s*[\w-]+\s*(?:,\s*[\w-]+\s*)*))?\s*(//.*)?\s*\n?$`)
-
-type Linter struct {
- needs Needs // indicates which linter checks to perform
- excludeByLinter map[string]bool
-}
-
-// NewLinter creates a linter that enforces that the provided directives fulfill the provided requirements
-func NewLinter(needs Needs, excludes []string) (*Linter, error) {
- excludeByName := make(map[string]bool)
- for _, e := range excludes {
- excludeByName[e] = true
- }
-
- return &Linter{
- needs: needs | NeedsMachineOnly,
- excludeByLinter: excludeByName,
- }, nil
-}
-
-var (
- leadingSpacePattern = regexp.MustCompile(`^//(\s*)`)
- trailingBlankExplanation = regexp.MustCompile(`\s*(//\s*)?$`)
-)
-
-//nolint:funlen,gocyclo // the function is going to be refactored in the future
-func (l Linter) Run(fset *token.FileSet, nodes ...ast.Node) ([]Issue, error) {
- var issues []Issue
-
- for _, node := range nodes {
- file, ok := node.(*ast.File)
- if !ok {
- continue
- }
-
- for _, c := range file.Comments {
- for _, comment := range c.List {
- if !commentPattern.MatchString(comment.Text) {
- continue
- }
-
- // check for a space between the "//" and the directive
- leadingSpaceMatches := leadingSpacePattern.FindStringSubmatch(comment.Text)
-
- var leadingSpace string
- if len(leadingSpaceMatches) > 0 {
- leadingSpace = leadingSpaceMatches[1]
- }
-
- directiveWithOptionalLeadingSpace := "//"
- if leadingSpace != "" {
- directiveWithOptionalLeadingSpace += " "
- }
-
- split := strings.Split(strings.SplitN(comment.Text, ":", 2)[0], "//")
- directiveWithOptionalLeadingSpace += strings.TrimSpace(split[1])
-
- pos := fset.Position(comment.Pos())
- end := fset.Position(comment.End())
-
- base := BaseIssue{
- fullDirective: comment.Text,
- directiveWithOptionalLeadingSpace: directiveWithOptionalLeadingSpace,
- position: pos,
- }
-
- // check for, report and eliminate leading spaces, so we can check for other issues
- if leadingSpace != "" {
- removeWhitespace := &result.Replacement{
- Inline: &result.InlineFix{
- StartCol: pos.Column + 1,
- Length: len(leadingSpace),
- NewString: "",
- },
- }
- if (l.needs & NeedsMachineOnly) != 0 {
- issue := NotMachine{BaseIssue: base}
- issue.BaseIssue.replacement = removeWhitespace
- issues = append(issues, issue)
- } else if len(leadingSpace) > 1 {
- issue := ExtraLeadingSpace{BaseIssue: base}
- issue.BaseIssue.replacement = removeWhitespace
- issue.BaseIssue.replacement.Inline.NewString = " " // assume a single space was intended
- issues = append(issues, issue)
- }
- }
-
- fullMatches := fullDirectivePattern.FindStringSubmatch(comment.Text)
- if len(fullMatches) == 0 {
- issues = append(issues, ParseError{BaseIssue: base})
- continue
- }
-
- lintersText, explanation := fullMatches[1], fullMatches[2]
-
- var linters []string
- if lintersText != "" && !strings.HasPrefix(lintersText, "all") {
- lls := strings.Split(lintersText, ",")
- linters = make([]string, 0, len(lls))
- rangeStart := (pos.Column - 1) + len("//") + len(leadingSpace) + len("nolint:")
- for i, ll := range lls {
- rangeEnd := rangeStart + len(ll)
- if i < len(lls)-1 {
- rangeEnd++ // include trailing comma
- }
- trimmedLinterName := strings.TrimSpace(ll)
- if trimmedLinterName != "" {
- linters = append(linters, trimmedLinterName)
- }
- rangeStart = rangeEnd
- }
- }
-
- if (l.needs & NeedsSpecific) != 0 {
- if len(linters) == 0 {
- issues = append(issues, NotSpecific{BaseIssue: base})
- }
- }
-
- // when detecting unused directives, we send all the directives through and filter them out in the nolint processor
- if (l.needs & NeedsUnused) != 0 {
- removeNolintCompletely := &result.Replacement{}
-
- startCol := pos.Column - 1
-
- if startCol == 0 {
- // if the directive starts from a new line, remove the line
- removeNolintCompletely.NeedOnlyDelete = true
- } else {
- removeNolintCompletely.Inline = &result.InlineFix{
- StartCol: startCol,
- Length: end.Column - pos.Column,
- NewString: "",
- }
- }
-
- if len(linters) == 0 {
- issue := UnusedCandidate{BaseIssue: base}
- issue.replacement = removeNolintCompletely
- issues = append(issues, issue)
- } else {
- for _, linter := range linters {
- issue := UnusedCandidate{BaseIssue: base, ExpectedLinter: linter}
- // only offer replacement if there is a single linter
- // because of issues around commas and the possibility of all
- // linters being removed
- if len(linters) == 1 {
- issue.replacement = removeNolintCompletely
- }
- issues = append(issues, issue)
- }
- }
- }
-
- if (l.needs&NeedsExplanation) != 0 && (explanation == "" || strings.TrimSpace(explanation) == "//") {
- needsExplanation := len(linters) == 0 // if no linters are mentioned, we must have explanation
- // otherwise, check if we are excluding all the mentioned linters
- for _, ll := range linters {
- if !l.excludeByLinter[ll] { // if a linter does require explanation
- needsExplanation = true
- break
- }
- }
-
- if needsExplanation {
- fullDirectiveWithoutExplanation := trailingBlankExplanation.ReplaceAllString(comment.Text, "")
- issues = append(issues, NoExplanation{
- BaseIssue: base,
- fullDirectiveWithoutExplanation: fullDirectiveWithoutExplanation,
- })
- }
- }
- }
- }
- }
-
- return issues, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nolintlint/nolintlint.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/nolintlint/nolintlint.go
deleted file mode 100644
index 9f04454a5..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nolintlint/nolintlint.go
+++ /dev/null
@@ -1,104 +0,0 @@
-package nolintlint
-
-import (
- "fmt"
- "go/ast"
- "sync"
-
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/nolintlint/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const LinterName = "nolintlint"
-
-func New(settings *config.NoLintLintSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: LinterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues, err := runNoLintLint(pass, settings)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- LinterName,
- "Reports ill-formed or insufficient nolint directives",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runNoLintLint(pass *analysis.Pass, settings *config.NoLintLintSettings) ([]goanalysis.Issue, error) {
- var needs internal.Needs
- if settings.RequireExplanation {
- needs |= internal.NeedsExplanation
- }
- if settings.RequireSpecific {
- needs |= internal.NeedsSpecific
- }
- if !settings.AllowUnused {
- needs |= internal.NeedsUnused
- }
-
- lnt, err := internal.NewLinter(needs, settings.AllowNoExplanation)
- if err != nil {
- return nil, err
- }
-
- nodes := make([]ast.Node, 0, len(pass.Files))
- for _, n := range pass.Files {
- nodes = append(nodes, n)
- }
-
- lintIssues, err := lnt.Run(pass.Fset, nodes...)
- if err != nil {
- return nil, fmt.Errorf("linter failed to run: %w", err)
- }
-
- var issues []goanalysis.Issue
-
- for _, i := range lintIssues {
- expectNoLint := false
- var expectedNolintLinter string
- if ii, ok := i.(internal.UnusedCandidate); ok {
- expectedNolintLinter = ii.ExpectedLinter
- expectNoLint = true
- }
-
- issue := &result.Issue{
- FromLinter: LinterName,
- Text: i.Details(),
- Pos: i.Position(),
- ExpectNoLint: expectNoLint,
- ExpectedNoLintLinter: expectedNolintLinter,
- Replacement: i.Replacement(),
- }
-
- issues = append(issues, goanalysis.NewIssue(issue, pass))
- }
-
- return issues, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nonamedreturns/nonamedreturns.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/nonamedreturns/nonamedreturns.go
deleted file mode 100644
index 42a618e64..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nonamedreturns/nonamedreturns.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package nonamedreturns
-
-import (
- "github.com/firefart/nonamedreturns/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.NoNamedReturnsSettings) *goanalysis.Linter {
- a := analyzer.Analyzer
-
- var cfg map[string]map[string]any
- if settings != nil {
- cfg = map[string]map[string]any{
- a.Name: {
- analyzer.FlagReportErrorInDefer: settings.ReportErrorInDefer,
- },
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nosprintfhostport/nosprintfhostport.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/nosprintfhostport/nosprintfhostport.go
deleted file mode 100644
index 8f06ae1f6..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/nosprintfhostport/nosprintfhostport.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package nosprintfhostport
-
-import (
- "github.com/stbenjam/no-sprintf-host-port/pkg/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := analyzer.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/paralleltest/paralleltest.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/paralleltest/paralleltest.go
deleted file mode 100644
index 0c908fa38..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/paralleltest/paralleltest.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package paralleltest
-
-import (
- "github.com/kunwardeep/paralleltest/pkg/paralleltest"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.ParallelTestSettings) *goanalysis.Linter {
- a := paralleltest.NewAnalyzer()
-
- var cfg map[string]map[string]any
- if settings != nil {
- d := map[string]any{
- "i": settings.IgnoreMissing,
- "ignoremissingsubtests": settings.IgnoreMissingSubtests,
- }
-
- if config.IsGoGreaterThanOrEqual(settings.Go, "1.22") {
- d["ignoreloopVar"] = true
- }
-
- cfg = map[string]map[string]any{a.Name: d}
- }
-
- return goanalysis.NewLinter(
- a.Name,
- "Detects missing usage of t.Parallel() method in your Go test",
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/perfsprint/perfsprint.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/perfsprint/perfsprint.go
deleted file mode 100644
index a4ead1914..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/perfsprint/perfsprint.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package perfsprint
-
-import (
- "github.com/catenacyber/perfsprint/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.PerfSprintSettings) *goanalysis.Linter {
- a := analyzer.New()
-
- cfg := map[string]map[string]any{
- a.Name: {"fiximports": false},
- }
-
- if settings != nil {
- cfg[a.Name]["int-conversion"] = settings.IntConversion
- cfg[a.Name]["err-error"] = settings.ErrError
- cfg[a.Name]["errorf"] = settings.ErrorF
- cfg[a.Name]["sprintf1"] = settings.SprintF1
- cfg[a.Name]["strconcat"] = settings.StrConcat
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/prealloc/prealloc.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/prealloc/prealloc.go
deleted file mode 100644
index ce7ff9d59..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/prealloc/prealloc.go
+++ /dev/null
@@ -1,65 +0,0 @@
-package prealloc
-
-import (
- "fmt"
- "sync"
-
- "github.com/alexkohler/prealloc/pkg"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "prealloc"
-
-func New(settings *config.PreallocSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues := runPreAlloc(pass, settings)
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Finds slice declarations that could potentially be pre-allocated",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runPreAlloc(pass *analysis.Pass, settings *config.PreallocSettings) []goanalysis.Issue {
- var issues []goanalysis.Issue
-
- hints := pkg.Check(pass.Files, settings.Simple, settings.RangeLoops, settings.ForLoops)
-
- for _, hint := range hints {
- issues = append(issues, goanalysis.NewIssue(&result.Issue{
- Pos: pass.Fset.Position(hint.Pos),
- Text: fmt.Sprintf("Consider pre-allocating %s", internal.FormatCode(hint.DeclaredSliceName, nil)),
- FromLinter: linterName,
- }, pass))
- }
-
- return issues
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/predeclared/predeclared.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/predeclared/predeclared.go
deleted file mode 100644
index b8d189fd5..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/predeclared/predeclared.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package predeclared
-
-import (
- "github.com/nishanths/predeclared/passes/predeclared"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.PredeclaredSettings) *goanalysis.Linter {
- a := predeclared.Analyzer
-
- var cfg map[string]map[string]any
- if settings != nil {
- cfg = map[string]map[string]any{
- a.Name: {
- predeclared.IgnoreFlag: settings.Ignore,
- predeclared.QualifiedFlag: settings.Qualified,
- },
- }
- }
-
- return goanalysis.NewLinter(a.Name, a.Doc, []*analysis.Analyzer{a}, cfg).
- WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/promlinter/promlinter.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/promlinter/promlinter.go
deleted file mode 100644
index 5decbbc7c..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/promlinter/promlinter.go
+++ /dev/null
@@ -1,77 +0,0 @@
-package promlinter
-
-import (
- "fmt"
- "sync"
-
- "github.com/yeya24/promlinter"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "promlinter"
-
-func New(settings *config.PromlinterSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- var promSettings promlinter.Setting
- if settings != nil {
- promSettings = promlinter.Setting{
- Strict: settings.Strict,
- DisabledLintFuncs: settings.DisabledLinters,
- }
- }
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues := runPromLinter(pass, promSettings)
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Check Prometheus metrics naming via promlint",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runPromLinter(pass *analysis.Pass, promSettings promlinter.Setting) []goanalysis.Issue {
- lintIssues := promlinter.RunLint(pass.Fset, pass.Files, promSettings)
-
- if len(lintIssues) == 0 {
- return nil
- }
-
- issues := make([]goanalysis.Issue, len(lintIssues))
- for k, i := range lintIssues {
- issue := result.Issue{
- Pos: i.Pos,
- Text: fmt.Sprintf("Metric: %s Error: %s", i.Metric, i.Text),
- FromLinter: linterName,
- }
-
- issues[k] = goanalysis.NewIssue(&issue, pass)
- }
-
- return issues
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/protogetter/protogetter.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/protogetter/protogetter.go
deleted file mode 100644
index 302ce67b8..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/protogetter/protogetter.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package protogetter
-
-import (
- "sync"
-
- "github.com/ghostiam/protogetter"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-func New(settings *config.ProtoGetterSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- var cfg protogetter.Config
- if settings != nil {
- cfg = protogetter.Config{
- SkipGeneratedBy: settings.SkipGeneratedBy,
- SkipFiles: settings.SkipFiles,
- SkipAnyGenerated: settings.SkipAnyGenerated,
- ReplaceFirstArgInAppend: settings.ReplaceFirstArgInAppend,
- }
- }
- cfg.Mode = protogetter.GolangciLintMode
-
- a := protogetter.NewAnalyzer(&cfg)
- a.Run = func(pass *analysis.Pass) (any, error) {
- pgIssues, err := protogetter.Run(pass, &cfg)
- if err != nil {
- return nil, err
- }
-
- issues := make([]goanalysis.Issue, len(pgIssues))
- for i, issue := range pgIssues {
- report := &result.Issue{
- FromLinter: a.Name,
- Pos: issue.Pos,
- Text: issue.Message,
- Replacement: &result.Replacement{
- Inline: &result.InlineFix{
- StartCol: issue.InlineFix.StartCol,
- Length: issue.InlineFix.Length,
- NewString: issue.InlineFix.NewString,
- },
- },
- }
-
- issues[i] = goanalysis.NewIssue(report, pass)
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/reassign/reassign.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/reassign/reassign.go
deleted file mode 100644
index cfc85635e..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/reassign/reassign.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package reassign
-
-import (
- "fmt"
- "strings"
-
- "github.com/curioswitch/go-reassign"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.ReassignSettings) *goanalysis.Linter {
- a := reassign.NewAnalyzer()
-
- var cfg map[string]map[string]any
- if settings != nil && len(settings.Patterns) > 0 {
- cfg = map[string]map[string]any{
- a.Name: {
- reassign.FlagPattern: fmt.Sprintf("^(%s)$", strings.Join(settings.Patterns, "|")),
- },
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/recvcheck/recvcheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/recvcheck/recvcheck.go
deleted file mode 100644
index 8b030f15d..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/recvcheck/recvcheck.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package recvcheck
-
-import (
- "github.com/raeperd/recvcheck"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := recvcheck.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/revive/revive.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/revive/revive.go
deleted file mode 100644
index 056a258e0..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/revive/revive.go
+++ /dev/null
@@ -1,435 +0,0 @@
-package revive
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
- "go/token"
- "os"
- "reflect"
- "sync"
-
- "github.com/BurntSushi/toml"
- hcversion "github.com/hashicorp/go-version"
- reviveConfig "github.com/mgechev/revive/config"
- "github.com/mgechev/revive/lint"
- "github.com/mgechev/revive/rule"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "revive"
-
-var debugf = logutils.Debug(logutils.DebugKeyRevive)
-
-// jsonObject defines a JSON object of a failure
-type jsonObject struct {
- Severity lint.Severity
- lint.Failure `json:",inline"`
-}
-
-func New(settings *config.ReviveSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: goanalysis.TheOnlyAnalyzerName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: goanalysis.DummyRun,
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Fast, configurable, extensible, flexible, and beautiful linter for Go. Drop-in replacement of golint.",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- w, err := newWrapper(settings)
- if err != nil {
- lintCtx.Log.Errorf("setup revive: %v", err)
- return
- }
-
- analyzer.Run = func(pass *analysis.Pass) (any, error) {
- issues, err := w.run(lintCtx, pass)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- }
- }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-type wrapper struct {
- revive lint.Linter
- formatter lint.Formatter
- lintingRules []lint.Rule
- conf *lint.Config
-}
-
-func newWrapper(settings *config.ReviveSettings) (*wrapper, error) {
- conf, err := getConfig(settings)
- if err != nil {
- return nil, err
- }
-
- conf.GoVersion, err = hcversion.NewVersion(settings.Go)
- if err != nil {
- return nil, err
- }
-
- formatter, err := reviveConfig.GetFormatter("json")
- if err != nil {
- return nil, err
- }
-
- lintingRules, err := reviveConfig.GetLintingRules(conf, []lint.Rule{})
- if err != nil {
- return nil, err
- }
-
- return &wrapper{
- revive: lint.New(os.ReadFile, settings.MaxOpenFiles),
- formatter: formatter,
- lintingRules: lintingRules,
- conf: conf,
- }, nil
-}
-
-func (w *wrapper) run(lintCtx *linter.Context, pass *analysis.Pass) ([]goanalysis.Issue, error) {
- packages := [][]string{internal.GetFileNames(pass)}
-
- failures, err := w.revive.Lint(packages, w.lintingRules, *w.conf)
- if err != nil {
- return nil, err
- }
-
- formatChan := make(chan lint.Failure)
- exitChan := make(chan bool)
-
- var output string
- go func() {
- output, err = w.formatter.Format(formatChan, *w.conf)
- if err != nil {
- lintCtx.Log.Errorf("Format error: %v", err)
- }
- exitChan <- true
- }()
-
- for f := range failures {
- if f.Confidence < w.conf.Confidence {
- continue
- }
-
- formatChan <- f
- }
-
- close(formatChan)
- <-exitChan
-
- var results []jsonObject
- err = json.Unmarshal([]byte(output), &results)
- if err != nil {
- return nil, err
- }
-
- var issues []goanalysis.Issue
- for i := range results {
- issues = append(issues, toIssue(pass, &results[i]))
- }
-
- return issues, nil
-}
-
-func toIssue(pass *analysis.Pass, object *jsonObject) goanalysis.Issue {
- lineRangeTo := object.Position.End.Line
- if object.RuleName == (&rule.ExportedRule{}).Name() {
- lineRangeTo = object.Position.Start.Line
- }
-
- return goanalysis.NewIssue(&result.Issue{
- Severity: string(object.Severity),
- Text: fmt.Sprintf("%s: %s", object.RuleName, object.Failure.Failure),
- Pos: token.Position{
- Filename: object.Position.Start.Filename,
- Line: object.Position.Start.Line,
- Offset: object.Position.Start.Offset,
- Column: object.Position.Start.Column,
- },
- LineRange: &result.Range{
- From: object.Position.Start.Line,
- To: lineRangeTo,
- },
- FromLinter: linterName,
- }, pass)
-}
-
-// This function mimics the GetConfig function of revive.
-// This allows to get default values and right types.
-// https://github.com/golangci/golangci-lint/issues/1745
-// https://github.com/mgechev/revive/blob/v1.5.0/config/config.go#L220
-// https://github.com/mgechev/revive/blob/v1.5.0/config/config.go#L172-L178
-func getConfig(cfg *config.ReviveSettings) (*lint.Config, error) {
- conf := defaultConfig()
-
- // Since the Go version is dynamic, this value must be neutralized in order to compare with a "zero value" of the configuration structure.
- zero := &config.ReviveSettings{Go: cfg.Go}
-
- if !reflect.DeepEqual(cfg, zero) {
- rawRoot := createConfigMap(cfg)
- buf := bytes.NewBuffer(nil)
-
- err := toml.NewEncoder(buf).Encode(rawRoot)
- if err != nil {
- return nil, fmt.Errorf("failed to encode configuration: %w", err)
- }
-
- conf = &lint.Config{}
- _, err = toml.NewDecoder(buf).Decode(conf)
- if err != nil {
- return nil, fmt.Errorf("failed to decode configuration: %w", err)
- }
- }
-
- normalizeConfig(conf)
-
- for k, r := range conf.Rules {
- err := r.Initialize()
- if err != nil {
- return nil, fmt.Errorf("error in config of rule %q: %w", k, err)
- }
- conf.Rules[k] = r
- }
-
- debugf("revive configuration: %#v", conf)
-
- return conf, nil
-}
-
-func createConfigMap(cfg *config.ReviveSettings) map[string]any {
- rawRoot := map[string]any{
- "ignoreGeneratedHeader": cfg.IgnoreGeneratedHeader,
- "confidence": cfg.Confidence,
- "severity": cfg.Severity,
- "errorCode": cfg.ErrorCode,
- "warningCode": cfg.WarningCode,
- "enableAllRules": cfg.EnableAllRules,
- }
-
- rawDirectives := map[string]map[string]any{}
- for _, directive := range cfg.Directives {
- rawDirectives[directive.Name] = map[string]any{
- "severity": directive.Severity,
- }
- }
-
- if len(rawDirectives) > 0 {
- rawRoot["directive"] = rawDirectives
- }
-
- rawRules := map[string]map[string]any{}
- for _, s := range cfg.Rules {
- rawRules[s.Name] = map[string]any{
- "severity": s.Severity,
- "arguments": safeTomlSlice(s.Arguments),
- "disabled": s.Disabled,
- "exclude": s.Exclude,
- }
- }
-
- if len(rawRules) > 0 {
- rawRoot["rule"] = rawRules
- }
-
- return rawRoot
-}
-
-func safeTomlSlice(r []any) []any {
- if len(r) == 0 {
- return nil
- }
-
- if _, ok := r[0].(map[any]any); !ok {
- return r
- }
-
- var typed []any
- for _, elt := range r {
- item := map[string]any{}
- for k, v := range elt.(map[any]any) {
- item[k.(string)] = v
- }
-
- typed = append(typed, item)
- }
-
- return typed
-}
-
-// This element is not exported by revive, so we need copy the code.
-// Extracted from https://github.com/mgechev/revive/blob/v1.5.0/config/config.go#L16
-var defaultRules = []lint.Rule{
- &rule.VarDeclarationsRule{},
- &rule.PackageCommentsRule{},
- &rule.DotImportsRule{},
- &rule.BlankImportsRule{},
- &rule.ExportedRule{},
- &rule.VarNamingRule{},
- &rule.IndentErrorFlowRule{},
- &rule.RangeRule{},
- &rule.ErrorfRule{},
- &rule.ErrorNamingRule{},
- &rule.ErrorStringsRule{},
- &rule.ReceiverNamingRule{},
- &rule.IncrementDecrementRule{},
- &rule.ErrorReturnRule{},
- &rule.UnexportedReturnRule{},
- &rule.TimeNamingRule{},
- &rule.ContextKeysType{},
- &rule.ContextAsArgumentRule{},
- &rule.EmptyBlockRule{},
- &rule.SuperfluousElseRule{},
- &rule.UnusedParamRule{},
- &rule.UnreachableCodeRule{},
- &rule.RedefinesBuiltinIDRule{},
-}
-
-var allRules = append([]lint.Rule{
- &rule.ArgumentsLimitRule{},
- &rule.CyclomaticRule{},
- &rule.FileHeaderRule{},
- &rule.ConfusingNamingRule{},
- &rule.GetReturnRule{},
- &rule.ModifiesParamRule{},
- &rule.ConfusingResultsRule{},
- &rule.DeepExitRule{},
- &rule.AddConstantRule{},
- &rule.FlagParamRule{},
- &rule.UnnecessaryStmtRule{},
- &rule.StructTagRule{},
- &rule.ModifiesValRecRule{},
- &rule.ConstantLogicalExprRule{},
- &rule.BoolLiteralRule{},
- &rule.ImportsBlocklistRule{},
- &rule.FunctionResultsLimitRule{},
- &rule.MaxPublicStructsRule{},
- &rule.RangeValInClosureRule{},
- &rule.RangeValAddress{},
- &rule.WaitGroupByValueRule{},
- &rule.AtomicRule{},
- &rule.EmptyLinesRule{},
- &rule.LineLengthLimitRule{},
- &rule.CallToGCRule{},
- &rule.DuplicatedImportsRule{},
- &rule.ImportShadowingRule{},
- &rule.BareReturnRule{},
- &rule.UnusedReceiverRule{},
- &rule.UnhandledErrorRule{},
- &rule.CognitiveComplexityRule{},
- &rule.StringOfIntRule{},
- &rule.StringFormatRule{},
- &rule.EarlyReturnRule{},
- &rule.UnconditionalRecursionRule{},
- &rule.IdenticalBranchesRule{},
- &rule.DeferRule{},
- &rule.UnexportedNamingRule{},
- &rule.FunctionLength{},
- &rule.NestedStructs{},
- &rule.UselessBreak{},
- &rule.UncheckedTypeAssertionRule{},
- &rule.TimeEqualRule{},
- &rule.BannedCharsRule{},
- &rule.OptimizeOperandsOrderRule{},
- &rule.UseAnyRule{},
- &rule.DataRaceRule{},
- &rule.CommentSpacingsRule{},
- &rule.IfReturnRule{},
- &rule.RedundantImportAlias{},
- &rule.ImportAliasNamingRule{},
- &rule.EnforceMapStyleRule{},
- &rule.EnforceRepeatedArgTypeStyleRule{},
- &rule.EnforceSliceStyleRule{},
- &rule.MaxControlNestingRule{},
- &rule.CommentsDensityRule{},
- &rule.FileLengthLimitRule{},
- &rule.FilenameFormatRule{},
-}, defaultRules...)
-
-const defaultConfidence = 0.8
-
-// This element is not exported by revive, so we need copy the code.
-// Extracted from https://github.com/mgechev/revive/blob/v1.5.0/config/config.go#L183
-func normalizeConfig(cfg *lint.Config) {
- // NOTE(ldez): this custom section for golangci-lint should be kept.
- // ---
- if cfg.Confidence == 0 {
- cfg.Confidence = defaultConfidence
- }
- if cfg.Severity == "" {
- cfg.Severity = lint.SeverityWarning
- }
- // ---
-
- if len(cfg.Rules) == 0 {
- cfg.Rules = map[string]lint.RuleConfig{}
- }
- if cfg.EnableAllRules {
- // Add to the configuration all rules not yet present in it
- for _, r := range allRules {
- ruleName := r.Name()
- _, alreadyInConf := cfg.Rules[ruleName]
- if alreadyInConf {
- continue
- }
- // Add the rule with an empty conf for
- cfg.Rules[ruleName] = lint.RuleConfig{}
- }
- }
-
- severity := cfg.Severity
- if severity != "" {
- for k, v := range cfg.Rules {
- if v.Severity == "" {
- v.Severity = severity
- }
- cfg.Rules[k] = v
- }
- for k, v := range cfg.Directives {
- if v.Severity == "" {
- v.Severity = severity
- }
- cfg.Directives[k] = v
- }
- }
-}
-
-// This element is not exported by revive, so we need copy the code.
-// Extracted from https://github.com/mgechev/revive/blob/v1.5.0/config/config.go#L252
-func defaultConfig() *lint.Config {
- defaultConfig := lint.Config{
- Confidence: defaultConfidence,
- Severity: lint.SeverityWarning,
- Rules: map[string]lint.RuleConfig{},
- }
- for _, r := range defaultRules {
- defaultConfig.Rules[r.Name()] = lint.RuleConfig{}
- }
- return &defaultConfig
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/rowserrcheck/rowserrcheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/rowserrcheck/rowserrcheck.go
deleted file mode 100644
index 3fe824467..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/rowserrcheck/rowserrcheck.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package rowserrcheck
-
-import (
- "github.com/jingyugao/rowserrcheck/passes/rowserr"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.RowsErrCheckSettings) *goanalysis.Linter {
- var pkgs []string
- if settings != nil {
- pkgs = settings.Packages
- }
-
- a := rowserr.NewAnalyzer(pkgs...)
-
- return goanalysis.NewLinter(
- a.Name,
- "checks whether Rows.Err of rows is checked successfully",
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/sloglint/sloglint.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/sloglint/sloglint.go
deleted file mode 100644
index 486662577..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/sloglint/sloglint.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package sloglint
-
-import (
- "go-simpler.org/sloglint"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.SlogLintSettings) *goanalysis.Linter {
- var opts *sloglint.Options
- if settings != nil {
- opts = &sloglint.Options{
- NoMixedArgs: settings.NoMixedArgs,
- KVOnly: settings.KVOnly,
- AttrOnly: settings.AttrOnly,
- NoGlobal: settings.NoGlobal,
- ContextOnly: settings.Context,
- StaticMsg: settings.StaticMsg,
- NoRawKeys: settings.NoRawKeys,
- KeyNamingCase: settings.KeyNamingCase,
- ForbiddenKeys: settings.ForbiddenKeys,
- ArgsOnSepLines: settings.ArgsOnSepLines,
- }
- }
-
- a := sloglint.New(opts)
-
- return goanalysis.
- NewLinter(a.Name, a.Doc, []*analysis.Analyzer{a}, nil).
- WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/spancheck/spancheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/spancheck/spancheck.go
deleted file mode 100644
index a800a1705..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/spancheck/spancheck.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package spancheck
-
-import (
- "github.com/jjti/go-spancheck"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.SpancheckSettings) *goanalysis.Linter {
- cfg := spancheck.NewDefaultConfig()
-
- if settings != nil {
- if settings.Checks != nil {
- cfg.EnabledChecks = settings.Checks
- }
-
- if settings.IgnoreCheckSignatures != nil {
- cfg.IgnoreChecksSignaturesSlice = settings.IgnoreCheckSignatures
- }
-
- if settings.ExtraStartSpanSignatures != nil {
- cfg.StartSpanMatchersSlice = settings.ExtraStartSpanSignatures
- }
- }
-
- a := spancheck.NewAnalyzerWithConfig(cfg)
-
- return goanalysis.
- NewLinter(a.Name, a.Doc, []*analysis.Analyzer{a}, nil).
- WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/sqlclosecheck/sqlclosecheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/sqlclosecheck/sqlclosecheck.go
deleted file mode 100644
index 5eb32ff9d..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/sqlclosecheck/sqlclosecheck.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package sqlclosecheck
-
-import (
- "github.com/ryanrolds/sqlclosecheck/pkg/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := analyzer.NewAnalyzer()
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/staticcheck/staticcheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/staticcheck/staticcheck.go
deleted file mode 100644
index 79394bdb7..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/staticcheck/staticcheck.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package staticcheck
-
-import (
- "honnef.co/go/tools/staticcheck"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
-)
-
-func New(settings *config.StaticCheckSettings) *goanalysis.Linter {
- cfg := internal.StaticCheckConfig(settings)
- analyzers := internal.SetupStaticCheckAnalyzers(staticcheck.Analyzers, cfg.Checks)
-
- return goanalysis.NewLinter(
- "staticcheck",
- "It's a set of rules from staticcheck. It's not the same thing as the staticcheck binary."+
- " The author of staticcheck doesn't support or approve the use of staticcheck as a library inside golangci-lint.",
- analyzers,
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/stylecheck/stylecheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/stylecheck/stylecheck.go
deleted file mode 100644
index 60859f28a..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/stylecheck/stylecheck.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package stylecheck
-
-import (
- "golang.org/x/tools/go/analysis"
- scconfig "honnef.co/go/tools/config"
- "honnef.co/go/tools/stylecheck"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
-)
-
-func New(settings *config.StaticCheckSettings) *goanalysis.Linter {
- cfg := internal.StaticCheckConfig(settings)
-
- // `scconfig.Analyzer` is a singleton, then it's not possible to have more than one instance for all staticcheck "sub-linters".
- // When we will merge the 4 "sub-linters", the problem will disappear: https://github.com/golangci/golangci-lint/issues/357
- // Currently only stylecheck analyzer has a configuration in staticcheck.
- scconfig.Analyzer.Run = func(_ *analysis.Pass) (any, error) {
- return cfg, nil
- }
-
- analyzers := internal.SetupStaticCheckAnalyzers(stylecheck.Analyzers, cfg.Checks)
-
- return goanalysis.NewLinter(
- "stylecheck",
- "Stylecheck is a replacement for golint",
- analyzers,
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/tagalign/tagalign.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/tagalign/tagalign.go
deleted file mode 100644
index f438c51b5..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/tagalign/tagalign.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package tagalign
-
-import (
- "sync"
-
- "github.com/4meepo/tagalign"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-func New(settings *config.TagAlignSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- options := []tagalign.Option{tagalign.WithMode(tagalign.GolangciLintMode)}
-
- if settings != nil {
- options = append(options, tagalign.WithAlign(settings.Align))
-
- if settings.Sort || len(settings.Order) > 0 {
- options = append(options, tagalign.WithSort(settings.Order...))
- }
-
- // Strict style will be applied only if Align and Sort are enabled together.
- if settings.Strict && settings.Align && settings.Sort {
- options = append(options, tagalign.WithStrictStyle())
- }
- }
-
- analyzer := tagalign.NewAnalyzer(options...)
- analyzer.Run = func(pass *analysis.Pass) (any, error) {
- taIssues := tagalign.Run(pass, options...)
-
- issues := make([]goanalysis.Issue, len(taIssues))
- for i, issue := range taIssues {
- report := &result.Issue{
- FromLinter: analyzer.Name,
- Pos: issue.Pos,
- Text: issue.Message,
- Replacement: &result.Replacement{
- Inline: &result.InlineFix{
- StartCol: issue.InlineFix.StartCol,
- Length: issue.InlineFix.Length,
- NewString: issue.InlineFix.NewString,
- },
- },
- }
-
- issues[i] = goanalysis.NewIssue(report, pass)
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- }
-
- return goanalysis.NewLinter(
- analyzer.Name,
- analyzer.Doc,
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/tagliatelle/tagliatelle.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/tagliatelle/tagliatelle.go
deleted file mode 100644
index d1674c3e9..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/tagliatelle/tagliatelle.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package tagliatelle
-
-import (
- "github.com/ldez/tagliatelle"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.TagliatelleSettings) *goanalysis.Linter {
- cfg := tagliatelle.Config{
- Rules: map[string]string{
- "json": "camel",
- "yaml": "camel",
- "header": "header",
- },
- }
-
- if settings != nil {
- for k, v := range settings.Case.Rules {
- cfg.Rules[k] = v
- }
- cfg.UseFieldName = settings.Case.UseFieldName
- }
-
- a := tagliatelle.New(cfg)
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/tenv/tenv.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/tenv/tenv.go
deleted file mode 100644
index 2fc247fab..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/tenv/tenv.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package tenv
-
-import (
- "github.com/sivchari/tenv"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.TenvSettings) *goanalysis.Linter {
- a := tenv.Analyzer
-
- var cfg map[string]map[string]any
- if settings != nil {
- cfg = map[string]map[string]any{
- a.Name: {
- tenv.A: settings.All,
- },
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/testableexamples/testableexamples.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/testableexamples/testableexamples.go
deleted file mode 100644
index 6b76271db..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/testableexamples/testableexamples.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package testableexamples
-
-import (
- "github.com/maratori/testableexamples/pkg/testableexamples"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := testableexamples.NewAnalyzer()
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/testifylint/testifylint.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/testifylint/testifylint.go
deleted file mode 100644
index b3f2f0bd4..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/testifylint/testifylint.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package testifylint
-
-import (
- "github.com/Antonboom/testifylint/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.TestifylintSettings) *goanalysis.Linter {
- a := analyzer.New()
-
- cfg := make(map[string]map[string]any)
- if settings != nil {
- cfg[a.Name] = map[string]any{
- "enable-all": settings.EnableAll,
- "disable-all": settings.DisableAll,
-
- "bool-compare.ignore-custom-types": settings.BoolCompare.IgnoreCustomTypes,
- "formatter.require-f-funcs": settings.Formatter.RequireFFuncs,
- "go-require.ignore-http-handlers": settings.GoRequire.IgnoreHTTPHandlers,
- }
- if len(settings.EnabledCheckers) > 0 {
- cfg[a.Name]["enable"] = settings.EnabledCheckers
- }
- if len(settings.DisabledCheckers) > 0 {
- cfg[a.Name]["disable"] = settings.DisabledCheckers
- }
-
- if b := settings.Formatter.CheckFormatString; b != nil {
- cfg[a.Name]["formatter.check-format-string"] = *b
- }
- if p := settings.ExpectedActual.ExpVarPattern; p != "" {
- cfg[a.Name]["expected-actual.pattern"] = p
- }
- if p := settings.RequireError.FnPattern; p != "" {
- cfg[a.Name]["require-error.fn-pattern"] = p
- }
- if m := settings.SuiteExtraAssertCall.Mode; m != "" {
- cfg[a.Name]["suite-extra-assert-call.mode"] = m
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/testpackage/testpackage.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/testpackage/testpackage.go
deleted file mode 100644
index 632152712..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/testpackage/testpackage.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package testpackage
-
-import (
- "strings"
-
- "github.com/maratori/testpackage/pkg/testpackage"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(cfg *config.TestpackageSettings) *goanalysis.Linter {
- a := testpackage.NewAnalyzer()
-
- var settings map[string]map[string]any
- if cfg != nil {
- settings = map[string]map[string]any{
- a.Name: {
- testpackage.SkipRegexpFlagName: cfg.SkipRegexp,
- testpackage.AllowPackagesFlagName: strings.Join(cfg.AllowPackages, ","),
- },
- }
- }
-
- return goanalysis.NewLinter(a.Name, a.Doc, []*analysis.Analyzer{a}, settings).
- WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/thelper/thelper.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/thelper/thelper.go
deleted file mode 100644
index cc6ea755c..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/thelper/thelper.go
+++ /dev/null
@@ -1,81 +0,0 @@
-package thelper
-
-import (
- "strings"
-
- "github.com/kulti/thelper/pkg/analyzer"
- "golang.org/x/exp/maps"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/golinters/internal"
-)
-
-func New(cfg *config.ThelperSettings) *goanalysis.Linter {
- a := analyzer.NewAnalyzer()
-
- opts := map[string]struct{}{
- "t_name": {},
- "t_begin": {},
- "t_first": {},
-
- "f_name": {},
- "f_begin": {},
- "f_first": {},
-
- "b_name": {},
- "b_begin": {},
- "b_first": {},
-
- "tb_name": {},
- "tb_begin": {},
- "tb_first": {},
- }
-
- if cfg != nil {
- applyTHelperOptions(cfg.Test, "t_", opts)
- applyTHelperOptions(cfg.Fuzz, "f_", opts)
- applyTHelperOptions(cfg.Benchmark, "b_", opts)
- applyTHelperOptions(cfg.TB, "tb_", opts)
- }
-
- if len(opts) == 0 {
- internal.LinterLogger.Fatalf("thelper: at least one option must be enabled")
- }
-
- args := maps.Keys(opts)
-
- cfgMap := map[string]map[string]any{
- a.Name: {
- "checks": strings.Join(args, ","),
- },
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfgMap,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-func applyTHelperOptions(o config.ThelperOptions, prefix string, opts map[string]struct{}) {
- if o.Name != nil {
- if !*o.Name {
- delete(opts, prefix+"name")
- }
- }
-
- if o.Begin != nil {
- if !*o.Begin {
- delete(opts, prefix+"begin")
- }
- }
-
- if o.First != nil {
- if !*o.First {
- delete(opts, prefix+"first")
- }
- }
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/tparallel/tparallel.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/tparallel/tparallel.go
deleted file mode 100644
index 4f7c43a99..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/tparallel/tparallel.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package tparallel
-
-import (
- "github.com/moricho/tparallel"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := tparallel.Analyzer
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/typecheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/typecheck.go
deleted file mode 100644
index d0eaa00d0..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/typecheck.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package golinters
-
-import (
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func NewTypecheck() *goanalysis.Linter {
- const linterName = "typecheck"
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: goanalysis.DummyRun,
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Like the front-end of a Go compiler, parses and type-checks Go code",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithLoadMode(goanalysis.LoadModeNone)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/unconvert/unconvert.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/unconvert/unconvert.go
deleted file mode 100644
index 954cc9eb3..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/unconvert/unconvert.go
+++ /dev/null
@@ -1,62 +0,0 @@
-package unconvert
-
-import (
- "sync"
-
- "github.com/golangci/unconvert"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "unconvert"
-
-func New(settings *config.UnconvertSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Run: func(pass *analysis.Pass) (any, error) {
- issues := runUnconvert(pass, settings)
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Remove unnecessary type conversions",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-func runUnconvert(pass *analysis.Pass, settings *config.UnconvertSettings) []goanalysis.Issue {
- positions := unconvert.Run(pass, settings.FastMath, settings.Safe)
-
- var issues []goanalysis.Issue
- for _, position := range positions {
- issues = append(issues, goanalysis.NewIssue(&result.Issue{
- Pos: position,
- Text: "unnecessary conversion",
- FromLinter: linterName,
- }, pass))
- }
-
- return issues
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/unparam/unparam.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/unparam/unparam.go
deleted file mode 100644
index 0fe184736..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/unparam/unparam.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package unparam
-
-import (
- "sync"
-
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/analysis/passes/buildssa"
- "golang.org/x/tools/go/packages"
- "mvdan.cc/unparam/check"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "unparam"
-
-func New(settings *config.UnparamSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: goanalysis.TheOnlyanalyzerDoc,
- Requires: []*analysis.Analyzer{buildssa.Analyzer},
- Run: func(pass *analysis.Pass) (any, error) {
- issues, err := runUnparam(pass, settings)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Reports unused function parameters",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithContextSetter(func(lintCtx *linter.Context) {
- if settings.Algo != "cha" {
- lintCtx.Log.Warnf("`linters-settings.unparam.algo` isn't supported by the newest `unparam`")
- }
- }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-func runUnparam(pass *analysis.Pass, settings *config.UnparamSettings) ([]goanalysis.Issue, error) {
- ssa := pass.ResultOf[buildssa.Analyzer].(*buildssa.SSA)
- ssaPkg := ssa.Pkg
-
- pkg := &packages.Package{
- Fset: pass.Fset,
- Syntax: pass.Files,
- Types: pass.Pkg,
- TypesInfo: pass.TypesInfo,
- }
-
- c := &check.Checker{}
- c.CheckExportedFuncs(settings.CheckExported)
- c.Packages([]*packages.Package{pkg})
- c.ProgramSSA(ssaPkg.Prog)
-
- unparamIssues, err := c.Check()
- if err != nil {
- return nil, err
- }
-
- var issues []goanalysis.Issue
- for _, i := range unparamIssues {
- issues = append(issues, goanalysis.NewIssue(&result.Issue{
- Pos: pass.Fset.Position(i.Pos()),
- Text: i.Message(),
- FromLinter: linterName,
- }, pass))
- }
-
- return issues, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/unused/unused.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/unused/unused.go
deleted file mode 100644
index 7b2b478fc..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/unused/unused.go
+++ /dev/null
@@ -1,112 +0,0 @@
-package unused
-
-import (
- "fmt"
- "sync"
-
- "golang.org/x/tools/go/analysis"
- "honnef.co/go/tools/analysis/facts/directives"
- "honnef.co/go/tools/analysis/facts/generated"
- "honnef.co/go/tools/analysis/lint"
- "honnef.co/go/tools/unused"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "unused"
-
-func New(settings *config.UnusedSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- analyzer := &analysis.Analyzer{
- Name: linterName,
- Doc: unused.Analyzer.Analyzer.Doc,
- Requires: unused.Analyzer.Analyzer.Requires,
- Run: func(pass *analysis.Pass) (any, error) {
- issues := runUnused(pass, settings)
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- },
- }
-
- return goanalysis.NewLinter(
- linterName,
- "Checks Go code for unused constants, variables, functions and types",
- []*analysis.Analyzer{analyzer},
- nil,
- ).WithIssuesReporter(func(_ *linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
-
-func runUnused(pass *analysis.Pass, cfg *config.UnusedSettings) []goanalysis.Issue {
- res := getUnusedResults(pass, cfg)
-
- used := make(map[string]bool)
- for _, obj := range res.Used {
- used[fmt.Sprintf("%s %d %s", obj.Position.Filename, obj.Position.Line, obj.Name)] = true
- }
-
- var issues []goanalysis.Issue
-
- // Inspired by https://github.com/dominikh/go-tools/blob/d694aadcb1f50c2d8ac0a1dd06217ebb9f654764/lintcmd/lint.go#L177-L197
- for _, object := range res.Unused {
- if object.Kind == "type param" {
- continue
- }
-
- key := fmt.Sprintf("%s %d %s", object.Position.Filename, object.Position.Line, object.Name)
- if used[key] {
- continue
- }
-
- issue := goanalysis.NewIssue(&result.Issue{
- FromLinter: linterName,
- Text: fmt.Sprintf("%s %s is unused", object.Kind, object.Name),
- Pos: object.Position,
- }, pass)
-
- issues = append(issues, issue)
- }
-
- return issues
-}
-
-func getUnusedResults(pass *analysis.Pass, settings *config.UnusedSettings) unused.Result {
- opts := unused.Options{
- FieldWritesAreUses: settings.FieldWritesAreUses,
- PostStatementsAreReads: settings.PostStatementsAreReads,
- // Related to https://github.com/golangci/golangci-lint/issues/4218
- // https://github.com/dominikh/go-tools/issues/1474#issuecomment-1850760813
- ExportedIsUsed: true,
- ExportedFieldsAreUsed: settings.ExportedFieldsAreUsed,
- ParametersAreUsed: settings.ParametersAreUsed,
- LocalVariablesAreUsed: settings.LocalVariablesAreUsed,
- GeneratedIsUsed: settings.GeneratedIsUsed,
- }
-
- // ref: https://github.com/dominikh/go-tools/blob/4ec1f474ca6c0feb8e10a8fcca4ab95f5b5b9881/internal/cmd/unused/unused.go#L68
- nodes := unused.Graph(pass.Fset,
- pass.Files,
- pass.Pkg,
- pass.TypesInfo,
- pass.ResultOf[directives.Analyzer].([]lint.Directive),
- pass.ResultOf[generated.Analyzer].(map[string]generated.Generator),
- opts,
- )
-
- sg := unused.SerializedGraph{}
- sg.Merge(nodes)
- return sg.Results()
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/usestdlibvars/usestdlibvars.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/usestdlibvars/usestdlibvars.go
deleted file mode 100644
index 050e47f24..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/usestdlibvars/usestdlibvars.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package usestdlibvars
-
-import (
- "github.com/sashamelentyev/usestdlibvars/pkg/analyzer"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(cfg *config.UseStdlibVarsSettings) *goanalysis.Linter {
- a := analyzer.New()
-
- cfgMap := make(map[string]map[string]any)
- if cfg != nil {
- cfgMap[a.Name] = map[string]any{
- analyzer.ConstantKindFlag: cfg.ConstantKind,
- analyzer.CryptoHashFlag: cfg.CryptoHash,
- analyzer.HTTPMethodFlag: cfg.HTTPMethod,
- analyzer.HTTPStatusCodeFlag: cfg.HTTPStatusCode,
- analyzer.OSDevNullFlag: cfg.OSDevNull,
- analyzer.RPCDefaultPathFlag: cfg.DefaultRPCPath,
- analyzer.SQLIsolationLevelFlag: cfg.SQLIsolationLevel,
- analyzer.SyslogPriorityFlag: cfg.SyslogPriority,
- analyzer.TimeLayoutFlag: cfg.TimeLayout,
- analyzer.TimeMonthFlag: cfg.TimeMonth,
- analyzer.TimeWeekdayFlag: cfg.TimeWeekday,
- analyzer.TLSSignatureSchemeFlag: cfg.TLSSignatureScheme,
- }
- }
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- cfgMap,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/varnamelen/varnamelen.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/varnamelen/varnamelen.go
deleted file mode 100644
index 6cb57ffa5..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/varnamelen/varnamelen.go
+++ /dev/null
@@ -1,46 +0,0 @@
-package varnamelen
-
-import (
- "strconv"
- "strings"
-
- "github.com/blizzy78/varnamelen"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.VarnamelenSettings) *goanalysis.Linter {
- analyzer := varnamelen.NewAnalyzer()
- cfg := map[string]map[string]any{}
-
- if settings != nil {
- vnlCfg := map[string]any{
- "checkReceiver": strconv.FormatBool(settings.CheckReceiver),
- "checkReturn": strconv.FormatBool(settings.CheckReturn),
- "checkTypeParam": strconv.FormatBool(settings.CheckTypeParam),
- "ignoreNames": strings.Join(settings.IgnoreNames, ","),
- "ignoreTypeAssertOk": strconv.FormatBool(settings.IgnoreTypeAssertOk),
- "ignoreMapIndexOk": strconv.FormatBool(settings.IgnoreMapIndexOk),
- "ignoreChanRecvOk": strconv.FormatBool(settings.IgnoreChanRecvOk),
- "ignoreDecls": strings.Join(settings.IgnoreDecls, ","),
- }
-
- if settings.MaxDistance > 0 {
- vnlCfg["maxDistance"] = strconv.Itoa(settings.MaxDistance)
- }
- if settings.MinNameLength > 0 {
- vnlCfg["minNameLength"] = strconv.Itoa(settings.MinNameLength)
- }
-
- cfg[analyzer.Name] = vnlCfg
- }
-
- return goanalysis.NewLinter(
- analyzer.Name,
- "checks that the length of a variable's name matches its scope",
- []*analysis.Analyzer{analyzer},
- cfg,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/wastedassign/wastedassign.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/wastedassign/wastedassign.go
deleted file mode 100644
index 094fa95c2..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/wastedassign/wastedassign.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package wastedassign
-
-import (
- "github.com/sanposhiho/wastedassign/v2"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := wastedassign.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- "Finds wasted assignment statements",
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/whitespace/whitespace.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/whitespace/whitespace.go
deleted file mode 100644
index 721bfada1..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/whitespace/whitespace.go
+++ /dev/null
@@ -1,102 +0,0 @@
-package whitespace
-
-import (
- "fmt"
- "sync"
-
- "github.com/ultraware/whitespace"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const linterName = "whitespace"
-
-func New(settings *config.WhitespaceSettings) *goanalysis.Linter {
- var mu sync.Mutex
- var resIssues []goanalysis.Issue
-
- var wsSettings whitespace.Settings
- if settings != nil {
- wsSettings = whitespace.Settings{
- Mode: whitespace.RunningModeGolangCI,
- MultiIf: settings.MultiIf,
- MultiFunc: settings.MultiFunc,
- }
- }
-
- a := whitespace.NewAnalyzer(&wsSettings)
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithContextSetter(func(_ *linter.Context) {
- a.Run = func(pass *analysis.Pass) (any, error) {
- issues, err := runWhitespace(pass, wsSettings)
- if err != nil {
- return nil, err
- }
-
- if len(issues) == 0 {
- return nil, nil
- }
-
- mu.Lock()
- resIssues = append(resIssues, issues...)
- mu.Unlock()
-
- return nil, nil
- }
- }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue {
- return resIssues
- }).WithLoadMode(goanalysis.LoadModeSyntax)
-}
-
-func runWhitespace(pass *analysis.Pass, wsSettings whitespace.Settings) ([]goanalysis.Issue, error) {
- lintIssues := whitespace.Run(pass, &wsSettings)
-
- issues := make([]goanalysis.Issue, len(lintIssues))
- for i, issue := range lintIssues {
- report := &result.Issue{
- FromLinter: linterName,
- Pos: pass.Fset.PositionFor(issue.Diagnostic, false),
- Text: issue.Message,
- }
-
- switch issue.MessageType {
- case whitespace.MessageTypeRemove:
- if len(issue.LineNumbers) == 0 {
- continue
- }
-
- report.LineRange = &result.Range{
- From: issue.LineNumbers[0],
- To: issue.LineNumbers[len(issue.LineNumbers)-1],
- }
-
- report.Replacement = &result.Replacement{NeedOnlyDelete: true}
-
- case whitespace.MessageTypeAdd:
- report.Pos = pass.Fset.PositionFor(issue.FixStart, false)
- report.Replacement = &result.Replacement{
- Inline: &result.InlineFix{
- StartCol: 0,
- Length: 1,
- NewString: "\n\t",
- },
- }
-
- default:
- return nil, fmt.Errorf("unknown message type: %v", issue.MessageType)
- }
-
- issues[i] = goanalysis.NewIssue(report, pass)
- }
-
- return issues, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/wrapcheck/wrapcheck.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/wrapcheck/wrapcheck.go
deleted file mode 100644
index 96ec2eeae..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/wrapcheck/wrapcheck.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package wrapcheck
-
-import (
- "github.com/tomarrell/wrapcheck/v2/wrapcheck"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.WrapcheckSettings) *goanalysis.Linter {
- cfg := wrapcheck.NewDefaultConfig()
- if settings != nil {
- if len(settings.IgnoreSigs) != 0 {
- cfg.IgnoreSigs = settings.IgnoreSigs
- }
- if len(settings.IgnoreSigRegexps) != 0 {
- cfg.IgnoreSigRegexps = settings.IgnoreSigRegexps
- }
- if len(settings.IgnorePackageGlobs) != 0 {
- cfg.IgnorePackageGlobs = settings.IgnorePackageGlobs
- }
- if len(settings.IgnoreInterfaceRegexps) != 0 {
- cfg.IgnoreInterfaceRegexps = settings.IgnoreInterfaceRegexps
- }
- }
-
- a := wrapcheck.NewAnalyzer(cfg)
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/wsl/wsl.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/wsl/wsl.go
deleted file mode 100644
index c728340ec..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/wsl/wsl.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package wsl
-
-import (
- "github.com/bombsimon/wsl/v4"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New(settings *config.WSLSettings) *goanalysis.Linter {
- var conf *wsl.Configuration
- if settings != nil {
- conf = &wsl.Configuration{
- StrictAppend: settings.StrictAppend,
- AllowAssignAndCallCuddle: settings.AllowAssignAndCallCuddle,
- AllowAssignAndAnythingCuddle: settings.AllowAssignAndAnythingCuddle,
- AllowMultiLineAssignCuddle: settings.AllowMultiLineAssignCuddle,
- ForceCaseTrailingWhitespaceLimit: settings.ForceCaseTrailingWhitespaceLimit,
- AllowTrailingComment: settings.AllowTrailingComment,
- AllowSeparatedLeadingComment: settings.AllowSeparatedLeadingComment,
- AllowCuddleDeclaration: settings.AllowCuddleDeclaration,
- AllowCuddleWithCalls: settings.AllowCuddleWithCalls,
- AllowCuddleWithRHS: settings.AllowCuddleWithRHS,
- ForceCuddleErrCheckAndAssign: settings.ForceCuddleErrCheckAndAssign,
- ErrorVariableNames: settings.ErrorVariableNames,
- ForceExclusiveShortDeclarations: settings.ForceExclusiveShortDeclarations,
- IncludeGenerated: true, // force to true because golangci-lint already have a way to filter generated files.
- }
- }
-
- a := wsl.NewAnalyzer(conf)
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeSyntax)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/golinters/zerologlint/zerologlint.go b/vendor/github.com/golangci/golangci-lint/pkg/golinters/zerologlint/zerologlint.go
deleted file mode 100644
index 6ca74020c..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/golinters/zerologlint/zerologlint.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package zerologlint
-
-import (
- "github.com/ykadowak/zerologlint"
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/goanalysis"
-)
-
-func New() *goanalysis.Linter {
- a := zerologlint.Analyzer
-
- return goanalysis.NewLinter(
- a.Name,
- a.Doc,
- []*analysis.Analyzer{a},
- nil,
- ).WithLoadMode(goanalysis.LoadModeTypesInfo)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goutil/env.go b/vendor/github.com/golangci/golangci-lint/pkg/goutil/env.go
deleted file mode 100644
index 7b748d8e9..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goutil/env.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package goutil
-
-import (
- "context"
- "encoding/json"
- "fmt"
- "os"
- "os/exec"
- "strings"
- "time"
-
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-type EnvKey string
-
-const (
- EnvGoCache EnvKey = "GOCACHE"
- EnvGoRoot EnvKey = "GOROOT"
-)
-
-type Env struct {
- vars map[string]string
- log logutils.Log
- debugf logutils.DebugFunc
-}
-
-func NewEnv(log logutils.Log) *Env {
- return &Env{
- vars: map[string]string{},
- log: log,
- debugf: logutils.Debug(logutils.DebugKeyEnv),
- }
-}
-
-func (e Env) Discover(ctx context.Context) error {
- startedAt := time.Now()
-
- //nolint:gosec // Everything is static here.
- cmd := exec.CommandContext(ctx, "go", "env", "-json", string(EnvGoCache), string(EnvGoRoot))
-
- out, err := cmd.Output()
- if err != nil {
- return fmt.Errorf("failed to run '%s': %w", strings.Join(cmd.Args, " "), err)
- }
-
- if err = json.Unmarshal(out, &e.vars); err != nil {
- return fmt.Errorf("failed to parse '%s' json: %w", strings.Join(cmd.Args, " "), err)
- }
-
- e.debugf("Read go env for %s: %#v", time.Since(startedAt), e.vars)
-
- return nil
-}
-
-func (e Env) Get(k EnvKey) string {
- envValue := os.Getenv(string(k))
- if envValue != "" {
- return envValue
- }
-
- return e.vars[string(k)]
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/goutil/version.go b/vendor/github.com/golangci/golangci-lint/pkg/goutil/version.go
deleted file mode 100644
index 4f42ebd1b..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/goutil/version.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package goutil
-
-import (
- "fmt"
- "go/version"
- "regexp"
- "runtime"
- "strings"
-
- hcversion "github.com/hashicorp/go-version"
-)
-
-func CheckGoVersion(goVersion string) error {
- rv, err := CleanRuntimeVersion()
- if err != nil {
- return fmt.Errorf("clean runtime version: %w", err)
- }
-
- langVersion := version.Lang(rv)
-
- runtimeVersion, err := hcversion.NewVersion(strings.TrimPrefix(langVersion, "go"))
- if err != nil {
- return err
- }
-
- targetedVersion, err := hcversion.NewVersion(TrimGoVersion(goVersion))
- if err != nil {
- return err
- }
-
- if runtimeVersion.LessThan(targetedVersion) {
- return fmt.Errorf("the Go language version (%s) used to build golangci-lint is lower than the targeted Go version (%s)",
- langVersion, goVersion)
- }
-
- return nil
-}
-
-// TrimGoVersion Trims the Go version to keep only M.m.
-// Since Go 1.21 the version inside the go.mod can be a patched version (ex: 1.21.0).
-// The version can also include information which we want to remove (ex: 1.21alpha1)
-// https://go.dev/doc/toolchain#versions
-// This a problem with staticcheck and gocritic.
-func TrimGoVersion(v string) string {
- if v == "" {
- return ""
- }
-
- exp := regexp.MustCompile(`(\d\.\d+)(?:\.\d+|[a-z]+\d)`)
-
- if exp.MatchString(v) {
- return exp.FindStringSubmatch(v)[1]
- }
-
- return v
-}
-
-func CleanRuntimeVersion() (string, error) {
- return cleanRuntimeVersion(runtime.Version())
-}
-
-func cleanRuntimeVersion(rv string) (string, error) {
- parts := strings.Fields(rv)
-
- for _, part := range parts {
- // Allow to handle:
- // - GOEXPERIMENT -> "go1.23.0 X:boringcrypto"
- // - devel -> "devel go1.24-e705a2d Wed Aug 7 01:16:42 2024 +0000 linux/amd64"
- if strings.HasPrefix(part, "go1.") {
- return part, nil
- }
- }
-
- return "", fmt.Errorf("invalid Go runtime version: %s", rv)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/lint/context.go b/vendor/github.com/golangci/golangci-lint/pkg/lint/context.go
deleted file mode 100644
index d04a11b81..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/lint/context.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package lint
-
-import (
- "context"
- "fmt"
-
- "github.com/golangci/golangci-lint/internal/cache"
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/exitcodes"
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/goanalysis/load"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-type ContextBuilder struct {
- cfg *config.Config
-
- pkgLoader *PackageLoader
-
- fileCache *fsutils.FileCache
- pkgCache *cache.Cache
-
- loadGuard *load.Guard
-}
-
-func NewContextBuilder(cfg *config.Config, pkgLoader *PackageLoader,
- fileCache *fsutils.FileCache, pkgCache *cache.Cache, loadGuard *load.Guard,
-) *ContextBuilder {
- return &ContextBuilder{
- cfg: cfg,
- pkgLoader: pkgLoader,
- fileCache: fileCache,
- pkgCache: pkgCache,
- loadGuard: loadGuard,
- }
-}
-
-func (cl *ContextBuilder) Build(ctx context.Context, log logutils.Log, linters []*linter.Config) (*linter.Context, error) {
- pkgs, deduplicatedPkgs, err := cl.pkgLoader.Load(ctx, linters)
- if err != nil {
- return nil, fmt.Errorf("failed to load packages: %w", err)
- }
-
- if len(deduplicatedPkgs) == 0 {
- return nil, fmt.Errorf("%w: running `go mod tidy` may solve the problem", exitcodes.ErrNoGoFiles)
- }
-
- ret := &linter.Context{
- Packages: deduplicatedPkgs,
-
- // At least `unused` linters works properly only on original (not deduplicated) packages,
- // see https://github.com/golangci/golangci-lint/pull/585.
- OriginalPackages: pkgs,
-
- Cfg: cl.cfg,
- Log: log,
- FileCache: cl.fileCache,
- PkgCache: cl.pkgCache,
- LoadGuard: cl.loadGuard,
- }
-
- return ret, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/lint/linter/config.go b/vendor/github.com/golangci/golangci-lint/pkg/lint/linter/config.go
deleted file mode 100644
index 6d6d4b17e..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/lint/linter/config.go
+++ /dev/null
@@ -1,181 +0,0 @@
-package linter
-
-import (
- "fmt"
-
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/pkg/config"
-)
-
-const (
- PresetBugs = "bugs" // Related to bugs detection.
- PresetComment = "comment" // Related to comments analysis.
- PresetComplexity = "complexity" // Related to code complexity analysis.
- PresetError = "error" // Related to error handling analysis.
- PresetFormatting = "format" // Related to code formatting.
- PresetImport = "import" // Related to imports analysis.
- PresetMetaLinter = "metalinter" // Related to linter that contains multiple rules or multiple linters.
- PresetModule = "module" // Related to Go modules analysis.
- PresetPerformance = "performance" // Related to performance.
- PresetSQL = "sql" // Related to SQL.
- PresetStyle = "style" // Related to coding style.
- PresetTest = "test" // Related to the analysis of the code of the tests.
- PresetUnused = "unused" // Related to the detection of unused code.
-)
-
-// LastLinter nolintlint must be last because it looks at the results of all the previous linters for unused nolint directives.
-const LastLinter = "nolintlint"
-
-type DeprecationLevel int
-
-const (
- DeprecationNone DeprecationLevel = iota
- DeprecationWarning
- DeprecationError
-)
-
-type Deprecation struct {
- Since string
- Message string
- Replacement string
- Level DeprecationLevel
-}
-
-type Config struct {
- Linter Linter
- EnabledByDefault bool
-
- LoadMode packages.LoadMode
-
- InPresets []string
- AlternativeNames []string
-
- OriginalURL string // URL of original (not forked) repo, needed for autogenerated README
- Internal bool // Internal linters cannot be disabled (ex: typecheck).
- CanAutoFix bool
- IsSlow bool
- DoesChangeTypes bool
-
- Since string
- Deprecation *Deprecation
-}
-
-func (lc *Config) WithEnabledByDefault() *Config {
- lc.EnabledByDefault = true
- return lc
-}
-
-func (lc *Config) WithInternal() *Config {
- lc.Internal = true
- return lc
-}
-
-func (lc *Config) ConsiderSlow() *Config {
- lc.IsSlow = true
- return lc
-}
-
-func (lc *Config) IsSlowLinter() bool {
- return lc.IsSlow
-}
-
-func (lc *Config) WithLoadFiles() *Config {
- lc.LoadMode |= packages.NeedName | packages.NeedFiles | packages.NeedCompiledGoFiles | packages.NeedModule
- return lc
-}
-
-func (lc *Config) WithLoadForGoAnalysis() *Config {
- lc = lc.WithLoadFiles()
- lc.LoadMode |= packages.NeedImports | packages.NeedDeps | packages.NeedExportFile | packages.NeedTypesSizes
- lc.IsSlow = true
- return lc
-}
-
-func (lc *Config) WithPresets(presets ...string) *Config {
- lc.InPresets = presets
- return lc
-}
-
-func (lc *Config) WithURL(url string) *Config {
- lc.OriginalURL = url
- return lc
-}
-
-func (lc *Config) WithAlternativeNames(names ...string) *Config {
- lc.AlternativeNames = names
- return lc
-}
-
-func (lc *Config) WithAutoFix() *Config {
- lc.CanAutoFix = true
- return lc
-}
-
-func (lc *Config) WithChangeTypes() *Config {
- lc.DoesChangeTypes = true
- return lc
-}
-
-func (lc *Config) WithSince(version string) *Config {
- lc.Since = version
- return lc
-}
-
-func (lc *Config) Deprecated(message, version, replacement string, level DeprecationLevel) *Config {
- lc.Deprecation = &Deprecation{
- Since: version,
- Message: message,
- Replacement: replacement,
- Level: level,
- }
- return lc
-}
-
-func (lc *Config) DeprecatedWarning(message, version, replacement string) *Config {
- return lc.Deprecated(message, version, replacement, DeprecationWarning)
-}
-
-func (lc *Config) DeprecatedError(message, version, replacement string) *Config {
- return lc.Deprecated(message, version, replacement, DeprecationError)
-}
-
-func (lc *Config) IsDeprecated() bool {
- return lc.Deprecation != nil
-}
-
-func (lc *Config) AllNames() []string {
- return append([]string{lc.Name()}, lc.AlternativeNames...)
-}
-
-func (lc *Config) Name() string {
- return lc.Linter.Name()
-}
-
-func (lc *Config) WithNoopFallback(cfg *config.Config, cond func(cfg *config.Config) error) *Config {
- if err := cond(cfg); err != nil {
- lc.Linter = NewNoop(lc.Linter, err.Error())
- lc.LoadMode = 0
-
- return lc.WithLoadFiles()
- }
-
- return lc
-}
-
-func IsGoLowerThanGo122() func(cfg *config.Config) error {
- return func(cfg *config.Config) error {
- if cfg == nil || config.IsGoGreaterThanOrEqual(cfg.Run.Go, "1.22") {
- return nil
- }
-
- return fmt.Errorf("this linter is disabled because the Go version (%s) of your project is lower than Go 1.22", cfg.Run.Go)
- }
-}
-
-func NewConfig(linter Linter) *Config {
- lc := &Config{
- Linter: linter,
- }
- return lc.WithLoadFiles()
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/lint/linter/context.go b/vendor/github.com/golangci/golangci-lint/pkg/lint/linter/context.go
deleted file mode 100644
index 9f29b5c4c..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/lint/linter/context.go
+++ /dev/null
@@ -1,48 +0,0 @@
-package linter
-
-import (
- "go/ast"
-
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/internal/cache"
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/goanalysis/load"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-type Context struct {
- // Packages are deduplicated (test and normal packages) packages
- Packages []*packages.Package
-
- // OriginalPackages aren't deduplicated: they contain both normal and test
- // version for each of packages
- OriginalPackages []*packages.Package
-
- Cfg *config.Config
- FileCache *fsutils.FileCache
- Log logutils.Log
-
- PkgCache *cache.Cache
- LoadGuard *load.Guard
-}
-
-func (c *Context) Settings() *config.LintersSettings {
- return &c.Cfg.LintersSettings
-}
-
-func (c *Context) ClearTypesInPackages() {
- for _, p := range c.Packages {
- clearTypes(p)
- }
- for _, p := range c.OriginalPackages {
- clearTypes(p)
- }
-}
-
-func clearTypes(p *packages.Package) {
- p.Types = nil
- p.TypesInfo = nil
- p.Syntax = []*ast.File{}
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/lint/linter/linter.go b/vendor/github.com/golangci/golangci-lint/pkg/lint/linter/linter.go
deleted file mode 100644
index 088aa3d78..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/lint/linter/linter.go
+++ /dev/null
@@ -1,67 +0,0 @@
-package linter
-
-import (
- "context"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-type Linter interface {
- Run(ctx context.Context, lintCtx *Context) ([]result.Issue, error)
- Name() string
- Desc() string
-}
-
-type Noop struct {
- name string
- desc string
- reason string
- level DeprecationLevel
-}
-
-func NewNoop(l Linter, reason string) Noop {
- return Noop{
- name: l.Name(),
- desc: l.Desc(),
- reason: reason,
- }
-}
-
-func NewNoopDeprecated(name string, cfg *config.Config, level DeprecationLevel) Noop {
- noop := Noop{
- name: name,
- desc: "Deprecated",
- reason: "This linter is fully inactivated: it will not produce any reports.",
- level: level,
- }
-
- if cfg.InternalCmdTest {
- noop.reason = ""
- }
-
- return noop
-}
-
-func (n Noop) Run(_ context.Context, lintCtx *Context) ([]result.Issue, error) {
- if n.reason == "" {
- return nil, nil
- }
-
- switch n.level {
- case DeprecationError:
- lintCtx.Log.Errorf("%s: %s", n.name, n.reason)
- default:
- lintCtx.Log.Warnf("%s: %s", n.name, n.reason)
- }
-
- return nil, nil
-}
-
-func (n Noop) Name() string {
- return n.name
-}
-
-func (n Noop) Desc() string {
- return n.desc
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/builder_linter.go b/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/builder_linter.go
deleted file mode 100644
index d2a2dc3d0..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/builder_linter.go
+++ /dev/null
@@ -1,856 +0,0 @@
-package lintersdb
-
-import (
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/golinters"
- "github.com/golangci/golangci-lint/pkg/golinters/asasalint"
- "github.com/golangci/golangci-lint/pkg/golinters/asciicheck"
- "github.com/golangci/golangci-lint/pkg/golinters/bidichk"
- "github.com/golangci/golangci-lint/pkg/golinters/bodyclose"
- "github.com/golangci/golangci-lint/pkg/golinters/canonicalheader"
- "github.com/golangci/golangci-lint/pkg/golinters/containedctx"
- "github.com/golangci/golangci-lint/pkg/golinters/contextcheck"
- "github.com/golangci/golangci-lint/pkg/golinters/copyloopvar"
- "github.com/golangci/golangci-lint/pkg/golinters/cyclop"
- "github.com/golangci/golangci-lint/pkg/golinters/decorder"
- "github.com/golangci/golangci-lint/pkg/golinters/depguard"
- "github.com/golangci/golangci-lint/pkg/golinters/dogsled"
- "github.com/golangci/golangci-lint/pkg/golinters/dupl"
- "github.com/golangci/golangci-lint/pkg/golinters/dupword"
- "github.com/golangci/golangci-lint/pkg/golinters/durationcheck"
- "github.com/golangci/golangci-lint/pkg/golinters/err113"
- "github.com/golangci/golangci-lint/pkg/golinters/errcheck"
- "github.com/golangci/golangci-lint/pkg/golinters/errchkjson"
- "github.com/golangci/golangci-lint/pkg/golinters/errname"
- "github.com/golangci/golangci-lint/pkg/golinters/errorlint"
- "github.com/golangci/golangci-lint/pkg/golinters/exhaustive"
- "github.com/golangci/golangci-lint/pkg/golinters/exhaustruct"
- "github.com/golangci/golangci-lint/pkg/golinters/exportloopref"
- "github.com/golangci/golangci-lint/pkg/golinters/fatcontext"
- "github.com/golangci/golangci-lint/pkg/golinters/forbidigo"
- "github.com/golangci/golangci-lint/pkg/golinters/forcetypeassert"
- "github.com/golangci/golangci-lint/pkg/golinters/funlen"
- "github.com/golangci/golangci-lint/pkg/golinters/gci"
- "github.com/golangci/golangci-lint/pkg/golinters/ginkgolinter"
- "github.com/golangci/golangci-lint/pkg/golinters/gocheckcompilerdirectives"
- "github.com/golangci/golangci-lint/pkg/golinters/gochecknoglobals"
- "github.com/golangci/golangci-lint/pkg/golinters/gochecknoinits"
- "github.com/golangci/golangci-lint/pkg/golinters/gochecksumtype"
- "github.com/golangci/golangci-lint/pkg/golinters/gocognit"
- "github.com/golangci/golangci-lint/pkg/golinters/goconst"
- "github.com/golangci/golangci-lint/pkg/golinters/gocritic"
- "github.com/golangci/golangci-lint/pkg/golinters/gocyclo"
- "github.com/golangci/golangci-lint/pkg/golinters/godot"
- "github.com/golangci/golangci-lint/pkg/golinters/godox"
- "github.com/golangci/golangci-lint/pkg/golinters/gofmt"
- "github.com/golangci/golangci-lint/pkg/golinters/gofumpt"
- "github.com/golangci/golangci-lint/pkg/golinters/goheader"
- "github.com/golangci/golangci-lint/pkg/golinters/goimports"
- "github.com/golangci/golangci-lint/pkg/golinters/gomoddirectives"
- "github.com/golangci/golangci-lint/pkg/golinters/gomodguard"
- "github.com/golangci/golangci-lint/pkg/golinters/goprintffuncname"
- "github.com/golangci/golangci-lint/pkg/golinters/gosec"
- "github.com/golangci/golangci-lint/pkg/golinters/gosimple"
- "github.com/golangci/golangci-lint/pkg/golinters/gosmopolitan"
- "github.com/golangci/golangci-lint/pkg/golinters/govet"
- "github.com/golangci/golangci-lint/pkg/golinters/grouper"
- "github.com/golangci/golangci-lint/pkg/golinters/iface"
- "github.com/golangci/golangci-lint/pkg/golinters/importas"
- "github.com/golangci/golangci-lint/pkg/golinters/inamedparam"
- "github.com/golangci/golangci-lint/pkg/golinters/ineffassign"
- "github.com/golangci/golangci-lint/pkg/golinters/interfacebloat"
- "github.com/golangci/golangci-lint/pkg/golinters/intrange"
- "github.com/golangci/golangci-lint/pkg/golinters/ireturn"
- "github.com/golangci/golangci-lint/pkg/golinters/lll"
- "github.com/golangci/golangci-lint/pkg/golinters/loggercheck"
- "github.com/golangci/golangci-lint/pkg/golinters/maintidx"
- "github.com/golangci/golangci-lint/pkg/golinters/makezero"
- "github.com/golangci/golangci-lint/pkg/golinters/mirror"
- "github.com/golangci/golangci-lint/pkg/golinters/misspell"
- "github.com/golangci/golangci-lint/pkg/golinters/mnd"
- "github.com/golangci/golangci-lint/pkg/golinters/musttag"
- "github.com/golangci/golangci-lint/pkg/golinters/nakedret"
- "github.com/golangci/golangci-lint/pkg/golinters/nestif"
- "github.com/golangci/golangci-lint/pkg/golinters/nilerr"
- "github.com/golangci/golangci-lint/pkg/golinters/nilnil"
- "github.com/golangci/golangci-lint/pkg/golinters/nlreturn"
- "github.com/golangci/golangci-lint/pkg/golinters/noctx"
- "github.com/golangci/golangci-lint/pkg/golinters/nolintlint"
- "github.com/golangci/golangci-lint/pkg/golinters/nonamedreturns"
- "github.com/golangci/golangci-lint/pkg/golinters/nosprintfhostport"
- "github.com/golangci/golangci-lint/pkg/golinters/paralleltest"
- "github.com/golangci/golangci-lint/pkg/golinters/perfsprint"
- "github.com/golangci/golangci-lint/pkg/golinters/prealloc"
- "github.com/golangci/golangci-lint/pkg/golinters/predeclared"
- "github.com/golangci/golangci-lint/pkg/golinters/promlinter"
- "github.com/golangci/golangci-lint/pkg/golinters/protogetter"
- "github.com/golangci/golangci-lint/pkg/golinters/reassign"
- "github.com/golangci/golangci-lint/pkg/golinters/recvcheck"
- "github.com/golangci/golangci-lint/pkg/golinters/revive"
- "github.com/golangci/golangci-lint/pkg/golinters/rowserrcheck"
- "github.com/golangci/golangci-lint/pkg/golinters/sloglint"
- "github.com/golangci/golangci-lint/pkg/golinters/spancheck"
- "github.com/golangci/golangci-lint/pkg/golinters/sqlclosecheck"
- "github.com/golangci/golangci-lint/pkg/golinters/staticcheck"
- "github.com/golangci/golangci-lint/pkg/golinters/stylecheck"
- "github.com/golangci/golangci-lint/pkg/golinters/tagalign"
- "github.com/golangci/golangci-lint/pkg/golinters/tagliatelle"
- "github.com/golangci/golangci-lint/pkg/golinters/tenv"
- "github.com/golangci/golangci-lint/pkg/golinters/testableexamples"
- "github.com/golangci/golangci-lint/pkg/golinters/testifylint"
- "github.com/golangci/golangci-lint/pkg/golinters/testpackage"
- "github.com/golangci/golangci-lint/pkg/golinters/thelper"
- "github.com/golangci/golangci-lint/pkg/golinters/tparallel"
- "github.com/golangci/golangci-lint/pkg/golinters/unconvert"
- "github.com/golangci/golangci-lint/pkg/golinters/unparam"
- "github.com/golangci/golangci-lint/pkg/golinters/unused"
- "github.com/golangci/golangci-lint/pkg/golinters/usestdlibvars"
- "github.com/golangci/golangci-lint/pkg/golinters/varnamelen"
- "github.com/golangci/golangci-lint/pkg/golinters/wastedassign"
- "github.com/golangci/golangci-lint/pkg/golinters/whitespace"
- "github.com/golangci/golangci-lint/pkg/golinters/wrapcheck"
- "github.com/golangci/golangci-lint/pkg/golinters/wsl"
- "github.com/golangci/golangci-lint/pkg/golinters/zerologlint"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
-)
-
-// LinterBuilder builds the "internal" linters based on the configuration.
-type LinterBuilder struct{}
-
-// NewLinterBuilder creates a new LinterBuilder.
-func NewLinterBuilder() *LinterBuilder {
- return &LinterBuilder{}
-}
-
-// Build loads all the "internal" linters.
-// The configuration is use for the linter settings.
-func (LinterBuilder) Build(cfg *config.Config) ([]*linter.Config, error) {
- if cfg == nil {
- return nil, nil
- }
-
- const megacheckName = "megacheck"
-
- // The linters are sorted in the alphabetical order (case-insensitive).
- // When a new linter is added the version in `WithSince(...)` must be the next minor version of golangci-lint.
- return []*linter.Config{
- linter.NewConfig(asasalint.New(&cfg.LintersSettings.Asasalint)).
- WithSince("v1.47.0").
- WithPresets(linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/alingse/asasalint"),
-
- linter.NewConfig(asciicheck.New()).
- WithSince("v1.26.0").
- WithPresets(linter.PresetBugs, linter.PresetStyle).
- WithURL("https://github.com/tdakkota/asciicheck"),
-
- linter.NewConfig(bidichk.New(&cfg.LintersSettings.BiDiChk)).
- WithSince("v1.43.0").
- WithPresets(linter.PresetBugs).
- WithURL("https://github.com/breml/bidichk"),
-
- linter.NewConfig(bodyclose.New()).
- WithSince("v1.18.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetPerformance, linter.PresetBugs).
- WithURL("https://github.com/timakin/bodyclose"),
-
- linter.NewConfig(canonicalheader.New()).
- WithSince("v1.58.0").
- WithPresets(linter.PresetStyle).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/lasiar/canonicalHeader"),
-
- linter.NewConfig(containedctx.New()).
- WithSince("v1.44.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/sivchari/containedctx"),
-
- linter.NewConfig(contextcheck.New()).
- WithSince("v1.43.0").
- WithPresets(linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/kkHAIKE/contextcheck"),
-
- linter.NewConfig(copyloopvar.New(&cfg.LintersSettings.CopyLoopVar)).
- WithSince("v1.57.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/karamaru-alpha/copyloopvar").
- WithNoopFallback(cfg, linter.IsGoLowerThanGo122()),
-
- linter.NewConfig(cyclop.New(&cfg.LintersSettings.Cyclop)).
- WithSince("v1.37.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetComplexity).
- WithURL("https://github.com/bkielbasa/cyclop"),
-
- linter.NewConfig(decorder.New(&cfg.LintersSettings.Decorder)).
- WithSince("v1.44.0").
- WithPresets(linter.PresetFormatting, linter.PresetStyle).
- WithURL("https://gitlab.com/bosi/decorder"),
-
- linter.NewConfig(linter.NewNoopDeprecated("deadcode", cfg, linter.DeprecationError)).
- WithSince("v1.0.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetUnused).
- WithURL("https://github.com/remyoudompheng/go-misc/tree/master/deadcode").
- DeprecatedError("The owner seems to have abandoned the linter.", "v1.49.0", "unused"),
-
- linter.NewConfig(depguard.New(&cfg.LintersSettings.Depguard)).
- WithSince("v1.4.0").
- WithPresets(linter.PresetStyle, linter.PresetImport, linter.PresetModule).
- WithURL("https://github.com/OpenPeeDeeP/depguard"),
-
- linter.NewConfig(dogsled.New(&cfg.LintersSettings.Dogsled)).
- WithSince("v1.19.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/alexkohler/dogsled"),
-
- linter.NewConfig(dupl.New(&cfg.LintersSettings.Dupl)).
- WithSince("v1.0.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/mibk/dupl"),
-
- linter.NewConfig(dupword.New(&cfg.LintersSettings.DupWord)).
- WithSince("v1.50.0").
- WithPresets(linter.PresetComment).
- WithURL("https://github.com/Abirdcfly/dupword"),
-
- linter.NewConfig(durationcheck.New()).
- WithSince("v1.37.0").
- WithPresets(linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/charithe/durationcheck"),
-
- linter.NewConfig(errcheck.New(&cfg.LintersSettings.Errcheck)).
- WithEnabledByDefault().
- WithSince("v1.0.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetBugs, linter.PresetError).
- WithURL("https://github.com/kisielk/errcheck"),
-
- linter.NewConfig(errchkjson.New(&cfg.LintersSettings.ErrChkJSON)).
- WithSince("v1.44.0").
- WithPresets(linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/breml/errchkjson"),
-
- linter.NewConfig(errname.New()).
- WithSince("v1.42.0").
- WithPresets(linter.PresetStyle).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/Antonboom/errname"),
-
- linter.NewConfig(errorlint.New(&cfg.LintersSettings.ErrorLint)).
- WithSince("v1.32.0").
- WithPresets(linter.PresetBugs, linter.PresetError).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/polyfloyd/go-errorlint"),
-
- linter.NewConfig(linter.NewNoopDeprecated("execinquery", cfg, linter.DeprecationError)).
- WithSince("v1.46.0").
- WithPresets(linter.PresetSQL).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/1uf3/execinquery").
- DeprecatedError("The repository of the linter has been archived by the owner.", "v1.58.0", ""),
-
- linter.NewConfig(exhaustive.New(&cfg.LintersSettings.Exhaustive)).
- WithSince(" v1.28.0").
- WithPresets(linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/nishanths/exhaustive"),
-
- linter.NewConfig(linter.NewNoopDeprecated("exhaustivestruct", cfg, linter.DeprecationError)).
- WithSince("v1.32.0").
- WithPresets(linter.PresetStyle, linter.PresetTest).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/mbilski/exhaustivestruct").
- DeprecatedError("The repository of the linter has been deprecated by the owner.", "v1.46.0", "exhaustruct"),
-
- linter.NewConfig(exhaustruct.New(&cfg.LintersSettings.Exhaustruct)).
- WithSince("v1.46.0").
- WithPresets(linter.PresetStyle, linter.PresetTest).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/GaijinEntertainment/go-exhaustruct"),
-
- linter.NewConfig(exportloopref.New()).
- WithSince("v1.28.0").
- WithPresets(linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/kyoh86/exportloopref").
- DeprecatedWarning("Since Go1.22 (loopvar) this linter is no longer relevant.", "v1.60.2", "copyloopvar"),
-
- linter.NewConfig(forbidigo.New(&cfg.LintersSettings.Forbidigo)).
- WithSince("v1.34.0").
- WithPresets(linter.PresetStyle).
- // Strictly speaking,
- // the additional information is only needed when forbidigoCfg.AnalyzeTypes is chosen by the user.
- // But we don't know that here in all cases (sometimes config is not loaded),
- // so we have to assume that it is needed to be on the safe side.
- WithLoadForGoAnalysis().
- WithURL("https://github.com/ashanbrown/forbidigo"),
-
- linter.NewConfig(forcetypeassert.New()).
- WithSince("v1.38.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/gostaticanalysis/forcetypeassert"),
-
- linter.NewConfig(fatcontext.New()).
- WithSince("v1.58.0").
- WithPresets(linter.PresetPerformance).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/Crocmagnon/fatcontext"),
-
- linter.NewConfig(funlen.New(&cfg.LintersSettings.Funlen)).
- WithSince("v1.18.0").
- WithPresets(linter.PresetComplexity).
- WithURL("https://github.com/ultraware/funlen"),
-
- linter.NewConfig(gci.New(&cfg.LintersSettings.Gci)).
- WithSince("v1.30.0").
- WithPresets(linter.PresetFormatting, linter.PresetImport).
- WithAutoFix().
- WithURL("https://github.com/daixiang0/gci"),
-
- linter.NewConfig(ginkgolinter.New(&cfg.LintersSettings.GinkgoLinter)).
- WithSince("v1.51.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/nunnatsa/ginkgolinter"),
-
- linter.NewConfig(gocheckcompilerdirectives.New()).
- WithSince("v1.51.0").
- WithPresets(linter.PresetBugs).
- WithURL("https://github.com/leighmcculloch/gocheckcompilerdirectives"),
-
- linter.NewConfig(gochecknoglobals.New()).
- WithSince("v1.12.0").
- WithPresets(linter.PresetStyle).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/leighmcculloch/gochecknoglobals"),
-
- linter.NewConfig(gochecknoinits.New()).
- WithSince("v1.12.0").
- WithPresets(linter.PresetStyle),
-
- linter.NewConfig(gochecksumtype.New(&cfg.LintersSettings.GoChecksumType)).
- WithSince("v1.55.0").
- WithPresets(linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/alecthomas/go-check-sumtype"),
-
- linter.NewConfig(gocognit.New(&cfg.LintersSettings.Gocognit)).
- WithSince("v1.20.0").
- WithPresets(linter.PresetComplexity).
- WithURL("https://github.com/uudashr/gocognit"),
-
- linter.NewConfig(goconst.New(&cfg.LintersSettings.Goconst)).
- WithSince("v1.0.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/jgautheron/goconst"),
-
- linter.NewConfig(gocritic.New(&cfg.LintersSettings.Gocritic)).
- WithSince("v1.12.0").
- WithPresets(linter.PresetStyle, linter.PresetMetaLinter).
- WithLoadForGoAnalysis().
- WithAutoFix().
- WithURL("https://github.com/go-critic/go-critic"),
-
- linter.NewConfig(gocyclo.New(&cfg.LintersSettings.Gocyclo)).
- WithSince("v1.0.0").
- WithPresets(linter.PresetComplexity).
- WithURL("https://github.com/fzipp/gocyclo"),
-
- linter.NewConfig(godot.New(&cfg.LintersSettings.Godot)).
- WithSince("v1.25.0").
- WithPresets(linter.PresetStyle, linter.PresetComment).
- WithAutoFix().
- WithURL("https://github.com/tetafro/godot"),
-
- linter.NewConfig(godox.New(&cfg.LintersSettings.Godox)).
- WithSince("v1.19.0").
- WithPresets(linter.PresetStyle, linter.PresetComment).
- WithURL("https://github.com/matoous/godox"),
-
- linter.NewConfig(err113.New()).
- WithSince("v1.26.0").
- WithPresets(linter.PresetStyle, linter.PresetError).
- WithLoadForGoAnalysis().
- WithAlternativeNames("goerr113").
- WithURL("https://github.com/Djarvur/go-err113"),
-
- linter.NewConfig(gofmt.New(&cfg.LintersSettings.Gofmt)).
- WithSince("v1.0.0").
- WithPresets(linter.PresetFormatting).
- WithAutoFix().
- WithURL("https://pkg.go.dev/cmd/gofmt"),
-
- linter.NewConfig(gofumpt.New(&cfg.LintersSettings.Gofumpt)).
- WithSince("v1.28.0").
- WithPresets(linter.PresetFormatting).
- WithAutoFix().
- WithURL("https://github.com/mvdan/gofumpt"),
-
- linter.NewConfig(goheader.New(&cfg.LintersSettings.Goheader)).
- WithSince("v1.28.0").
- WithPresets(linter.PresetStyle).
- WithAutoFix().
- WithURL("https://github.com/denis-tingaikin/go-header"),
-
- linter.NewConfig(goimports.New(&cfg.LintersSettings.Goimports)).
- WithSince("v1.20.0").
- WithPresets(linter.PresetFormatting, linter.PresetImport).
- WithAutoFix().
- WithURL("https://pkg.go.dev/golang.org/x/tools/cmd/goimports"),
-
- linter.NewConfig(linter.NewNoopDeprecated("golint", cfg, linter.DeprecationError)).
- WithSince("v1.0.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/golang/lint").
- DeprecatedError("The repository of the linter has been archived by the owner.", "v1.41.0", "revive"),
-
- linter.NewConfig(mnd.New(&cfg.LintersSettings.Mnd)).
- WithSince("v1.22.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/tommy-muehle/go-mnd"),
-
- linter.NewConfig(linter.NewNoopDeprecated("gomnd", cfg, linter.DeprecationError)).
- WithSince("v1.22.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/tommy-muehle/go-mnd").
- DeprecatedError("The linter has been renamed.", "v1.58.0", "mnd"),
-
- linter.NewConfig(gomoddirectives.New(&cfg.LintersSettings.GoModDirectives)).
- WithSince("v1.39.0").
- WithPresets(linter.PresetStyle, linter.PresetModule).
- WithURL("https://github.com/ldez/gomoddirectives"),
-
- linter.NewConfig(gomodguard.New(&cfg.LintersSettings.Gomodguard)).
- WithSince("v1.25.0").
- WithPresets(linter.PresetStyle, linter.PresetImport, linter.PresetModule).
- WithURL("https://github.com/ryancurrah/gomodguard"),
-
- linter.NewConfig(goprintffuncname.New()).
- WithSince("v1.23.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/golangci/go-printf-func-name"),
-
- linter.NewConfig(gosec.New(&cfg.LintersSettings.Gosec)).
- WithSince("v1.0.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetBugs).
- WithURL("https://github.com/securego/gosec").
- WithAlternativeNames("gas"),
-
- linter.NewConfig(gosimple.New(&cfg.LintersSettings.Gosimple)).
- WithEnabledByDefault().
- WithSince("v1.20.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle).
- WithAlternativeNames(megacheckName).
- WithURL("https://github.com/dominikh/go-tools/tree/master/simple"),
-
- linter.NewConfig(gosmopolitan.New(&cfg.LintersSettings.Gosmopolitan)).
- WithSince("v1.53.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetBugs).
- WithURL("https://github.com/xen0n/gosmopolitan"),
-
- linter.NewConfig(govet.New(&cfg.LintersSettings.Govet)).
- WithEnabledByDefault().
- WithSince("v1.0.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetBugs, linter.PresetMetaLinter).
- WithAlternativeNames("vet", "vetshadow").
- WithURL("https://pkg.go.dev/cmd/vet"),
-
- linter.NewConfig(grouper.New(&cfg.LintersSettings.Grouper)).
- WithSince("v1.44.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/leonklingele/grouper"),
-
- linter.NewConfig(linter.NewNoopDeprecated("ifshort", cfg, linter.DeprecationError)).
- WithSince("v1.36.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/esimonov/ifshort").
- DeprecatedError("The repository of the linter has been deprecated by the owner.", "v1.48.0", ""),
-
- linter.NewConfig(iface.New(&cfg.LintersSettings.Iface)).
- WithSince("v1.62.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/uudashr/iface"),
-
- linter.NewConfig(importas.New(&cfg.LintersSettings.ImportAs)).
- WithSince("v1.38.0").
- WithPresets(linter.PresetStyle).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/julz/importas"),
-
- linter.NewConfig(inamedparam.New(&cfg.LintersSettings.Inamedparam)).
- WithSince("v1.55.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/macabu/inamedparam"),
-
- linter.NewConfig(ineffassign.New()).
- WithEnabledByDefault().
- WithSince("v1.0.0").
- WithPresets(linter.PresetUnused).
- WithURL("https://github.com/gordonklaus/ineffassign"),
-
- linter.NewConfig(interfacebloat.New(&cfg.LintersSettings.InterfaceBloat)).
- WithSince("v1.49.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/sashamelentyev/interfacebloat"),
-
- linter.NewConfig(linter.NewNoopDeprecated("interfacer", cfg, linter.DeprecationError)).
- WithSince("v1.0.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/mvdan/interfacer").
- DeprecatedError("The repository of the linter has been archived by the owner.", "v1.38.0", ""),
-
- linter.NewConfig(intrange.New()).
- WithSince("v1.57.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/ckaznocha/intrange").
- WithNoopFallback(cfg, linter.IsGoLowerThanGo122()),
-
- linter.NewConfig(ireturn.New(&cfg.LintersSettings.Ireturn)).
- WithSince("v1.43.0").
- WithPresets(linter.PresetStyle).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/butuzov/ireturn"),
-
- linter.NewConfig(lll.New(&cfg.LintersSettings.Lll)).
- WithSince("v1.8.0").
- WithPresets(linter.PresetStyle),
-
- linter.NewConfig(loggercheck.New(&cfg.LintersSettings.LoggerCheck)).
- WithSince("v1.49.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle, linter.PresetBugs).
- WithAlternativeNames("logrlint").
- WithURL("https://github.com/timonwong/loggercheck"),
-
- linter.NewConfig(maintidx.New(&cfg.LintersSettings.MaintIdx)).
- WithSince("v1.44.0").
- WithPresets(linter.PresetComplexity).
- WithURL("https://github.com/yagipy/maintidx"),
-
- linter.NewConfig(makezero.New(&cfg.LintersSettings.Makezero)).
- WithSince("v1.34.0").
- WithPresets(linter.PresetStyle, linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/ashanbrown/makezero"),
-
- linter.NewConfig(linter.NewNoopDeprecated("maligned", cfg, linter.DeprecationError)).
- WithSince("v1.0.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetPerformance).
- WithURL("https://github.com/mdempsky/maligned").
- DeprecatedError("The repository of the linter has been archived by the owner.", "v1.38.0", "govet 'fieldalignment'"),
-
- linter.NewConfig(mirror.New()).
- WithSince("v1.53.0").
- WithPresets(linter.PresetStyle).
- WithLoadForGoAnalysis().
- WithAutoFix().
- WithURL("https://github.com/butuzov/mirror"),
-
- linter.NewConfig(misspell.New(&cfg.LintersSettings.Misspell)).
- WithSince("v1.8.0").
- WithPresets(linter.PresetStyle, linter.PresetComment).
- WithAutoFix().
- WithURL("https://github.com/client9/misspell"),
-
- linter.NewConfig(musttag.New(&cfg.LintersSettings.MustTag)).
- WithSince("v1.51.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle, linter.PresetBugs).
- WithURL("https://github.com/go-simpler/musttag"),
-
- linter.NewConfig(nakedret.New(&cfg.LintersSettings.Nakedret)).
- WithSince("v1.19.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/alexkohler/nakedret"),
-
- linter.NewConfig(nestif.New(&cfg.LintersSettings.Nestif)).
- WithSince("v1.25.0").
- WithPresets(linter.PresetComplexity).
- WithURL("https://github.com/nakabonne/nestif"),
-
- linter.NewConfig(nilerr.New()).
- WithSince("v1.38.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetBugs).
- WithURL("https://github.com/gostaticanalysis/nilerr"),
-
- linter.NewConfig(nilnil.New(&cfg.LintersSettings.NilNil)).
- WithSince("v1.43.0").
- WithPresets(linter.PresetStyle).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/Antonboom/nilnil"),
-
- linter.NewConfig(nlreturn.New(&cfg.LintersSettings.Nlreturn)).
- WithSince("v1.30.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/ssgreg/nlreturn"),
-
- linter.NewConfig(noctx.New()).
- WithSince("v1.28.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetPerformance, linter.PresetBugs).
- WithURL("https://github.com/sonatard/noctx"),
-
- linter.NewConfig(nonamedreturns.New(&cfg.LintersSettings.NoNamedReturns)).
- WithSince("v1.46.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/firefart/nonamedreturns"),
-
- linter.NewConfig(linter.NewNoopDeprecated("nosnakecase", cfg, linter.DeprecationError)).
- WithSince("v1.47.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/sivchari/nosnakecase").
- DeprecatedError("The repository of the linter has been deprecated by the owner.", "v1.48.1", "revive 'var-naming'"),
-
- linter.NewConfig(nosprintfhostport.New()).
- WithSince("v1.46.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/stbenjam/no-sprintf-host-port"),
-
- linter.NewConfig(paralleltest.New(&cfg.LintersSettings.ParallelTest)).
- WithSince("v1.33.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle, linter.PresetTest).
- WithURL("https://github.com/kunwardeep/paralleltest"),
-
- linter.NewConfig(perfsprint.New(&cfg.LintersSettings.PerfSprint)).
- WithSince("v1.55.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetPerformance).
- WithURL("https://github.com/catenacyber/perfsprint"),
-
- linter.NewConfig(prealloc.New(&cfg.LintersSettings.Prealloc)).
- WithSince("v1.19.0").
- WithPresets(linter.PresetPerformance).
- WithURL("https://github.com/alexkohler/prealloc"),
-
- linter.NewConfig(predeclared.New(&cfg.LintersSettings.Predeclared)).
- WithSince("v1.35.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/nishanths/predeclared"),
-
- linter.NewConfig(promlinter.New(&cfg.LintersSettings.Promlinter)).
- WithSince("v1.40.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/yeya24/promlinter"),
-
- linter.NewConfig(protogetter.New(&cfg.LintersSettings.ProtoGetter)).
- WithSince("v1.55.0").
- WithPresets(linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithAutoFix().
- WithURL("https://github.com/ghostiam/protogetter"),
-
- linter.NewConfig(reassign.New(&cfg.LintersSettings.Reassign)).
- WithSince("v1.49.0").
- WithPresets(linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/curioswitch/go-reassign"),
-
- linter.NewConfig(recvcheck.New()).
- WithSince("v1.62.0").
- WithPresets(linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/raeperd/recvcheck"),
-
- linter.NewConfig(revive.New(&cfg.LintersSettings.Revive)).
- WithSince("v1.37.0").
- WithPresets(linter.PresetStyle, linter.PresetMetaLinter).
- ConsiderSlow().
- WithURL("https://github.com/mgechev/revive"),
-
- linter.NewConfig(rowserrcheck.New(&cfg.LintersSettings.RowsErrCheck)).
- WithSince("v1.23.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetBugs, linter.PresetSQL).
- WithURL("https://github.com/jingyugao/rowserrcheck"),
-
- linter.NewConfig(sloglint.New(&cfg.LintersSettings.SlogLint)).
- WithSince("v1.55.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle, linter.PresetFormatting).
- WithURL("https://github.com/go-simpler/sloglint"),
-
- linter.NewConfig(linter.NewNoopDeprecated("scopelint", cfg, linter.DeprecationError)).
- WithSince("v1.12.0").
- WithPresets(linter.PresetBugs).
- WithURL("https://github.com/kyoh86/scopelint").
- DeprecatedError("The repository of the linter has been deprecated by the owner.", "v1.39.0", "exportloopref"),
-
- linter.NewConfig(sqlclosecheck.New()).
- WithSince("v1.28.0").
- WithPresets(linter.PresetBugs, linter.PresetSQL).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/ryanrolds/sqlclosecheck"),
-
- linter.NewConfig(spancheck.New(&cfg.LintersSettings.Spancheck)).
- WithSince("v1.56.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetBugs).
- WithURL("https://github.com/jjti/go-spancheck"),
-
- linter.NewConfig(staticcheck.New(&cfg.LintersSettings.Staticcheck)).
- WithEnabledByDefault().
- WithSince("v1.0.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetBugs, linter.PresetMetaLinter).
- WithAlternativeNames(megacheckName).
- WithURL("https://staticcheck.dev/"),
-
- linter.NewConfig(linter.NewNoopDeprecated("structcheck", cfg, linter.DeprecationError)).
- WithSince("v1.0.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetUnused).
- WithURL("https://github.com/opennota/check").
- DeprecatedError("The owner seems to have abandoned the linter.", "v1.49.0", "unused"),
-
- linter.NewConfig(stylecheck.New(&cfg.LintersSettings.Stylecheck)).
- WithSince("v1.20.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/dominikh/go-tools/tree/master/stylecheck"),
-
- linter.NewConfig(tagalign.New(&cfg.LintersSettings.TagAlign)).
- WithSince("v1.53.0").
- WithPresets(linter.PresetStyle, linter.PresetFormatting).
- WithAutoFix().
- WithURL("https://github.com/4meepo/tagalign"),
-
- linter.NewConfig(tagliatelle.New(&cfg.LintersSettings.Tagliatelle)).
- WithSince("v1.40.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/ldez/tagliatelle"),
-
- linter.NewConfig(tenv.New(&cfg.LintersSettings.Tenv)).
- WithSince("v1.43.0").
- WithPresets(linter.PresetTest).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/sivchari/tenv"),
-
- linter.NewConfig(testableexamples.New()).
- WithSince("v1.50.0").
- WithPresets(linter.PresetTest).
- WithURL("https://github.com/maratori/testableexamples"),
-
- linter.NewConfig(testifylint.New(&cfg.LintersSettings.Testifylint)).
- WithSince("v1.55.0").
- WithPresets(linter.PresetTest, linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/Antonboom/testifylint"),
-
- linter.NewConfig(testpackage.New(&cfg.LintersSettings.Testpackage)).
- WithSince("v1.25.0").
- WithPresets(linter.PresetStyle, linter.PresetTest).
- WithURL("https://github.com/maratori/testpackage"),
-
- linter.NewConfig(thelper.New(&cfg.LintersSettings.Thelper)).
- WithSince("v1.34.0").
- WithPresets(linter.PresetTest).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/kulti/thelper"),
-
- linter.NewConfig(tparallel.New()).
- WithSince("v1.32.0").
- WithPresets(linter.PresetStyle, linter.PresetTest).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/moricho/tparallel"),
-
- linter.NewConfig(golinters.NewTypecheck()).
- WithInternal().
- WithEnabledByDefault().
- WithSince("v1.3.0"),
-
- linter.NewConfig(unconvert.New(&cfg.LintersSettings.Unconvert)).
- WithSince("v1.0.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/mdempsky/unconvert"),
-
- linter.NewConfig(unparam.New(&cfg.LintersSettings.Unparam)).
- WithSince("v1.9.0").
- WithPresets(linter.PresetUnused).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/mvdan/unparam"),
-
- linter.NewConfig(unused.New(&cfg.LintersSettings.Unused)).
- WithEnabledByDefault().
- WithSince("v1.20.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetUnused).
- WithAlternativeNames(megacheckName).
- ConsiderSlow().
- WithChangeTypes().
- WithURL("https://github.com/dominikh/go-tools/tree/master/unused"),
-
- linter.NewConfig(usestdlibvars.New(&cfg.LintersSettings.UseStdlibVars)).
- WithSince("v1.48.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/sashamelentyev/usestdlibvars"),
-
- linter.NewConfig(linter.NewNoopDeprecated("varcheck", cfg, linter.DeprecationError)).
- WithSince("v1.0.0").
- WithLoadForGoAnalysis().
- WithPresets(linter.PresetUnused).
- WithURL("https://github.com/opennota/check").
- DeprecatedError("The owner seems to have abandoned the linter.", "v1.49.0", "unused"),
-
- linter.NewConfig(varnamelen.New(&cfg.LintersSettings.Varnamelen)).
- WithSince("v1.43.0").
- WithPresets(linter.PresetStyle).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/blizzy78/varnamelen"),
-
- linter.NewConfig(wastedassign.New()).
- WithSince("v1.38.0").
- WithPresets(linter.PresetStyle).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/sanposhiho/wastedassign"),
-
- linter.NewConfig(whitespace.New(&cfg.LintersSettings.Whitespace)).
- WithSince("v1.19.0").
- WithPresets(linter.PresetStyle).
- WithAutoFix().
- WithURL("https://github.com/ultraware/whitespace"),
-
- linter.NewConfig(wrapcheck.New(&cfg.LintersSettings.Wrapcheck)).
- WithSince("v1.32.0").
- WithPresets(linter.PresetStyle, linter.PresetError).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/tomarrell/wrapcheck"),
-
- linter.NewConfig(wsl.New(&cfg.LintersSettings.WSL)).
- WithSince("v1.20.0").
- WithPresets(linter.PresetStyle).
- WithURL("https://github.com/bombsimon/wsl"),
-
- linter.NewConfig(zerologlint.New()).
- WithSince("v1.53.0").
- WithPresets(linter.PresetBugs).
- WithLoadForGoAnalysis().
- WithURL("https://github.com/ykadowak/zerologlint"),
-
- // nolintlint must be last because it looks at the results of all the previous linters for unused nolint directives
- linter.NewConfig(nolintlint.New(&cfg.LintersSettings.NoLintLint)).
- WithSince("v1.26.0").
- WithPresets(linter.PresetStyle).
- WithAutoFix().
- WithURL("https://github.com/golangci/golangci-lint/tree/master/pkg/golinters/nolintlint/internal"),
- }, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/builder_plugin_go.go b/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/builder_plugin_go.go
deleted file mode 100644
index 88f3e2ae3..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/builder_plugin_go.go
+++ /dev/null
@@ -1,136 +0,0 @@
-package lintersdb
-
-import (
- "errors"
- "fmt"
- "path/filepath"
- "plugin"
-
- "golang.org/x/tools/go/analysis"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-const goPluginType = "goplugin"
-
-type AnalyzerPlugin interface {
- GetAnalyzers() []*analysis.Analyzer
-}
-
-// PluginGoBuilder builds the custom linters (Go plugin) based on the configuration.
-type PluginGoBuilder struct {
- log logutils.Log
-}
-
-// NewPluginGoBuilder creates new PluginGoBuilder.
-func NewPluginGoBuilder(log logutils.Log) *PluginGoBuilder {
- return &PluginGoBuilder{log: log}
-}
-
-// Build loads custom linters that are specified in the golangci-lint config file.
-func (b *PluginGoBuilder) Build(cfg *config.Config) ([]*linter.Config, error) {
- if cfg == nil || b.log == nil {
- return nil, nil
- }
-
- var linters []*linter.Config
-
- for name, settings := range cfg.LintersSettings.Custom {
- if settings.Type != goPluginType && settings.Type != "" {
- continue
- }
-
- lc, err := b.loadConfig(cfg, name, &settings)
- if err != nil {
- return nil, fmt.Errorf("unable to load custom analyzer %q: %s, %w", name, settings.Path, err)
- }
- linters = append(linters, lc)
- }
-
- return linters, nil
-}
-
-// loadConfig loads the configuration of private linters.
-// Private linters are dynamically loaded from .so plugin files.
-func (b *PluginGoBuilder) loadConfig(cfg *config.Config, name string, settings *config.CustomLinterSettings) (*linter.Config, error) {
- analyzers, err := b.getAnalyzerPlugin(cfg, settings.Path, settings.Settings)
- if err != nil {
- return nil, err
- }
-
- b.log.Infof("Loaded %s: %s", settings.Path, name)
-
- customLinter := goanalysis.NewLinter(name, settings.Description, analyzers, nil).
- WithLoadMode(goanalysis.LoadModeTypesInfo)
-
- linterConfig := linter.NewConfig(customLinter).
- WithEnabledByDefault().
- WithLoadForGoAnalysis().
- WithURL(settings.OriginalURL)
-
- return linterConfig, nil
-}
-
-// getAnalyzerPlugin loads a private linter as specified in the config file,
-// loads the plugin from a .so file,
-// and returns the 'AnalyzerPlugin' interface implemented by the private plugin.
-// An error is returned if the private linter cannot be loaded
-// or the linter does not implement the AnalyzerPlugin interface.
-func (b *PluginGoBuilder) getAnalyzerPlugin(cfg *config.Config, path string, settings any) ([]*analysis.Analyzer, error) {
- if !filepath.IsAbs(path) {
- // resolve non-absolute paths relative to config file's directory
- path = filepath.Join(cfg.GetConfigDir(), path)
- }
-
- plug, err := plugin.Open(path)
- if err != nil {
- return nil, err
- }
-
- analyzers, err := b.lookupPlugin(plug, settings)
- if err != nil {
- return nil, fmt.Errorf("lookup plugin %s: %w", path, err)
- }
-
- return analyzers, nil
-}
-
-func (b *PluginGoBuilder) lookupPlugin(plug *plugin.Plugin, settings any) ([]*analysis.Analyzer, error) {
- symbol, err := plug.Lookup("New")
- if err != nil {
- analyzers, errP := b.lookupAnalyzerPlugin(plug)
- if errP != nil {
- return nil, errors.Join(err, errP)
- }
-
- return analyzers, nil
- }
-
- // The type func cannot be used here, must be the explicit signature.
- constructor, ok := symbol.(func(any) ([]*analysis.Analyzer, error))
- if !ok {
- return nil, fmt.Errorf("plugin does not abide by 'New' function: %T", symbol)
- }
-
- return constructor(settings)
-}
-
-func (b *PluginGoBuilder) lookupAnalyzerPlugin(plug *plugin.Plugin) ([]*analysis.Analyzer, error) {
- symbol, err := plug.Lookup("AnalyzerPlugin")
- if err != nil {
- return nil, err
- }
-
- b.log.Warnf("plugin: 'AnalyzerPlugin' plugins are deprecated, please use the new plugin signature: " +
- "https://golangci-lint.run/plugins/go-plugins#create-a-plugin")
-
- analyzerPlugin, ok := symbol.(AnalyzerPlugin)
- if !ok {
- return nil, fmt.Errorf("plugin does not abide by 'AnalyzerPlugin' interface: %T", symbol)
- }
-
- return analyzerPlugin.GetAnalyzers(), nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/builder_plugin_module.go b/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/builder_plugin_module.go
deleted file mode 100644
index 60fb58d8c..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/builder_plugin_module.go
+++ /dev/null
@@ -1,85 +0,0 @@
-package lintersdb
-
-import (
- "fmt"
- "strings"
-
- "github.com/golangci/plugin-module-register/register"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-const modulePluginType = "module"
-
-// PluginModuleBuilder builds the custom linters (module plugin) based on the configuration.
-type PluginModuleBuilder struct {
- log logutils.Log
-}
-
-// NewPluginModuleBuilder creates new PluginModuleBuilder.
-func NewPluginModuleBuilder(log logutils.Log) *PluginModuleBuilder {
- return &PluginModuleBuilder{log: log}
-}
-
-// Build loads custom linters that are specified in the golangci-lint config file.
-func (b *PluginModuleBuilder) Build(cfg *config.Config) ([]*linter.Config, error) {
- if cfg == nil || b.log == nil {
- return nil, nil
- }
-
- var linters []*linter.Config
-
- for name, settings := range cfg.LintersSettings.Custom {
- if settings.Type != modulePluginType {
- continue
- }
-
- b.log.Infof("Loaded %s: %s", settings.Path, name)
-
- newPlugin, err := register.GetPlugin(name)
- if err != nil {
- return nil, fmt.Errorf("plugin(%s): %w", name, err)
- }
-
- p, err := newPlugin(settings.Settings)
- if err != nil {
- return nil, fmt.Errorf("plugin(%s): newPlugin %w", name, err)
- }
-
- analyzers, err := p.BuildAnalyzers()
- if err != nil {
- return nil, fmt.Errorf("plugin(%s): BuildAnalyzers %w", name, err)
- }
-
- customLinter := goanalysis.NewLinter(name, settings.Description, analyzers, nil)
-
- switch strings.ToLower(p.GetLoadMode()) {
- case register.LoadModeSyntax:
- customLinter = customLinter.WithLoadMode(goanalysis.LoadModeSyntax)
- case register.LoadModeTypesInfo:
- customLinter = customLinter.WithLoadMode(goanalysis.LoadModeTypesInfo)
- default:
- customLinter = customLinter.WithLoadMode(goanalysis.LoadModeTypesInfo)
- }
-
- lc := linter.NewConfig(customLinter).
- WithEnabledByDefault().
- WithURL(settings.OriginalURL)
-
- switch strings.ToLower(p.GetLoadMode()) {
- case register.LoadModeSyntax:
- // noop
- case register.LoadModeTypesInfo:
- lc = lc.WithLoadForGoAnalysis()
- default:
- lc = lc.WithLoadForGoAnalysis()
- }
-
- linters = append(linters, lc)
- }
-
- return linters, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/manager.go b/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/manager.go
deleted file mode 100644
index 75ab53d7c..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/manager.go
+++ /dev/null
@@ -1,313 +0,0 @@
-package lintersdb
-
-import (
- "fmt"
- "os"
- "slices"
- "sort"
-
- "golang.org/x/exp/maps"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/goanalysis"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-type Builder interface {
- Build(cfg *config.Config) ([]*linter.Config, error)
-}
-
-// Manager is a type of database for all linters (internals or plugins).
-// It provides methods to access to the linter sets.
-type Manager struct {
- log logutils.Log
- debugf logutils.DebugFunc
-
- cfg *config.Config
-
- linters []*linter.Config
-
- nameToLCs map[string][]*linter.Config
-}
-
-// NewManager creates a new Manager.
-// This constructor will call the builders to build and store the linters.
-func NewManager(log logutils.Log, cfg *config.Config, builders ...Builder) (*Manager, error) {
- m := &Manager{
- log: log,
- debugf: logutils.Debug(logutils.DebugKeyEnabledLinters),
- nameToLCs: make(map[string][]*linter.Config),
- }
-
- m.cfg = cfg
- if cfg == nil {
- m.cfg = config.NewDefault()
- }
-
- for _, builder := range builders {
- linters, err := builder.Build(m.cfg)
- if err != nil {
- return nil, fmt.Errorf("build linters: %w", err)
- }
-
- m.linters = append(m.linters, linters...)
- }
-
- for _, lc := range m.linters {
- for _, name := range lc.AllNames() {
- m.nameToLCs[name] = append(m.nameToLCs[name], lc)
- }
- }
-
- err := NewValidator(m).Validate(m.cfg)
- if err != nil {
- return nil, err
- }
-
- return m, nil
-}
-
-func (m *Manager) GetLinterConfigs(name string) []*linter.Config {
- return m.nameToLCs[name]
-}
-
-func (m *Manager) GetAllSupportedLinterConfigs() []*linter.Config {
- return m.linters
-}
-
-func (m *Manager) GetAllLinterConfigsForPreset(p string) []*linter.Config {
- var ret []*linter.Config
- for _, lc := range m.linters {
- if lc.IsDeprecated() {
- continue
- }
-
- if slices.Contains(lc.InPresets, p) {
- ret = append(ret, lc)
- }
- }
-
- return ret
-}
-
-func (m *Manager) GetEnabledLintersMap() (map[string]*linter.Config, error) {
- enabledLinters := m.build(m.GetAllEnabledByDefaultLinters())
-
- if os.Getenv(logutils.EnvTestRun) == "1" {
- m.verbosePrintLintersStatus(enabledLinters)
- }
-
- return enabledLinters, nil
-}
-
-// GetOptimizedLinters returns enabled linters after optimization (merging) of multiple linters into a fewer number of linters.
-// E.g. some go/analysis linters can be optimized into one metalinter for data reuse and speed up.
-func (m *Manager) GetOptimizedLinters() ([]*linter.Config, error) {
- resultLintersSet := m.build(m.GetAllEnabledByDefaultLinters())
- m.verbosePrintLintersStatus(resultLintersSet)
-
- m.combineGoAnalysisLinters(resultLintersSet)
-
- resultLinters := maps.Values(resultLintersSet)
-
- // Make order of execution of linters (go/analysis metalinter and unused) stable.
- sort.Slice(resultLinters, func(i, j int) bool {
- a, b := resultLinters[i], resultLinters[j]
-
- if b.Name() == linter.LastLinter {
- return true
- }
-
- if a.Name() == linter.LastLinter {
- return false
- }
-
- if a.DoesChangeTypes != b.DoesChangeTypes {
- return b.DoesChangeTypes // move type-changing linters to the end to optimize speed
- }
- return a.Name() < b.Name()
- })
-
- return resultLinters, nil
-}
-
-func (m *Manager) GetAllEnabledByDefaultLinters() []*linter.Config {
- var ret []*linter.Config
- for _, lc := range m.linters {
- if lc.EnabledByDefault {
- ret = append(ret, lc)
- }
- }
-
- return ret
-}
-
-//nolint:gocyclo // the complexity cannot be reduced.
-func (m *Manager) build(enabledByDefaultLinters []*linter.Config) map[string]*linter.Config {
- m.debugf("Linters config: %#v", m.cfg.Linters)
-
- resultLintersSet := map[string]*linter.Config{}
- switch {
- case m.cfg.Linters.DisableAll:
- // no default linters
- case len(m.cfg.Linters.Presets) != 0:
- // imply --disable-all
- case m.cfg.Linters.EnableAll:
- resultLintersSet = linterConfigsToMap(m.linters)
- default:
- resultLintersSet = linterConfigsToMap(enabledByDefaultLinters)
- }
-
- // --presets can only add linters to default set
- for _, p := range m.cfg.Linters.Presets {
- for _, lc := range m.GetAllLinterConfigsForPreset(p) {
- resultLintersSet[lc.Name()] = lc
- }
- }
-
- // --fast removes slow linters from current set.
- // It should be after --presets to be able to run only fast linters in preset.
- // It should be before --enable and --disable to be able to enable or disable specific linter.
- if m.cfg.Linters.Fast {
- for name, lc := range resultLintersSet {
- if lc.IsSlowLinter() {
- delete(resultLintersSet, name)
- }
- }
- }
-
- for _, name := range m.cfg.Linters.Enable {
- for _, lc := range m.GetLinterConfigs(name) {
- // it's important to use lc.Name() nor name because name can be alias
- resultLintersSet[lc.Name()] = lc
- }
- }
-
- for _, name := range m.cfg.Linters.Disable {
- for _, lc := range m.GetLinterConfigs(name) {
- // it's important to use lc.Name() nor name because name can be alias
- delete(resultLintersSet, lc.Name())
- }
- }
-
- // typecheck is not a real linter and cannot be disabled.
- if _, ok := resultLintersSet["typecheck"]; !ok && (m.cfg == nil || !m.cfg.InternalCmdTest) {
- for _, lc := range m.GetLinterConfigs("typecheck") {
- // it's important to use lc.Name() nor name because name can be alias
- resultLintersSet[lc.Name()] = lc
- }
- }
-
- return resultLintersSet
-}
-
-func (m *Manager) combineGoAnalysisLinters(linters map[string]*linter.Config) {
- mlConfig := &linter.Config{}
-
- var goanalysisLinters []*goanalysis.Linter
-
- for _, lc := range linters {
- lnt, ok := lc.Linter.(*goanalysis.Linter)
- if !ok {
- continue
- }
-
- if lnt.LoadMode() == goanalysis.LoadModeWholeProgram {
- // It's ineffective by CPU and memory to run whole-program and incremental analyzers at once.
- continue
- }
-
- mlConfig.LoadMode |= lc.LoadMode
-
- if lc.IsSlowLinter() {
- mlConfig.ConsiderSlow()
- }
-
- mlConfig.InPresets = append(mlConfig.InPresets, lc.InPresets...)
-
- goanalysisLinters = append(goanalysisLinters, lnt)
- }
-
- if len(goanalysisLinters) <= 1 {
- m.debugf("Didn't combine go/analysis linters: got only %d linters", len(goanalysisLinters))
- return
- }
-
- for _, lnt := range goanalysisLinters {
- delete(linters, lnt.Name())
- }
-
- // Make order of execution of go/analysis analyzers stable.
- sort.Slice(goanalysisLinters, func(i, j int) bool {
- a, b := goanalysisLinters[i], goanalysisLinters[j]
-
- if b.Name() == linter.LastLinter {
- return true
- }
-
- if a.Name() == linter.LastLinter {
- return false
- }
-
- return a.Name() <= b.Name()
- })
-
- mlConfig.Linter = goanalysis.NewMetaLinter(goanalysisLinters)
-
- sort.Strings(mlConfig.InPresets)
- mlConfig.InPresets = slices.Compact(mlConfig.InPresets)
-
- linters[mlConfig.Linter.Name()] = mlConfig
-
- m.debugf("Combined %d go/analysis linters into one metalinter", len(goanalysisLinters))
-}
-
-func (m *Manager) verbosePrintLintersStatus(lcs map[string]*linter.Config) {
- var linterNames []string
- for _, lc := range lcs {
- if lc.Internal {
- continue
- }
-
- linterNames = append(linterNames, lc.Name())
- }
- sort.Strings(linterNames)
- m.log.Infof("Active %d linters: %s", len(linterNames), linterNames)
-
- if len(m.cfg.Linters.Presets) != 0 {
- sort.Strings(m.cfg.Linters.Presets)
- m.log.Infof("Active presets: %s", m.cfg.Linters.Presets)
- }
-}
-
-func AllPresets() []string {
- return []string{
- linter.PresetBugs,
- linter.PresetComment,
- linter.PresetComplexity,
- linter.PresetError,
- linter.PresetFormatting,
- linter.PresetImport,
- linter.PresetMetaLinter,
- linter.PresetModule,
- linter.PresetPerformance,
- linter.PresetSQL,
- linter.PresetStyle,
- linter.PresetTest,
- linter.PresetUnused,
- }
-}
-
-func linterConfigsToMap(lcs []*linter.Config) map[string]*linter.Config {
- ret := map[string]*linter.Config{}
- for _, lc := range lcs {
- if lc.IsDeprecated() && lc.Deprecation.Level > linter.DeprecationWarning {
- continue
- }
-
- ret[lc.Name()] = lc
- }
-
- return ret
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/validator.go b/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/validator.go
deleted file mode 100644
index 264d063aa..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/lint/lintersdb/validator.go
+++ /dev/null
@@ -1,120 +0,0 @@
-package lintersdb
-
-import (
- "errors"
- "fmt"
- "os"
- "slices"
- "strings"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-type Validator struct {
- m *Manager
-}
-
-func NewValidator(m *Manager) *Validator {
- return &Validator{m: m}
-}
-
-// Validate validates the configuration by calling all other validators for different
-// sections in the configuration and then some additional linter validation functions.
-func (v Validator) Validate(cfg *config.Config) error {
- validators := []func(cfg *config.Linters) error{
- v.validateLintersNames,
- v.validatePresets,
- v.alternativeNamesDeprecation,
- }
-
- for _, v := range validators {
- if err := v(&cfg.Linters); err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func (v Validator) validateLintersNames(cfg *config.Linters) error {
- var unknownNames []string
-
- for _, name := range cfg.Enable {
- if v.m.GetLinterConfigs(name) == nil {
- unknownNames = append(unknownNames, name)
- }
- }
-
- for _, name := range cfg.Disable {
- lcs := v.m.GetLinterConfigs(name)
- if len(lcs) == 0 {
- unknownNames = append(unknownNames, name)
- continue
- }
-
- for _, lc := range lcs {
- if lc.IsDeprecated() && lc.Deprecation.Level > linter.DeprecationWarning {
- v.m.log.Warnf("The linter %q is deprecated (step 2) and deactivated. "+
- "It should be removed from the list of disabled linters. "+
- "https://golangci-lint.run/product/roadmap/#linter-deprecation-cycle", lc.Name())
- }
- }
- }
-
- if len(unknownNames) > 0 {
- return fmt.Errorf("unknown linters: '%v', run 'golangci-lint help linters' to see the list of supported linters",
- strings.Join(unknownNames, ","))
- }
-
- return nil
-}
-
-func (Validator) validatePresets(cfg *config.Linters) error {
- presets := AllPresets()
-
- for _, p := range cfg.Presets {
- if !slices.Contains(presets, p) {
- return fmt.Errorf("no such preset %q: only next presets exist: (%s)",
- p, strings.Join(presets, "|"))
- }
- }
-
- if len(cfg.Presets) != 0 && cfg.EnableAll {
- return errors.New("--presets is incompatible with --enable-all")
- }
-
- return nil
-}
-
-func (v Validator) alternativeNamesDeprecation(cfg *config.Linters) error {
- if v.m.cfg.InternalTest || v.m.cfg.InternalCmdTest || os.Getenv(logutils.EnvTestRun) == "1" {
- return nil
- }
-
- altNames := map[string][]string{}
- for _, lc := range v.m.GetAllSupportedLinterConfigs() {
- for _, alt := range lc.AlternativeNames {
- altNames[alt] = append(altNames[alt], lc.Name())
- }
- }
-
- names := cfg.Enable
- names = append(names, cfg.Disable...)
-
- for _, name := range names {
- lc, ok := altNames[name]
- if !ok {
- continue
- }
-
- if len(lc) > 1 {
- v.m.log.Warnf("The linter named %q is deprecated. It has been split into: %s.", name, strings.Join(lc, ", "))
- } else {
- v.m.log.Warnf("The name %q is deprecated. The linter has been renamed to: %s.", name, lc[0])
- }
- }
-
- return nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/lint/package.go b/vendor/github.com/golangci/golangci-lint/pkg/lint/package.go
deleted file mode 100644
index c314166ca..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/lint/package.go
+++ /dev/null
@@ -1,283 +0,0 @@
-package lint
-
-import (
- "context"
- "fmt"
- "go/build"
- "go/token"
- "os"
- "path/filepath"
- "regexp"
- "strings"
- "time"
-
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/exitcodes"
- "github.com/golangci/golangci-lint/pkg/goanalysis/load"
- "github.com/golangci/golangci-lint/pkg/goutil"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-// PackageLoader loads packages based on [golang.org/x/tools/go/packages.Load].
-type PackageLoader struct {
- log logutils.Log
- debugf logutils.DebugFunc
-
- cfg *config.Config
-
- args []string
-
- pkgTestIDRe *regexp.Regexp
-
- goenv *goutil.Env
-
- loadGuard *load.Guard
-}
-
-// NewPackageLoader creates a new PackageLoader.
-func NewPackageLoader(log logutils.Log, cfg *config.Config, args []string, goenv *goutil.Env, loadGuard *load.Guard) *PackageLoader {
- return &PackageLoader{
- cfg: cfg,
- args: args,
- log: log,
- debugf: logutils.Debug(logutils.DebugKeyLoader),
- goenv: goenv,
- pkgTestIDRe: regexp.MustCompile(`^(.*) \[(.*)\.test\]`),
- loadGuard: loadGuard,
- }
-}
-
-// Load loads packages.
-func (l *PackageLoader) Load(ctx context.Context, linters []*linter.Config) (pkgs, deduplicatedPkgs []*packages.Package, err error) {
- loadMode := findLoadMode(linters)
-
- pkgs, err = l.loadPackages(ctx, loadMode)
- if err != nil {
- return nil, nil, fmt.Errorf("failed to load packages: %w", err)
- }
-
- return pkgs, l.filterDuplicatePackages(pkgs), nil
-}
-
-func (l *PackageLoader) loadPackages(ctx context.Context, loadMode packages.LoadMode) ([]*packages.Package, error) {
- defer func(startedAt time.Time) {
- l.log.Infof("Go packages loading at mode %s took %s", stringifyLoadMode(loadMode), time.Since(startedAt))
- }(time.Now())
-
- l.prepareBuildContext()
-
- conf := &packages.Config{
- Mode: loadMode,
- Tests: l.cfg.Run.AnalyzeTests,
- Context: ctx,
- BuildFlags: l.makeBuildFlags(),
- Logf: l.debugf,
- // TODO: use fset, parsefile, overlay
- }
-
- args := buildArgs(l.args)
-
- l.debugf("Built loader args are %s", args)
-
- pkgs, err := packages.Load(conf, args...)
- if err != nil {
- return nil, fmt.Errorf("failed to load with go/packages: %w", err)
- }
-
- if loadMode&packages.NeedSyntax == 0 {
- // Needed e.g. for go/analysis loading.
- fset := token.NewFileSet()
- packages.Visit(pkgs, nil, func(pkg *packages.Package) {
- pkg.Fset = fset
- l.loadGuard.AddMutexForPkg(pkg)
- })
- }
-
- l.debugPrintLoadedPackages(pkgs)
-
- if err := l.parseLoadedPackagesErrors(pkgs); err != nil {
- return nil, err
- }
-
- return l.filterTestMainPackages(pkgs), nil
-}
-
-func (*PackageLoader) parseLoadedPackagesErrors(pkgs []*packages.Package) error {
- for _, pkg := range pkgs {
- var errs []packages.Error
- for _, err := range pkg.Errors {
- // quick fix: skip error related to `go list` invocation by packages.Load()
- // The behavior has been changed between go1.19 and go1.20, the error is now inside the JSON content.
- // https://github.com/golangci/golangci-lint/pull/3414#issuecomment-1364756303
- if strings.Contains(err.Msg, "# command-line-arguments") {
- continue
- }
-
- errs = append(errs, err)
-
- if strings.Contains(err.Msg, "no Go files") {
- return fmt.Errorf("package %s: %w", pkg.PkgPath, exitcodes.ErrNoGoFiles)
- }
- if strings.Contains(err.Msg, "cannot find package") {
- // when analyzing not existing directory
- return fmt.Errorf("%v: %w", err.Msg, exitcodes.ErrFailure)
- }
- }
-
- pkg.Errors = errs
- }
-
- return nil
-}
-
-func (l *PackageLoader) tryParseTestPackage(pkg *packages.Package) (name string, isTest bool) {
- matches := l.pkgTestIDRe.FindStringSubmatch(pkg.ID)
- if matches == nil {
- return "", false
- }
-
- return matches[1], true
-}
-
-func (l *PackageLoader) filterDuplicatePackages(pkgs []*packages.Package) []*packages.Package {
- packagesWithTests := map[string]bool{}
- for _, pkg := range pkgs {
- name, isTest := l.tryParseTestPackage(pkg)
- if !isTest {
- continue
- }
- packagesWithTests[name] = true
- }
-
- l.debugf("package with tests: %#v", packagesWithTests)
-
- var retPkgs []*packages.Package
- for _, pkg := range pkgs {
- _, isTest := l.tryParseTestPackage(pkg)
- if !isTest && packagesWithTests[pkg.PkgPath] {
- // If tests loading is enabled,
- // for package with files a.go and a_test.go go/packages loads two packages:
- // 1. ID=".../a" GoFiles=[a.go]
- // 2. ID=".../a [.../a.test]" GoFiles=[a.go a_test.go]
- // We need only the second package, otherwise we can get warnings about unused variables/fields/functions
- // in a.go if they are used only in a_test.go.
- l.debugf("skip pkg ID=%s because we load it with test package", pkg.ID)
- continue
- }
-
- retPkgs = append(retPkgs, pkg)
- }
-
- return retPkgs
-}
-
-func (l *PackageLoader) filterTestMainPackages(pkgs []*packages.Package) []*packages.Package {
- var retPkgs []*packages.Package
- for _, pkg := range pkgs {
- if pkg.Name == "main" && strings.HasSuffix(pkg.PkgPath, ".test") {
- // it's an implicit testmain package
- l.debugf("skip pkg ID=%s", pkg.ID)
- continue
- }
-
- retPkgs = append(retPkgs, pkg)
- }
-
- return retPkgs
-}
-
-func (l *PackageLoader) debugPrintLoadedPackages(pkgs []*packages.Package) {
- l.debugf("loaded %d pkgs", len(pkgs))
- for i, pkg := range pkgs {
- var syntaxFiles []string
- for _, sf := range pkg.Syntax {
- syntaxFiles = append(syntaxFiles, pkg.Fset.Position(sf.Pos()).Filename)
- }
- l.debugf("Loaded pkg #%d: ID=%s GoFiles=%s CompiledGoFiles=%s Syntax=%s",
- i, pkg.ID, pkg.GoFiles, pkg.CompiledGoFiles, syntaxFiles)
- }
-}
-
-func (l *PackageLoader) prepareBuildContext() {
- // Set GOROOT to have working cross-compilation: cross-compiled binaries
- // have invalid GOROOT. XXX: can't use runtime.GOROOT().
- goroot := l.goenv.Get(goutil.EnvGoRoot)
- if goroot == "" {
- return
- }
-
- os.Setenv(string(goutil.EnvGoRoot), goroot)
- build.Default.GOROOT = goroot
- build.Default.BuildTags = l.cfg.Run.BuildTags
-}
-
-func (l *PackageLoader) makeBuildFlags() []string {
- var buildFlags []string
-
- if len(l.cfg.Run.BuildTags) != 0 {
- // go help build
- buildFlags = append(buildFlags, "-tags", strings.Join(l.cfg.Run.BuildTags, " "))
- l.log.Infof("Using build tags: %v", l.cfg.Run.BuildTags)
- }
-
- if l.cfg.Run.ModulesDownloadMode != "" {
- // go help modules
- buildFlags = append(buildFlags, fmt.Sprintf("-mod=%s", l.cfg.Run.ModulesDownloadMode))
- }
-
- return buildFlags
-}
-
-func buildArgs(args []string) []string {
- if len(args) == 0 {
- return []string{"./..."}
- }
-
- var retArgs []string
- for _, arg := range args {
- if strings.HasPrefix(arg, ".") || filepath.IsAbs(arg) {
- retArgs = append(retArgs, arg)
- } else {
- // go/packages doesn't work well if we don't have the prefix ./ for local packages
- retArgs = append(retArgs, fmt.Sprintf(".%c%s", filepath.Separator, arg))
- }
- }
-
- return retArgs
-}
-
-func findLoadMode(linters []*linter.Config) packages.LoadMode {
- loadMode := packages.LoadMode(0)
- for _, lc := range linters {
- loadMode |= lc.LoadMode
- }
-
- return loadMode
-}
-
-func stringifyLoadMode(mode packages.LoadMode) string {
- m := map[packages.LoadMode]string{
- packages.NeedCompiledGoFiles: "compiled_files",
- packages.NeedDeps: "deps",
- packages.NeedExportFile: "exports_file",
- packages.NeedFiles: "files",
- packages.NeedImports: "imports",
- packages.NeedName: "name",
- packages.NeedSyntax: "syntax",
- packages.NeedTypes: "types",
- packages.NeedTypesInfo: "types_info",
- packages.NeedTypesSizes: "types_sizes",
- }
-
- var flags []string
- for flag, flagStr := range m {
- if mode&flag != 0 {
- flags = append(flags, flagStr)
- }
- }
-
- return fmt.Sprintf("%d (%s)", mode, strings.Join(flags, "|"))
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/lint/runner.go b/vendor/github.com/golangci/golangci-lint/pkg/lint/runner.go
deleted file mode 100644
index 2c47c7166..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/lint/runner.go
+++ /dev/null
@@ -1,238 +0,0 @@
-package lint
-
-import (
- "context"
- "errors"
- "fmt"
- "runtime/debug"
- "strings"
-
- "github.com/golangci/golangci-lint/internal/errorutil"
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/goutil"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/lint/lintersdb"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
- "github.com/golangci/golangci-lint/pkg/result/processors"
- "github.com/golangci/golangci-lint/pkg/timeutils"
-)
-
-type processorStat struct {
- inCount int
- outCount int
-}
-
-type Runner struct {
- Log logutils.Log
-
- lintCtx *linter.Context
- Processors []processors.Processor
-}
-
-func NewRunner(log logutils.Log, cfg *config.Config, args []string, goenv *goutil.Env,
- lineCache *fsutils.LineCache, fileCache *fsutils.FileCache,
- dbManager *lintersdb.Manager, lintCtx *linter.Context,
-) (*Runner, error) {
- // Beware that some processors need to add the path prefix when working with paths
- // because they get invoked before the path prefixer (exclude and severity rules)
- // or process other paths (skip files).
- files := fsutils.NewFiles(lineCache, cfg.Output.PathPrefix)
-
- skipFilesProcessor, err := processors.NewSkipFiles(cfg.Issues.ExcludeFiles, cfg.Output.PathPrefix)
- if err != nil {
- return nil, err
- }
-
- skipDirs := cfg.Issues.ExcludeDirs
- if cfg.Issues.UseDefaultExcludeDirs {
- skipDirs = append(skipDirs, processors.StdExcludeDirRegexps...)
- }
-
- skipDirsProcessor, err := processors.NewSkipDirs(log.Child(logutils.DebugKeySkipDirs), skipDirs, args, cfg.Output.PathPrefix)
- if err != nil {
- return nil, err
- }
-
- enabledLinters, err := dbManager.GetEnabledLintersMap()
- if err != nil {
- return nil, fmt.Errorf("failed to get enabled linters: %w", err)
- }
-
- return &Runner{
- Processors: []processors.Processor{
- processors.NewCgo(goenv),
-
- // Must go after Cgo.
- processors.NewFilenameUnadjuster(lintCtx.Packages, log.Child(logutils.DebugKeyFilenameUnadjuster)),
-
- // Must go after FilenameUnadjuster.
- processors.NewInvalidIssue(log.Child(logutils.DebugKeyInvalidIssue)),
-
- // Must be before diff, nolint and exclude autogenerated processor at least.
- processors.NewPathPrettifier(),
- skipFilesProcessor,
- skipDirsProcessor, // must be after path prettifier
-
- processors.NewAutogeneratedExclude(cfg.Issues.ExcludeGenerated),
-
- // Must be before exclude because users see already marked output and configure excluding by it.
- processors.NewIdentifierMarker(),
-
- processors.NewExclude(&cfg.Issues),
- processors.NewExcludeRules(log.Child(logutils.DebugKeyExcludeRules), files, &cfg.Issues),
- processors.NewNolint(log.Child(logutils.DebugKeyNolint), dbManager, enabledLinters),
-
- processors.NewUniqByLine(cfg),
- processors.NewDiff(&cfg.Issues),
- processors.NewMaxPerFileFromLinter(cfg),
- processors.NewMaxSameIssues(cfg.Issues.MaxSameIssues, log.Child(logutils.DebugKeyMaxSameIssues), cfg),
- processors.NewMaxFromLinter(cfg.Issues.MaxIssuesPerLinter, log.Child(logutils.DebugKeyMaxFromLinter), cfg),
- processors.NewSourceCode(lineCache, log.Child(logutils.DebugKeySourceCode)),
- processors.NewPathShortener(),
- processors.NewSeverity(log.Child(logutils.DebugKeySeverityRules), files, &cfg.Severity),
-
- // The fixer still needs to see paths for the issues that are relative to the current directory.
- processors.NewFixer(cfg, log, fileCache),
-
- // Now we can modify the issues for output.
- processors.NewPathPrefixer(cfg.Output.PathPrefix),
- processors.NewSortResults(cfg),
- },
- lintCtx: lintCtx,
- Log: log,
- }, nil
-}
-
-func (r *Runner) Run(ctx context.Context, linters []*linter.Config) ([]result.Issue, error) {
- sw := timeutils.NewStopwatch("linters", r.Log)
- defer sw.Print()
-
- var (
- lintErrors error
- issues []result.Issue
- )
-
- for _, lc := range linters {
- linterIssues, err := timeutils.TrackStage(sw, lc.Name(), func() ([]result.Issue, error) {
- return r.runLinterSafe(ctx, r.lintCtx, lc)
- })
- if err != nil {
- lintErrors = errors.Join(lintErrors, fmt.Errorf("can't run linter %s", lc.Linter.Name()), err)
- r.Log.Warnf("Can't run linter %s: %v", lc.Linter.Name(), err)
-
- continue
- }
-
- issues = append(issues, linterIssues...)
- }
-
- return r.processLintResults(issues), lintErrors
-}
-
-func (r *Runner) runLinterSafe(ctx context.Context, lintCtx *linter.Context,
- lc *linter.Config,
-) (ret []result.Issue, err error) {
- defer func() {
- if panicData := recover(); panicData != nil {
- if pe, ok := panicData.(*errorutil.PanicError); ok {
- err = fmt.Errorf("%s: %w", lc.Name(), pe)
-
- // Don't print stacktrace from goroutines twice
- r.Log.Errorf("Panic: %s: %s", pe, pe.Stack())
- } else {
- err = fmt.Errorf("panic occurred: %s", panicData)
- r.Log.Errorf("Panic stack trace: %s", debug.Stack())
- }
- }
- }()
-
- issues, err := lc.Linter.Run(ctx, lintCtx)
-
- if lc.DoesChangeTypes {
- // Packages in lintCtx might be dirty due to the last analysis,
- // which affects to the next analysis.
- // To avoid this issue, we clear type information from the packages.
- // See https://github.com/golangci/golangci-lint/pull/944.
- // Currently, DoesChangeTypes is true only for `unused`.
- lintCtx.ClearTypesInPackages()
- }
-
- if err != nil {
- return nil, err
- }
-
- for i := range issues {
- if issues[i].FromLinter == "" {
- issues[i].FromLinter = lc.Name()
- }
- }
-
- return issues, nil
-}
-
-func (r *Runner) processLintResults(inIssues []result.Issue) []result.Issue {
- sw := timeutils.NewStopwatch("processing", r.Log)
-
- var issuesBefore, issuesAfter int
- statPerProcessor := map[string]processorStat{}
-
- var outIssues []result.Issue
- if len(inIssues) != 0 {
- issuesBefore += len(inIssues)
- outIssues = r.processIssues(inIssues, sw, statPerProcessor)
- issuesAfter += len(outIssues)
- }
-
- // finalize processors: logging, clearing, no heavy work here
-
- for _, p := range r.Processors {
- sw.TrackStage(p.Name(), p.Finish)
- }
-
- if issuesBefore != issuesAfter {
- r.Log.Infof("Issues before processing: %d, after processing: %d", issuesBefore, issuesAfter)
- }
- r.printPerProcessorStat(statPerProcessor)
- sw.PrintStages()
-
- return outIssues
-}
-
-func (r *Runner) printPerProcessorStat(stat map[string]processorStat) {
- parts := make([]string, 0, len(stat))
- for name, ps := range stat {
- if ps.inCount != 0 {
- parts = append(parts, fmt.Sprintf("%s: %d/%d", name, ps.inCount, ps.outCount))
- }
- }
- if len(parts) != 0 {
- r.Log.Infof("Processors filtering stat (in/out): %s", strings.Join(parts, ", "))
- }
-}
-
-func (r *Runner) processIssues(issues []result.Issue, sw *timeutils.Stopwatch, statPerProcessor map[string]processorStat) []result.Issue {
- for _, p := range r.Processors {
- newIssues, err := timeutils.TrackStage(sw, p.Name(), func() ([]result.Issue, error) {
- return p.Process(issues)
- })
-
- if err != nil {
- r.Log.Warnf("Can't process result by %s processor: %s", p.Name(), err)
- } else {
- stat := statPerProcessor[p.Name()]
- stat.inCount += len(issues)
- stat.outCount += len(newIssues)
- statPerProcessor[p.Name()] = stat
- issues = newIssues
- }
-
- // This is required by JSON serialization
- if issues == nil {
- issues = []result.Issue{}
- }
- }
-
- return issues
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/logutils/log.go b/vendor/github.com/golangci/golangci-lint/pkg/logutils/log.go
deleted file mode 100644
index 16067e490..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/logutils/log.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package logutils
-
-type Log interface {
- Fatalf(format string, args ...any)
- Panicf(format string, args ...any)
- Errorf(format string, args ...any)
- Warnf(format string, args ...any)
- Infof(format string, args ...any)
-
- Child(name string) Log
- SetLevel(level LogLevel)
-}
-
-type LogLevel int
-
-const (
- // LogLevelDebug Debug messages, write to debug logs only by logutils.Debug.
- LogLevelDebug LogLevel = 0
-
- // LogLevelInfo Information messages, don't write too many messages,
- // only useful ones: they are shown when running with -v.
- LogLevelInfo LogLevel = 1
-
- // LogLevelWarn Hidden errors: non-critical errors: work can be continued, no need to fail whole program;
- // tests will crash if any warning occurred.
- LogLevelWarn LogLevel = 2
-
- // LogLevelError Only not hidden from user errors: whole program failing, usually
- // error logging happens in 1-2 places: in the "main" function.
- LogLevelError LogLevel = 3
-)
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/logutils/logutils.go b/vendor/github.com/golangci/golangci-lint/pkg/logutils/logutils.go
deleted file mode 100644
index 3c27e2557..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/logutils/logutils.go
+++ /dev/null
@@ -1,117 +0,0 @@
-package logutils
-
-import (
- "os"
- "strings"
-)
-
-// EnvTestRun value: "1"
-const EnvTestRun = "GL_TEST_RUN"
-
-// envDebug value: one or several debug keys.
-// examples:
-// - Remove output to `/dev/null`: `GL_DEBUG=linters_output ./golangci-lint run`
-// - Show linters configuration: `GL_DEBUG=enabled_linters golangci-lint run`
-// - Some analysis details: `GL_DEBUG=goanalysis/analyze,goanalysis/facts golangci-lint run`
-const envDebug = "GL_DEBUG"
-
-const (
- DebugKeyAutogenExclude = "autogen_exclude" // Debugs a filter excluding autogenerated source code.
- DebugKeyBinSalt = "bin_salt"
- DebugKeyConfigReader = "config_reader"
- DebugKeyEmpty = ""
- DebugKeyEnabledLinters = "enabled_linters"
- DebugKeyEnv = "env" // Debugs `go env` command.
- DebugKeyExcludeRules = "exclude_rules"
- DebugKeyExec = "exec"
- DebugKeyFilenameUnadjuster = "filename_unadjuster"
- DebugKeyInvalidIssue = "invalid_issue"
- DebugKeyForbidigo = "forbidigo"
- DebugKeyGoEnv = "goenv"
- DebugKeyLinter = "linter"
- DebugKeyLintersContext = "linters_context"
- DebugKeyLintersDB = "lintersdb"
- DebugKeyLintersOutput = "linters_output"
- DebugKeyLoader = "loader" // Debugs packages loading (including `go/packages` internal debugging).
- DebugKeyMaxFromLinter = "max_from_linter"
- DebugKeyMaxSameIssues = "max_same_issues"
- DebugKeyPkgCache = "pkgcache"
- DebugKeyRunner = "runner"
- DebugKeySeverityRules = "severity_rules"
- DebugKeySkipDirs = "skip_dirs"
- DebugKeySourceCode = "source_code"
- DebugKeyStopwatch = "stopwatch"
- DebugKeyTabPrinter = "tab_printer"
- DebugKeyTest = "test"
- DebugKeyTextPrinter = "text_printer"
-)
-
-const (
- DebugKeyGoAnalysis = "goanalysis"
-
- DebugKeyGoAnalysisAnalyze = DebugKeyGoAnalysis + "/analyze"
- DebugKeyGoAnalysisIssuesCache = DebugKeyGoAnalysis + "/issues/cache"
- DebugKeyGoAnalysisMemory = DebugKeyGoAnalysis + "/memory"
-
- DebugKeyGoAnalysisFacts = DebugKeyGoAnalysis + "/facts"
- DebugKeyGoAnalysisFactsCache = DebugKeyGoAnalysisFacts + "/cache"
- DebugKeyGoAnalysisFactsExport = DebugKeyGoAnalysisFacts + "/export"
- DebugKeyGoAnalysisFactsInherit = DebugKeyGoAnalysisFacts + "/inherit"
-)
-
-const (
- DebugKeyGoCritic = "gocritic" // Debugs `go-critic` linter.
- DebugKeyGovet = "govet" // Debugs `govet` linter.
- DebugKeyNolint = "nolint" // Debugs a filter excluding issues by `//nolint` comments.
- DebugKeyRevive = "revive" // Debugs `revive` linter.
-)
-
-func getEnabledDebugs() map[string]bool {
- ret := map[string]bool{}
- debugVar := os.Getenv(envDebug)
- if debugVar == "" {
- return ret
- }
-
- for _, tag := range strings.Split(debugVar, ",") {
- ret[tag] = true
- }
-
- return ret
-}
-
-var enabledDebugs = getEnabledDebugs()
-
-type DebugFunc func(format string, args ...any)
-
-func nopDebugf(_ string, _ ...any) {}
-
-func Debug(tag string) DebugFunc {
- if !enabledDebugs[tag] {
- return nopDebugf
- }
-
- logger := NewStderrLog(tag)
- logger.SetLevel(LogLevelDebug)
-
- return func(format string, args ...any) {
- logger.Debugf(format, args...)
- }
-}
-
-func HaveDebugTag(tag string) bool {
- return enabledDebugs[tag]
-}
-
-var verbose bool
-
-func SetupVerboseLog(log Log, isVerbose bool) {
- if isVerbose {
- verbose = isVerbose
- log.SetLevel(LogLevelInfo)
- }
-}
-
-func IsVerbose() bool {
- return verbose
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/logutils/mock.go b/vendor/github.com/golangci/golangci-lint/pkg/logutils/mock.go
deleted file mode 100644
index bddcf8552..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/logutils/mock.go
+++ /dev/null
@@ -1,82 +0,0 @@
-package logutils
-
-import (
- "github.com/stretchr/testify/mock"
-)
-
-type MockLog struct {
- mock.Mock
-}
-
-func NewMockLog() *MockLog {
- return &MockLog{}
-}
-
-func (m *MockLog) Fatalf(format string, args ...any) {
- m.Called(append([]any{format}, args...)...)
-}
-
-func (m *MockLog) Panicf(format string, args ...any) {
- m.Called(append([]any{format}, args...)...)
-}
-
-func (m *MockLog) Errorf(format string, args ...any) {
- m.Called(append([]any{format}, args...)...)
-}
-
-func (m *MockLog) Warnf(format string, args ...any) {
- m.Called(append([]any{format}, args...)...)
-}
-
-func (m *MockLog) Infof(format string, args ...any) {
- m.Called(append([]any{format}, args...)...)
-}
-
-func (m *MockLog) Child(name string) Log {
- m.Called(name)
- return m
-}
-
-func (m *MockLog) SetLevel(level LogLevel) {
- m.Called(level)
-}
-
-func (m *MockLog) OnFatalf(format string, args ...any) *MockLog {
- arguments := append([]any{format}, args...)
-
- m.On("Fatalf", arguments...)
-
- return m
-}
-
-func (m *MockLog) OnPanicf(format string, args ...any) *MockLog {
- arguments := append([]any{format}, args...)
-
- m.On("Panicf", arguments...)
-
- return m
-}
-
-func (m *MockLog) OnErrorf(format string, args ...any) *MockLog {
- arguments := append([]any{format}, args...)
-
- m.On("Errorf", arguments...)
-
- return m
-}
-
-func (m *MockLog) OnWarnf(format string, args ...any) *MockLog {
- arguments := append([]any{format}, args...)
-
- m.On("Warnf", arguments...)
-
- return m
-}
-
-func (m *MockLog) OnInfof(format string, args ...any) *MockLog {
- arguments := append([]any{format}, args...)
-
- m.On("Infof", arguments...)
-
- return m
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/logutils/out.go b/vendor/github.com/golangci/golangci-lint/pkg/logutils/out.go
deleted file mode 100644
index ef1375486..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/logutils/out.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package logutils
-
-import (
- "github.com/fatih/color"
- colorable "github.com/mattn/go-colorable"
-)
-
-var (
- StdOut = color.Output // https://github.com/golangci/golangci-lint/issues/14
- StdErr = colorable.NewColorableStderr()
-)
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/logutils/stderr_log.go b/vendor/github.com/golangci/golangci-lint/pkg/logutils/stderr_log.go
deleted file mode 100644
index 569a177a7..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/logutils/stderr_log.go
+++ /dev/null
@@ -1,129 +0,0 @@
-package logutils
-
-import (
- "fmt"
- "os"
- "time"
-
- "github.com/sirupsen/logrus"
-
- "github.com/golangci/golangci-lint/pkg/exitcodes"
-)
-
-const (
- // envLogLevel values: "error", "err", "warning", "warn","info"
- envLogLevel = "LOG_LEVEL"
- // envLogTimestamp value: "1"
- envLogTimestamp = "LOG_TIMESTAMP"
-)
-
-type StderrLog struct {
- name string
- logger *logrus.Logger
- level LogLevel
-}
-
-var _ Log = NewStderrLog(DebugKeyEmpty)
-
-func NewStderrLog(name string) *StderrLog {
- sl := &StderrLog{
- name: name,
- logger: logrus.New(),
- level: LogLevelWarn,
- }
-
- switch os.Getenv(envLogLevel) {
- case "error", "err":
- sl.logger.SetLevel(logrus.ErrorLevel)
- case "warning", "warn":
- sl.logger.SetLevel(logrus.WarnLevel)
- case "info":
- sl.logger.SetLevel(logrus.InfoLevel)
- default:
- sl.logger.SetLevel(logrus.DebugLevel)
- }
-
- sl.logger.Out = StdErr
- formatter := &logrus.TextFormatter{
- DisableTimestamp: true, // `INFO[0007] msg` -> `INFO msg`
- EnvironmentOverrideColors: true,
- }
- if os.Getenv(envLogTimestamp) == "1" {
- formatter.DisableTimestamp = false
- formatter.FullTimestamp = true
- formatter.TimestampFormat = time.StampMilli
- }
- sl.logger.Formatter = formatter
-
- return sl
-}
-
-func (sl StderrLog) prefix() string {
- prefix := ""
- if sl.name != "" {
- prefix = fmt.Sprintf("[%s] ", sl.name)
- }
-
- return prefix
-}
-
-func (sl StderrLog) Fatalf(format string, args ...any) {
- sl.logger.Errorf("%s%s", sl.prefix(), fmt.Sprintf(format, args...))
- os.Exit(exitcodes.Failure)
-}
-
-func (sl StderrLog) Panicf(format string, args ...any) {
- v := fmt.Sprintf("%s%s", sl.prefix(), fmt.Sprintf(format, args...))
- panic(v)
-}
-
-func (sl StderrLog) Errorf(format string, args ...any) {
- if sl.level > LogLevelError {
- return
- }
-
- sl.logger.Errorf("%s%s", sl.prefix(), fmt.Sprintf(format, args...))
- // don't call exitIfTest() because the idea is to
- // crash on hidden errors (warnings); but Errorf MUST NOT be
- // called on hidden errors, see log levels comments.
-}
-
-func (sl StderrLog) Warnf(format string, args ...any) {
- if sl.level > LogLevelWarn {
- return
- }
-
- sl.logger.Warnf("%s%s", sl.prefix(), fmt.Sprintf(format, args...))
-}
-
-func (sl StderrLog) Infof(format string, args ...any) {
- if sl.level > LogLevelInfo {
- return
- }
-
- sl.logger.Infof("%s%s", sl.prefix(), fmt.Sprintf(format, args...))
-}
-
-func (sl StderrLog) Debugf(format string, args ...any) {
- if sl.level > LogLevelDebug {
- return
- }
-
- sl.logger.Debugf("%s%s", sl.prefix(), fmt.Sprintf(format, args...))
-}
-
-func (sl StderrLog) Child(name string) Log {
- prefix := ""
- if sl.name != "" {
- prefix = sl.name + "/"
- }
-
- child := sl
- child.name = prefix + name
-
- return &child
-}
-
-func (sl *StderrLog) SetLevel(level LogLevel) {
- sl.level = level
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/printers/checkstyle.go b/vendor/github.com/golangci/golangci-lint/pkg/printers/checkstyle.go
deleted file mode 100644
index e32eef7f5..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/printers/checkstyle.go
+++ /dev/null
@@ -1,95 +0,0 @@
-package printers
-
-import (
- "encoding/xml"
- "fmt"
- "io"
- "sort"
-
- "github.com/go-xmlfmt/xmlfmt"
- "golang.org/x/exp/maps"
-
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const defaultCheckstyleSeverity = "error"
-
-type checkstyleOutput struct {
- XMLName xml.Name `xml:"checkstyle"`
- Version string `xml:"version,attr"`
- Files []*checkstyleFile `xml:"file"`
-}
-
-type checkstyleFile struct {
- Name string `xml:"name,attr"`
- Errors []*checkstyleError `xml:"error"`
-}
-
-type checkstyleError struct {
- Column int `xml:"column,attr"`
- Line int `xml:"line,attr"`
- Message string `xml:"message,attr"`
- Severity string `xml:"severity,attr"`
- Source string `xml:"source,attr"`
-}
-
-type Checkstyle struct {
- w io.Writer
-}
-
-func NewCheckstyle(w io.Writer) *Checkstyle {
- return &Checkstyle{w: w}
-}
-
-func (p Checkstyle) Print(issues []result.Issue) error {
- out := checkstyleOutput{
- Version: "5.0",
- }
-
- files := map[string]*checkstyleFile{}
-
- for i := range issues {
- issue := &issues[i]
- file, ok := files[issue.FilePath()]
- if !ok {
- file = &checkstyleFile{
- Name: issue.FilePath(),
- }
-
- files[issue.FilePath()] = file
- }
-
- severity := defaultCheckstyleSeverity
- if issue.Severity != "" {
- severity = issue.Severity
- }
-
- newError := &checkstyleError{
- Column: issue.Column(),
- Line: issue.Line(),
- Message: issue.Text,
- Source: issue.FromLinter,
- Severity: severity,
- }
-
- file.Errors = append(file.Errors, newError)
- }
-
- out.Files = maps.Values(files)
-
- sort.Slice(out.Files, func(i, j int) bool {
- return out.Files[i].Name < out.Files[j].Name
- })
-
- data, err := xml.Marshal(&out)
- if err != nil {
- return err
- }
-
- _, err = fmt.Fprintf(p.w, "%s%s\n", xml.Header, xmlfmt.FormatXML(string(data), "", " "))
- if err != nil {
- return err
- }
-
- return nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/printers/codeclimate.go b/vendor/github.com/golangci/golangci-lint/pkg/printers/codeclimate.go
deleted file mode 100644
index b65339682..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/printers/codeclimate.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package printers
-
-import (
- "encoding/json"
- "io"
-
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const defaultCodeClimateSeverity = "critical"
-
-// CodeClimateIssue is a subset of the Code Climate spec.
-// https://github.com/codeclimate/platform/blob/master/spec/analyzers/SPEC.md#data-types
-// It is just enough to support GitLab CI Code Quality.
-// https://docs.gitlab.com/ee/ci/testing/code_quality.html#implement-a-custom-tool
-type CodeClimateIssue struct {
- Description string `json:"description"`
- CheckName string `json:"check_name"`
- Severity string `json:"severity,omitempty"`
- Fingerprint string `json:"fingerprint"`
- Location struct {
- Path string `json:"path"`
- Lines struct {
- Begin int `json:"begin"`
- } `json:"lines"`
- } `json:"location"`
-}
-
-type CodeClimate struct {
- w io.Writer
-}
-
-func NewCodeClimate(w io.Writer) *CodeClimate {
- return &CodeClimate{w: w}
-}
-
-func (p CodeClimate) Print(issues []result.Issue) error {
- codeClimateIssues := make([]CodeClimateIssue, 0, len(issues))
-
- for i := range issues {
- issue := &issues[i]
-
- codeClimateIssue := CodeClimateIssue{}
- codeClimateIssue.Description = issue.Description()
- codeClimateIssue.CheckName = issue.FromLinter
- codeClimateIssue.Location.Path = issue.Pos.Filename
- codeClimateIssue.Location.Lines.Begin = issue.Pos.Line
- codeClimateIssue.Fingerprint = issue.Fingerprint()
- codeClimateIssue.Severity = defaultCodeClimateSeverity
-
- if issue.Severity != "" {
- codeClimateIssue.Severity = issue.Severity
- }
-
- codeClimateIssues = append(codeClimateIssues, codeClimateIssue)
- }
-
- return json.NewEncoder(p.w).Encode(codeClimateIssues)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/printers/githubaction.go b/vendor/github.com/golangci/golangci-lint/pkg/printers/githubaction.go
deleted file mode 100644
index d9cdb1e6e..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/printers/githubaction.go
+++ /dev/null
@@ -1,52 +0,0 @@
-package printers
-
-import (
- "fmt"
- "io"
- "path/filepath"
-
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const defaultGithubSeverity = "error"
-
-type GitHubAction struct {
- w io.Writer
-}
-
-// NewGitHubAction output format outputs issues according to GitHub Action.
-// Deprecated
-func NewGitHubAction(w io.Writer) *GitHubAction {
- return &GitHubAction{w: w}
-}
-
-func (p *GitHubAction) Print(issues []result.Issue) error {
- for ind := range issues {
- _, err := fmt.Fprintln(p.w, formatIssueAsGitHub(&issues[ind]))
- if err != nil {
- return err
- }
- }
- return nil
-}
-
-// print each line as: ::error file=app.js,line=10,col=15::Something went wrong
-func formatIssueAsGitHub(issue *result.Issue) string {
- severity := defaultGithubSeverity
- if issue.Severity != "" {
- severity = issue.Severity
- }
-
- // Convert backslashes to forward slashes.
- // This is needed when running on windows.
- // Otherwise, GitHub won't be able to show the annotations pointing to the file path with backslashes.
- file := filepath.ToSlash(issue.FilePath())
-
- ret := fmt.Sprintf("::%s file=%s,line=%d", severity, file, issue.Line())
- if issue.Pos.Column != 0 {
- ret += fmt.Sprintf(",col=%d", issue.Pos.Column)
- }
-
- ret += fmt.Sprintf("::%s (%s)", issue.Text, issue.FromLinter)
- return ret
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/printers/html.go b/vendor/github.com/golangci/golangci-lint/pkg/printers/html.go
deleted file mode 100644
index 7dd1e5c62..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/printers/html.go
+++ /dev/null
@@ -1,156 +0,0 @@
-package printers
-
-import (
- "fmt"
- "html/template"
- "io"
- "strings"
-
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const templateContent = `<!doctype html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>golangci-lint</title>
- <link rel="shortcut icon" type="image/png" href="https://golangci-lint.run/favicon-32x32.png">
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.2/css/bulma.min.css"
- integrity="sha512-byErQdWdTqREz6DLAA9pCnLbdoGGhXfU6gm1c8bkf7F51JVmUBlayGe2A31VpXWQP+eiJ3ilTAZHCR3vmMyybA=="
- crossorigin="anonymous" referrerpolicy="no-referrer"/>
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.2/styles/default.min.css"
- integrity="sha512-kZqGbhf9JTB4bVJ0G8HCkqmaPcRgo88F0dneK30yku5Y/dep7CZfCnNml2Je/sY4lBoqoksXz4PtVXS4GHSUzQ=="
- crossorigin="anonymous" referrerpolicy="no-referrer"/>
- <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.2/highlight.min.js"
- integrity="sha512-s+tOYYcC3Jybgr9mVsdAxsRYlGNq4mlAurOrfNuGMQ/SCofNPu92tjE7YRZCsdEtWL1yGkqk15fU/ark206YTg=="
- crossorigin="anonymous" referrerpolicy="no-referrer"></script>
- <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.2/languages/go.min.js"
- integrity="sha512-+UYV2NyyynWEQcZ4sMTKmeppyV331gqvMOGZ61/dqc89Tn1H40lF05ACd03RSD9EWwGutNwKj256mIR8waEJBQ=="
- crossorigin="anonymous" referrerpolicy="no-referrer"></script>
- <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"
- integrity="sha512-qlzIeUtTg7eBpmEaS12NZgxz52YYZVF5myj89mjJEesBd/oE9UPsYOX2QAXzvOAZYEvQohKdcY8zKE02ifXDmA=="
- crossorigin="anonymous" referrerpolicy="no-referrer"></script>
- <script type="text/javascript"
- src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"
- integrity="sha512-9jGNr5Piwe8nzLLYTk8QrEMPfjGU0px80GYzKZUxi7lmCfrBjtyCc1V5kkS5vxVwwIB7Qpzc7UxLiQxfAN30dw=="
- crossorigin="anonymous" referrerpolicy="no-referrer"></script>
- <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.min.js"
- integrity="sha512-kp7YHLxuJDJcOzStgd6vtpxr4ZU9kjn77e6dBsivSz+pUuAuMlE2UTdKB7jjsWT84qbS8kdCWHPETnP/ctrFsA=="
- crossorigin="anonymous" referrerpolicy="no-referrer"></script>
-</head>
-<body>
-<section class="section">
- <div class="container">
- <div id="content"></div>
- </div>
-</section>
-<script>
- const data = {{ . }};
-</script>
-<script type="text/babel">
- class Highlight extends React.Component {
- componentDidMount() {
- hljs.highlightElement(ReactDOM.findDOMNode(this));
- }
-
- render() {
- return <pre className="go"><code>{this.props.code}</code></pre>;
- }
- }
-
- class Issue extends React.Component {
- render() {
- return (
- <div className="issue box">
- <div>
- <div className="columns">
- <div className="column is-four-fifths">
- <h5 className="title is-5 has-text-danger-dark">{this.props.data.Title}</h5>
- </div>
- <div className="column is-one-fifth">
- <h6 className="title is-6">{this.props.data.Linter}</h6>
- </div>
- </div>
- <strong>{this.props.data.Pos}</strong>
- </div>
- <div className="highlight">
- <Highlight code={this.props.data.Code}/>
- </div>
- </div>
- );
- }
- }
-
- class Issues extends React.Component {
- render() {
- if (!this.props.data.Issues || this.props.data.Issues.length === 0) {
- return (
- <div>
- <div className="notification">
- No issues found!
- </div>
- </div>
- );
- }
-
- return (
- <div className="issues">
- {this.props.data.Issues.map(issue => (<Issue data={issue}/>))}
- </div>
- );
- }
- }
-
- ReactDOM.render(
- <div className="content">
- <div className="columns is-centered">
- <div className="column is-three-quarters">
- <Issues data={data}/>
- </div>
- </div>
- </div>,
- document.getElementById("content")
- );
-</script>
-</body>
-</html>`
-
-type htmlIssue struct {
- Title string
- Pos string
- Linter string
- Code string
-}
-
-type HTML struct {
- w io.Writer
-}
-
-func NewHTML(w io.Writer) *HTML {
- return &HTML{w: w}
-}
-
-func (p HTML) Print(issues []result.Issue) error {
- var htmlIssues []htmlIssue
-
- for i := range issues {
- pos := fmt.Sprintf("%s:%d", issues[i].FilePath(), issues[i].Line())
- if issues[i].Pos.Column != 0 {
- pos += fmt.Sprintf(":%d", issues[i].Pos.Column)
- }
-
- htmlIssues = append(htmlIssues, htmlIssue{
- Title: strings.TrimSpace(issues[i].Text),
- Pos: pos,
- Linter: issues[i].FromLinter,
- Code: strings.Join(issues[i].SourceLines, "\n"),
- })
- }
-
- t, err := template.New("golangci-lint").Parse(templateContent)
- if err != nil {
- return err
- }
-
- return t.Execute(p.w, struct{ Issues []htmlIssue }{Issues: htmlIssues})
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/printers/json.go b/vendor/github.com/golangci/golangci-lint/pkg/printers/json.go
deleted file mode 100644
index 28509cac4..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/printers/json.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package printers
-
-import (
- "encoding/json"
- "io"
-
- "github.com/golangci/golangci-lint/pkg/report"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-type JSON struct {
- rd *report.Data // TODO(ldez) should be drop in v2. Only use by JSON reporter.
- w io.Writer
-}
-
-func NewJSON(rd *report.Data, w io.Writer) *JSON {
- return &JSON{
- rd: rd,
- w: w,
- }
-}
-
-type JSONResult struct {
- Issues []result.Issue
- Report *report.Data
-}
-
-func (p JSON) Print(issues []result.Issue) error {
- res := JSONResult{
- Issues: issues,
- Report: p.rd,
- }
- if res.Issues == nil {
- res.Issues = []result.Issue{}
- }
-
- return json.NewEncoder(p.w).Encode(res)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/printers/junitxml.go b/vendor/github.com/golangci/golangci-lint/pkg/printers/junitxml.go
deleted file mode 100644
index 7d0a703b0..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/printers/junitxml.go
+++ /dev/null
@@ -1,99 +0,0 @@
-package printers
-
-import (
- "encoding/xml"
- "fmt"
- "io"
- "sort"
- "strings"
-
- "golang.org/x/exp/maps"
-
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-type testSuitesXML struct {
- XMLName xml.Name `xml:"testsuites"`
- TestSuites []testSuiteXML
-}
-
-type testSuiteXML struct {
- XMLName xml.Name `xml:"testsuite"`
- Suite string `xml:"name,attr"`
- Tests int `xml:"tests,attr"`
- Errors int `xml:"errors,attr"`
- Failures int `xml:"failures,attr"`
- TestCases []testCaseXML `xml:"testcase"`
-}
-
-type testCaseXML struct {
- Name string `xml:"name,attr"`
- ClassName string `xml:"classname,attr"`
- Failure failureXML `xml:"failure"`
- File string `xml:"file,attr,omitempty"`
- Line int `xml:"line,attr,omitempty"`
-}
-
-type failureXML struct {
- Message string `xml:"message,attr"`
- Type string `xml:"type,attr"`
- Content string `xml:",cdata"`
-}
-
-type JunitXML struct {
- extended bool
- w io.Writer
-}
-
-func NewJunitXML(extended bool, w io.Writer) *JunitXML {
- return &JunitXML{
- extended: extended,
- w: w,
- }
-}
-
-func (p JunitXML) Print(issues []result.Issue) error {
- suites := make(map[string]testSuiteXML) // use a map to group by file
-
- for ind := range issues {
- i := &issues[ind]
- suiteName := i.FilePath()
- testSuite := suites[suiteName]
- testSuite.Suite = i.FilePath()
- testSuite.Tests++
- testSuite.Failures++
-
- tc := testCaseXML{
- Name: i.FromLinter,
- ClassName: i.Pos.String(),
- Failure: failureXML{
- Type: i.Severity,
- Message: i.Pos.String() + ": " + i.Text,
- Content: fmt.Sprintf("%s: %s\nCategory: %s\nFile: %s\nLine: %d\nDetails: %s",
- i.Severity, i.Text, i.FromLinter, i.Pos.Filename, i.Pos.Line, strings.Join(i.SourceLines, "\n")),
- },
- }
-
- if p.extended {
- tc.File = i.Pos.Filename
- tc.Line = i.Pos.Line
- }
-
- testSuite.TestCases = append(testSuite.TestCases, tc)
- suites[suiteName] = testSuite
- }
-
- var res testSuitesXML
- res.TestSuites = maps.Values(suites)
-
- sort.Slice(res.TestSuites, func(i, j int) bool {
- return res.TestSuites[i].Suite < res.TestSuites[j].Suite
- })
-
- enc := xml.NewEncoder(p.w)
- enc.Indent("", " ")
- if err := enc.Encode(res); err != nil {
- return err
- }
- return nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/printers/printer.go b/vendor/github.com/golangci/golangci-lint/pkg/printers/printer.go
deleted file mode 100644
index 20be02e01..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/printers/printer.go
+++ /dev/null
@@ -1,145 +0,0 @@
-package printers
-
-import (
- "errors"
- "fmt"
- "io"
- "os"
- "path/filepath"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/report"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const defaultFileMode = 0o644
-
-type issuePrinter interface {
- Print(issues []result.Issue) error
-}
-
-// Printer prints issues
-type Printer struct {
- cfg *config.Output
- reportData *report.Data
-
- log logutils.Log
-
- stdOut io.Writer
- stdErr io.Writer
-}
-
-// NewPrinter creates a new Printer.
-func NewPrinter(log logutils.Log, cfg *config.Output, reportData *report.Data) (*Printer, error) {
- if log == nil {
- return nil, errors.New("missing log argument in constructor")
- }
- if cfg == nil {
- return nil, errors.New("missing config argument in constructor")
- }
- if reportData == nil {
- return nil, errors.New("missing reportData argument in constructor")
- }
-
- return &Printer{
- cfg: cfg,
- reportData: reportData,
- log: log,
- stdOut: logutils.StdOut,
- stdErr: logutils.StdErr,
- }, nil
-}
-
-// Print prints issues based on the formats defined
-func (c *Printer) Print(issues []result.Issue) error {
- for _, format := range c.cfg.Formats {
- err := c.printReports(issues, format)
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func (c *Printer) printReports(issues []result.Issue, format config.OutputFormat) error {
- w, shouldClose, err := c.createWriter(format.Path)
- if err != nil {
- return fmt.Errorf("can't create output for %s: %w", format.Path, err)
- }
-
- defer func() {
- if file, ok := w.(io.Closer); shouldClose && ok {
- _ = file.Close()
- }
- }()
-
- p, err := c.createPrinter(format.Format, w)
- if err != nil {
- return err
- }
-
- if err = p.Print(issues); err != nil {
- return fmt.Errorf("can't print %d issues: %w", len(issues), err)
- }
-
- return nil
-}
-
-func (c *Printer) createWriter(path string) (io.Writer, bool, error) {
- if path == "" || path == "stdout" {
- return c.stdOut, false, nil
- }
-
- if path == "stderr" {
- return c.stdErr, false, nil
- }
-
- err := os.MkdirAll(filepath.Dir(path), os.ModePerm)
- if err != nil {
- return nil, false, err
- }
-
- f, err := os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, defaultFileMode)
- if err != nil {
- return nil, false, err
- }
-
- return f, true, nil
-}
-
-func (c *Printer) createPrinter(format string, w io.Writer) (issuePrinter, error) {
- var p issuePrinter
-
- switch format {
- case config.OutFormatJSON:
- p = NewJSON(c.reportData, w)
- case config.OutFormatLineNumber, config.OutFormatColoredLineNumber:
- p = NewText(c.cfg.PrintIssuedLine,
- format == config.OutFormatColoredLineNumber, c.cfg.PrintLinterName,
- c.log.Child(logutils.DebugKeyTextPrinter), w)
- case config.OutFormatTab, config.OutFormatColoredTab:
- p = NewTab(c.cfg.PrintLinterName,
- format == config.OutFormatColoredTab,
- c.log.Child(logutils.DebugKeyTabPrinter), w)
- case config.OutFormatCheckstyle:
- p = NewCheckstyle(w)
- case config.OutFormatCodeClimate:
- p = NewCodeClimate(w)
- case config.OutFormatHTML:
- p = NewHTML(w)
- case config.OutFormatJunitXML, config.OutFormatJunitXMLExtended:
- p = NewJunitXML(format == config.OutFormatJunitXMLExtended, w)
- case config.OutFormatGithubActions:
- p = NewGitHubAction(w)
- case config.OutFormatTeamCity:
- p = NewTeamCity(w)
- case config.OutFormatSarif:
- p = NewSarif(w)
- default:
- return nil, fmt.Errorf("unknown output format %q", format)
- }
-
- return p, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/printers/sarif.go b/vendor/github.com/golangci/golangci-lint/pkg/printers/sarif.go
deleted file mode 100644
index 8b1dd2ee2..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/printers/sarif.go
+++ /dev/null
@@ -1,117 +0,0 @@
-package printers
-
-import (
- "encoding/json"
- "io"
-
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const (
- sarifVersion = "2.1.0"
- sarifSchemaURI = "https://schemastore.azurewebsites.net/schemas/json/sarif-2.1.0-rtm.6.json"
-)
-
-type SarifOutput struct {
- Version string `json:"version"`
- Schema string `json:"$schema"`
- Runs []sarifRun `json:"runs"`
-}
-
-type sarifRun struct {
- Tool sarifTool `json:"tool"`
- Results []sarifResult `json:"results"`
-}
-
-type sarifTool struct {
- Driver struct {
- Name string `json:"name"`
- } `json:"driver"`
-}
-
-type sarifResult struct {
- RuleID string `json:"ruleId"`
- Level string `json:"level"`
- Message sarifMessage `json:"message"`
- Locations []sarifLocation `json:"locations"`
-}
-
-type sarifMessage struct {
- Text string `json:"text"`
-}
-
-type sarifLocation struct {
- PhysicalLocation sarifPhysicalLocation `json:"physicalLocation"`
-}
-
-type sarifPhysicalLocation struct {
- ArtifactLocation sarifArtifactLocation `json:"artifactLocation"`
- Region sarifRegion `json:"region"`
-}
-
-type sarifArtifactLocation struct {
- URI string `json:"uri"`
- Index int `json:"index"`
-}
-
-type sarifRegion struct {
- StartLine int `json:"startLine"`
- StartColumn int `json:"startColumn"`
-}
-
-type Sarif struct {
- w io.Writer
-}
-
-func NewSarif(w io.Writer) *Sarif {
- return &Sarif{w: w}
-}
-
-func (p Sarif) Print(issues []result.Issue) error {
- run := sarifRun{}
- run.Tool.Driver.Name = "golangci-lint"
- run.Results = make([]sarifResult, 0)
-
- for i := range issues {
- issue := issues[i]
-
- severity := issue.Severity
-
- switch severity {
- // https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/sarif-v2.1.0-errata01-os-complete.html#_Toc141790898
- case "none", "note", "warning", "error":
- // Valid levels.
- default:
- severity = "error"
- }
-
- sr := sarifResult{
- RuleID: issue.FromLinter,
- Level: severity,
- Message: sarifMessage{Text: issue.Text},
- Locations: []sarifLocation{
- {
- PhysicalLocation: sarifPhysicalLocation{
- ArtifactLocation: sarifArtifactLocation{URI: issue.FilePath()},
- Region: sarifRegion{
- StartLine: issue.Line(),
- // If startColumn is absent, it SHALL default to 1.
- // https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/sarif-v2.1.0-errata01-os-complete.html#_Toc141790941
- StartColumn: max(1, issue.Column()),
- },
- },
- },
- },
- }
-
- run.Results = append(run.Results, sr)
- }
-
- output := SarifOutput{
- Version: sarifVersion,
- Schema: sarifSchemaURI,
- Runs: []sarifRun{run},
- }
-
- return json.NewEncoder(p.w).Encode(output)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/printers/tab.go b/vendor/github.com/golangci/golangci-lint/pkg/printers/tab.go
deleted file mode 100644
index c6d390d18..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/printers/tab.go
+++ /dev/null
@@ -1,67 +0,0 @@
-package printers
-
-import (
- "fmt"
- "io"
- "text/tabwriter"
-
- "github.com/fatih/color"
-
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-type Tab struct {
- printLinterName bool
- useColors bool
-
- log logutils.Log
- w io.Writer
-}
-
-func NewTab(printLinterName, useColors bool, log logutils.Log, w io.Writer) *Tab {
- return &Tab{
- printLinterName: printLinterName,
- useColors: useColors,
- log: log,
- w: w,
- }
-}
-
-func (p *Tab) SprintfColored(ca color.Attribute, format string, args ...any) string {
- c := color.New(ca)
-
- if !p.useColors {
- c.DisableColor()
- }
-
- return c.Sprintf(format, args...)
-}
-
-func (p *Tab) Print(issues []result.Issue) error {
- w := tabwriter.NewWriter(p.w, 0, 0, 2, ' ', 0)
-
- for i := range issues {
- p.printIssue(&issues[i], w)
- }
-
- if err := w.Flush(); err != nil {
- p.log.Warnf("Can't flush tab writer: %s", err)
- }
-
- return nil
-}
-
-func (p *Tab) printIssue(issue *result.Issue, w io.Writer) {
- text := p.SprintfColored(color.FgRed, "%s", issue.Text)
- if p.printLinterName {
- text = fmt.Sprintf("%s\t%s", issue.FromLinter, text)
- }
-
- pos := p.SprintfColored(color.Bold, "%s:%d", issue.FilePath(), issue.Line())
- if issue.Pos.Column != 0 {
- pos += fmt.Sprintf(":%d", issue.Pos.Column)
- }
-
- fmt.Fprintf(w, "%s\t%s\n", pos, text)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/printers/teamcity.go b/vendor/github.com/golangci/golangci-lint/pkg/printers/teamcity.go
deleted file mode 100644
index 1d1c9f7d3..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/printers/teamcity.go
+++ /dev/null
@@ -1,122 +0,0 @@
-package printers
-
-import (
- "fmt"
- "io"
- "strings"
- "unicode/utf8"
-
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-// Field limits.
-const (
- smallLimit = 255
- largeLimit = 4000
-)
-
-// TeamCity printer for TeamCity format.
-type TeamCity struct {
- w io.Writer
- escaper *strings.Replacer
-}
-
-// NewTeamCity output format outputs issues according to TeamCity service message format.
-func NewTeamCity(w io.Writer) *TeamCity {
- return &TeamCity{
- w: w,
- // https://www.jetbrains.com/help/teamcity/service-messages.html#Escaped+Values
- escaper: strings.NewReplacer(
- "'", "|'",
- "\n", "|n",
- "\r", "|r",
- "|", "||",
- "[", "|[",
- "]", "|]",
- ),
- }
-}
-
-func (p *TeamCity) Print(issues []result.Issue) error {
- uniqLinters := map[string]struct{}{}
-
- for i := range issues {
- issue := issues[i]
-
- _, ok := uniqLinters[issue.FromLinter]
- if !ok {
- inspectionType := InspectionType{
- id: issue.FromLinter,
- name: issue.FromLinter,
- description: issue.FromLinter,
- category: "Golangci-lint reports",
- }
-
- _, err := inspectionType.Print(p.w, p.escaper)
- if err != nil {
- return err
- }
-
- uniqLinters[issue.FromLinter] = struct{}{}
- }
-
- instance := InspectionInstance{
- typeID: issue.FromLinter,
- message: issue.Text,
- file: issue.FilePath(),
- line: issue.Line(),
- severity: issue.Severity,
- }
-
- _, err := instance.Print(p.w, p.escaper)
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-// InspectionType is the unique description of the conducted inspection. Each specific warning or
-// an error in code (inspection instance) has an inspection type.
-// https://www.jetbrains.com/help/teamcity/service-messages.html#Inspection+Type
-type InspectionType struct {
- id string // (mandatory) limited by 255 characters.
- name string // (mandatory) limited by 255 characters.
- description string // (mandatory) limited by 255 characters.
- category string // (mandatory) limited by 4000 characters.
-}
-
-func (i InspectionType) Print(w io.Writer, escaper *strings.Replacer) (int, error) {
- return fmt.Fprintf(w, "##teamcity[inspectionType id='%s' name='%s' description='%s' category='%s']\n",
- cutVal(i.id, smallLimit), cutVal(i.name, smallLimit), cutVal(escaper.Replace(i.description), largeLimit), cutVal(i.category, smallLimit))
-}
-
-// InspectionInstance reports a specific defect, warning, error message.
-// Includes location, description, and various optional and custom attributes.
-// https://www.jetbrains.com/help/teamcity/service-messages.html#Inspection+Instance
-type InspectionInstance struct {
- typeID string // (mandatory) limited by 255 characters.
- message string // (optional) limited by 4000 characters.
- file string // (mandatory) file path limited by 4000 characters.
- line int // (optional) line of the file.
- severity string // (optional) any linter severity.
-}
-
-func (i InspectionInstance) Print(w io.Writer, replacer *strings.Replacer) (int, error) {
- return fmt.Fprintf(w, "##teamcity[inspection typeId='%s' message='%s' file='%s' line='%d' SEVERITY='%s']\n",
- cutVal(i.typeID, smallLimit),
- cutVal(replacer.Replace(i.message), largeLimit),
- cutVal(i.file, largeLimit),
- i.line, strings.ToUpper(i.severity))
-}
-
-func cutVal(s string, limit int) string {
- var size, count int
- for i := 0; i < limit && count < len(s); i++ {
- _, size = utf8.DecodeRuneInString(s[count:])
- count += size
- }
-
- return s[:count]
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/printers/text.go b/vendor/github.com/golangci/golangci-lint/pkg/printers/text.go
deleted file mode 100644
index 56cced769..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/printers/text.go
+++ /dev/null
@@ -1,94 +0,0 @@
-package printers
-
-import (
- "fmt"
- "io"
- "strings"
-
- "github.com/fatih/color"
-
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-type Text struct {
- printIssuedLine bool
- printLinterName bool
- useColors bool
-
- log logutils.Log
- w io.Writer
-}
-
-func NewText(printIssuedLine, useColors, printLinterName bool, log logutils.Log, w io.Writer) *Text {
- return &Text{
- printIssuedLine: printIssuedLine,
- printLinterName: printLinterName,
- useColors: useColors,
- log: log,
- w: w,
- }
-}
-
-func (p *Text) SprintfColored(ca color.Attribute, format string, args ...any) string {
- c := color.New(ca)
-
- if !p.useColors {
- c.DisableColor()
- }
-
- return c.Sprintf(format, args...)
-}
-
-func (p *Text) Print(issues []result.Issue) error {
- for i := range issues {
- p.printIssue(&issues[i])
-
- if !p.printIssuedLine {
- continue
- }
-
- p.printSourceCode(&issues[i])
- p.printUnderLinePointer(&issues[i])
- }
-
- return nil
-}
-
-func (p *Text) printIssue(issue *result.Issue) {
- text := p.SprintfColored(color.FgRed, "%s", strings.TrimSpace(issue.Text))
- if p.printLinterName {
- text += fmt.Sprintf(" (%s)", issue.FromLinter)
- }
- pos := p.SprintfColored(color.Bold, "%s:%d", issue.FilePath(), issue.Line())
- if issue.Pos.Column != 0 {
- pos += fmt.Sprintf(":%d", issue.Pos.Column)
- }
- fmt.Fprintf(p.w, "%s: %s\n", pos, text)
-}
-
-func (p *Text) printSourceCode(issue *result.Issue) {
- for _, line := range issue.SourceLines {
- fmt.Fprintln(p.w, line)
- }
-}
-
-func (p *Text) printUnderLinePointer(issue *result.Issue) {
- // if column == 0 it means column is unknown (e.g. for gosec)
- if len(issue.SourceLines) != 1 || issue.Pos.Column == 0 {
- return
- }
-
- col0 := issue.Pos.Column - 1
- line := issue.SourceLines[0]
- prefixRunes := make([]rune, 0, len(line))
- for j := 0; j < len(line) && j < col0; j++ {
- if line[j] == '\t' {
- prefixRunes = append(prefixRunes, '\t')
- } else {
- prefixRunes = append(prefixRunes, ' ')
- }
- }
-
- fmt.Fprintf(p.w, "%s%s\n", string(prefixRunes), p.SprintfColored(color.FgYellow, "^"))
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/report/data.go b/vendor/github.com/golangci/golangci-lint/pkg/report/data.go
deleted file mode 100644
index f083fa9f5..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/report/data.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package report
-
-type Warning struct {
- Tag string `json:",omitempty"`
- Text string
-}
-
-type LinterData struct {
- Name string
- Enabled bool `json:",omitempty"`
- EnabledByDefault bool `json:",omitempty"`
-}
-
-type Data struct {
- Warnings []Warning `json:",omitempty"`
- Linters []LinterData `json:",omitempty"`
- Error string `json:",omitempty"`
-}
-
-func (d *Data) AddLinter(name string, enabled, enabledByDefault bool) {
- d.Linters = append(d.Linters, LinterData{
- Name: name,
- Enabled: enabled,
- EnabledByDefault: enabledByDefault,
- })
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/report/log.go b/vendor/github.com/golangci/golangci-lint/pkg/report/log.go
deleted file mode 100644
index 61665f28b..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/report/log.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package report
-
-import (
- "fmt"
- "strings"
-
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-type LogWrapper struct {
- rd *Data
- tags []string
- origLog logutils.Log
-}
-
-func NewLogWrapper(log logutils.Log, reportData *Data) *LogWrapper {
- return &LogWrapper{
- rd: reportData,
- origLog: log,
- }
-}
-
-func (lw LogWrapper) Fatalf(format string, args ...any) {
- lw.origLog.Fatalf(format, args...)
-}
-
-func (lw LogWrapper) Panicf(format string, args ...any) {
- lw.origLog.Panicf(format, args...)
-}
-
-func (lw LogWrapper) Errorf(format string, args ...any) {
- lw.origLog.Errorf(format, args...)
- lw.rd.Error = fmt.Sprintf(format, args...)
-}
-
-func (lw LogWrapper) Warnf(format string, args ...any) {
- lw.origLog.Warnf(format, args...)
- w := Warning{
- Tag: strings.Join(lw.tags, "/"),
- Text: fmt.Sprintf(format, args...),
- }
-
- lw.rd.Warnings = append(lw.rd.Warnings, w)
-}
-
-func (lw LogWrapper) Infof(format string, args ...any) {
- lw.origLog.Infof(format, args...)
-}
-
-func (lw LogWrapper) Child(name string) logutils.Log {
- c := lw
- c.origLog = lw.origLog.Child(name)
- c.tags = append([]string{}, lw.tags...)
- c.tags = append(c.tags, name)
- return c
-}
-
-func (lw LogWrapper) SetLevel(level logutils.LogLevel) {
- lw.origLog.SetLevel(level)
-}
-
-func (lw LogWrapper) GoString() string {
- return fmt.Sprintf("lw: %+v, orig log: %#v", lw, lw.origLog)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/issue.go b/vendor/github.com/golangci/golangci-lint/pkg/result/issue.go
deleted file mode 100644
index 32246a6df..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/issue.go
+++ /dev/null
@@ -1,98 +0,0 @@
-package result
-
-import (
- "crypto/md5" //nolint:gosec // for md5 hash
- "fmt"
- "go/token"
-
- "golang.org/x/tools/go/packages"
-)
-
-type Range struct {
- From, To int
-}
-
-type Replacement struct {
- NeedOnlyDelete bool // need to delete all lines of the issue without replacement with new lines
- NewLines []string // if NeedDelete is false it's the replacement lines
- Inline *InlineFix
-}
-
-type InlineFix struct {
- StartCol int // zero-based
- Length int // length of chunk to be replaced
- NewString string
-}
-
-type Issue struct {
- FromLinter string
- Text string
-
- Severity string
-
- // Source lines of a code with the issue to show
- SourceLines []string
-
- // If we know how to fix the issue we can provide replacement lines
- Replacement *Replacement
-
- // Pkg is needed for proper caching of linting results
- Pkg *packages.Package `json:"-"`
-
- LineRange *Range `json:",omitempty"`
-
- Pos token.Position
-
- // HunkPos is used only when golangci-lint is run over a diff
- HunkPos int `json:",omitempty"`
-
- // If we are expecting a nolint (because this is from nolintlint), record the expected linter
- ExpectNoLint bool
- ExpectedNoLintLinter string
-}
-
-func (i *Issue) FilePath() string {
- return i.Pos.Filename
-}
-
-func (i *Issue) Line() int {
- return i.Pos.Line
-}
-
-func (i *Issue) Column() int {
- return i.Pos.Column
-}
-
-func (i *Issue) GetLineRange() Range {
- if i.LineRange == nil {
- return Range{
- From: i.Line(),
- To: i.Line(),
- }
- }
-
- if i.LineRange.From == 0 {
- return Range{
- From: i.Line(),
- To: i.Line(),
- }
- }
-
- return *i.LineRange
-}
-
-func (i *Issue) Description() string {
- return fmt.Sprintf("%s: %s", i.FromLinter, i.Text)
-}
-
-func (i *Issue) Fingerprint() string {
- firstLine := ""
- if len(i.SourceLines) > 0 {
- firstLine = i.SourceLines[0]
- }
-
- hash := md5.New() //nolint:gosec // we don't need a strong hash here
- _, _ = fmt.Fprintf(hash, "%s%s%s", i.Pos.Filename, i.Text, firstLine)
-
- return fmt.Sprintf("%X", hash.Sum(nil))
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/autogenerated_exclude.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/autogenerated_exclude.go
deleted file mode 100644
index 82316f6a0..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/autogenerated_exclude.go
+++ /dev/null
@@ -1,177 +0,0 @@
-package processors
-
-import (
- "fmt"
- "go/parser"
- "go/token"
- "path/filepath"
- "regexp"
- "strings"
-
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const (
- AutogeneratedModeLax = "lax"
- AutogeneratedModeStrict = "strict"
- AutogeneratedModeDisable = "disable"
-)
-
-// The values must be in lowercase.
-const (
- genCodeGenerated = "code generated"
- genDoNotEdit = "do not edit"
-
- // Related to easyjson.
- genAutoFile = "autogenerated file"
-
- //nolint:lll // Long URL
- // Related to Swagger Codegen.
- // https://github.com/swagger-api/swagger-codegen/blob/61cfeac3b9d855b4eb8bffa0d118bece117bcb7d/modules/swagger-codegen/src/main/resources/go/partial_header.mustache#L16
- // https://github.com/swagger-api/swagger-codegen/issues/12358
- genSwaggerCodegen = "* generated by: swagger codegen "
-)
-
-var _ Processor = (*AutogeneratedExclude)(nil)
-
-type fileSummary struct {
- generated bool
-}
-
-type AutogeneratedExclude struct {
- debugf logutils.DebugFunc
-
- mode string
- strictPattern *regexp.Regexp
-
- fileSummaryCache map[string]*fileSummary
-}
-
-func NewAutogeneratedExclude(mode string) *AutogeneratedExclude {
- return &AutogeneratedExclude{
- debugf: logutils.Debug(logutils.DebugKeyAutogenExclude),
- mode: mode,
- strictPattern: regexp.MustCompile(`^// Code generated .* DO NOT EDIT\.$`),
- fileSummaryCache: map[string]*fileSummary{},
- }
-}
-
-func (*AutogeneratedExclude) Name() string {
- return "autogenerated_exclude"
-}
-
-func (p *AutogeneratedExclude) Process(issues []result.Issue) ([]result.Issue, error) {
- if p.mode == AutogeneratedModeDisable {
- return issues, nil
- }
-
- return filterIssuesErr(issues, p.shouldPassIssue)
-}
-
-func (*AutogeneratedExclude) Finish() {}
-
-func (p *AutogeneratedExclude) shouldPassIssue(issue *result.Issue) (bool, error) {
- if filepath.Base(issue.FilePath()) == "go.mod" {
- return true, nil
- }
-
- // The file is already known.
- fs := p.fileSummaryCache[issue.FilePath()]
- if fs != nil {
- return !fs.generated, nil
- }
-
- fs = &fileSummary{}
- p.fileSummaryCache[issue.FilePath()] = fs
-
- if p.mode == AutogeneratedModeStrict {
- var err error
- fs.generated, err = p.isGeneratedFileStrict(issue.FilePath())
- if err != nil {
- return false, fmt.Errorf("failed to get doc (strict) of file %s: %w", issue.FilePath(), err)
- }
- } else {
- doc, err := getComments(issue.FilePath())
- if err != nil {
- return false, fmt.Errorf("failed to get doc (lax) of file %s: %w", issue.FilePath(), err)
- }
-
- fs.generated = p.isGeneratedFileLax(doc)
- }
-
- p.debugf("file %q is generated: %t", issue.FilePath(), fs.generated)
-
- // don't report issues for autogenerated files
- return !fs.generated, nil
-}
-
-// isGeneratedFileLax reports whether the source file is generated code.
-// The function uses a bit laxer rules than isGeneratedFileStrict to match more generated code.
-// See https://github.com/golangci/golangci-lint/issues/48 and https://github.com/golangci/golangci-lint/issues/72.
-func (p *AutogeneratedExclude) isGeneratedFileLax(doc string) bool {
- markers := []string{genCodeGenerated, genDoNotEdit, genAutoFile, genSwaggerCodegen}
-
- doc = strings.ToLower(doc)
-
- for _, marker := range markers {
- if strings.Contains(doc, marker) {
- p.debugf("doc contains marker %q: file is generated", marker)
-
- return true
- }
- }
-
- p.debugf("doc of len %d doesn't contain any of markers: %s", len(doc), markers)
-
- return false
-}
-
-// isGeneratedFileStrict returns true if the source file has a line that matches the regular expression:
-//
-// ^// Code generated .* DO NOT EDIT\.$
-//
-// This line must appear before the first non-comment, non-blank text in the file.
-// Based on https://go.dev/s/generatedcode.
-func (p *AutogeneratedExclude) isGeneratedFileStrict(filePath string) (bool, error) {
- file, err := parser.ParseFile(token.NewFileSet(), filePath, nil, parser.PackageClauseOnly|parser.ParseComments)
- if err != nil {
- return false, fmt.Errorf("failed to parse file: %w", err)
- }
-
- if file == nil || len(file.Comments) == 0 {
- return false, nil
- }
-
- for _, comment := range file.Comments {
- if comment.Pos() > file.Package {
- return false, nil
- }
-
- for _, line := range comment.List {
- generated := p.strictPattern.MatchString(line.Text)
- if generated {
- p.debugf("doc contains ignore expression: file is generated")
-
- return true, nil
- }
- }
- }
-
- return false, nil
-}
-
-func getComments(filePath string) (string, error) {
- fset := token.NewFileSet()
- syntax, err := parser.ParseFile(fset, filePath, nil, parser.PackageClauseOnly|parser.ParseComments)
- if err != nil {
- return "", fmt.Errorf("failed to parse file: %w", err)
- }
-
- var docLines []string
- for _, c := range syntax.Comments {
- docLines = append(docLines, strings.TrimSpace(c.Text()))
- }
-
- return strings.Join(docLines, "\n"), nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/base_rule.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/base_rule.go
deleted file mode 100644
index d7a4f0ec4..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/base_rule.go
+++ /dev/null
@@ -1,68 +0,0 @@
-package processors
-
-import (
- "regexp"
-
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const caseInsensitivePrefix = "(?i)"
-
-type baseRule struct {
- text *regexp.Regexp
- source *regexp.Regexp
- path *regexp.Regexp
- pathExcept *regexp.Regexp
- linters []string
-}
-
-func (r *baseRule) isEmpty() bool {
- return r.text == nil && r.source == nil && r.path == nil && r.pathExcept == nil && len(r.linters) == 0
-}
-
-func (r *baseRule) match(issue *result.Issue, files *fsutils.Files, log logutils.Log) bool {
- if r.isEmpty() {
- return false
- }
- if r.text != nil && !r.text.MatchString(issue.Text) {
- return false
- }
- if r.path != nil && !r.path.MatchString(files.WithPathPrefix(issue.FilePath())) {
- return false
- }
- if r.pathExcept != nil && r.pathExcept.MatchString(issue.FilePath()) {
- return false
- }
- if len(r.linters) != 0 && !r.matchLinter(issue) {
- return false
- }
-
- // the most heavyweight checking last
- if r.source != nil && !r.matchSource(issue, files.LineCache, log) {
- return false
- }
-
- return true
-}
-
-func (r *baseRule) matchLinter(issue *result.Issue) bool {
- for _, linter := range r.linters {
- if linter == issue.FromLinter {
- return true
- }
- }
-
- return false
-}
-
-func (r *baseRule) matchSource(issue *result.Issue, lineCache *fsutils.LineCache, log logutils.Log) bool {
- sourceLine, errSourceLine := lineCache.GetLine(issue.FilePath(), issue.Line())
- if errSourceLine != nil {
- log.Warnf("Failed to get line %s:%d from line cache: %s", issue.FilePath(), issue.Line(), errSourceLine)
- return false // can't properly match
- }
-
- return r.source.MatchString(sourceLine)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/cgo.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/cgo.go
deleted file mode 100644
index 0e659f0f3..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/cgo.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package processors
-
-import (
- "fmt"
- "path/filepath"
- "strings"
-
- "github.com/golangci/golangci-lint/pkg/goutil"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*Cgo)(nil)
-
-type Cgo struct {
- goCacheDir string
-}
-
-func NewCgo(goenv *goutil.Env) *Cgo {
- return &Cgo{
- goCacheDir: goenv.Get(goutil.EnvGoCache),
- }
-}
-
-func (Cgo) Name() string {
- return "cgo"
-}
-
-func (p Cgo) Process(issues []result.Issue) ([]result.Issue, error) {
- return filterIssuesErr(issues, p.shouldPassIssue)
-}
-
-func (Cgo) Finish() {}
-
-func (p Cgo) shouldPassIssue(issue *result.Issue) (bool, error) {
- // some linters (e.g. gosec, deadcode) return incorrect filepaths for cgo issues,
- // also cgo files have strange issues looking like false positives.
-
- // cache dir contains all preprocessed files including cgo files
-
- issueFilePath := issue.FilePath()
- if !filepath.IsAbs(issue.FilePath()) {
- absPath, err := filepath.Abs(issue.FilePath())
- if err != nil {
- return false, fmt.Errorf("failed to build abs path for %q: %w", issue.FilePath(), err)
- }
- issueFilePath = absPath
- }
-
- if p.goCacheDir != "" && strings.HasPrefix(issueFilePath, p.goCacheDir) {
- return false, nil
- }
-
- if filepath.Base(issue.FilePath()) == "_cgo_gotypes.go" {
- // skip cgo warning for go1.10
- return false, nil
- }
-
- return true, nil
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/diff.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/diff.go
deleted file mode 100644
index c602cdc65..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/diff.go
+++ /dev/null
@@ -1,84 +0,0 @@
-package processors
-
-import (
- "bytes"
- "fmt"
- "io"
- "os"
- "strings"
-
- "github.com/golangci/revgrep"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const envGolangciDiffProcessorPatch = "GOLANGCI_DIFF_PROCESSOR_PATCH"
-
-var _ Processor = (*Diff)(nil)
-
-type Diff struct {
- onlyNew bool
- fromRev string
- patchFilePath string
- wholeFiles bool
- patch string
-}
-
-func NewDiff(cfg *config.Issues) *Diff {
- return &Diff{
- onlyNew: cfg.Diff,
- fromRev: cfg.DiffFromRevision,
- patchFilePath: cfg.DiffPatchFilePath,
- wholeFiles: cfg.WholeFiles,
- patch: os.Getenv(envGolangciDiffProcessorPatch),
- }
-}
-
-func (Diff) Name() string {
- return "diff"
-}
-
-func (p Diff) Process(issues []result.Issue) ([]result.Issue, error) {
- if !p.onlyNew && p.fromRev == "" && p.patchFilePath == "" && p.patch == "" { // no need to work
- return issues, nil
- }
-
- var patchReader io.Reader
- if p.patchFilePath != "" {
- patch, err := os.ReadFile(p.patchFilePath)
- if err != nil {
- return nil, fmt.Errorf("can't read from patch file %s: %w", p.patchFilePath, err)
- }
- patchReader = bytes.NewReader(patch)
- } else if p.patch != "" {
- patchReader = strings.NewReader(p.patch)
- }
-
- c := revgrep.Checker{
- Patch: patchReader,
- RevisionFrom: p.fromRev,
- WholeFiles: p.wholeFiles,
- }
- if err := c.Prepare(); err != nil {
- return nil, fmt.Errorf("can't prepare diff by revgrep: %w", err)
- }
-
- return transformIssues(issues, func(issue *result.Issue) *result.Issue {
- if issue.FromLinter == typeCheckName {
- // Never hide typechecking errors.
- return issue
- }
-
- hunkPos, isNew := c.IsNewIssue(issue)
- if !isNew {
- return nil
- }
-
- newIssue := *issue
- newIssue.HunkPos = hunkPos
- return &newIssue
- }), nil
-}
-
-func (Diff) Finish() {}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/exclude.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/exclude.go
deleted file mode 100644
index 543120450..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/exclude.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package processors
-
-import (
- "fmt"
- "regexp"
- "strings"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*Exclude)(nil)
-
-type Exclude struct {
- name string
-
- pattern *regexp.Regexp
-}
-
-func NewExclude(cfg *config.Issues) *Exclude {
- p := &Exclude{name: "exclude"}
-
- var pattern string
- if len(cfg.ExcludePatterns) != 0 {
- pattern = fmt.Sprintf("(%s)", strings.Join(cfg.ExcludePatterns, "|"))
- }
-
- prefix := caseInsensitivePrefix
- if cfg.ExcludeCaseSensitive {
- p.name = "exclude-case-sensitive"
- prefix = ""
- }
-
- if pattern != "" {
- p.pattern = regexp.MustCompile(prefix + pattern)
- }
-
- return p
-}
-
-func (p Exclude) Name() string {
- return p.name
-}
-
-func (p Exclude) Process(issues []result.Issue) ([]result.Issue, error) {
- if p.pattern == nil {
- return issues, nil
- }
-
- return filterIssues(issues, func(issue *result.Issue) bool {
- return !p.pattern.MatchString(issue.Text)
- }), nil
-}
-
-func (Exclude) Finish() {}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/exclude_rules.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/exclude_rules.go
deleted file mode 100644
index bf255ae82..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/exclude_rules.go
+++ /dev/null
@@ -1,105 +0,0 @@
-package processors
-
-import (
- "regexp"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*ExcludeRules)(nil)
-
-type excludeRule struct {
- baseRule
-}
-
-type ExcludeRules struct {
- name string
-
- log logutils.Log
- files *fsutils.Files
-
- rules []excludeRule
-}
-
-func NewExcludeRules(log logutils.Log, files *fsutils.Files, cfg *config.Issues) *ExcludeRules {
- p := &ExcludeRules{
- name: "exclude-rules",
- files: files,
- log: log,
- }
-
- prefix := caseInsensitivePrefix
- if cfg.ExcludeCaseSensitive {
- prefix = ""
- p.name = "exclude-rules-case-sensitive"
- }
-
- excludeRules := cfg.ExcludeRules
-
- if cfg.UseDefaultExcludes {
- for _, r := range config.GetExcludePatterns(cfg.IncludeDefaultExcludes) {
- excludeRules = append(excludeRules, config.ExcludeRule{
- BaseRule: config.BaseRule{
- Text: r.Pattern,
- Linters: []string{r.Linter},
- },
- })
- }
- }
-
- p.rules = createRules(excludeRules, prefix)
-
- return p
-}
-
-func (p ExcludeRules) Name() string { return p.name }
-
-func (p ExcludeRules) Process(issues []result.Issue) ([]result.Issue, error) {
- if len(p.rules) == 0 {
- return issues, nil
- }
-
- return filterIssues(issues, func(issue *result.Issue) bool {
- for _, rule := range p.rules {
- if rule.match(issue, p.files, p.log) {
- return false
- }
- }
-
- return true
- }), nil
-}
-
-func (ExcludeRules) Finish() {}
-
-func createRules(rules []config.ExcludeRule, prefix string) []excludeRule {
- parsedRules := make([]excludeRule, 0, len(rules))
-
- for _, rule := range rules {
- parsedRule := excludeRule{}
- parsedRule.linters = rule.Linters
-
- if rule.Text != "" {
- parsedRule.text = regexp.MustCompile(prefix + rule.Text)
- }
-
- if rule.Source != "" {
- parsedRule.source = regexp.MustCompile(prefix + rule.Source)
- }
-
- if rule.Path != "" {
- parsedRule.path = regexp.MustCompile(fsutils.NormalizePathInRegex(rule.Path))
- }
-
- if rule.PathExcept != "" {
- parsedRule.pathExcept = regexp.MustCompile(fsutils.NormalizePathInRegex(rule.PathExcept))
- }
-
- parsedRules = append(parsedRules, parsedRule)
- }
-
- return parsedRules
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/filename_unadjuster.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/filename_unadjuster.go
deleted file mode 100644
index 6a1387c87..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/filename_unadjuster.go
+++ /dev/null
@@ -1,133 +0,0 @@
-package processors
-
-import (
- "go/parser"
- "go/token"
- "path/filepath"
- "strings"
- "sync"
- "time"
-
- "golang.org/x/tools/go/packages"
-
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*FilenameUnadjuster)(nil)
-
-type posMapper func(pos token.Position) token.Position
-
-type adjustMap struct {
- sync.Mutex
- m map[string]posMapper
-}
-
-// FilenameUnadjuster is needed because a lot of linters use fset.Position(f.Pos())
-// to get filename. And they return adjusted filename (e.g. *.qtpl) for an issue. We need
-// restore real .go filename to properly output it, parse it, etc.
-type FilenameUnadjuster struct {
- m map[string]posMapper // map from adjusted filename to position mapper: adjusted -> unadjusted position
- log logutils.Log
- loggedUnadjustments map[string]bool
-}
-
-func NewFilenameUnadjuster(pkgs []*packages.Package, log logutils.Log) *FilenameUnadjuster {
- m := adjustMap{m: map[string]posMapper{}}
-
- startedAt := time.Now()
- var wg sync.WaitGroup
- wg.Add(len(pkgs))
- for _, pkg := range pkgs {
- go func(pkg *packages.Package) {
- // It's important to call func here to run GC
- processUnadjusterPkg(&m, pkg, log)
- wg.Done()
- }(pkg)
- }
- wg.Wait()
- log.Infof("Pre-built %d adjustments in %s", len(m.m), time.Since(startedAt))
-
- return &FilenameUnadjuster{
- m: m.m,
- log: log,
- loggedUnadjustments: map[string]bool{},
- }
-}
-
-func (*FilenameUnadjuster) Name() string {
- return "filename_unadjuster"
-}
-
-func (p *FilenameUnadjuster) Process(issues []result.Issue) ([]result.Issue, error) {
- return transformIssues(issues, func(issue *result.Issue) *result.Issue {
- issueFilePath := issue.FilePath()
- if !filepath.IsAbs(issue.FilePath()) {
- absPath, err := filepath.Abs(issue.FilePath())
- if err != nil {
- p.log.Warnf("failed to build abs path for %q: %s", issue.FilePath(), err)
- return issue
- }
- issueFilePath = absPath
- }
-
- mapper := p.m[issueFilePath]
- if mapper == nil {
- return issue
- }
-
- newIssue := *issue
- newIssue.Pos = mapper(issue.Pos)
- if !p.loggedUnadjustments[issue.Pos.Filename] {
- p.log.Infof("Unadjusted from %v to %v", issue.Pos, newIssue.Pos)
- p.loggedUnadjustments[issue.Pos.Filename] = true
- }
- return &newIssue
- }), nil
-}
-
-func (*FilenameUnadjuster) Finish() {}
-
-func processUnadjusterPkg(m *adjustMap, pkg *packages.Package, log logutils.Log) {
- fset := token.NewFileSet() // it's more memory efficient to not store all in one fset
-
- for _, filename := range pkg.CompiledGoFiles {
- // It's important to call func here to run GC
- processUnadjusterFile(filename, m, log, fset)
- }
-}
-
-func processUnadjusterFile(filename string, m *adjustMap, log logutils.Log, fset *token.FileSet) {
- syntax, err := parser.ParseFile(fset, filename, nil, parser.ParseComments)
- if err != nil {
- // Error will be reported by typecheck
- return
- }
-
- adjustedFilename := fset.PositionFor(syntax.Pos(), true).Filename
- if adjustedFilename == "" {
- return
- }
-
- unadjustedFilename := fset.PositionFor(syntax.Pos(), false).Filename
- if unadjustedFilename == "" || unadjustedFilename == adjustedFilename {
- return
- }
-
- if !strings.HasSuffix(unadjustedFilename, ".go") {
- return // file.go -> /caches/cgo-xxx
- }
-
- m.Lock()
- defer m.Unlock()
-
- m.m[adjustedFilename] = func(adjustedPos token.Position) token.Position {
- tokenFile := fset.File(syntax.Pos())
- if tokenFile == nil {
- log.Warnf("Failed to get token file for %s", adjustedFilename)
- return adjustedPos
- }
-
- return fset.PositionFor(tokenFile.Pos(adjustedPos.Offset), false)
- }
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/fixer.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/fixer.go
deleted file mode 100644
index 764af5a92..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/fixer.go
+++ /dev/null
@@ -1,260 +0,0 @@
-package processors
-
-import (
- "bytes"
- "fmt"
- "os"
- "path/filepath"
- "sort"
- "strings"
-
- "github.com/golangci/golangci-lint/internal/go/robustio"
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
- "github.com/golangci/golangci-lint/pkg/timeutils"
-)
-
-var _ Processor = (*Fixer)(nil)
-
-type Fixer struct {
- cfg *config.Config
- log logutils.Log
- fileCache *fsutils.FileCache
- sw *timeutils.Stopwatch
-}
-
-func NewFixer(cfg *config.Config, log logutils.Log, fileCache *fsutils.FileCache) *Fixer {
- return &Fixer{
- cfg: cfg,
- log: log,
- fileCache: fileCache,
- sw: timeutils.NewStopwatch("fixer", log),
- }
-}
-
-func (Fixer) Name() string {
- return "fixer"
-}
-
-func (p Fixer) Process(issues []result.Issue) ([]result.Issue, error) {
- if !p.cfg.Issues.NeedFix {
- return issues, nil
- }
-
- outIssues := make([]result.Issue, 0, len(issues))
- issuesToFixPerFile := map[string][]result.Issue{}
- for i := range issues {
- issue := &issues[i]
- if issue.Replacement == nil {
- outIssues = append(outIssues, *issue)
- continue
- }
-
- issuesToFixPerFile[issue.FilePath()] = append(issuesToFixPerFile[issue.FilePath()], *issue)
- }
-
- for file, issuesToFix := range issuesToFixPerFile {
- err := p.sw.TrackStageErr("all", func() error {
- return p.fixIssuesInFile(file, issuesToFix)
- })
- if err != nil {
- p.log.Errorf("Failed to fix issues in file %s: %s", file, err)
-
- // show issues only if can't fix them
- outIssues = append(outIssues, issuesToFix...)
- }
- }
-
- p.printStat()
-
- return outIssues, nil
-}
-
-func (Fixer) Finish() {}
-
-func (p Fixer) fixIssuesInFile(filePath string, issues []result.Issue) error {
- // TODO: don't read the whole file into memory: read line by line;
- // can't just use bufio.scanner: it has a line length limit
- origFileData, err := p.fileCache.GetFileBytes(filePath)
- if err != nil {
- return fmt.Errorf("failed to get file bytes for %s: %w", filePath, err)
- }
-
- origFileLines := bytes.Split(origFileData, []byte("\n"))
-
- tmpFileName := filepath.Join(filepath.Dir(filePath), fmt.Sprintf(".%s.golangci_fix", filepath.Base(filePath)))
-
- tmpOutFile, err := os.Create(tmpFileName)
- if err != nil {
- return fmt.Errorf("failed to make file %s: %w", tmpFileName, err)
- }
-
- // merge multiple issues per line into one issue
- issuesPerLine := map[int][]result.Issue{}
- for i := range issues {
- issue := &issues[i]
- issuesPerLine[issue.Line()] = append(issuesPerLine[issue.Line()], *issue)
- }
-
- issues = issues[:0] // reuse the same memory
- for line, lineIssues := range issuesPerLine {
- if mergedIssue := p.mergeLineIssues(line, lineIssues, origFileLines); mergedIssue != nil {
- issues = append(issues, *mergedIssue)
- }
- }
-
- issues = p.findNotIntersectingIssues(issues)
-
- if err = p.writeFixedFile(origFileLines, issues, tmpOutFile); err != nil {
- tmpOutFile.Close()
- _ = robustio.RemoveAll(tmpOutFile.Name())
- return err
- }
-
- tmpOutFile.Close()
-
- if err = robustio.Rename(tmpOutFile.Name(), filePath); err != nil {
- _ = robustio.RemoveAll(tmpOutFile.Name())
- return fmt.Errorf("failed to rename %s -> %s: %w", tmpOutFile.Name(), filePath, err)
- }
-
- return nil
-}
-
-func (p Fixer) mergeLineIssues(lineNum int, lineIssues []result.Issue, origFileLines [][]byte) *result.Issue {
- origLine := origFileLines[lineNum-1] // lineNum is 1-based
-
- if len(lineIssues) == 1 && lineIssues[0].Replacement.Inline == nil {
- return &lineIssues[0]
- }
-
- // check issues first
- for ind := range lineIssues {
- li := &lineIssues[ind]
-
- if li.LineRange != nil {
- p.log.Infof("Line %d has multiple issues but at least one of them is ranged: %#v", lineNum, lineIssues)
- return &lineIssues[0]
- }
-
- inline := li.Replacement.Inline
-
- if inline == nil || len(li.Replacement.NewLines) != 0 || li.Replacement.NeedOnlyDelete {
- p.log.Infof("Line %d has multiple issues but at least one of them isn't inline: %#v", lineNum, lineIssues)
- return li
- }
-
- if inline.StartCol < 0 || inline.Length <= 0 || inline.StartCol+inline.Length > len(origLine) {
- p.log.Warnf("Line %d (%q) has invalid inline fix: %#v, %#v", lineNum, origLine, li, inline)
- return nil
- }
- }
-
- return p.applyInlineFixes(lineIssues, origLine, lineNum)
-}
-
-func (p Fixer) applyInlineFixes(lineIssues []result.Issue, origLine []byte, lineNum int) *result.Issue {
- sort.Slice(lineIssues, func(i, j int) bool {
- return lineIssues[i].Replacement.Inline.StartCol < lineIssues[j].Replacement.Inline.StartCol
- })
-
- var newLineBuf bytes.Buffer
- newLineBuf.Grow(len(origLine))
-
- //nolint:misspell // misspelling is intentional
- // example: origLine="it's becouse of them", StartCol=5, Length=7, NewString="because"
-
- curOrigLinePos := 0
- for i := range lineIssues {
- fix := lineIssues[i].Replacement.Inline
- if fix.StartCol < curOrigLinePos {
- p.log.Warnf("Line %d has multiple intersecting issues: %#v", lineNum, lineIssues)
- return nil
- }
-
- if curOrigLinePos != fix.StartCol {
- newLineBuf.Write(origLine[curOrigLinePos:fix.StartCol])
- }
- newLineBuf.WriteString(fix.NewString)
- curOrigLinePos = fix.StartCol + fix.Length
- }
- if curOrigLinePos != len(origLine) {
- newLineBuf.Write(origLine[curOrigLinePos:])
- }
-
- mergedIssue := lineIssues[0] // use text from the first issue (it's not really used)
- mergedIssue.Replacement = &result.Replacement{
- NewLines: []string{newLineBuf.String()},
- }
- return &mergedIssue
-}
-
-func (p Fixer) findNotIntersectingIssues(issues []result.Issue) []result.Issue {
- sort.SliceStable(issues, func(i, j int) bool {
- a, b := issues[i], issues[j]
- return a.Line() < b.Line()
- })
-
- var ret []result.Issue
- var currentEnd int
- for i := range issues {
- issue := &issues[i]
- rng := issue.GetLineRange()
- if rng.From <= currentEnd {
- p.log.Infof("Skip issue %#v: intersects with end %d", issue, currentEnd)
- continue // skip intersecting issue
- }
- p.log.Infof("Fix issue %#v with range %v", issue, issue.GetLineRange())
- ret = append(ret, *issue)
- currentEnd = rng.To
- }
-
- return ret
-}
-
-func (p Fixer) writeFixedFile(origFileLines [][]byte, issues []result.Issue, tmpOutFile *os.File) error {
- // issues aren't intersecting
-
- nextIssueIndex := 0
- for i := 0; i < len(origFileLines); i++ {
- var outLine string
- var nextIssue *result.Issue
- if nextIssueIndex != len(issues) {
- nextIssue = &issues[nextIssueIndex]
- }
-
- origFileLineNumber := i + 1
- if nextIssue == nil || origFileLineNumber != nextIssue.GetLineRange().From {
- outLine = string(origFileLines[i])
- } else {
- nextIssueIndex++
- rng := nextIssue.GetLineRange()
- if rng.From > rng.To {
- // Maybe better decision is to skip such issues, re-evaluate if regressed.
- p.log.Warnf("[fixer]: issue line range is probably invalid, fix can be incorrect (from=%d, to=%d, linter=%s)",
- rng.From, rng.To, nextIssue.FromLinter,
- )
- }
- i += rng.To - rng.From
- if nextIssue.Replacement.NeedOnlyDelete {
- continue
- }
- outLine = strings.Join(nextIssue.Replacement.NewLines, "\n")
- }
-
- if i < len(origFileLines)-1 {
- outLine += "\n"
- }
- if _, err := tmpOutFile.WriteString(outLine); err != nil {
- return fmt.Errorf("failed to write output line: %w", err)
- }
- }
-
- return nil
-}
-
-func (p Fixer) printStat() {
- p.sw.PrintStages()
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/identifier_marker.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/identifier_marker.go
deleted file mode 100644
index 876fd3bd3..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/identifier_marker.go
+++ /dev/null
@@ -1,154 +0,0 @@
-package processors
-
-import (
- "regexp"
-
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*IdentifierMarker)(nil)
-
-type replacePattern struct {
- re string
- repl string
-}
-
-type replaceRegexp struct {
- re *regexp.Regexp
- repl string
-}
-
-var replacePatterns = []replacePattern{
- // unparam
- {`^(\S+) - (\S+) is unused$`, "`${1}` - `${2}` is unused"},
- {`^(\S+) - (\S+) always receives (\S+) \((.*)\)$`, "`${1}` - `${2}` always receives `${3}` (`${4}`)"},
- {`^(\S+) - (\S+) always receives (.*)$`, "`${1}` - `${2}` always receives `${3}`"},
- {`^(\S+) - result (\S+) is always (\S+)`, "`${1}` - result `${2}` is always `${3}`"},
-
- // interfacer
- {`^(\S+) can be (\S+)$`, "`${1}` can be `${2}`"},
-
- // govet
- {`^printf: (\S+) arg list ends with redundant newline$`, "printf: `${1}` arg list ends with redundant newline"},
- {`^composites: (\S+) composite literal uses unkeyed fields$`, "composites: `${1}` composite literal uses unkeyed fields"},
-
- // gosec
- {
- `^(\S+): Blacklisted import (\S+): weak cryptographic primitive$`,
- "${1}: Blacklisted import `${2}`: weak cryptographic primitive",
- },
- {`^TLS InsecureSkipVerify set true.$`, "TLS `InsecureSkipVerify` set true."},
-
- // gosimple
- {`should replace loop with (.*)$`, "should replace loop with `${1}`"},
- {
- `should use a simple channel send/receive instead of select with a single case`,
- "should use a simple channel send/receive instead of `select` with a single case",
- },
- {
- `should omit comparison to bool constant, can be simplified to (.+)$`,
- "should omit comparison to bool constant, can be simplified to `${1}`",
- },
- {`should write (.+) instead of (.+)$`, "should write `${1}` instead of `${2}`"},
- {`redundant return statement$`, "redundant `return` statement"},
- {
- `should replace this if statement with an unconditional strings.TrimPrefix`,
- "should replace this `if` statement with an unconditional `strings.TrimPrefix`",
- },
-
- // staticcheck
- {`this value of (\S+) is never used$`, "this value of `${1}` is never used"},
- {
- `should use time.Since instead of time.Now\(\).Sub$`,
- "should use `time.Since` instead of `time.Now().Sub`",
- },
- {
- `should check returned error before deferring response.Close\(\)$`,
- "should check returned error before deferring `response.Close()`",
- },
- {`no value of type uint is less than 0$`, "no value of type `uint` is less than `0`"},
-
- // unused
- {`(func|const|field|type|var) (\S+) is unused$`, "${1} `${2}` is unused"},
-
- // typecheck
- {`^unknown field (\S+) in struct literal$`, "unknown field `${1}` in struct literal"},
- {
- `^invalid operation: (\S+) \(variable of type (\S+)\) has no field or method (\S+)$`,
- "invalid operation: `${1}` (variable of type `${2}`) has no field or method `${3}`",
- },
- {`^undeclared name: (\S+)$`, "undeclared name: `${1}`"},
- {
- `^cannot use addr \(variable of type (\S+)\) as (\S+) value in argument to (\S+)$`,
- "cannot use addr (variable of type `${1}`) as `${2}` value in argument to `${3}`",
- },
- {`^other declaration of (\S+)$`, "other declaration of `${1}`"},
- {`^(\S+) redeclared in this block$`, "`${1}` redeclared in this block"},
-
- // golint
- {
- `^exported (type|method|function|var|const) (\S+) should have comment or be unexported$`,
- "exported ${1} `${2}` should have comment or be unexported",
- },
- {
- `^comment on exported (type|method|function|var|const) (\S+) should be of the form "(\S+) ..."$`,
- "comment on exported ${1} `${2}` should be of the form `${3} ...`",
- },
- {`^should replace (.+) with (.+)$`, "should replace `${1}` with `${2}`"},
- {
- `^if block ends with a return statement, so drop this else and outdent its block$`,
- "`if` block ends with a `return` statement, so drop this `else` and outdent its block",
- },
- {
- `^(struct field|var|range var|const|type|(?:func|method|interface method) (?:parameter|result)) (\S+) should be (\S+)$`,
- "${1} `${2}` should be `${3}`",
- },
- {
- `^don't use underscores in Go names; var (\S+) should be (\S+)$`,
- "don't use underscores in Go names; var `${1}` should be `${2}`",
- },
-}
-
-type IdentifierMarker struct {
- replaceRegexps []replaceRegexp
-}
-
-func NewIdentifierMarker() *IdentifierMarker {
- var replaceRegexps []replaceRegexp
- for _, p := range replacePatterns {
- r := replaceRegexp{
- re: regexp.MustCompile(p.re),
- repl: p.repl,
- }
- replaceRegexps = append(replaceRegexps, r)
- }
-
- return &IdentifierMarker{
- replaceRegexps: replaceRegexps,
- }
-}
-
-func (IdentifierMarker) Name() string {
- return "identifier_marker"
-}
-
-func (p IdentifierMarker) Process(issues []result.Issue) ([]result.Issue, error) {
- return transformIssues(issues, func(issue *result.Issue) *result.Issue {
- newIssue := *issue
- newIssue.Text = p.markIdentifiers(newIssue.Text)
- return &newIssue
- }), nil
-}
-
-func (IdentifierMarker) Finish() {}
-
-func (p IdentifierMarker) markIdentifiers(s string) string {
- for _, rr := range p.replaceRegexps {
- rs := rr.re.ReplaceAllString(s, rr.repl)
- if rs != s {
- return rs
- }
- }
-
- return s
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/invalid_issue.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/invalid_issue.go
deleted file mode 100644
index 3f6cfc540..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/invalid_issue.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package processors
-
-import (
- "path/filepath"
-
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*InvalidIssue)(nil)
-
-type InvalidIssue struct {
- log logutils.Log
-}
-
-func NewInvalidIssue(log logutils.Log) *InvalidIssue {
- return &InvalidIssue{log: log}
-}
-
-func (InvalidIssue) Name() string {
- return "invalid_issue"
-}
-
-func (p InvalidIssue) Process(issues []result.Issue) ([]result.Issue, error) {
- tcIssues := filterIssuesUnsafe(issues, func(issue *result.Issue) bool {
- return issue.FromLinter == typeCheckName
- })
-
- if len(tcIssues) > 0 {
- return tcIssues, nil
- }
-
- return filterIssuesErr(issues, p.shouldPassIssue)
-}
-
-func (InvalidIssue) Finish() {}
-
-func (p InvalidIssue) shouldPassIssue(issue *result.Issue) (bool, error) {
- if issue.FilePath() == "" {
- p.log.Warnf("no file path for the issue: probably a bug inside the linter %q: %#v", issue.FromLinter, issue)
-
- return false, nil
- }
-
- if filepath.Base(issue.FilePath()) == "go.mod" {
- return true, nil
- }
-
- if !isGoFile(issue.FilePath()) {
- p.log.Infof("issue related to file %s is skipped", issue.FilePath())
-
- return false, nil
- }
-
- return true, nil
-}
-
-func isGoFile(name string) bool {
- return filepath.Ext(name) == ".go"
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/issues.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/issues.go
deleted file mode 100644
index ab443b87d..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/issues.go
+++ /dev/null
@@ -1,69 +0,0 @@
-package processors
-
-import (
- "fmt"
-
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-func filterIssues(issues []result.Issue, filter func(issue *result.Issue) bool) []result.Issue {
- retIssues := make([]result.Issue, 0, len(issues))
- for i := range issues {
- if issues[i].FromLinter == typeCheckName {
- // don't hide typechecking errors in generated files: users expect to see why the project isn't compiling
- retIssues = append(retIssues, issues[i])
- continue
- }
-
- if filter(&issues[i]) {
- retIssues = append(retIssues, issues[i])
- }
- }
-
- return retIssues
-}
-
-func filterIssuesUnsafe(issues []result.Issue, filter func(issue *result.Issue) bool) []result.Issue {
- retIssues := make([]result.Issue, 0, len(issues))
- for i := range issues {
- if filter(&issues[i]) {
- retIssues = append(retIssues, issues[i])
- }
- }
-
- return retIssues
-}
-
-func filterIssuesErr(issues []result.Issue, filter func(issue *result.Issue) (bool, error)) ([]result.Issue, error) {
- retIssues := make([]result.Issue, 0, len(issues))
- for i := range issues {
- if issues[i].FromLinter == typeCheckName {
- // don't hide typechecking errors in generated files: users expect to see why the project isn't compiling
- retIssues = append(retIssues, issues[i])
- continue
- }
-
- ok, err := filter(&issues[i])
- if err != nil {
- return nil, fmt.Errorf("can't filter issue %#v: %w", issues[i], err)
- }
-
- if ok {
- retIssues = append(retIssues, issues[i])
- }
- }
-
- return retIssues, nil
-}
-
-func transformIssues(issues []result.Issue, transform func(issue *result.Issue) *result.Issue) []result.Issue {
- retIssues := make([]result.Issue, 0, len(issues))
- for i := range issues {
- newIssue := transform(&issues[i])
- if newIssue != nil {
- retIssues = append(retIssues, *newIssue)
- }
- }
-
- return retIssues
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/max_from_linter.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/max_from_linter.go
deleted file mode 100644
index 0680c3f29..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/max_from_linter.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package processors
-
-import (
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*MaxFromLinter)(nil)
-
-type MaxFromLinter struct {
- linterCounter map[string]int
- limit int
- log logutils.Log
- cfg *config.Config
-}
-
-func NewMaxFromLinter(limit int, log logutils.Log, cfg *config.Config) *MaxFromLinter {
- return &MaxFromLinter{
- linterCounter: map[string]int{},
- limit: limit,
- log: log,
- cfg: cfg,
- }
-}
-
-func (*MaxFromLinter) Name() string {
- return "max_from_linter"
-}
-
-func (p *MaxFromLinter) Process(issues []result.Issue) ([]result.Issue, error) {
- if p.limit <= 0 { // no limit
- return issues, nil
- }
-
- return filterIssuesUnsafe(issues, func(issue *result.Issue) bool {
- if issue.Replacement != nil && p.cfg.Issues.NeedFix {
- // we need to fix all issues at once => we need to return all of them
- return true
- }
-
- p.linterCounter[issue.FromLinter]++ // always inc for stat
-
- return p.linterCounter[issue.FromLinter] <= p.limit
- }), nil
-}
-
-func (p *MaxFromLinter) Finish() {
- walkStringToIntMapSortedByValue(p.linterCounter, func(linter string, count int) {
- if count > p.limit {
- p.log.Infof("%d/%d issues from linter %s were hidden, use --max-issues-per-linter",
- count-p.limit, count, linter)
- }
- })
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/max_per_file_from_linter.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/max_per_file_from_linter.go
deleted file mode 100644
index a39c98473..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/max_per_file_from_linter.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package processors
-
-import (
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*MaxPerFileFromLinter)(nil)
-
-type MaxPerFileFromLinter struct {
- fileLinterCounter fileLinterCounter
- maxPerFileFromLinterConfig map[string]int
-}
-
-func NewMaxPerFileFromLinter(cfg *config.Config) *MaxPerFileFromLinter {
- maxPerFileFromLinterConfig := map[string]int{}
-
- if !cfg.Issues.NeedFix {
- // if we don't fix we do this limiting to not annoy user;
- // otherwise we need to fix all issues in the file at once
- maxPerFileFromLinterConfig["gofmt"] = 1
- maxPerFileFromLinterConfig["goimports"] = 1
- }
-
- return &MaxPerFileFromLinter{
- fileLinterCounter: fileLinterCounter{},
- maxPerFileFromLinterConfig: maxPerFileFromLinterConfig,
- }
-}
-
-func (*MaxPerFileFromLinter) Name() string {
- return "max_per_file_from_linter"
-}
-
-func (p *MaxPerFileFromLinter) Process(issues []result.Issue) ([]result.Issue, error) {
- return filterIssuesUnsafe(issues, func(issue *result.Issue) bool {
- limit := p.maxPerFileFromLinterConfig[issue.FromLinter]
- if limit == 0 {
- return true
- }
-
- if p.fileLinterCounter.GetCount(issue) >= limit {
- return false
- }
-
- p.fileLinterCounter.Increment(issue)
-
- return true
- }), nil
-}
-
-func (*MaxPerFileFromLinter) Finish() {}
-
-type fileLinterCounter map[string]map[string]int
-
-func (f fileLinterCounter) GetCount(issue *result.Issue) int {
- return f.getCounter(issue)[issue.FromLinter]
-}
-
-func (f fileLinterCounter) Increment(issue *result.Issue) {
- f.getCounter(issue)[issue.FromLinter]++
-}
-
-func (f fileLinterCounter) getCounter(issue *result.Issue) map[string]int {
- lc := f[issue.FilePath()]
-
- if lc == nil {
- lc = map[string]int{}
- f[issue.FilePath()] = lc
- }
-
- return lc
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/max_same_issues.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/max_same_issues.go
deleted file mode 100644
index 1647cace0..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/max_same_issues.go
+++ /dev/null
@@ -1,79 +0,0 @@
-package processors
-
-import (
- "sort"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*MaxSameIssues)(nil)
-
-type MaxSameIssues struct {
- textCounter map[string]int
- limit int
- log logutils.Log
- cfg *config.Config
-}
-
-func NewMaxSameIssues(limit int, log logutils.Log, cfg *config.Config) *MaxSameIssues {
- return &MaxSameIssues{
- textCounter: map[string]int{},
- limit: limit,
- log: log,
- cfg: cfg,
- }
-}
-
-func (*MaxSameIssues) Name() string {
- return "max_same_issues"
-}
-
-func (p *MaxSameIssues) Process(issues []result.Issue) ([]result.Issue, error) {
- if p.limit <= 0 { // no limit
- return issues, nil
- }
-
- return filterIssuesUnsafe(issues, func(issue *result.Issue) bool {
- if issue.Replacement != nil && p.cfg.Issues.NeedFix {
- // we need to fix all issues at once => we need to return all of them
- return true
- }
-
- p.textCounter[issue.Text]++ // always inc for stat
- return p.textCounter[issue.Text] <= p.limit
- }), nil
-}
-
-func (p *MaxSameIssues) Finish() {
- walkStringToIntMapSortedByValue(p.textCounter, func(text string, count int) {
- if count > p.limit {
- p.log.Infof("%d/%d issues with text %q were hidden, use --max-same-issues",
- count-p.limit, count, text)
- }
- })
-}
-
-type kv struct {
- Key string
- Value int
-}
-
-func walkStringToIntMapSortedByValue(m map[string]int, walk func(k string, v int)) {
- var ss []kv
- for k, v := range m {
- ss = append(ss, kv{
- Key: k,
- Value: v,
- })
- }
-
- sort.Slice(ss, func(i, j int) bool {
- return ss[i].Value > ss[j].Value
- })
-
- for _, kv := range ss {
- walk(kv.Key, kv.Value)
- }
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/nolint.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/nolint.go
deleted file mode 100644
index 7794bd3ec..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/nolint.go
+++ /dev/null
@@ -1,315 +0,0 @@
-package processors
-
-import (
- "go/ast"
- "go/parser"
- "go/token"
- "regexp"
- "sort"
- "strings"
-
- "golang.org/x/exp/maps"
-
- "github.com/golangci/golangci-lint/pkg/golinters/nolintlint"
- "github.com/golangci/golangci-lint/pkg/lint/linter"
- "github.com/golangci/golangci-lint/pkg/lint/lintersdb"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*Nolint)(nil)
-
-var nolintDebugf = logutils.Debug(logutils.DebugKeyNolint)
-
-type ignoredRange struct {
- linters []string
- matchedIssueFromLinter map[string]bool
- result.Range
- col int
- originalRange *ignoredRange // pre-expanded range (used to match nolintlint issues)
-}
-
-func (i *ignoredRange) doesMatch(issue *result.Issue) bool {
- if issue.Line() < i.From || issue.Line() > i.To {
- return false
- }
-
- // only allow selective nolinting of nolintlint
- nolintFoundForLinter := len(i.linters) == 0 && issue.FromLinter != nolintlint.LinterName
-
- for _, linterName := range i.linters {
- if linterName == issue.FromLinter {
- nolintFoundForLinter = true
- break
- }
- }
-
- if nolintFoundForLinter {
- return true
- }
-
- // handle possible unused nolint directives
- // nolintlint generates potential issues for every nolint directive, and they are filtered out here
- if issue.FromLinter == nolintlint.LinterName && issue.ExpectNoLint {
- if issue.ExpectedNoLintLinter != "" {
- return i.matchedIssueFromLinter[issue.ExpectedNoLintLinter]
- }
- return len(i.matchedIssueFromLinter) > 0
- }
-
- return false
-}
-
-type fileData struct {
- ignoredRanges []ignoredRange
-}
-
-type Nolint struct {
- fileCache map[string]*fileData
- dbManager *lintersdb.Manager
- enabledLinters map[string]*linter.Config
- log logutils.Log
-
- unknownLintersSet map[string]bool
-
- pattern *regexp.Regexp
-}
-
-func NewNolint(log logutils.Log, dbManager *lintersdb.Manager, enabledLinters map[string]*linter.Config) *Nolint {
- return &Nolint{
- fileCache: map[string]*fileData{},
- dbManager: dbManager,
- enabledLinters: enabledLinters,
- log: log,
- unknownLintersSet: map[string]bool{},
- pattern: regexp.MustCompile(`^nolint( |:|$)`),
- }
-}
-
-func (*Nolint) Name() string {
- return "nolint"
-}
-
-func (p *Nolint) Process(issues []result.Issue) ([]result.Issue, error) {
- // put nolintlint issues last because we process other issues first to determine which nolint directives are unused
- sort.Stable(sortWithNolintlintLast(issues))
- return filterIssuesErr(issues, p.shouldPassIssue)
-}
-
-func (p *Nolint) Finish() {
- if len(p.unknownLintersSet) == 0 {
- return
- }
-
- unknownLinters := maps.Keys(p.unknownLintersSet)
- sort.Strings(unknownLinters)
-
- p.log.Warnf("Found unknown linters in //nolint directives: %s", strings.Join(unknownLinters, ", "))
-}
-
-func (p *Nolint) shouldPassIssue(issue *result.Issue) (bool, error) {
- nolintDebugf("got issue: %v", *issue)
-
- // don't expect disabled linters to cover their nolint statements
- if issue.FromLinter == nolintlint.LinterName && issue.ExpectNoLint && issue.ExpectedNoLintLinter != "" {
- nolintDebugf("enabled linters: %v", p.enabledLinters)
-
- if p.enabledLinters[issue.ExpectedNoLintLinter] == nil {
- return false, nil
- }
-
- nolintDebugf("checking that lint issue was used for %s: %v", issue.ExpectedNoLintLinter, issue)
- }
-
- fd := p.getOrCreateFileData(issue)
-
- for _, ir := range fd.ignoredRanges {
- if !ir.doesMatch(issue) {
- continue
- }
-
- nolintDebugf("found ignored range for issue %v: %v", issue, ir)
-
- ir.matchedIssueFromLinter[issue.FromLinter] = true
-
- if ir.originalRange != nil {
- ir.originalRange.matchedIssueFromLinter[issue.FromLinter] = true
- }
-
- return false, nil
- }
-
- return true, nil
-}
-
-func (p *Nolint) getOrCreateFileData(issue *result.Issue) *fileData {
- fd := p.fileCache[issue.FilePath()]
- if fd != nil {
- return fd
- }
-
- fd = &fileData{}
- p.fileCache[issue.FilePath()] = fd
-
- // TODO: migrate this parsing to go/analysis facts
- // or cache them somehow per file.
-
- // Don't use cached AST because they consume a lot of memory on large projects.
- fset := token.NewFileSet()
- f, err := parser.ParseFile(fset, issue.FilePath(), nil, parser.ParseComments)
- if err != nil {
- // Don't report error because it's already must be reporter by typecheck or go/analysis.
- return fd
- }
-
- fd.ignoredRanges = p.buildIgnoredRangesForFile(f, fset, issue.FilePath())
-
- nolintDebugf("file %s: built nolint ranges are %+v", issue.FilePath(), fd.ignoredRanges)
-
- return fd
-}
-
-func (p *Nolint) buildIgnoredRangesForFile(f *ast.File, fset *token.FileSet, filePath string) []ignoredRange {
- inlineRanges := p.extractFileCommentsInlineRanges(fset, f.Comments...)
- nolintDebugf("file %s: inline nolint ranges are %+v", filePath, inlineRanges)
-
- if len(inlineRanges) == 0 {
- return nil
- }
-
- e := rangeExpander{
- fset: fset,
- inlineRanges: inlineRanges,
- }
-
- ast.Walk(&e, f)
-
- // TODO: merge all ranges: there are repeated ranges
- allRanges := append([]ignoredRange{}, inlineRanges...)
- allRanges = append(allRanges, e.expandedRanges...)
-
- return allRanges
-}
-
-func (p *Nolint) extractFileCommentsInlineRanges(fset *token.FileSet, comments ...*ast.CommentGroup) []ignoredRange {
- var ret []ignoredRange
- for _, g := range comments {
- for _, c := range g.List {
- ir := p.extractInlineRangeFromComment(c.Text, g, fset)
- if ir != nil {
- ret = append(ret, *ir)
- }
- }
- }
-
- return ret
-}
-
-func (p *Nolint) extractInlineRangeFromComment(text string, g ast.Node, fset *token.FileSet) *ignoredRange {
- text = strings.TrimLeft(text, "/ ")
- if !p.pattern.MatchString(text) {
- return nil
- }
-
- buildRange := func(linters []string) *ignoredRange {
- pos := fset.Position(g.Pos())
- return &ignoredRange{
- Range: result.Range{
- From: pos.Line,
- To: fset.Position(g.End()).Line,
- },
- col: pos.Column,
- linters: linters,
- matchedIssueFromLinter: make(map[string]bool),
- }
- }
-
- if strings.HasPrefix(text, "nolint:all") || !strings.HasPrefix(text, "nolint:") {
- return buildRange(nil) // ignore all linters
- }
-
- // ignore specific linters
- var linters []string
- text = strings.Split(text, "//")[0] // allow another comment after this comment
- linterItems := strings.Split(strings.TrimPrefix(text, "nolint:"), ",")
- for _, item := range linterItems {
- linterName := strings.ToLower(strings.TrimSpace(item))
- if linterName == "all" {
- p.unknownLintersSet = map[string]bool{}
- return buildRange(nil)
- }
-
- lcs := p.dbManager.GetLinterConfigs(linterName)
- if lcs == nil {
- p.unknownLintersSet[linterName] = true
- linters = append(linters, linterName)
- nolintDebugf("unknown linter %s on line %d", linterName, fset.Position(g.Pos()).Line)
- continue
- }
-
- for _, lc := range lcs {
- linters = append(linters, lc.Name()) // normalize name to work with aliases
- }
- }
-
- nolintDebugf("%d: linters are %s", fset.Position(g.Pos()).Line, linters)
- return buildRange(linters)
-}
-
-type rangeExpander struct {
- fset *token.FileSet
- inlineRanges []ignoredRange
- expandedRanges []ignoredRange
-}
-
-func (e *rangeExpander) Visit(node ast.Node) ast.Visitor {
- if node == nil {
- return e
- }
-
- nodeStartPos := e.fset.Position(node.Pos())
- nodeStartLine := nodeStartPos.Line
- nodeEndLine := e.fset.Position(node.End()).Line
-
- var foundRange *ignoredRange
- for _, r := range e.inlineRanges {
- if r.To == nodeStartLine-1 && nodeStartPos.Column == r.col {
- r := r
- foundRange = &r
- break
- }
- }
- if foundRange == nil {
- return e
- }
-
- expandedRange := *foundRange
- // store the original unexpanded range for matching nolintlint issues
- if expandedRange.originalRange == nil {
- expandedRange.originalRange = foundRange
- }
- if expandedRange.To < nodeEndLine {
- expandedRange.To = nodeEndLine
- }
-
- nolintDebugf("found range is %v for node %#v [%d;%d], expanded range is %v",
- *foundRange, node, nodeStartLine, nodeEndLine, expandedRange)
- e.expandedRanges = append(e.expandedRanges, expandedRange)
-
- return e
-}
-
-// put nolintlint last
-type sortWithNolintlintLast []result.Issue
-
-func (issues sortWithNolintlintLast) Len() int {
- return len(issues)
-}
-
-func (issues sortWithNolintlintLast) Less(i, j int) bool {
- return issues[i].FromLinter != nolintlint.LinterName && issues[j].FromLinter == nolintlint.LinterName
-}
-
-func (issues sortWithNolintlintLast) Swap(i, j int) {
- issues[j], issues[i] = issues[i], issues[j]
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/path_prefixer.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/path_prefixer.go
deleted file mode 100644
index 8036e3fd6..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/path_prefixer.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package processors
-
-import (
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*PathPrefixer)(nil)
-
-// PathPrefixer adds a customizable prefix to every output path
-type PathPrefixer struct {
- prefix string
-}
-
-// NewPathPrefixer returns a new path prefixer for the provided string
-func NewPathPrefixer(prefix string) *PathPrefixer {
- return &PathPrefixer{prefix: prefix}
-}
-
-// Name returns the name of this processor
-func (*PathPrefixer) Name() string {
- return "path_prefixer"
-}
-
-// Process adds the prefix to each path
-func (p *PathPrefixer) Process(issues []result.Issue) ([]result.Issue, error) {
- if p.prefix != "" {
- for i := range issues {
- issues[i].Pos.Filename = fsutils.WithPathPrefix(p.prefix, issues[i].Pos.Filename)
- }
- }
- return issues, nil
-}
-
-// Finish is implemented to satisfy the Processor interface
-func (*PathPrefixer) Finish() {}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/path_prettifier.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/path_prettifier.go
deleted file mode 100644
index c5c27357c..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/path_prettifier.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package processors
-
-import (
- "path/filepath"
-
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*PathPrettifier)(nil)
-
-type PathPrettifier struct {
-}
-
-func NewPathPrettifier() *PathPrettifier {
- return &PathPrettifier{}
-}
-
-func (PathPrettifier) Name() string {
- return "path_prettifier"
-}
-
-func (PathPrettifier) Process(issues []result.Issue) ([]result.Issue, error) {
- return transformIssues(issues, func(issue *result.Issue) *result.Issue {
- if !filepath.IsAbs(issue.FilePath()) {
- return issue
- }
-
- rel, err := fsutils.ShortestRelPath(issue.FilePath(), "")
- if err != nil {
- return issue
- }
-
- newIssue := issue
- newIssue.Pos.Filename = rel
- return newIssue
- }), nil
-}
-
-func (PathPrettifier) Finish() {}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/path_shortener.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/path_shortener.go
deleted file mode 100644
index b161e86c2..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/path_shortener.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package processors
-
-import (
- "fmt"
- "strings"
-
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*PathShortener)(nil)
-
-type PathShortener struct {
- wd string
-}
-
-func NewPathShortener() *PathShortener {
- wd, err := fsutils.Getwd()
- if err != nil {
- panic(fmt.Sprintf("Can't get working dir: %s", err))
- }
-
- return &PathShortener{wd: wd}
-}
-
-func (PathShortener) Name() string {
- return "path_shortener"
-}
-
-func (p PathShortener) Process(issues []result.Issue) ([]result.Issue, error) {
- return transformIssues(issues, func(issue *result.Issue) *result.Issue {
- newIssue := issue
- newIssue.Text = strings.ReplaceAll(newIssue.Text, p.wd+"/", "")
- newIssue.Text = strings.ReplaceAll(newIssue.Text, p.wd, "")
- return newIssue
- }), nil
-}
-
-func (PathShortener) Finish() {}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/processor.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/processor.go
deleted file mode 100644
index 13e63d604..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/processor.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package processors
-
-import (
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const typeCheckName = "typecheck"
-
-type Processor interface {
- Process(issues []result.Issue) ([]result.Issue, error)
- Name() string
- Finish()
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/severity.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/severity.go
deleted file mode 100644
index 93a26586d..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/severity.go
+++ /dev/null
@@ -1,116 +0,0 @@
-package processors
-
-import (
- "regexp"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const severityFromLinter = "@linter"
-
-var _ Processor = (*Severity)(nil)
-
-type severityRule struct {
- baseRule
- severity string
-}
-
-type Severity struct {
- name string
-
- log logutils.Log
-
- files *fsutils.Files
-
- defaultSeverity string
- rules []severityRule
-}
-
-func NewSeverity(log logutils.Log, files *fsutils.Files, cfg *config.Severity) *Severity {
- p := &Severity{
- name: "severity-rules",
- files: files,
- log: log,
- defaultSeverity: cfg.Default,
- }
-
- prefix := caseInsensitivePrefix
- if cfg.CaseSensitive {
- prefix = ""
- p.name = "severity-rules-case-sensitive"
- }
-
- p.rules = createSeverityRules(cfg.Rules, prefix)
-
- return p
-}
-
-func (p *Severity) Name() string { return p.name }
-
-func (p *Severity) Process(issues []result.Issue) ([]result.Issue, error) {
- if len(p.rules) == 0 && p.defaultSeverity == "" {
- return issues, nil
- }
-
- return transformIssues(issues, p.transform), nil
-}
-
-func (*Severity) Finish() {}
-
-func (p *Severity) transform(issue *result.Issue) *result.Issue {
- for _, rule := range p.rules {
- if rule.match(issue, p.files, p.log) {
- if rule.severity == severityFromLinter || (rule.severity == "" && p.defaultSeverity == severityFromLinter) {
- return issue
- }
-
- issue.Severity = rule.severity
- if issue.Severity == "" {
- issue.Severity = p.defaultSeverity
- }
-
- return issue
- }
- }
-
- if p.defaultSeverity != severityFromLinter {
- issue.Severity = p.defaultSeverity
- }
-
- return issue
-}
-
-func createSeverityRules(rules []config.SeverityRule, prefix string) []severityRule {
- parsedRules := make([]severityRule, 0, len(rules))
-
- for _, rule := range rules {
- parsedRule := severityRule{}
- parsedRule.linters = rule.Linters
- parsedRule.severity = rule.Severity
-
- if rule.Text != "" {
- parsedRule.text = regexp.MustCompile(prefix + rule.Text)
- }
-
- if rule.Source != "" {
- parsedRule.source = regexp.MustCompile(prefix + rule.Source)
- }
-
- if rule.Path != "" {
- path := fsutils.NormalizePathInRegex(rule.Path)
- parsedRule.path = regexp.MustCompile(path)
- }
-
- if rule.PathExcept != "" {
- pathExcept := fsutils.NormalizePathInRegex(rule.PathExcept)
- parsedRule.pathExcept = regexp.MustCompile(pathExcept)
- }
-
- parsedRules = append(parsedRules, parsedRule)
- }
-
- return parsedRules
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/skip_dirs.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/skip_dirs.go
deleted file mode 100644
index 39dbfd1d3..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/skip_dirs.go
+++ /dev/null
@@ -1,172 +0,0 @@
-package processors
-
-import (
- "fmt"
- "path/filepath"
- "regexp"
-
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*SkipDirs)(nil)
-
-var StdExcludeDirRegexps = []string{
- normalizePathRegex("vendor"),
- normalizePathRegex("third_party"),
- normalizePathRegex("testdata"),
- normalizePathRegex("examples"),
- normalizePathRegex("Godeps"),
- normalizePathRegex("builtin"),
-}
-
-type skipStat struct {
- pattern string
- count int
-}
-
-type SkipDirs struct {
- patterns []*regexp.Regexp
- log logutils.Log
- skippedDirs map[string]*skipStat
- absArgsDirs []string
- skippedDirsCache map[string]bool
- pathPrefix string
-}
-
-func NewSkipDirs(log logutils.Log, patterns, args []string, pathPrefix string) (*SkipDirs, error) {
- var patternsRe []*regexp.Regexp
- for _, p := range patterns {
- p = fsutils.NormalizePathInRegex(p)
- patternRe, err := regexp.Compile(p)
- if err != nil {
- return nil, fmt.Errorf("can't compile regexp %q: %w", p, err)
- }
- patternsRe = append(patternsRe, patternRe)
- }
-
- absArgsDirs, err := absDirs(args)
- if err != nil {
- return nil, err
- }
-
- return &SkipDirs{
- patterns: patternsRe,
- log: log,
- skippedDirs: map[string]*skipStat{},
- absArgsDirs: absArgsDirs,
- skippedDirsCache: map[string]bool{},
- pathPrefix: pathPrefix,
- }, nil
-}
-
-func (*SkipDirs) Name() string {
- return "skip_dirs"
-}
-
-func (p *SkipDirs) Process(issues []result.Issue) ([]result.Issue, error) {
- if len(p.patterns) == 0 {
- return issues, nil
- }
-
- return filterIssues(issues, p.shouldPassIssue), nil
-}
-
-func (p *SkipDirs) Finish() {
- for dir, stat := range p.skippedDirs {
- p.log.Infof("Skipped %d issues from dir %s by pattern %s", stat.count, dir, stat.pattern)
- }
-}
-
-func (p *SkipDirs) shouldPassIssue(issue *result.Issue) bool {
- if filepath.IsAbs(issue.FilePath()) {
- if isGoFile(issue.FilePath()) {
- p.log.Warnf("Got abs path %s in skip dirs processor, it should be relative", issue.FilePath())
- }
- return true
- }
-
- issueRelDir := filepath.Dir(issue.FilePath())
-
- if toPass, ok := p.skippedDirsCache[issueRelDir]; ok {
- if !toPass {
- p.skippedDirs[issueRelDir].count++
- }
- return toPass
- }
-
- issueAbsDir, err := filepath.Abs(issueRelDir)
- if err != nil {
- p.log.Warnf("Can't abs-ify path %q: %s", issueRelDir, err)
- return true
- }
-
- toPass := p.shouldPassIssueDirs(issueRelDir, issueAbsDir)
- p.skippedDirsCache[issueRelDir] = toPass
- return toPass
-}
-
-func (p *SkipDirs) shouldPassIssueDirs(issueRelDir, issueAbsDir string) bool {
- for _, absArgDir := range p.absArgsDirs {
- if absArgDir == issueAbsDir {
- // we must not skip issues if they are from explicitly set dirs
- // even if they match skip patterns
- return true
- }
- }
-
- // We use issueRelDir for matching: it's the relative to the current
- // work dir path of directory of source file with the issue. It can lead
- // to unexpected behavior if we're analyzing files out of current work dir.
- // The alternative solution is to find relative to args path, but it has
- // disadvantages (https://github.com/golangci/golangci-lint/pull/313).
-
- path := fsutils.WithPathPrefix(p.pathPrefix, issueRelDir)
- for _, pattern := range p.patterns {
- if pattern.MatchString(path) {
- ps := pattern.String()
- if p.skippedDirs[issueRelDir] == nil {
- p.skippedDirs[issueRelDir] = &skipStat{
- pattern: ps,
- }
- }
- p.skippedDirs[issueRelDir].count++
- return false
- }
- }
-
- return true
-}
-
-func absDirs(args []string) ([]string, error) {
- if len(args) == 0 {
- args = append(args, "./...")
- }
-
- var absArgsDirs []string
- for _, arg := range args {
- base := filepath.Base(arg)
- if base == "..." || isGoFile(base) {
- arg = filepath.Dir(arg)
- }
-
- absArg, err := filepath.Abs(arg)
- if err != nil {
- return nil, fmt.Errorf("failed to abs-ify arg %q: %w", arg, err)
- }
-
- absArgsDirs = append(absArgsDirs, absArg)
- }
-
- return absArgsDirs, nil
-}
-
-func normalizePathRegex(e string) string {
- return createPathRegex(e, filepath.Separator)
-}
-
-func createPathRegex(e string, sep rune) string {
- escapedSep := regexp.QuoteMeta(string(sep)) // needed for windows sep '\\'
- return fmt.Sprintf(`(^|%[1]s)%[2]s($|%[1]s)`, escapedSep, e)
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/skip_files.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/skip_files.go
deleted file mode 100644
index 3b17a9f32..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/skip_files.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package processors
-
-import (
- "fmt"
- "regexp"
-
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*SkipFiles)(nil)
-
-type SkipFiles struct {
- patterns []*regexp.Regexp
- pathPrefix string
-}
-
-func NewSkipFiles(patterns []string, pathPrefix string) (*SkipFiles, error) {
- var patternsRe []*regexp.Regexp
- for _, p := range patterns {
- p = fsutils.NormalizePathInRegex(p)
-
- patternRe, err := regexp.Compile(p)
- if err != nil {
- return nil, fmt.Errorf("can't compile regexp %q: %w", p, err)
- }
-
- patternsRe = append(patternsRe, patternRe)
- }
-
- return &SkipFiles{
- patterns: patternsRe,
- pathPrefix: pathPrefix,
- }, nil
-}
-
-func (SkipFiles) Name() string {
- return "skip_files"
-}
-
-func (p SkipFiles) Process(issues []result.Issue) ([]result.Issue, error) {
- if len(p.patterns) == 0 {
- return issues, nil
- }
-
- return filterIssues(issues, func(issue *result.Issue) bool {
- path := fsutils.WithPathPrefix(p.pathPrefix, issue.FilePath())
-
- for _, pattern := range p.patterns {
- if pattern.MatchString(path) {
- return false
- }
- }
-
- return true
- }), nil
-}
-
-func (SkipFiles) Finish() {}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/sort_results.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/sort_results.go
deleted file mode 100644
index 7eebea631..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/sort_results.go
+++ /dev/null
@@ -1,148 +0,0 @@
-package processors
-
-import (
- "cmp"
- "fmt"
- "slices"
- "strings"
-
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-// Base propose of this functionality to sort results (issues)
-// produced by various linters by analyzing code. We're achieving this
-// by sorting results.Issues using processor step, and chain based
-// rules that can compare different properties of the Issues struct.
-
-const (
- orderNameFile = "file"
- orderNameLinter = "linter"
- orderNameSeverity = "severity"
-)
-
-const (
- less = iota - 1
- equal
- greater
-)
-
-var _ Processor = (*SortResults)(nil)
-
-type issueComparator func(a, b *result.Issue) int
-
-type SortResults struct {
- cmps map[string][]issueComparator
-
- cfg *config.Output
-}
-
-func NewSortResults(cfg *config.Config) *SortResults {
- return &SortResults{
- cmps: map[string][]issueComparator{
- // For sorting we are comparing (in next order):
- // file names, line numbers, position, and finally - giving up.
- orderNameFile: {byFileName, byLine, byColumn},
- // For sorting we are comparing: linter name
- orderNameLinter: {byLinter},
- // For sorting we are comparing: severity
- orderNameSeverity: {bySeverity},
- },
- cfg: &cfg.Output,
- }
-}
-
-func (SortResults) Name() string { return "sort_results" }
-
-// Process is performing sorting of the result issues.
-func (p SortResults) Process(issues []result.Issue) ([]result.Issue, error) {
- if !p.cfg.SortResults {
- return issues, nil
- }
-
- if len(p.cfg.SortOrder) == 0 {
- p.cfg.SortOrder = []string{orderNameFile}
- }
-
- var cmps []issueComparator
-
- for _, name := range p.cfg.SortOrder {
- c, ok := p.cmps[name]
- if !ok {
- return nil, fmt.Errorf("unsupported sort-order name %q", name)
- }
-
- cmps = append(cmps, c...)
- }
-
- comp := mergeComparators(cmps...)
-
- slices.SortFunc(issues, func(a, b result.Issue) int {
- return comp(&a, &b)
- })
-
- return issues, nil
-}
-
-func (SortResults) Finish() {}
-
-func byFileName(a, b *result.Issue) int {
- return strings.Compare(a.FilePath(), b.FilePath())
-}
-
-func byLine(a, b *result.Issue) int {
- return numericCompare(a.Line(), b.Line())
-}
-
-func byColumn(a, b *result.Issue) int {
- return numericCompare(a.Column(), b.Column())
-}
-
-func byLinter(a, b *result.Issue) int {
- return strings.Compare(a.FromLinter, b.FromLinter)
-}
-
-func bySeverity(a, b *result.Issue) int {
- return severityCompare(a.Severity, b.Severity)
-}
-
-func severityCompare(a, b string) int {
- // The position inside the slice define the importance (lower to higher).
- classic := []string{"low", "medium", "high", "warning", "error"}
-
- if slices.Contains(classic, a) && slices.Contains(classic, b) {
- return cmp.Compare(slices.Index(classic, a), slices.Index(classic, b))
- }
-
- if slices.Contains(classic, a) {
- return greater
- }
-
- if slices.Contains(classic, b) {
- return less
- }
-
- return strings.Compare(a, b)
-}
-
-func numericCompare(a, b int) int {
- // Negative values and zeros are skipped (equal) because they either invalid or "neutral" (default int value).
- if a <= 0 || b <= 0 {
- return equal
- }
-
- return cmp.Compare(a, b)
-}
-
-func mergeComparators(comps ...issueComparator) issueComparator {
- return func(a, b *result.Issue) int {
- for _, comp := range comps {
- i := comp(a, b)
- if i != equal {
- return i
- }
- }
-
- return equal
- }
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/source_code.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/source_code.go
deleted file mode 100644
index 4a89fc73e..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/source_code.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package processors
-
-import (
- "github.com/golangci/golangci-lint/pkg/fsutils"
- "github.com/golangci/golangci-lint/pkg/logutils"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-var _ Processor = (*SourceCode)(nil)
-
-type SourceCode struct {
- lineCache *fsutils.LineCache
- log logutils.Log
-}
-
-func NewSourceCode(lc *fsutils.LineCache, log logutils.Log) *SourceCode {
- return &SourceCode{
- lineCache: lc,
- log: log,
- }
-}
-
-func (SourceCode) Name() string {
- return "source_code"
-}
-
-func (p SourceCode) Process(issues []result.Issue) ([]result.Issue, error) {
- return transformIssues(issues, p.transform), nil
-}
-
-func (SourceCode) Finish() {}
-
-func (p SourceCode) transform(issue *result.Issue) *result.Issue {
- newIssue := *issue
-
- lineRange := issue.GetLineRange()
- for lineNumber := lineRange.From; lineNumber <= lineRange.To; lineNumber++ {
- line, err := p.lineCache.GetLine(issue.FilePath(), lineNumber)
- if err != nil {
- p.log.Warnf("Failed to get line %d for file %s: %s",
- lineNumber, issue.FilePath(), err)
-
- return issue
- }
-
- newIssue.SourceLines = append(newIssue.SourceLines, line)
- }
-
- return &newIssue
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/uniq_by_line.go b/vendor/github.com/golangci/golangci-lint/pkg/result/processors/uniq_by_line.go
deleted file mode 100644
index 115196d9a..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/result/processors/uniq_by_line.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package processors
-
-import (
- "github.com/golangci/golangci-lint/pkg/config"
- "github.com/golangci/golangci-lint/pkg/result"
-)
-
-const uniqByLineLimit = 1
-
-var _ Processor = (*UniqByLine)(nil)
-
-type UniqByLine struct {
- fileLineCounter fileLineCounter
- cfg *config.Config
-}
-
-func NewUniqByLine(cfg *config.Config) *UniqByLine {
- return &UniqByLine{
- fileLineCounter: fileLineCounter{},
- cfg: cfg,
- }
-}
-
-func (*UniqByLine) Name() string {
- return "uniq_by_line"
-}
-
-func (p *UniqByLine) Process(issues []result.Issue) ([]result.Issue, error) {
- if !p.cfg.Output.UniqByLine {
- return issues, nil
- }
-
- return filterIssuesUnsafe(issues, p.shouldPassIssue), nil
-}
-
-func (*UniqByLine) Finish() {}
-
-func (p *UniqByLine) shouldPassIssue(issue *result.Issue) bool {
- if issue.Replacement != nil && p.cfg.Issues.NeedFix {
- // if issue will be auto-fixed we shouldn't collapse issues:
- // e.g. one line can contain 2 misspellings, they will be in 2 issues and misspell should fix both of them.
- return true
- }
-
- if p.fileLineCounter.GetCount(issue) == uniqByLineLimit {
- return false
- }
-
- p.fileLineCounter.Increment(issue)
-
- return true
-}
-
-type fileLineCounter map[string]map[int]int
-
-func (f fileLineCounter) GetCount(issue *result.Issue) int {
- return f.getCounter(issue)[issue.Line()]
-}
-
-func (f fileLineCounter) Increment(issue *result.Issue) {
- f.getCounter(issue)[issue.Line()]++
-}
-
-func (f fileLineCounter) getCounter(issue *result.Issue) map[int]int {
- lc := f[issue.FilePath()]
-
- if lc == nil {
- lc = map[int]int{}
- f[issue.FilePath()] = lc
- }
-
- return lc
-}
diff --git a/vendor/github.com/golangci/golangci-lint/pkg/timeutils/stopwatch.go b/vendor/github.com/golangci/golangci-lint/pkg/timeutils/stopwatch.go
deleted file mode 100644
index 95b16de9f..000000000
--- a/vendor/github.com/golangci/golangci-lint/pkg/timeutils/stopwatch.go
+++ /dev/null
@@ -1,138 +0,0 @@
-package timeutils
-
-import (
- "fmt"
- "sort"
- "strings"
- "sync"
- "time"
-
- "github.com/golangci/golangci-lint/pkg/logutils"
-)
-
-const noStagesText = "no stages"
-
-type Stopwatch struct {
- name string
- startedAt time.Time
- log logutils.Log
-
- stages map[string]time.Duration
- mu sync.Mutex
-}
-
-func NewStopwatch(name string, log logutils.Log) *Stopwatch {
- return &Stopwatch{
- name: name,
- startedAt: time.Now(),
- stages: map[string]time.Duration{},
- log: log,
- }
-}
-
-type stageDuration struct {
- name string
- d time.Duration
-}
-
-func (s *Stopwatch) stageDurationsSorted() []stageDuration {
- stageDurations := make([]stageDuration, 0, len(s.stages))
- for n, d := range s.stages {
- stageDurations = append(stageDurations, stageDuration{
- name: n,
- d: d,
- })
- }
- sort.Slice(stageDurations, func(i, j int) bool {
- return stageDurations[i].d > stageDurations[j].d
- })
- return stageDurations
-}
-
-func (s *Stopwatch) sprintStages() string {
- if len(s.stages) == 0 {
- return noStagesText
- }
-
- stageDurations := s.stageDurationsSorted()
-
- stagesStrings := make([]string, 0, len(stageDurations))
- for _, s := range stageDurations {
- stagesStrings = append(stagesStrings, fmt.Sprintf("%s: %s", s.name, s.d))
- }
-
- return fmt.Sprintf("stages: %s", strings.Join(stagesStrings, ", "))
-}
-
-func (s *Stopwatch) sprintTopStages(n int) string {
- if len(s.stages) == 0 {
- return noStagesText
- }
-
- stageDurations := s.stageDurationsSorted()
-
- var stagesStrings []string
- for i := 0; i < len(stageDurations) && i < n; i++ {
- s := stageDurations[i]
- stagesStrings = append(stagesStrings, fmt.Sprintf("%s: %s", s.name, s.d))
- }
-
- return fmt.Sprintf("top %d stages: %s", n, strings.Join(stagesStrings, ", "))
-}
-
-func (s *Stopwatch) Print() {
- p := fmt.Sprintf("%s took %s", s.name, time.Since(s.startedAt))
- if len(s.stages) == 0 {
- s.log.Infof("%s", p)
- return
- }
-
- s.log.Infof("%s with %s", p, s.sprintStages())
-}
-
-func (s *Stopwatch) PrintStages() {
- var stagesDuration time.Duration
- for _, s := range s.stages {
- stagesDuration += s
- }
- s.log.Infof("%s took %s with %s", s.name, stagesDuration, s.sprintStages())
-}
-
-func (s *Stopwatch) PrintTopStages(n int) {
- var stagesDuration time.Duration
- for _, s := range s.stages {
- stagesDuration += s
- }
- s.log.Infof("%s took %s with %s", s.name, stagesDuration, s.sprintTopStages(n))
-}
-
-func (s *Stopwatch) TrackStage(name string, f func()) {
- startedAt := time.Now()
- f()
-
- s.mu.Lock()
- s.stages[name] += time.Since(startedAt)
- s.mu.Unlock()
-}
-
-func (s *Stopwatch) TrackStageErr(name string, f func() error) error {
- startedAt := time.Now()
- err := f()
-
- s.mu.Lock()
- s.stages[name] += time.Since(startedAt)
- s.mu.Unlock()
-
- return err
-}
-
-func TrackStage[T any](s *Stopwatch, name string, f func() (T, error)) (T, error) {
- var result T
- var err error
-
- s.TrackStage(name, func() {
- result, err = f()
- })
-
- return result, err
-}
diff --git a/vendor/github.com/golangci/misspell/.gitignore b/vendor/github.com/golangci/misspell/.gitignore
deleted file mode 100644
index 5e5c368f8..000000000
--- a/vendor/github.com/golangci/misspell/.gitignore
+++ /dev/null
@@ -1,37 +0,0 @@
-dist/
-bin/
-vendor/
-
-.idea/
-/misspell
-
-# editor turds
-*~
-*.gz
-*.bz2
-*.csv
-
-# Compiled Object files, Static and Dynamic libs (Shared Objects)
-*.o
-*.a
-*.so
-
-# Folders
-_obj
-_test
-
-# Architecture specific extensions/prefixes
-*.[568vq]
-[568vq].out
-
-*.cgo1.go
-*.cgo2.c
-_cgo_defun.c
-_cgo_gotypes.go
-_cgo_export.*
-
-_testmain.go
-
-*.exe
-*.test
-*.prof
diff --git a/vendor/github.com/golangci/misspell/.golangci.yml b/vendor/github.com/golangci/misspell/.golangci.yml
deleted file mode 100644
index 2cfed442f..000000000
--- a/vendor/github.com/golangci/misspell/.golangci.yml
+++ /dev/null
@@ -1,107 +0,0 @@
-run:
- timeout: 2m
-
-linters-settings:
- govet:
- enable-all: true
- disable:
- - fieldalignment
- gocyclo:
- min-complexity: 16
- goconst:
- min-len: 3
- min-occurrences: 3
- misspell:
- locale: US
- funlen:
- lines: -1
- statements: 40
- gofumpt:
- extra-rules: true
- depguard:
- rules:
- main:
- deny:
- - pkg: "github.com/instana/testify"
- desc: not allowed
- - pkg: "github.com/pkg/errors"
- desc: Should be replaced by standard lib errors package
- godox:
- keywords:
- - FIXME
- gocritic:
- enabled-tags:
- - diagnostic
- - style
- - performance
- disabled-checks:
- - sloppyReassign
- - rangeValCopy
- - octalLiteral
- - paramTypeCombine # already handle by gofumpt.extra-rules
- - exitAfterDefer # FIXME(ldez) must be fixed
- - ifElseChain # FIXME(ldez) must be fixed
- settings:
- hugeParam:
- sizeThreshold: 100
- forbidigo:
- forbid:
- - '^print(ln)?$'
- - '^panic$'
- - '^spew\.Print(f|ln)?$'
- - '^spew\.Dump$'
-
-linters:
- enable-all: true
- disable:
- - deadcode # deprecated
- - exhaustivestruct # deprecated
- - golint # deprecated
- - ifshort # deprecated
- - interfacer # deprecated
- - maligned # deprecated
- - nosnakecase # deprecated
- - scopelint # deprecated
- - scopelint # deprecated
- - structcheck # deprecated
- - varcheck # deprecated
- - execinquery # not relevant (SQL)
- - rowserrcheck # not relevant (SQL)
- - sqlclosecheck # not relevant (SQL)
- - cyclop # duplicate of gocyclo
- - dupl
- - exhaustive
- - exhaustruct
- - forbidigo
- - gochecknoglobals
- - gochecknoinits
- - goerr113
- - gomnd
- - lll
- - nilnil
- - nlreturn
- - paralleltest
- - prealloc
- - testpackage
- - tparallel
- - varnamelen
- - wrapcheck
- - wsl
- - misspell
- - gosec # FIXME(ldez) must be fixed
- - errcheck # FIXME(ldez) must be fixed
- - nonamedreturns # FIXME(ldez) must be fixed
- - nakedret # FIXME(ldez) must be fixed
-
-issues:
- exclude-use-default: false
- max-issues-per-linter: 0
- max-same-issues: 0
- exclude:
- - 'ST1000: at least one file in a package should have a package comment'
- - 'package-comments: should have a package comment'
- exclude-rules:
- - path: .*_test.go
- linters:
- - funlen
- - goconst
diff --git a/vendor/github.com/golangci/misspell/.pre-commit-hooks.yaml b/vendor/github.com/golangci/misspell/.pre-commit-hooks.yaml
deleted file mode 100644
index 5319a75eb..000000000
--- a/vendor/github.com/golangci/misspell/.pre-commit-hooks.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-- id: misspell
- name: misspell
- description: Correct commonly misspelled English words... quickly
- language: golang
- entry: misspell
- args:
- - -w
- - -error
diff --git a/vendor/github.com/golangci/misspell/Dockerfile b/vendor/github.com/golangci/misspell/Dockerfile
deleted file mode 100644
index c85cd6875..000000000
--- a/vendor/github.com/golangci/misspell/Dockerfile
+++ /dev/null
@@ -1,35 +0,0 @@
-FROM golang:1.22-alpine
-
-# cache buster
-RUN echo 4
-
-# git is needed for "go get" below
-RUN apk add --no-cache git make
-
-# these are my standard testing / linting tools
-RUN /bin/true \
- && rm -rf /go/src /go/pkg
-#
-# * SCOWL word list
-#
-# Downloads
-# http://wordlist.aspell.net/dicts/
-# --> http://app.aspell.net/create
-#
-
-# use en_US large size
-# use regular size for others
-ENV SOURCE_US_BIG http://app.aspell.net/create?max_size=70&spelling=US&max_variant=2&diacritic=both&special=hacker&special=roman-numerals&download=wordlist&encoding=utf-8&format=inline
-
-# should be able tell difference between English variations using this
-ENV SOURCE_US http://app.aspell.net/create?max_size=60&spelling=US&max_variant=1&diacritic=both&download=wordlist&encoding=utf-8&format=inline
-ENV SOURCE_GB_ISE http://app.aspell.net/create?max_size=60&spelling=GBs&max_variant=2&diacritic=both&download=wordlist&encoding=utf-8&format=inline
-ENV SOURCE_GB_IZE http://app.aspell.net/create?max_size=60&spelling=GBz&max_variant=2&diacritic=both&download=wordlist&encoding=utf-8&format=inline
-ENV SOURCE_CA http://app.aspell.net/create?max_size=60&spelling=CA&max_variant=2&diacritic=both&download=wordlist&encoding=utf-8&format=inline
-
-RUN /bin/true \
- && mkdir /scowl-wl \
- && wget -O /scowl-wl/words-US-60.txt ${SOURCE_US} \
- && wget -O /scowl-wl/words-GB-ise-60.txt ${SOURCE_GB_ISE}
-
-RUN git config --global --add safe.directory "/go/src/github.com/golangci/misspell"
diff --git a/vendor/github.com/golangci/misspell/LICENSE b/vendor/github.com/golangci/misspell/LICENSE
deleted file mode 100644
index bfcfcd301..000000000
--- a/vendor/github.com/golangci/misspell/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015-2017 Nick Galbreath
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/github.com/golangci/misspell/Makefile b/vendor/github.com/golangci/misspell/Makefile
deleted file mode 100644
index fcda870ce..000000000
--- a/vendor/github.com/golangci/misspell/Makefile
+++ /dev/null
@@ -1,66 +0,0 @@
-CONTAINER=golangci/misspell
-
-default: lint test build
-
-install: ## install misspell into GOPATH/bin
- go install ./cmd/misspell
-
-build: ## build misspell
- go build ./cmd/misspell
-
-test: ## run all tests
- CGO_ENABLED=1 go test -v -race .
-
-lint: ## run linter
- golangci-lint run
-
-# the grep in line 2 is to remove misspellings in the spelling dictionary
-# that trigger false positives!!
-falsepositives: /scowl-wl
- cat /scowl-wl/words-US-60.txt | \
- grep -i -v -E "payed|Tyre|Euclidian|nonoccurence|dependancy|reenforced|accidently|surprize|dependance|idealogy|binominal|causalities|conquerer|withing|casette|analyse|analogue|dialogue|paralyse|catalogue|archaeolog|clarinettist|catalyses|cancell|chisell|ageing|cataloguing" | \
- misspell -debug -error
- cat /scowl-wl/words-GB-ise-60.txt | \
- grep -v -E "payed|nonoccurence|withing" | \
- misspell -locale=UK -debug -error
-# cat /scowl-wl/words-GB-ize-60.txt | \
-# grep -v -E "withing" | \
-# misspell -debug -error
-# cat /scowl-wl/words-CA-60.txt | \
-# grep -v -E "withing" | \
-# misspell -debug -error
-
-bench: ## run benchmarks
- go test -bench '.*'
-
-clean: ## clean up time
- rm -rf dist/ bin/
- go clean ./...
- git gc --aggressive
-
-ci: docker-build ## run test like travis-ci does, requires docker
- docker run --rm \
- -v $(PWD):/go/src/github.com/golangci/misspell \
- -w /go/src/github.com/golangci/misspell \
- ${CONTAINER} \
- make install falsepositives
-
-docker-build: ## build a docker test image
- docker build -t ${CONTAINER} .
-
-docker-console: ## log into the test image
- docker run --rm -it \
- -v $(PWD):/go/src/github.com/golangci/misspell \
- -w /go/src/github.com/golangci/misspell \
- ${CONTAINER} sh
-
-.PHONY: help ci console docker-build bench
-
-# https://www.client9.com/self-documenting-makefiles/
-help:
- @awk -F ':|##' '/^[^\t].+?:.*?##/ {\
- printf "\033[36m%-30s\033[0m %s\n", $$1, $$NF \
- }' $(MAKEFILE_LIST)
-.DEFAULT_GOAL=default
-.PHONY=help
-
diff --git a/vendor/github.com/golangci/misspell/README.md b/vendor/github.com/golangci/misspell/README.md
deleted file mode 100644
index d2c3e7527..000000000
--- a/vendor/github.com/golangci/misspell/README.md
+++ /dev/null
@@ -1,401 +0,0 @@
-[![Main](https://github.com/golangci/misspell/actions/workflows/ci.yml/badge.svg)](https://github.com/golangci/misspell/actions/workflows/ci.yml)
-[![Go Report Card](https://goreportcard.com/badge/github.com/golangci/misspell)](https://goreportcard.com/report/github.com/golangci/misspell)
-[![Go Reference](https://pkg.go.dev/badge/github.com/golangci/misspell.svg)](https://pkg.go.dev/github.com/golangci/misspell)
-[![license](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://raw.golangci.com/golangci/misspell/master/LICENSE)
-
-Correct commonly misspelled English words... quickly.
-
-### Install
-
-If you just want a binary and to start using `misspell`:
-
-```bash
-curl -sfL https://raw.githubusercontent.com/golangci/misspell/master/install-misspell.sh | sh -s -- -b ./bin ${MISSPELL_VERSION}
-```
-
-Both will install as `./bin/misspell`.
-You can adjust the download location using the `-b` flag.
-File a ticket if you want another platform supported.
-
-If you use [Go](https://golang.org/), the best way to run `misspell` is by using [golangci-lint](https://github.com/golangci/golangci-lint).
-Otherwise, install `misspell` the old-fashioned way:
-
-```bash
-go install github.com/golangci/misspell/cmd/misspell@latest
-```
-
-Also, if you like to live dangerously, one could do
-
-```bash
-curl -sfL https://raw.githubusercontent.com/golangci/misspell/master/install-misspell.sh | sh -s -- -b $(go env GOPATH)/bin ${MISSPELL_VERSION}
-```
-
-### Usage
-
-```bash
-$ misspell all.html your.txt important.md files.go
-your.txt:42:10 found "langauge" a misspelling of "language"
-
-# ^ file, line, column
-```
-
-```console
-$ misspell -help
-Usage of misspell:
- -debug
- Debug matching, very slow
- -dict string
- User defined corrections file path (.csv). CSV format: typo,fix
- -error
- Exit with 2 if misspelling found
- -f string
- 'csv', 'sqlite3' or custom Golang template for output
- -i string
- ignore the following corrections, comma-separated
- -j int
- Number of workers, 0 = number of CPUs
- -legal
- Show legal information and exit
- -locale string
- Correct spellings using locale preferences for US or UK. Default is to use a neutral variety of English. Setting locale to US will correct the British spelling of 'colour' to 'color'
- -o string
- output file or [stderr|stdout|] (default "stdout")
- -q Do not emit misspelling output
- -source string
- Source mode: text (default), go (comments only) (default "text")
- -v Show version and exit
- -w Overwrite file with corrections (default is just to display)
-```
-
-### Pre-commit hook
-
-To use misspell with [pre-commit](https://pre-commit.com/), add the following to your `.pre-commit-config.yaml`:
-
-
-```yaml
-- repo: https://github.com/golangci/misspell
- rev: v0.6.0
- hooks:
- - id: misspell
- # The hook will run on all files by default.
- # To limit to some files only, use pre-commit patterns/types
- # files: <pattern>
- # exclude: <pattern>
- # types: <types>
-```
-
-## FAQ
-
-* [Automatic Corrections](#correct)
-* [Converting UK spellings to US](#locale)
-* [Using pipes and stdin](#stdin)
-* [Golang special support](#golang)
-* [CSV Output](#csv)
-* [Using SQLite3](#sqlite)
-* [Changing output format](#output)
-* [Checking a folder recursively](#recursive)
-* [Performance](#performance)
-* [Known Issues](#issues)
-* [Debugging](#debug)
-* [False Negatives and missing words](#missing)
-* [Origin of Word Lists](#words)
-* [Software License](#license)
-* [Problem statement](#problem)
-* [Other spelling correctors](#others)
-* [Other ideas](#otherideas)
-
-<a name="correct"></a>
-### How can I make the corrections automatically?
-
-Just add the `-w` flag!
-
-```console
-$ misspell -w all.html your.txt important.md files.go
-your.txt:9:21:corrected "langauge" to "language"
-
-# ^ File is rewritten only if a misspelling is found
-```
-
-<a name="locale"></a>
-### How do I convert British spellings to American (or vice-versa)?
-
-Add the `-locale US` flag!
-
-```console
-$ misspell -locale US important.txt
-important.txt:10:20 found "colour" a misspelling of "color"
-```
-
-Add the `-locale UK` flag!
-
-```console
-$ echo "My favorite color is blue" | misspell -locale UK
-stdin:1:3:found "favorite color" a misspelling of "favourite colour"
-```
-
-Help is appreciated as I'm neither British nor an expert in the English language.
-
-<a name="recursive"></a>
-### How do you check an entire folder recursively?
-
-Just list a directory you'd like to check
-
-```bash
-misspell .
-misspell aDirectory anotherDirectory aFile
-```
-
-You can also run misspell recursively using the following shell tricks:
-
-```bash
-misspell directory/**/*
-```
-
-or
-
-```bash
-find . -type f | xargs misspell
-```
-
-You can select a type of file as well.
-The following examples selects all `.txt` files that are *not* in the `vendor` directory:
-
-```bash
-find . -type f -name '*.txt' | grep -v vendor/ | xargs misspell -error
-```
-
-<a name="stdin"></a>
-### Can I use pipes or `stdin` for input?
-
-Yes!
-
-Print messages to `stderr` only:
-
-```console
-$ echo "zeebra" | misspell
-stdin:1:0:found "zeebra" a misspelling of "zebra"
-```
-
-Print messages to `stderr`, and corrected text to `stdout`:
-
-```console
-$ echo "zeebra" | misspell -w
-stdin:1:0:corrected "zeebra" to "zebra"
-zebra
-```
-
-Only print the corrected text to `stdout`:
-
-```console
-$ echo "zeebra" | misspell -w -q
-zebra
-```
-
-<a name="golang"></a>
-### Are there special rules for golang source files?
-
-yes, if you want to force a file to be checked as a golang source, use `-source=go` on the command line.
-Conversely, you can check a golang source as if it were pure text by using `-source=text`.
-You might want to do this since many variable names have misspellings in them!
-
-### Can I check only-comments in other programming languages?
-
-I'm told the using `-source=go` works well for Ruby, Javascript, Java, C and C++.
-
-It doesn't work well for Python and Bash.
-
-<a name="csv"></a>
-### How Can I Get CSV Output?
-
-Using `-f csv`, the output is standard comma-seprated values with headers in the first row.
-
-```console
-$ misspell -f csv *
-file,line,column,typo,corrected
-"README.md",9,22,langauge,language
-"README.md",47,25,langauge,language
-```
-
-<a name="sqlite"></a>
-### How can I export to SQLite3?
-
-Using `-f sqlite`, the output is a [sqlite3](https://www.sqlite.org/index.html) dump-file.
-
-```console
-$ misspell -f sqlite * > /tmp/misspell.sql
-$ cat /tmp/misspell.sql
-
-PRAGMA foreign_keys=OFF;
-BEGIN TRANSACTION;
-CREATE TABLE misspell(
- "file" TEXT,
- "line" INTEGER,i
- "column" INTEGER,i
- "typo" TEXT,
- "corrected" TEXT
-);
-INSERT INTO misspell VALUES("install.txt",202,31,"immediatly","immediately");
-# etc...
-COMMIT;
-```
-
-```console
-$ sqlite3 -init /tmp/misspell.sql :memory: 'select count(*) from misspell'
-1
-```
-
-With some tricks you can directly pipe output to sqlite3 by using `-init /dev/stdin`:
-
-```
-misspell -f sqlite * | sqlite3 -init /dev/stdin -column -cmd '.width 60 15' ':memory' \
- 'select substr(file,35),typo,count(*) as count from misspell group by file, typo order by count desc;'
-```
-
-<a name="ignore"></a>
-### How can I ignore rules?
-
-Using the `-i "comma,separated,rules"` flag you can specify corrections to ignore.
-
-For example, if you were to run `misspell -w -error -source=text` against document that contains the string `Guy Finkelshteyn Braswell`,
-misspell would change the text to `Guy Finkelstheyn Bras well`.
-You can then determine the rules to ignore by reverting the change and running the with the `-debug` flag.
-You can then see that the corrections were `htey -> they` and `aswell -> as well`.
-To ignore these two rules, you add `-i "htey,aswell"` to your command.
-With debug mode on, you can see it print the corrections, but it will no longer make them.
-
-<a name="output"></a>
-### How can I change the output format?
-
-Using the `-f template` flag you can pass in a [golang text template](https://golang.org/pkg/text/template/) to format the output.
-
-One can use `printf "%q" VALUE` to safely quote a value.
-
-The default template:
-
-```
-{{ .Filename }}:{{ .Line }}:{{ .Column }}:corrected {{ printf "%q" .Original }} to "{{ printf "%q" .Corrected }}"
-```
-
-To just print probable misspellings:
-
-```
--f '{{ .Original }}'
-```
-
-<a name="problem"></a>
-### What problem does this solve?
-
-This corrects commonly misspelled English words in computer source code, and other text-based formats (`.txt`, `.md`, etc.).
-
-It is designed to run quickly,
-so it can be used as a [pre-commit hook](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) with minimal burden on the developer.
-
-It does not work with binary formats (e.g. Word, etc.).
-
-It is not a complete spell-checking program nor a grammar checker.
-
-<a name="others"></a>
-### What are other misspelling correctors and what's wrong with them?
-
-Some other misspelling correctors:
-
-* https://github.com/vlajos/misspell_fixer
-* https://github.com/lyda/misspell-check
-* https://github.com/lucasdemarchi/codespell
-
-They all work but had problems that prevented me from using them at scale:
-
-* slow, all of the above check one misspelling at a time (i.e. linear) using regexps
-* not MIT/Apache2 licensed (or equivalent)
-* have dependencies that don't work for me (python3, bash, linux sed, etc.)
-* don't understand American vs. British English and sometimes makes unwelcome "corrections"
-
-That said, they might be perfect for you and many have more features than this project!
-
-<a name="performance"></a>
-### How fast is it?
-
-Misspell is easily 100x to 1000x faster than other spelling correctors.
-You should be able to check and correct 1000 files in under 250ms.
-
-This uses the mighty power of golang's [strings.Replacer](https://golang.org/pkg/strings/#Replacer)
-which is an implementation or variation of the [Aho–Corasick algorithm](https://en.wikipedia.org/wiki/Aho–Corasick_algorithm).
-This makes multiple substring matches *simultaneously*.
-
-It also uses multiple CPU cores to work on multiple files concurrently.
-
-<a name="issues"></a>
-### What problems does it have?
-
-Unlike the other projects, this doesn't know what a "word" is.
-There may be more false positives and false negatives due to this.
-On the other hand, it sometimes catches things others don't.
-
-Either way, please file bugs and we'll fix them!
-
-Since it operates in parallel to make corrections,
-it can be non-obvious to determine exactly what word was corrected.
-
-<a name="debug"></a>
-### It's making mistakes. How can I debug?
-
-Run using `-debug` flag on the file you want.
-It should then print what word it is trying to correct.
-Then [file a bug](https://github.com/golangci/misspell/issues) describing the problem.
-Thanks!
-
-<a name="missing"></a>
-### Why is it making mistakes or missing items in golang files?
-
-The matching function is *case-sensitive*,
-so variable names that are multiple worlds either in all-uppercase or all-lowercase case sometimes can cause false positives.
-For instance a variable named `bodyreader` could trigger a false positive since `yrea` is in the middle that could be corrected to `year`.
-Other problems happen if the variable name uses an English contraction that should use an apostrophe.
-The best way of fixing this is to use the [Effective Go naming conventions](https://golang.org/doc/effective_go.html#mixed-caps)
-and use [camelCase](https://en.wikipedia.org/wiki/CamelCase) for variable names.
-You can check your code using [golint](https://github.com/golang/lint)
-
-<a name="license"></a>
-### What license is this?
-
-The main code is [MIT](https://github.com/golangci/misspell/blob/master/LICENSE).
-
-Misspell also makes uses of the Golang standard library and contains a modified version of Golang's [strings.Replacer](https://golang.org/pkg/strings/#Replacer)
-which is covered under a [BSD License](https://github.com/golang/go/blob/master/LICENSE).
-Type `misspell -legal` for more details or see [legal.go](https://github.com/golangci/misspell/blob/master/legal.go)
-
-<a name="words"></a>
-### Where do the word lists come from?
-
-It started with a word list from
-[Wikipedia](https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/For_machines).
-Unfortunately, this list had to be highly edited as many of the words are obsolete or based on mistakes on mechanical typewriters (I'm guessing).
-
-Additional words were added based on actually mistakes seen in the wild (meaning self-generated).
-
-Variations of UK and US spellings are based on many sources including:
-
-* http://www.tysto.com/uk-us-spelling-list.html (with heavy editing, many are incorrect)
-* http://www.oxforddictionaries.com/us/words/american-and-british-spelling-american (excellent site but incomplete)
-* Diffing US and UK [scowl dictionaries](http://wordlist.aspell.net)
-
-American English is more accepting of spelling variations than is British English,
-so "what is American or not" is subject to opinion.
-Corrections and help welcome.
-
-<a name="otherideas"></a>
-### What are some other enhancements that could be done?
-
-Here are some ideas for enhancements:
-
-*Capitalization of proper nouns* could be done (e.g. weekday and month names, country names, language names)
-
-*Opinionated US spellings* US English has a number of words with alternate spellings.
-Think [adviser vs. advisor](http://grammarist.com/spelling/adviser-advisor/).
-While "advisor" is not wrong, the opinionated US locale would correct "advisor" to "adviser".
-
-*Versioning* Some type of versioning is needed so reporting mistakes and errors is easier.
-
-*Feedback* Mistakes would be sent to some server for aggregation and feedback review.
-
-*Contractions and Apostrophes* This would optionally correct "isnt" to "isn't", etc.
diff --git a/vendor/github.com/golangci/misspell/RELEASE-HOWTO.md b/vendor/github.com/golangci/misspell/RELEASE-HOWTO.md
deleted file mode 100644
index 55b52d962..000000000
--- a/vendor/github.com/golangci/misspell/RELEASE-HOWTO.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# Release HOWTO
-
-since I forget.
-
-
-1. Review existing tags and pick new release number
-
- ```sh
- git tag
- ```
-
-2. Tag locally
-
- ```sh
- git tag -a v0.1.0 -m "First release"
- ```
-
- If things get screwed up, delete the tag with
-
- ```sh
- git tag -d v0.1.0
- ```
-
-3. Test goreleaser
-
- TODO: how to install goreleaser
-
- ```sh
- ./scripts/goreleaser-dryrun.sh
- ```
-
-4. Push
-
- ```bash
- git push origin v0.1.0
- ```
-
-5. Verify release and edit notes. See https://github.com/client9/misspell/releases
diff --git a/vendor/github.com/golangci/misspell/ascii.go b/vendor/github.com/golangci/misspell/ascii.go
deleted file mode 100644
index d60af5a8d..000000000
--- a/vendor/github.com/golangci/misspell/ascii.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package misspell
-
-// ByteToUpper converts an ascii byte to upper cases.
-// Uses a branch-less algorithm.
-func ByteToUpper(x byte) byte {
- b := byte(0x80) | x
- c := b - byte(0x61)
- d := ^(b - byte(0x7b))
- e := (c & d) & (^x & 0x7f)
- return x - (e >> 2)
-}
-
-// ByteToLower converts an ascii byte to lower case.
-// Uses a branch-less algorithm.
-func ByteToLower(eax byte) byte {
- ebx := eax&byte(0x7f) + byte(0x25)
- ebx = ebx&byte(0x7f) + byte(0x1a)
- ebx = ((ebx & ^eax) >> 2) & byte(0x20)
- return eax + ebx
-}
-
-// ByteEqualFold does ascii compare, case insensitive.
-func ByteEqualFold(a, b byte) bool {
- return a == b || ByteToLower(a) == ByteToLower(b)
-}
-
-// StringEqualFold ASCII case-insensitive comparison
-// golang toUpper/toLower for both bytes and strings
-// appears to be Unicode based which is super slow
-// based from https://codereview.appspot.com/5180044/patch/14007/21002.
-func StringEqualFold(s1, s2 string) bool {
- if len(s1) != len(s2) {
- return false
- }
- for i := 0; i < len(s1); i++ {
- c1 := s1[i]
- c2 := s2[i]
- // c1 & c2
- if c1 != c2 {
- c1 |= 'a' - 'A'
- c2 |= 'a' - 'A'
- if c1 != c2 || c1 < 'a' || c1 > 'z' {
- return false
- }
- }
- }
- return true
-}
-
-// StringHasPrefixFold is similar to strings.HasPrefix but comparison is done ignoring ASCII case.
-func StringHasPrefixFold(s1, s2 string) bool {
- // prefix is bigger than input --> false
- if len(s1) < len(s2) {
- return false
- }
- if len(s1) == len(s2) {
- return StringEqualFold(s1, s2)
- }
- return StringEqualFold(s1[:len(s2)], s2)
-}
diff --git a/vendor/github.com/golangci/misspell/case.go b/vendor/github.com/golangci/misspell/case.go
deleted file mode 100644
index 0b580bedb..000000000
--- a/vendor/github.com/golangci/misspell/case.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package misspell
-
-import (
- "strings"
-)
-
-// WordCase is an enum of various word casing styles.
-type WordCase int
-
-// Various WordCase types... likely to be not correct.
-const (
- CaseUnknown WordCase = iota
- CaseLower
- CaseUpper
- CaseTitle
-)
-
-// CaseStyle returns what case style a word is in.
-func CaseStyle(word string) WordCase {
- upperCount := 0
- lowerCount := 0
-
- // this iterates over RUNES not BYTES
- for i := 0; i < len(word); i++ {
- ch := word[i]
- switch {
- case ch >= 'a' && ch <= 'z':
- lowerCount++
- case ch >= 'A' && ch <= 'Z':
- upperCount++
- }
- }
-
- switch {
- case upperCount != 0 && lowerCount == 0:
- return CaseUpper
- case upperCount == 0 && lowerCount != 0:
- return CaseLower
- case upperCount == 1 && lowerCount > 0 && word[0] >= 'A' && word[0] <= 'Z':
- return CaseTitle
- }
- return CaseUnknown
-}
-
-// CaseVariations returns:
-// If AllUpper or First-Letter-Only is upper-cased: add the all upper case version.
-// If AllLower, add the original, the title and upper-case forms.
-// If Mixed, return the original, and the all upper-case form.
-func CaseVariations(word string, style WordCase) []string {
- switch style {
- case CaseLower:
- return []string{word, strings.ToUpper(word[0:1]) + word[1:], strings.ToUpper(word)}
- case CaseUpper:
- return []string{strings.ToUpper(word)}
- default:
- return []string{word, strings.ToUpper(word)}
- }
-}
diff --git a/vendor/github.com/golangci/misspell/goreleaser.yml b/vendor/github.com/golangci/misspell/goreleaser.yml
deleted file mode 100644
index 2d2be1a75..000000000
--- a/vendor/github.com/golangci/misspell/goreleaser.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-project_name: misspell
-
-builds:
- - main: cmd/misspell/main.go
- binary: misspell
- ldflags: -s -w -X main.version={{.Version}}
- goos:
- - darwin
- - linux
- - windows
- goarch:
- - amd64
- - arm64
- env:
- - CGO_ENABLED=0
-
-archives:
- - format: tar.gz
- wrap_in_directory: true
- format_overrides:
- - goos: windows
- format: zip
- name_template: '{{ .Binary }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}'
- files:
- - LICENSE
-
-checksum:
- name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt"
-
-snapshot:
- name_template: "SNAPSHOT-{{.Commit}}"
diff --git a/vendor/github.com/golangci/misspell/install-misspell.sh b/vendor/github.com/golangci/misspell/install-misspell.sh
deleted file mode 100644
index d6023e117..000000000
--- a/vendor/github.com/golangci/misspell/install-misspell.sh
+++ /dev/null
@@ -1,377 +0,0 @@
-#!/bin/sh
-set -e
-
-usage() {
- this=$1
- cat <<EOF
-$this: download go binaries for golangci/misspell
-
-Usage: $this [-b <bindir>] [-d] [<tag>]
- -b sets bindir or installation directory, Defaults to ./bin
- -d turns on debug logging
- <tag> is a tag from
- https://github.com/golangci/misspell/releases
- If tag is missing, then the latest will be used.
-
-EOF
- exit 2
-}
-
-parse_args() {
- # BINDIR is ./bin unless set be ENV
- # overridden by flag below
-
- BINDIR=${BINDIR:-./bin}
- while getopts "b:dh?x" arg; do
- case "$arg" in
- b) BINDIR="$OPTARG" ;;
- d) log_set_priority 10 ;;
- h | \?) usage "$0" ;;
- x) set -x ;;
- esac
- done
- shift $((OPTIND - 1))
- TAG=$1
-}
-# this function wraps all the destructive operations
-# if a curl|bash cuts off the end of the script due to
-# network, either nothing will happen or will syntax error
-# out preventing half-done work
-execute() {
- tmpdir=$(mktemp -d)
- log_debug "downloading files into ${tmpdir}"
- http_download "${tmpdir}/${TARBALL}" "${TARBALL_URL}"
- http_download "${tmpdir}/${CHECKSUM}" "${CHECKSUM_URL}"
- hash_sha256_verify "${tmpdir}/${TARBALL}" "${tmpdir}/${CHECKSUM}"
- srcdir="${tmpdir}/${NAME}"
- rm -rf "${srcdir}"
- (cd "${tmpdir}" && untar "${TARBALL}")
- test ! -d "${BINDIR}" && install -d "${BINDIR}"
- for binexe in $BINARIES; do
- if [ "$OS" = "windows" ]; then
- binexe="${binexe}.exe"
- fi
- install "${srcdir}/${binexe}" "${BINDIR}/"
- log_info "installed ${BINDIR}/${binexe}"
- done
- rm -rf "${tmpdir}"
-}
-get_binaries() {
- case "$PLATFORM" in
- darwin/amd64) BINARIES="misspell" ;;
- darwin/arm64) BINARIES="misspell" ;;
- linux/amd64) BINARIES="misspell" ;;
- linux/arm64) BINARIES="misspell" ;;
- windows/amd64) BINARIES="misspell" ;;
- windows/arm64) BINARIES="misspell" ;;
- *)
- log_crit "platform $PLATFORM is not supported. Make sure this script is up-to-date and file request at https://github.com/${PREFIX}/issues/new"
- exit 1
- ;;
- esac
-}
-tag_to_version() {
- if [ -z "${TAG}" ]; then
- log_info "checking GitHub for latest tag"
- else
- log_info "checking GitHub for tag '${TAG}'"
- fi
- REALTAG=$(github_release "$OWNER/$REPO" "${TAG}") && true
- if test -z "$REALTAG"; then
- log_crit "unable to find '${TAG}' - use 'latest' or see https://github.com/${PREFIX}/releases for details"
- exit 1
- fi
- # if version starts with 'v', remove it
- TAG="$REALTAG"
- VERSION=${TAG#v}
-}
-adjust_format() {
- # change format (tar.gz or zip) based on OS
- case ${OS} in
- windows) FORMAT=zip ;;
- esac
- true
-}
-adjust_os() {
- # adjust archive name based on OS
- true
-}
-adjust_arch() {
- # adjust archive name based on ARCH
- true
-}
-
-cat /dev/null <<EOF
-------------------------------------------------------------------------
-https://github.com/client9/shlib - portable posix shell functions
-Public domain - http://unlicense.org
-https://github.com/client9/shlib/blob/master/LICENSE.md
-but credit (and pull requests) appreciated.
-------------------------------------------------------------------------
-EOF
-is_command() {
- command -v "$1" >/dev/null
-}
-echoerr() {
- echo "$@" 1>&2
-}
-_logp=6
-log_set_priority() {
- _logp="$1"
-}
-log_priority() {
- if test -z "$1"; then
- echo "$_logp"
- return
- fi
- [ "$1" -le "$_logp" ]
-}
-log_tag() {
- case $1 in
- 0) echo "emerg" ;;
- 1) echo "alert" ;;
- 2) echo "crit" ;;
- 3) echo "err" ;;
- 4) echo "warning" ;;
- 5) echo "notice" ;;
- 6) echo "info" ;;
- 7) echo "debug" ;;
- *) echo "$1" ;;
- esac
-}
-log_debug() {
- log_priority 7 || return 0
- echoerr "$(log_prefix)" "$(log_tag 7)" "$@"
-}
-log_info() {
- log_priority 6 || return 0
- echoerr "$(log_prefix)" "$(log_tag 6)" "$@"
-}
-log_err() {
- log_priority 3 || return 0
- echoerr "$(log_prefix)" "$(log_tag 3)" "$@"
-}
-log_crit() {
- log_priority 2 || return 0
- echoerr "$(log_prefix)" "$(log_tag 2)" "$@"
-}
-uname_os() {
- os=$(uname -s | tr '[:upper:]' '[:lower:]')
- case "$os" in
- msys*) os="windows" ;;
- mingw*) os="windows" ;;
- cygwin*) os="windows" ;;
- win*) os="windows" ;;
- sunos) [ "$(uname -o)" = "illumos" ] && os=illumos ;;
- esac
- echo "$os"
-}
-uname_arch() {
- arch=$(uname -m)
- case $arch in
- x86_64) arch="amd64" ;;
- x86) arch="386" ;;
- i686) arch="386" ;;
- i386) arch="386" ;;
- i86pc) arch="amd64" ;;
- aarch64) arch="arm64" ;;
- armv5*) arch="armv5" ;;
- armv6*) arch="armv6" ;;
- armv7*) arch="armv7" ;;
- loongarch64) arch="loong64" ;;
- esac
- echo "${arch}"
-}
-uname_os_check() {
- os=$(uname_os)
- case "$os" in
- darwin) return 0 ;;
- dragonfly) return 0 ;;
- freebsd) return 0 ;;
- illumos) return 0;;
- linux) return 0 ;;
- android) return 0 ;;
- nacl) return 0 ;;
- netbsd) return 0 ;;
- openbsd) return 0 ;;
- plan9) return 0 ;;
- solaris) return 0 ;;
- windows) return 0 ;;
- esac
- log_crit "uname_os_check '$(uname -s)' got converted to '$os' which is not a GOOS value."
- return 1
-}
-uname_arch_check() {
- arch=$(uname_arch)
- case "$arch" in
- 386) return 0 ;;
- amd64) return 0 ;;
- arm64) return 0 ;;
- armv5) return 0 ;;
- armv6) return 0 ;;
- armv7) return 0 ;;
- ppc64) return 0 ;;
- ppc64le) return 0 ;;
- mips) return 0 ;;
- mipsle) return 0 ;;
- mips64) return 0 ;;
- mips64le) return 0 ;;
- s390x) return 0 ;;
- riscv64) return 0 ;;
- amd64p32) return 0 ;;
- loong64) return 0 ;;
- esac
- log_crit "uname_arch_check '$(uname -m)' got converted to '$arch' which is not a GOARCH value."
- return 1
-}
-untar() {
- tarball=$1
- case "${tarball}" in
- *.tar.gz | *.tgz) tar --no-same-owner -xzf "${tarball}" ;;
- *.tar) tar --no-same-owner -xf "${tarball}" ;;
- *.zip) unzip "${tarball}" ;;
- *)
- log_err "untar unknown archive format for ${tarball}"
- return 1
- ;;
- esac
-}
-http_download_curl() {
- local_file=$1
- source_url=$2
- header=$3
- if [ -z "$header" ]; then
- code=$(curl -w '%{http_code}' -sL -o "$local_file" "$source_url")
- else
- code=$(curl -w '%{http_code}' -sL -H "$header" -o "$local_file" "$source_url")
- fi
- if [ "$code" != "200" ]; then
- log_debug "http_download_curl received HTTP status $code"
- return 1
- fi
- return 0
-}
-http_download_wget() {
- local_file=$1
- source_url=$2
- header=$3
- if [ -z "$header" ]; then
- wget -q -O "$local_file" "$source_url"
- else
- wget -q --header "$header" -O "$local_file" "$source_url"
- fi
-}
-http_download() {
- log_debug "http_download $2"
- if is_command curl; then
- http_download_curl "$@"
- return
- elif is_command wget; then
- http_download_wget "$@"
- return
- fi
- log_crit "http_download unable to find wget or curl"
- return 1
-}
-http_copy() {
- tmp=$(mktemp)
- http_download "${tmp}" "$1" "$2" || return 1
- body=$(cat "$tmp")
- rm -f "${tmp}"
- echo "$body"
-}
-github_release() {
- owner_repo=$1
- version=$2
- test -z "$version" && version="latest"
- giturl="https://github.com/${owner_repo}/releases/${version}"
- json=$(http_copy "$giturl" "Accept:application/json")
- test -z "$json" && return 1
- version=$(echo "$json" | tr -s '\n' ' ' | sed 's/.*"tag_name":"//' | sed 's/".*//')
- test -z "$version" && return 1
- echo "$version"
-}
-hash_sha256() {
- TARGET=${1:-/dev/stdin}
- if is_command gsha256sum; then
- hash=$(gsha256sum "$TARGET") || return 1
- echo "$hash" | cut -d ' ' -f 1
- elif is_command sha256sum; then
- hash=$(sha256sum "$TARGET") || return 1
- echo "$hash" | cut -d ' ' -f 1
- elif is_command shasum; then
- hash=$(shasum -a 256 "$TARGET" 2>/dev/null) || return 1
- echo "$hash" | cut -d ' ' -f 1
- elif is_command openssl; then
- hash=$(openssl -dst openssl dgst -sha256 "$TARGET") || return 1
- echo "$hash" | cut -d ' ' -f a
- else
- log_crit "hash_sha256 unable to find command to compute sha-256 hash"
- return 1
- fi
-}
-hash_sha256_verify() {
- TARGET=$1
- checksums=$2
- if [ -z "$checksums" ]; then
- log_err "hash_sha256_verify checksum file not specified in arg2"
- return 1
- fi
- BASENAME=${TARGET##*/}
- want=$(grep "${BASENAME}" "${checksums}" 2>/dev/null | tr '\t' ' ' | cut -d ' ' -f 1)
- if [ -z "$want" ]; then
- log_err "hash_sha256_verify unable to find checksum for '${TARGET}' in '${checksums}'"
- return 1
- fi
- got=$(hash_sha256 "$TARGET")
- if [ "$want" != "$got" ]; then
- log_err "hash_sha256_verify checksum for '$TARGET' did not verify ${want} vs $got"
- return 1
- fi
-}
-cat /dev/null <<EOF
-------------------------------------------------------------------------
-End of functions from https://github.com/client9/shlib
-------------------------------------------------------------------------
-EOF
-
-PROJECT_NAME="misspell"
-OWNER=golangci
-REPO="misspell"
-BINARY=misspell
-FORMAT=tar.gz
-OS=$(uname_os)
-ARCH=$(uname_arch)
-PREFIX="$OWNER/$REPO"
-
-# use in logging routines
-log_prefix() {
- echo "$PREFIX"
-}
-PLATFORM="${OS}/${ARCH}"
-GITHUB_DOWNLOAD=https://github.com/${OWNER}/${REPO}/releases/download
-
-uname_os_check "$OS"
-uname_arch_check "$ARCH"
-
-parse_args "$@"
-
-get_binaries
-
-tag_to_version
-
-adjust_format
-
-adjust_os
-
-adjust_arch
-
-log_info "found version: ${VERSION} for ${TAG}/${OS}/${ARCH}"
-
-NAME=${BINARY}_${VERSION}_${OS}_${ARCH}
-TARBALL=${NAME}.${FORMAT}
-TARBALL_URL=${GITHUB_DOWNLOAD}/${TAG}/${TARBALL}
-CHECKSUM=${BINARY}_${VERSION}_checksums.txt
-CHECKSUM_URL=${GITHUB_DOWNLOAD}/${TAG}/${CHECKSUM}
-
-execute
diff --git a/vendor/github.com/golangci/misspell/legal.go b/vendor/github.com/golangci/misspell/legal.go
deleted file mode 100644
index 4f9bcfc67..000000000
--- a/vendor/github.com/golangci/misspell/legal.go
+++ /dev/null
@@ -1,47 +0,0 @@
-// Package misspell corrects commonly misspelled English words in source files.
-package misspell
-
-// Legal provides licensing info.
-const Legal = `
-Except where noted below, the source code for misspell is
-copyright Nick Galbreath and distribution is allowed under a
-MIT license. See the following for details:
-
-* https://github.com/client9/misspell/blob/master/LICENSE
-* https://tldrlegal.com/license/mit-license
-
-Misspell makes uses of the Golang standard library and
-contains a modified version of Golang's strings.Replacer
-which are covered under a BSD License.
-
-* https://golang.org/pkg/strings/#Replacer
-* https://golang.org/src/strings/replace.go
-* https://github.com/golang/go/blob/master/LICENSE
-
-Copyright (c) 2009 The Go Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.`
diff --git a/vendor/github.com/golangci/misspell/mime.go b/vendor/github.com/golangci/misspell/mime.go
deleted file mode 100644
index 19d49e085..000000000
--- a/vendor/github.com/golangci/misspell/mime.go
+++ /dev/null
@@ -1,206 +0,0 @@
-package misspell
-
-import (
- "bytes"
- "fmt"
- "io"
- "net/http"
- "os"
- "path/filepath"
- "slices"
- "strings"
-)
-
-// The number of possible binary formats is very large items that might be checked into a repo or be an artifact of a build.
-// Additions welcome.
-//
-// Golang's internal table is very small and can't be relied on.
-// Even then things like ".js" have a mime type of "application/javascript" which isn't very helpful.
-// "[x]" means we have sniff test and suffix test should be eliminated.
-var binary = map[string]bool{
- ".a": true, // [ ] archive
- ".bin": true, // [ ] binary
- ".bz2": true, // [ ] compression
- ".class": true, // [x] Java class file
- ".dll": true, // [ ] shared library
- ".exe": true, // [ ] binary
- ".gif": true, // [ ] image
- ".gpg": true, // [x] text, but really all base64
- ".gz": true, // [ ] compression
- ".ico": true, // [ ] image
- ".jar": true, // [x] archive
- ".jpeg": true, // [ ] image
- ".jpg": true, // [ ] image
- ".mp3": true, // [ ] audio
- ".mp4": true, // [ ] video
- ".mpeg": true, // [ ] video
- ".o": true, // [ ] object file
- ".pdf": true, // [x] pdf
- ".png": true, // [x] image
- ".pyc": true, // [ ] Python bytecode
- ".pyo": true, // [ ] Python bytecode
- ".so": true, // [x] shared library
- ".swp": true, // [ ] vim swap file
- ".tar": true, // [ ] archive
- ".tiff": true, // [ ] image
- ".woff": true, // [ ] font
- ".woff2": true, // [ ] font
- ".xz": true, // [ ] compression
- ".z": true, // [ ] compression
- ".zip": true, // [x] archive
-}
-
-// isBinaryFilename returns true if the file is likely to be binary.
-//
-// Better heuristics could be done here, in particular a binary file is unlikely to be UTF-8 encoded.
-// However, this is cheap and will solve the immediate need of making sure common binary formats are not corrupted by mistake.
-func isBinaryFilename(s string) bool {
- return binary[strings.ToLower(filepath.Ext(s))]
-}
-
-var scm = map[string]bool{
- ".bzr": true,
- ".git": true,
- ".hg": true,
- ".svn": true,
- "CVS": true,
-}
-
-// isSCMPath returns true if the path is likely part of a (private) SCM directory.
-// E.g. ./git/something = true.
-func isSCMPath(s string) bool {
- // hack for .git/COMMIT_EDITMSG and .git/TAG_EDITMSG
- // normally we don't look at anything in .git
- // but COMMIT_EDITMSG and TAG_EDITMSG are used as
- // temp files for git commits. Allowing misspell to inspect
- // these files allows for commit-msg hooks
- // https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
- if strings.Contains(filepath.Base(s), "EDITMSG") {
- return false
- }
-
- parts := strings.Split(filepath.Clean(s), string(filepath.Separator))
-
- return slices.ContainsFunc(parts, func(dir string) bool {
- return scm[dir]
- })
-}
-
-var magicHeaders = [][]byte{
- // Issue #68
- // PGP messages and signatures are "text" but really just
- // blobs of base64-text and should not be misspell-checked
- []byte("-----BEGIN PGP MESSAGE-----"),
- []byte("-----BEGIN PGP SIGNATURE-----"),
-
- // ELF
- {0x7f, 0x45, 0x4c, 0x46},
-
- // Postscript
- {0x25, 0x21, 0x50, 0x53},
-
- // PDF
- {0x25, 0x50, 0x44, 0x46},
-
- // Java class file
- // https://en.wikipedia.org/wiki/Java_class_file
- {0xCA, 0xFE, 0xBA, 0xBE},
-
- // PNG
- // https://en.wikipedia.org/wiki/Portable_Network_Graphics
- {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a},
-
- // ZIP, JAR, ODF, OOXML
- {0x50, 0x4B, 0x03, 0x04},
- {0x50, 0x4B, 0x05, 0x06},
- {0x50, 0x4B, 0x07, 0x08},
-}
-
-func isTextFile(raw []byte) bool {
- for _, magic := range magicHeaders {
- if bytes.HasPrefix(raw, magic) {
- return false
- }
- }
-
- // allow any text/ type with utf-8 encoding.
- // DetectContentType sometimes returns charset=utf-16 for XML stuff in which case ignore.
- mime := http.DetectContentType(raw)
- return strings.HasPrefix(mime, "text/") && strings.HasSuffix(mime, "charset=utf-8")
-}
-
-// ReadTextFile returns the contents of a file, first testing if it is a text file:
-//
-// returns ("", nil) if not a text file
-// returns ("", error) if error
-// returns (string, nil) if text
-//
-// unfortunately, in worse case, this does:
-//
-// 1 stat
-// 1 open,read,close of 512 bytes
-// 1 more stat,open, read everything, close (via io.ReadAll)
-// This could be kinder to the filesystem.
-//
-// This uses some heuristics of the file's extension (e.g. .zip, .txt) and
-// uses a sniffer to determine if the file is text or not.
-// Using file extensions isn't great, but probably
-// good enough for real-world use.
-// Golang's built-in sniffer is problematic for different reasons. It's
-// optimized for HTML, and is very limited in detection. It would be good
-// to explicitly add some tests for ELF/DWARF formats to make sure we never
-// corrupt binary files.
-func ReadTextFile(filename string) (string, error) {
- if isBinaryFilename(filename) {
- return "", nil
- }
-
- if isSCMPath(filename) {
- return "", nil
- }
-
- fstat, err := os.Stat(filename)
- if err != nil {
- return "", fmt.Errorf("unable to stat %q: %w", filename, err)
- }
-
- // directory: nothing to do.
- if fstat.IsDir() {
- return "", nil
- }
-
- // avoid reading in multi-gig files
- // if input is large, read the first 512 bytes to sniff type
- // if not-text, then exit
- isText := false
- if fstat.Size() > 50000 {
- var fin *os.File
- fin, err = os.Open(filename)
- if err != nil {
- return "", fmt.Errorf("unable to open large file %q: %w", filename, err)
- }
- defer fin.Close()
- buf := make([]byte, 512)
- _, err = io.ReadFull(fin, buf)
- if err != nil {
- return "", fmt.Errorf("unable to read 512 bytes from %q: %w", filename, err)
- }
- if !isTextFile(buf) {
- return "", nil
- }
-
- // set so we don't double-check this file
- isText = true
- }
-
- // read in whole file
- raw, err := os.ReadFile(filename)
- if err != nil {
- return "", fmt.Errorf("unable to read all %q: %w", filename, err)
- }
-
- if !isText && !isTextFile(raw) {
- return "", nil
- }
- return string(raw), nil
-}
diff --git a/vendor/github.com/golangci/misspell/notwords.go b/vendor/github.com/golangci/misspell/notwords.go
deleted file mode 100644
index f694f46dc..000000000
--- a/vendor/github.com/golangci/misspell/notwords.go
+++ /dev/null
@@ -1,102 +0,0 @@
-package misspell
-
-import (
- "bytes"
- "regexp"
- "strings"
- "unicode"
-)
-
-var (
- reEmail = regexp.MustCompile(`[[:alnum:]_.%+-]+@[[:alnum:]-.]+\.[[:alpha:]]{2,6}[^[:alpha:]]`)
- reBackslash = regexp.MustCompile(`\\[[:lower:]]`)
-
- // reHost Host name regular expression.
- // The length of any one label is limited between 1 and 63 octets. (https://www.ietf.org/rfc/rfc2181.txt)
- // A TLD has at least 2 letters.
- reHost = regexp.MustCompile(`([[:alnum:]-]+\.)+[[:alpha:]]{2,63}`)
-)
-
-// RemovePath attempts to strip away embedded file system paths, e.g.
-//
-// /foo/bar or /static/myimg.png
-//
-// TODO: windows style.
-func RemovePath(s string) string {
- out := bytes.Buffer{}
- var idx int
- for s != "" {
- if idx = strings.IndexByte(s, '/'); idx == -1 {
- out.WriteString(s)
- break
- }
-
- if idx > 0 {
- idx--
- }
-
- var chclass string
- switch s[idx] {
- case '/', ' ', '\n', '\t', '\r':
- chclass = " \n\r\t"
- case '[':
- chclass = "]\n"
- case '(':
- chclass = ")\n"
- default:
- out.WriteString(s[:idx+2])
- s = s[idx+2:]
- continue
- }
-
- endx := strings.IndexAny(s[idx+1:], chclass)
- if endx != -1 {
- out.WriteString(s[:idx+1])
- out.Write(bytes.Repeat([]byte{' '}, endx))
- s = s[idx+endx+1:]
- } else {
- out.WriteString(s)
- break
- }
- }
- return out.String()
-}
-
-// replaceWithBlanks returns a string with the same number of spaces as the input.
-func replaceWithBlanks(s string) string {
- return strings.Repeat(" ", len(s))
-}
-
-// replaceHost same as replaceWithBlanks but if the string contains at least one uppercase letter returns the string.
-// Domain names are case-insensitive but browsers and DNS convert uppercase to lower case. (https://www.ietf.org/rfc/rfc4343.txt)
-func replaceHost(s string) string {
- for _, r := range s {
- if unicode.IsUpper(r) {
- return s
- }
- }
-
- return replaceWithBlanks(s)
-}
-
-// RemoveEmail remove email-like strings, e.g. "nickg+junk@xfoobar.com", "nickg@xyz.abc123.biz".
-func RemoveEmail(s string) string {
- return reEmail.ReplaceAllStringFunc(s, replaceWithBlanks)
-}
-
-// RemoveHost removes host-like strings "foobar.com" "abc123.fo1231.biz".
-func RemoveHost(s string) string {
- return reHost.ReplaceAllStringFunc(s, replaceHost)
-}
-
-// RemoveBackslashEscapes removes characters that are preceded by a backslash.
-// commonly found in printf format string "\nto".
-func removeBackslashEscapes(s string) string {
- return reBackslash.ReplaceAllStringFunc(s, replaceWithBlanks)
-}
-
-// RemoveNotWords blanks out all the not words.
-func RemoveNotWords(s string) string {
- // do most selective/specific first
- return removeBackslashEscapes(RemoveHost(RemoveEmail(RemovePath(StripURL(s)))))
-}
diff --git a/vendor/github.com/golangci/misspell/replace.go b/vendor/github.com/golangci/misspell/replace.go
deleted file mode 100644
index b51dfa83b..000000000
--- a/vendor/github.com/golangci/misspell/replace.go
+++ /dev/null
@@ -1,245 +0,0 @@
-package misspell
-
-import (
- "bufio"
- "bytes"
- "io"
- "regexp"
- "slices"
- "strings"
- "text/scanner"
-)
-
-func max(x, y int) int {
- if x > y {
- return x
- }
- return y
-}
-
-func inArray(haystack []string, needle string) bool {
- return slices.ContainsFunc(haystack, func(word string) bool {
- return strings.EqualFold(needle, word)
- })
-}
-
-var wordRegexp = regexp.MustCompile(`[a-zA-Z0-9']+`)
-
-// Diff is datastructures showing what changed in a single line.
-type Diff struct {
- Filename string
- FullLine string
- Line int
- Column int
- Original string
- Corrected string
-}
-
-// Replacer is the main struct for spelling correction.
-type Replacer struct {
- Replacements []string
- Debug bool
- engine *StringReplacer
- corrected map[string]string
-}
-
-// New creates a new default Replacer using the main rule list.
-func New() *Replacer {
- r := Replacer{
- Replacements: DictMain,
- }
- r.Compile()
- return &r
-}
-
-// RemoveRule deletes existing rules.
-// The content of `ignore` is case-insensitive.
-// TODO: make in place to save memory.
-func (r *Replacer) RemoveRule(ignore []string) {
- newWords := make([]string, 0, len(r.Replacements))
- for i := 0; i < len(r.Replacements); i += 2 {
- if inArray(ignore, r.Replacements[i]) {
- continue
- }
- newWords = append(newWords, r.Replacements[i:i+2]...)
- }
- r.engine = nil
- r.Replacements = newWords
-}
-
-// AddRuleList appends new rules.
-// Input is in the same form as Strings.Replacer: [ old1, new1, old2, new2, ....]
-// Note: does not check for duplicates.
-func (r *Replacer) AddRuleList(additions []string) {
- r.engine = nil
- r.Replacements = append(r.Replacements, additions...)
-}
-
-// Compile compiles the rules.
-// Required before using the Replace functions.
-func (r *Replacer) Compile() {
- r.corrected = make(map[string]string, len(r.Replacements)/2)
- for i := 0; i < len(r.Replacements); i += 2 {
- r.corrected[r.Replacements[i]] = r.Replacements[i+1]
- }
- r.engine = NewStringReplacer(r.Replacements...)
-}
-
-/*
-line1 and line2 are different
-extract words from each line1
-
-replace word -> newword
-if word == new-word
-
- continue
-
-if new-word in list of replacements
-
- continue
-
-new word not original, and not in list of replacements some substring got mixed up. UNdo.
-*/
-func (r *Replacer) recheckLine(s string, lineNum int, buf io.Writer, next func(Diff)) {
- first := 0
- redacted := RemoveNotWords(s)
-
- idx := wordRegexp.FindAllStringIndex(redacted, -1)
- for _, ab := range idx {
- word := s[ab[0]:ab[1]]
- newword := r.engine.Replace(word)
- if newword == word {
- // no replacement done
- continue
- }
-
- // ignore camelCase words
- // https://github.com/client9/misspell/issues/113
- if CaseStyle(word) == CaseUnknown {
- continue
- }
-
- if StringEqualFold(r.corrected[strings.ToLower(word)], newword) {
- // word got corrected into something we know
- io.WriteString(buf, s[first:ab[0]])
- io.WriteString(buf, newword)
- first = ab[1]
- next(Diff{
- FullLine: s,
- Line: lineNum,
- Original: word,
- Corrected: newword,
- Column: ab[0],
- })
- continue
- }
- // Word got corrected into something unknown. Ignore it
- }
- io.WriteString(buf, s[first:])
-}
-
-// ReplaceGo is a specialized routine for correcting Golang source files.
-// Currently only checks comments, not identifiers for spelling.
-func (r *Replacer) ReplaceGo(input string) (string, []Diff) {
- var s scanner.Scanner
- s.Init(strings.NewReader(input))
- s.Mode = scanner.ScanIdents | scanner.ScanFloats | scanner.ScanChars | scanner.ScanStrings | scanner.ScanRawStrings | scanner.ScanComments
- lastPos := 0
- output := ""
-Loop:
- for {
- switch s.Scan() {
- case scanner.Comment:
- origComment := s.TokenText()
- newComment := r.engine.Replace(origComment)
-
- if origComment != newComment {
- // s.Pos().Offset is the end of the current token
- // subtract len(origComment) to get the start of the token
- offset := s.Pos().Offset
- output = output + input[lastPos:offset-len(origComment)] + newComment
- lastPos = offset
- }
- case scanner.EOF:
- break Loop
- }
- }
-
- if lastPos == 0 {
- // no changes, no copies
- return input, nil
- }
- if lastPos < len(input) {
- output += input[lastPos:]
- }
- diffs := make([]Diff, 0, 8)
- buf := bytes.NewBuffer(make([]byte, 0, max(len(input), len(output))+100))
- // faster that making a bytes.Buffer and bufio.ReadString
- outlines := strings.SplitAfter(output, "\n")
- inlines := strings.SplitAfter(input, "\n")
- for i := 0; i < len(inlines); i++ {
- if inlines[i] == outlines[i] {
- buf.WriteString(outlines[i])
- continue
- }
- r.recheckLine(inlines[i], i+1, buf, func(d Diff) {
- diffs = append(diffs, d)
- })
- }
-
- return buf.String(), diffs
-}
-
-// Replace is correcting misspellings in input, returning corrected version along with a list of diffs.
-func (r *Replacer) Replace(input string) (string, []Diff) {
- output := r.engine.Replace(input)
- if input == output {
- return input, nil
- }
- diffs := make([]Diff, 0, 8)
- buf := bytes.NewBuffer(make([]byte, 0, max(len(input), len(output))+100))
- // faster that making a bytes.Buffer and bufio.ReadString
- outlines := strings.SplitAfter(output, "\n")
- inlines := strings.SplitAfter(input, "\n")
- for i := 0; i < len(inlines); i++ {
- if inlines[i] == outlines[i] {
- buf.WriteString(outlines[i])
- continue
- }
- r.recheckLine(inlines[i], i+1, buf, func(d Diff) {
- diffs = append(diffs, d)
- })
- }
-
- return buf.String(), diffs
-}
-
-// ReplaceReader applies spelling corrections to a reader stream.
-// Diffs are emitted through a callback.
-func (r *Replacer) ReplaceReader(raw io.Reader, w io.Writer, next func(Diff)) error {
- var (
- err error
- line string
- lineNum int
- )
- reader := bufio.NewReader(raw)
- for err == nil {
- lineNum++
- line, err = reader.ReadString('\n')
-
- // if it's EOF, then line has the last line
- // don't like the check of err here and
- // in for loop
- if err != nil && err != io.EOF {
- return err
- }
- // easily 5x faster than regexp+map
- if line == r.engine.Replace(line) {
- io.WriteString(w, line)
- continue
- }
- // but it can be inaccurate, so we need to double-check
- r.recheckLine(line, lineNum, w, next)
- }
- return nil
-}
diff --git a/vendor/github.com/golangci/misspell/stringreplacer.go b/vendor/github.com/golangci/misspell/stringreplacer.go
deleted file mode 100644
index 46cb6c4b6..000000000
--- a/vendor/github.com/golangci/misspell/stringreplacer.go
+++ /dev/null
@@ -1,336 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package misspell
-
-import (
- "io"
- "strings"
-)
-
-// StringReplacer replaces a list of strings with replacements.
-// It is safe for concurrent use by multiple goroutines.
-type StringReplacer struct {
- r replacer
-}
-
-// replacer is the interface that a replacement algorithm needs to implement.
-type replacer interface {
- Replace(s string) string
- WriteString(w io.Writer, s string) (n int, err error)
-}
-
-// NewStringReplacer returns a new Replacer from a list of old, new string pairs.
-// Replacements are performed in order, without overlapping matches.
-func NewStringReplacer(oldnew ...string) *StringReplacer {
- if len(oldnew)%2 == 1 {
- panic("strings.NewReplacer: odd argument count")
- }
-
- return &StringReplacer{r: makeGenericReplacer(oldnew)}
-}
-
-// Replace returns a copy of s with all replacements performed.
-func (r *StringReplacer) Replace(s string) string {
- return r.r.Replace(s)
-}
-
-// WriteString writes s to w with all replacements performed.
-func (r *StringReplacer) WriteString(w io.Writer, s string) (int, error) {
- return r.r.WriteString(w, s)
-}
-
-// trieNode is a node in a lookup trie for prioritized key/value pairs. Keys
-// and values may be empty. For example, the trie containing keys "ax", "ay",
-// "bcbc", "x" and "xy" could have eight nodes:
-//
-// n0 -
-// n1 a-
-// n2 .x+
-// n3 .y+
-// n4 b-
-// n5 .cbc+
-// n6 x+
-// n7 .y+
-//
-// n0 is the root node, and its children are n1, n4 and n6; n1's children are
-// n2 and n3; n4's child is n5; n6's child is n7. Nodes n0, n1 and n4 (marked
-// with a trailing "-") are partial keys, and nodes n2, n3, n5, n6 and n7
-// (marked with a trailing "+") are complete keys.
-type trieNode struct {
- // value is the value of the trie node's key/value pair. It is empty if
- // this node is not a complete key.
- value string
- // priority is the priority (higher is more important) of the trie node's
- // key/value pair; keys are not necessarily matched shortest- or longest-
- // first. Priority is positive if this node is a complete key, and zero
- // otherwise. In the example above, positive/zero priorities are marked
- // with a trailing "+" or "-".
- priority int
-
- // A trie node may have zero, one or more child nodes:
- // * if the remaining fields are zero, there are no children.
- // * if prefix and next are non-zero, there is one child in next.
- // * if table is non-zero, it defines all the children.
- //
- // Prefixes are preferred over tables when there is one child, but the
- // root node always uses a table for lookup efficiency.
-
- // prefix is the difference in keys between this trie node and the next.
- // In the example above, node n4 has prefix "cbc" and n4's next node is n5.
- // Node n5 has no children and so has zero prefix, next and table fields.
- prefix string
- next *trieNode
-
- // table is a lookup table indexed by the next byte in the key, after
- // remapping that byte through genericReplacer.mapping to create a dense
- // index. In the example above, the keys only use 'a', 'b', 'c', 'x' and
- // 'y', which remap to 0, 1, 2, 3 and 4. All other bytes remap to 5, and
- // genericReplacer.tableSize will be 5. Node n0's table will be
- // []*trieNode{ 0:n1, 1:n4, 3:n6 }, where the 0, 1 and 3 are the remapped
- // 'a', 'b' and 'x'.
- table []*trieNode
-}
-
-func (t *trieNode) add(key, val string, priority int, r *genericReplacer) {
- if key == "" {
- if t.priority == 0 {
- t.value = val
- t.priority = priority
- }
- return
- }
-
- if t.prefix != "" {
- // Need to split the prefix among multiple nodes.
- var n int // length of the longest common prefix
- for ; n < len(t.prefix) && n < len(key); n++ {
- if t.prefix[n] != key[n] {
- break
- }
- }
- switch n {
- case len(t.prefix):
- t.next.add(key[n:], val, priority, r)
- case 0:
- // First byte differs, start a new lookup table here. Looking up
- // what is currently t.prefix[0] will lead to prefixNode, and
- // looking up key[0] will lead to keyNode.
- var prefixNode *trieNode
- if len(t.prefix) == 1 {
- prefixNode = t.next
- } else {
- prefixNode = &trieNode{
- prefix: t.prefix[1:],
- next: t.next,
- }
- }
- keyNode := new(trieNode)
- t.table = make([]*trieNode, r.tableSize)
- t.table[r.mapping[t.prefix[0]]] = prefixNode
- t.table[r.mapping[key[0]]] = keyNode
- t.prefix = ""
- t.next = nil
- keyNode.add(key[1:], val, priority, r)
- default:
- // Insert new node after the common section of the prefix.
- next := &trieNode{
- prefix: t.prefix[n:],
- next: t.next,
- }
- t.prefix = t.prefix[:n]
- t.next = next
- next.add(key[n:], val, priority, r)
- }
- return
- }
-
- if t.table != nil {
- // Insert into existing table.
- m := r.mapping[key[0]]
- if t.table[m] == nil {
- t.table[m] = new(trieNode)
- }
- t.table[m].add(key[1:], val, priority, r)
- return
- }
-
- t.prefix = key
- t.next = new(trieNode)
- t.next.add("", val, priority, r)
-}
-
-// genericReplacer is the fully generic algorithm.
-// It's used as a fallback when nothing faster can be used.
-type genericReplacer struct {
- root trieNode
- // tableSize is the size of a trie node's lookup table. It is the number
- // of unique key bytes.
- tableSize int
- // mapping maps from key bytes to a dense index for trieNode.table.
- mapping [256]byte
-}
-
-func makeGenericReplacer(oldnew []string) *genericReplacer {
- r := new(genericReplacer)
- // Find each byte used, then assign them each an index.
- for i := 0; i < len(oldnew); i += 2 {
- key := strings.ToLower(oldnew[i])
- for j := 0; j < len(key); j++ {
- r.mapping[key[j]] = 1
- }
- }
-
- for _, b := range r.mapping {
- r.tableSize += int(b)
- }
-
- var index byte
- for i, b := range r.mapping {
- if b == 0 {
- r.mapping[i] = byte(r.tableSize)
- } else {
- r.mapping[i] = index
- index++
- }
- }
- // Ensure root node uses a lookup table (for performance).
- r.root.table = make([]*trieNode, r.tableSize)
-
- for i := 0; i < len(oldnew); i += 2 {
- r.root.add(strings.ToLower(oldnew[i]), oldnew[i+1], len(oldnew)-i, r)
- }
- return r
-}
-
-func (r *genericReplacer) lookup(s string, ignoreRoot bool) (val string, keylen int, found bool) {
- // Iterate down the trie to the end, and grab the value and keylen with
- // the highest priority.
- bestPriority := 0
- node := &r.root
- n := 0
- for node != nil {
- if node.priority > bestPriority && !(ignoreRoot && node == &r.root) {
- bestPriority = node.priority
- val = node.value
- keylen = n
- found = true
- }
-
- if s == "" {
- break
- }
- if node.table != nil {
- index := r.mapping[ByteToLower(s[0])]
- if int(index) == r.tableSize {
- break
- }
- node = node.table[index]
- s = s[1:]
- n++
- } else if node.prefix != "" && StringHasPrefixFold(s, node.prefix) {
- n += len(node.prefix)
- s = s[len(node.prefix):]
- node = node.next
- } else {
- break
- }
- }
- return
-}
-
-func (r *genericReplacer) Replace(s string) string {
- buf := make(appendSliceWriter, 0, len(s))
- r.WriteString(&buf, s)
- return string(buf)
-}
-
-func (r *genericReplacer) WriteString(w io.Writer, s string) (n int, err error) {
- sw := getStringWriter(w)
- var last, wn int
- var prevMatchEmpty bool
- for i := 0; i <= len(s); {
- // Fast path: s[i] is not a prefix of any pattern.
- if i != len(s) && r.root.priority == 0 {
- index := int(r.mapping[ByteToLower(s[i])])
- if index == r.tableSize || r.root.table[index] == nil {
- i++
- continue
- }
- }
-
- // Ignore the empty match iff the previous loop found the empty match.
- val, keylen, match := r.lookup(s[i:], prevMatchEmpty)
- prevMatchEmpty = match && keylen == 0
- if match {
- orig := s[i : i+keylen]
- switch CaseStyle(orig) {
- case CaseUnknown:
- // pretend we didn't match
- // i++
- // continue
- case CaseUpper:
- val = strings.ToUpper(val)
- case CaseLower:
- val = strings.ToLower(val)
- case CaseTitle:
- if len(val) < 2 {
- val = strings.ToUpper(val)
- } else {
- val = strings.ToUpper(val[:1]) + strings.ToLower(val[1:])
- }
- }
- wn, err = sw.WriteString(s[last:i])
- n += wn
- if err != nil {
- return
- }
- // debug helper: log.Printf("%d: Going to correct %q with %q", i, s[i:i+keylen], val)
- wn, err = sw.WriteString(val)
- n += wn
- if err != nil {
- return
- }
- i += keylen
- last = i
- continue
- }
- i++
- }
- if last != len(s) {
- wn, err = sw.WriteString(s[last:])
- n += wn
- }
- return
-}
-
-type appendSliceWriter []byte
-
-// Write writes to the buffer to satisfy io.Writer.
-func (w *appendSliceWriter) Write(p []byte) (int, error) {
- *w = append(*w, p...)
- return len(p), nil
-}
-
-// WriteString writes to the buffer without string->[]byte->string allocations.
-func (w *appendSliceWriter) WriteString(s string) (int, error) {
- *w = append(*w, s...)
- return len(s), nil
-}
-
-type stringWriter struct {
- w io.Writer
-}
-
-func (w stringWriter) WriteString(s string) (int, error) {
- return w.w.Write([]byte(s))
-}
-
-func getStringWriter(w io.Writer) io.StringWriter {
- sw, ok := w.(io.StringWriter)
- if !ok {
- sw = stringWriter{w}
- }
- return sw
-}
diff --git a/vendor/github.com/golangci/misspell/stringreplacer_test.gox b/vendor/github.com/golangci/misspell/stringreplacer_test.gox
deleted file mode 100644
index 70da997f6..000000000
--- a/vendor/github.com/golangci/misspell/stringreplacer_test.gox
+++ /dev/null
@@ -1,421 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package misspell_test
-
-import (
- "bytes"
- "fmt"
- "strings"
- "testing"
-
- . "github.com/client9/misspell"
-)
-
-var htmlEscaper = NewStringReplacer(
- "&", "&amp;",
- "<", "&lt;",
- ">", "&gt;",
- `"`, "&quot;",
- "'", "&apos;",
-)
-
-var htmlUnescaper = NewStringReplacer(
- "&amp;", "&",
- "&lt;", "<",
- "&gt;", ">",
- "&quot;", `"`,
- "&apos;", "'",
-)
-
-// The http package's old HTML escaping function.
-func oldHTMLEscape(s string) string {
- s = strings.Replace(s, "&", "&amp;", -1)
- s = strings.Replace(s, "<", "&lt;", -1)
- s = strings.Replace(s, ">", "&gt;", -1)
- s = strings.Replace(s, `"`, "&quot;", -1)
- s = strings.Replace(s, "'", "&apos;", -1)
- return s
-}
-
-var capitalLetters = NewStringReplacer("a", "A", "b", "B")
-
-// TestReplacer tests the replacer implementations.
-func TestReplacer(t *testing.T) {
- type testCase struct {
- r *StringReplacer
- in, out string
- }
- var testCases []testCase
-
- // str converts 0xff to "\xff". This isn't just string(b) since that converts to UTF-8.
- str := func(b byte) string {
- return string([]byte{b})
- }
- var s []string
-
- // inc maps "\x00"->"\x01", ..., "a"->"b", "b"->"c", ..., "\xff"->"\x00".
- for i := 0; i < 256; i++ {
- s = append(s, str(byte(i)), str(byte(i+1)))
- }
- inc := NewStringReplacer(s...)
-
- // Test cases with 1-byte old strings, 1-byte new strings.
- testCases = append(testCases,
- testCase{capitalLetters, "brad", "BrAd"},
- testCase{capitalLetters, strings.Repeat("a", (32<<10)+123), strings.Repeat("A", (32<<10)+123)},
- testCase{capitalLetters, "", ""},
-
- testCase{inc, "brad", "csbe"},
- testCase{inc, "\x00\xff", "\x01\x00"},
- testCase{inc, "", ""},
-
- testCase{NewStringReplacer("a", "1", "a", "2"), "brad", "br1d"},
- )
-
- // repeat maps "a"->"a", "b"->"bb", "c"->"ccc", ...
- s = nil
- for i := 0; i < 256; i++ {
- n := i + 1 - 'a'
- if n < 1 {
- n = 1
- }
- s = append(s, str(byte(i)), strings.Repeat(str(byte(i)), n))
- }
- repeat := NewStringReplacer(s...)
-
- // Test cases with 1-byte old strings, variable length new strings.
- testCases = append(testCases,
- testCase{htmlEscaper, "No changes", "No changes"},
- testCase{htmlEscaper, "I <3 escaping & stuff", "I &lt;3 escaping &amp; stuff"},
- testCase{htmlEscaper, "&&&", "&amp;&amp;&amp;"},
- testCase{htmlEscaper, "", ""},
-
- testCase{repeat, "brad", "bbrrrrrrrrrrrrrrrrrradddd"},
- testCase{repeat, "abba", "abbbba"},
- testCase{repeat, "", ""},
-
- testCase{NewStringReplacer("a", "11", "a", "22"), "brad", "br11d"},
- )
-
- // The remaining test cases have variable length old strings.
-
- testCases = append(testCases,
- testCase{htmlUnescaper, "&amp;amp;", "&amp;"},
- testCase{htmlUnescaper, "&lt;b&gt;HTML&apos;s neat&lt;/b&gt;", "<b>HTML's neat</b>"},
- testCase{htmlUnescaper, "", ""},
-
- testCase{NewStringReplacer("a", "1", "a", "2", "xxx", "xxx"), "brad", "br1d"},
-
- testCase{NewStringReplacer("a", "1", "aa", "2", "aaa", "3"), "aaaa", "1111"},
-
- testCase{NewStringReplacer("aaa", "3", "aa", "2", "a", "1"), "aaaa", "31"},
- )
-
- // gen1 has multiple old strings of variable length. There is no
- // overall non-empty common prefix, but some pairwise common prefixes.
- gen1 := NewStringReplacer(
- "aaa", "3[aaa]",
- "aa", "2[aa]",
- "a", "1[a]",
- "i", "i",
- "longerst", "most long",
- "longer", "medium",
- "long", "short",
- "xx", "xx",
- "x", "X",
- "X", "Y",
- "Y", "Z",
- )
- testCases = append(testCases,
- testCase{gen1, "fooaaabar", "foo3[aaa]b1[a]r"},
- testCase{gen1, "long, longerst, longer", "short, most long, medium"},
- testCase{gen1, "xxxxx", "xxxxX"},
- testCase{gen1, "XiX", "YiY"},
- testCase{gen1, "", ""},
- )
-
- // gen2 has multiple old strings with no pairwise common prefix.
- gen2 := NewStringReplacer(
- "roses", "red",
- "violets", "blue",
- "sugar", "sweet",
- )
- testCases = append(testCases,
- testCase{gen2, "roses are red, violets are blue...", "red are red, blue are blue..."},
- testCase{gen2, "", ""},
- )
-
- // gen3 has multiple old strings with an overall common prefix.
- gen3 := NewStringReplacer(
- "abracadabra", "poof",
- "abracadabrakazam", "splat",
- "abraham", "lincoln",
- "abrasion", "scrape",
- "abraham", "isaac",
- )
- testCases = append(testCases,
- testCase{gen3, "abracadabrakazam abraham", "poofkazam lincoln"},
- testCase{gen3, "abrasion abracad", "scrape abracad"},
- testCase{gen3, "abba abram abrasive", "abba abram abrasive"},
- testCase{gen3, "", ""},
- )
-
- // foo{1,2,3,4} have multiple old strings with an overall common prefix
- // and 1- or 2- byte extensions from the common prefix.
- foo1 := NewStringReplacer(
- "foo1", "A",
- "foo2", "B",
- "foo3", "C",
- )
- foo2 := NewStringReplacer(
- "foo1", "A",
- "foo2", "B",
- "foo31", "C",
- "foo32", "D",
- )
- foo3 := NewStringReplacer(
- "foo11", "A",
- "foo12", "B",
- "foo31", "C",
- "foo32", "D",
- )
- foo4 := NewStringReplacer(
- "foo12", "B",
- "foo32", "D",
- )
- testCases = append(testCases,
- testCase{foo1, "fofoofoo12foo32oo", "fofooA2C2oo"},
- testCase{foo1, "", ""},
-
- testCase{foo2, "fofoofoo12foo32oo", "fofooA2Doo"},
- testCase{foo2, "", ""},
-
- testCase{foo3, "fofoofoo12foo32oo", "fofooBDoo"},
- testCase{foo3, "", ""},
-
- testCase{foo4, "fofoofoo12foo32oo", "fofooBDoo"},
- testCase{foo4, "", ""},
- )
-
- // genAll maps "\x00\x01\x02...\xfe\xff" to "[all]", amongst other things.
- allBytes := make([]byte, 256)
- for i := range allBytes {
- allBytes[i] = byte(i)
- }
- allString := string(allBytes)
- genAll := NewStringReplacer(
- allString, "[all]",
- "\xff", "[ff]",
- "\x00", "[00]",
- )
- testCases = append(testCases,
- testCase{genAll, allString, "[all]"},
- testCase{genAll, "a\xff" + allString + "\x00", "a[ff][all][00]"},
- testCase{genAll, "", ""},
- )
-
- // Test cases with empty old strings.
-
- blankToX1 := NewStringReplacer("", "X")
- blankToX2 := NewStringReplacer("", "X", "", "")
- blankHighPriority := NewStringReplacer("", "X", "o", "O")
- blankLowPriority := NewStringReplacer("o", "O", "", "X")
- blankNoOp1 := NewStringReplacer("", "")
- blankNoOp2 := NewStringReplacer("", "", "", "A")
- blankFoo := NewStringReplacer("", "X", "foobar", "R", "foobaz", "Z")
- testCases = append(testCases,
- testCase{blankToX1, "foo", "XfXoXoX"},
- testCase{blankToX1, "", "X"},
-
- testCase{blankToX2, "foo", "XfXoXoX"},
- testCase{blankToX2, "", "X"},
-
- testCase{blankHighPriority, "oo", "XOXOX"},
- testCase{blankHighPriority, "ii", "XiXiX"},
- testCase{blankHighPriority, "oiio", "XOXiXiXOX"},
- testCase{blankHighPriority, "iooi", "XiXOXOXiX"},
- testCase{blankHighPriority, "", "X"},
-
- testCase{blankLowPriority, "oo", "OOX"},
- testCase{blankLowPriority, "ii", "XiXiX"},
- testCase{blankLowPriority, "oiio", "OXiXiOX"},
- testCase{blankLowPriority, "iooi", "XiOOXiX"},
- testCase{blankLowPriority, "", "X"},
-
- testCase{blankNoOp1, "foo", "foo"},
- testCase{blankNoOp1, "", ""},
-
- testCase{blankNoOp2, "foo", "foo"},
- testCase{blankNoOp2, "", ""},
-
- testCase{blankFoo, "foobarfoobaz", "XRXZX"},
- testCase{blankFoo, "foobar-foobaz", "XRX-XZX"},
- testCase{blankFoo, "", "X"},
- )
-
- // single string replacer
-
- abcMatcher := NewStringReplacer("abc", "[match]")
-
- testCases = append(testCases,
- testCase{abcMatcher, "", ""},
- testCase{abcMatcher, "ab", "ab"},
- testCase{abcMatcher, "abc", "[match]"},
- testCase{abcMatcher, "abcd", "[match]d"},
- testCase{abcMatcher, "cabcabcdabca", "c[match][match]d[match]a"},
- )
-
- // Issue 6659 cases (more single string replacer)
-
- noHello := NewStringReplacer("Hello", "")
- testCases = append(testCases,
- testCase{noHello, "Hello", ""},
- testCase{noHello, "Hellox", "x"},
- testCase{noHello, "xHello", "x"},
- testCase{noHello, "xHellox", "xx"},
- )
-
- // No-arg test cases.
-
- nop := NewStringReplacer()
- testCases = append(testCases,
- testCase{nop, "abc", "abc"},
- testCase{nop, "", ""},
- )
-
- // Run the test cases.
-
- for i, tc := range testCases {
- if s := tc.r.Replace(tc.in); s != tc.out {
- t.Errorf("%d. strings.Replace(%q) = %q, want %q", i, tc.in, s, tc.out)
- }
- var buf bytes.Buffer
- n, err := tc.r.WriteString(&buf, tc.in)
- if err != nil {
- t.Errorf("%d. WriteString: %v", i, err)
- continue
- }
- got := buf.String()
- if got != tc.out {
- t.Errorf("%d. WriteString(%q) wrote %q, want %q", i, tc.in, got, tc.out)
- continue
- }
- if n != len(tc.out) {
- t.Errorf("%d. WriteString(%q) wrote correct string but reported %d bytes; want %d (%q)",
- i, tc.in, n, len(tc.out), tc.out)
- }
- }
-}
-
-type errWriter struct{}
-
-func (errWriter) Write(p []byte) (n int, err error) {
- return 0, fmt.Errorf("unwritable")
-}
-
-func BenchmarkGenericNoMatch(b *testing.B) {
- str := strings.Repeat("A", 100) + strings.Repeat("B", 100)
- generic := NewStringReplacer("a", "A", "b", "B", "12", "123") // varying lengths forces generic
- for i := 0; i < b.N; i++ {
- generic.Replace(str)
- }
-}
-
-func BenchmarkGenericMatch1(b *testing.B) {
- str := strings.Repeat("a", 100) + strings.Repeat("b", 100)
- generic := NewStringReplacer("a", "A", "b", "B", "12", "123")
- for i := 0; i < b.N; i++ {
- generic.Replace(str)
- }
-}
-
-func BenchmarkGenericMatch2(b *testing.B) {
- str := strings.Repeat("It&apos;s &lt;b&gt;HTML&lt;/b&gt;!", 100)
- for i := 0; i < b.N; i++ {
- htmlUnescaper.Replace(str)
- }
-}
-
-func benchmarkSingleString(b *testing.B, pattern, text string) {
- r := NewStringReplacer(pattern, "[match]")
- b.SetBytes(int64(len(text)))
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- r.Replace(text)
- }
-}
-
-func BenchmarkSingleMaxSkipping(b *testing.B) {
- benchmarkSingleString(b, strings.Repeat("b", 25), strings.Repeat("a", 10000))
-}
-
-func BenchmarkSingleLongSuffixFail(b *testing.B) {
- benchmarkSingleString(b, "b"+strings.Repeat("a", 500), strings.Repeat("a", 1002))
-}
-
-func BenchmarkSingleMatch(b *testing.B) {
- benchmarkSingleString(b, "abcdef", strings.Repeat("abcdefghijklmno", 1000))
-}
-
-func BenchmarkByteByteNoMatch(b *testing.B) {
- str := strings.Repeat("A", 100) + strings.Repeat("B", 100)
- for i := 0; i < b.N; i++ {
- capitalLetters.Replace(str)
- }
-}
-
-func BenchmarkByteByteMatch(b *testing.B) {
- str := strings.Repeat("a", 100) + strings.Repeat("b", 100)
- for i := 0; i < b.N; i++ {
- capitalLetters.Replace(str)
- }
-}
-
-func BenchmarkByteStringMatch(b *testing.B) {
- str := "<" + strings.Repeat("a", 99) + strings.Repeat("b", 99) + ">"
- for i := 0; i < b.N; i++ {
- htmlEscaper.Replace(str)
- }
-}
-
-func BenchmarkHTMLEscapeNew(b *testing.B) {
- str := "I <3 to escape HTML & other text too."
- for i := 0; i < b.N; i++ {
- htmlEscaper.Replace(str)
- }
-}
-
-func BenchmarkHTMLEscapeOld(b *testing.B) {
- str := "I <3 to escape HTML & other text too."
- for i := 0; i < b.N; i++ {
- oldHTMLEscape(str)
- }
-}
-
-func BenchmarkByteStringReplacerWriteString(b *testing.B) {
- str := strings.Repeat("I <3 to escape HTML & other text too.", 100)
- buf := new(bytes.Buffer)
- for i := 0; i < b.N; i++ {
- htmlEscaper.WriteString(buf, str)
- buf.Reset()
- }
-}
-
-func BenchmarkByteReplacerWriteString(b *testing.B) {
- str := strings.Repeat("abcdefghijklmnopqrstuvwxyz", 100)
- buf := new(bytes.Buffer)
- for i := 0; i < b.N; i++ {
- capitalLetters.WriteString(buf, str)
- buf.Reset()
- }
-}
-
-// BenchmarkByteByteReplaces compares byteByteImpl against multiple Replaces.
-func BenchmarkByteByteReplaces(b *testing.B) {
- str := strings.Repeat("a", 100) + strings.Repeat("b", 100)
- for i := 0; i < b.N; i++ {
- strings.Replace(strings.Replace(str, "a", "A", -1), "b", "B", -1)
- }
-}
diff --git a/vendor/github.com/golangci/misspell/url.go b/vendor/github.com/golangci/misspell/url.go
deleted file mode 100644
index a91d1d967..000000000
--- a/vendor/github.com/golangci/misspell/url.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package misspell
-
-import (
- "regexp"
-)
-
-// Regexp for URL https://mathiasbynens.be/demo/url-regex
-//
-// original @imme_emosol (54 chars) has trouble with dashes in hostname
-// @(https?|ftp)://(-\.)?([^\s/?\.#-]+\.?)+(/[^\s]*)?$@iS.
-var reURL = regexp.MustCompile(`(?i)(https?|ftp)://(-\.)?([^\s/?.#]+\.?)+(/\S*)?`)
-
-// StripURL attempts to replace URLs with blank spaces, e.g.
-//
-// "xxx http://foo.com/ yyy -> "xxx yyyy".
-func StripURL(s string) string {
- return reURL.ReplaceAllStringFunc(s, replaceWithBlanks)
-}
diff --git a/vendor/github.com/golangci/misspell/words.go b/vendor/github.com/golangci/misspell/words.go
deleted file mode 100644
index 1603d87e6..000000000
--- a/vendor/github.com/golangci/misspell/words.go
+++ /dev/null
@@ -1,31194 +0,0 @@
-package misspell
-
-// Code generated automatically. DO NOT EDIT.
-
-// DictMain is the main rule set, not including locale-specific spellings
-var DictMain = []string{
- "differentiatiations", "differentiations",
- "disproportionaltely", "disproportionately",
- "oversimplificiation", "oversimplification",
- "transcendentational", "transcendental",
- "anthromorphization", "anthropomorphization",
- "disporportionately", "disproportionately",
- "dispraportionately", "disproportionately",
- "disproportianately", "disproportionately",
- "disproportionatley", "disproportionately",
- "disproprotionately", "disproportionately",
- "fundamentalistisch", "fundamentalists",
- "fundamentalistiska", "fundamentalists",
- "fundamentalistiske", "fundamentalists",
- "fundamentalistiskt", "fundamentalists",
- "histocompatability", "histocompatibility",
- "microtransacations", "microtransactions",
- "microtransacciones", "microtransactions",
- "microtransactional", "microtransactions",
- "microtransactioned", "microtransactions",
- "misunderstandingly", "misunderstandings",
- "oversemplification", "oversimplification",
- "oversimplifacation", "oversimplification",
- "oversimplificaiton", "oversimplification",
- "oversimplificating", "oversimplification",
- "oversimplyfication", "oversimplification",
- "cardiovasculaires", "cardiovascular",
- "certificationkits", "certifications",
- "counterporductive", "counterproductive",
- "coutnerproductive", "counterproductive",
- "disporportionatly", "disproportionately",
- "disproportiantely", "disproportionately",
- "disproportionatly", "disproportionately",
- "disproportionnate", "disproportionate",
- "disrepresentation", "misrepresentation",
- "fundamentalistisk", "fundamentalists",
- "incompatabilities", "incompatibilities",
- "inconsequentional", "inconsequential",
- "indistinguishible", "indistinguishable",
- "indistingusihable", "indistinguishable",
- "indistinquishable", "indistinguishable",
- "indistuingishable", "indistinguishable",
- "instatutionalized", "institutionalized",
- "institucionalized", "institutionalized",
- "institutionilized", "institutionalized",
- "instutitionalized", "institutionalized",
- "instututionalized", "institutionalized",
- "interchangeablely", "interchangeably",
- "interchangeablity", "interchangeably",
- "intercontinential", "intercontinental",
- "micortransactions", "microtransactions",
- "microstansactions", "microtransactions",
- "microtramsactions", "microtransactions",
- "microtranasctions", "microtransactions",
- "microtransacitons", "microtransactions",
- "microtransacrions", "microtransactions",
- "microtransactioms", "microtransactions",
- "microtransactiosn", "microtransactions",
- "microtranscations", "microtransactions",
- "microtrasnactions", "microtransactions",
- "mircotransactions", "microtransactions",
- "misinterpretating", "misinterpreting",
- "misrepresantation", "misrepresentation",
- "misrepresentaiton", "misrepresentation",
- "misrepresentating", "misrepresenting",
- "misunderstantings", "misunderstandings",
- "mocrotransactions", "microtransactions",
- "oversimplifaction", "oversimplification",
- "oversimplificaton", "oversimplification",
- "oversimplifiction", "oversimplification",
- "responsibillities", "responsibilities",
- "unconstitutionnal", "unconstitutional",
- "accomplishements", "accomplishments",
- "admininistrative", "administrative",
- "antidepresssants", "antidepressants",
- "architechturally", "architecturally",
- "cardiovasculaire", "cardiovascular",
- "charactarization", "characterization",
- "characterazation", "characterization",
- "characterisitics", "characteristics",
- "characteristsics", "characteristic",
- "characterizarion", "characterization",
- "charecterization", "characterization",
- "charicterization", "characterization",
- "circumstantional", "circumstantial",
- "conversationable", "conversational",
- "counterprodutive", "counterproductive",
- "demonstrationens", "demonstrations",
- "deterministische", "deterministic",
- "differenciations", "differentiation",
- "differentiantion", "differentiation",
- "differentiatiors", "differentiation",
- "differentitation", "differentiation",
- "disperportionate", "disproportionate",
- "disporportionate", "disproportionate",
- "dispraportionate", "disproportionate",
- "disproportianate", "disproportionate",
- "disproportionaly", "disproportionately",
- "disproprotionate", "disproportionate",
- "electromagnectic", "electromagnetic",
- "enviornmentalist", "environmentalist",
- "environmentality", "environmentally",
- "extraordinairily", "extraordinarily",
- "extraordinarilly", "extraordinary",
- "extraterrestials", "extraterrestrials",
- "fundamentalismos", "fundamentalists",
- "fundamentalismus", "fundamentalists",
- "fundamentalistas", "fundamentalists",
- "fundamentalisten", "fundamentalists",
- "fundamentalister", "fundamentalists",
- "imcomprehensible", "incomprehensible",
- "immunosupressant", "immunosuppressant",
- "imperfectionists", "imperfections",
- "implementaciones", "implementations",
- "implementationen", "implementations",
- "implementationer", "implementations",
- "inappropriatelly", "inappropriately",
- "incompatablities", "incompatibilities",
- "incompatiblities", "incompatibilities",
- "incomprehencible", "incomprehensible",
- "incomprehendible", "incomprehensible",
- "incomprehenisble", "incomprehensible",
- "incomprehensable", "incomprehensible",
- "incomprehinsible", "incomprehensible",
- "incomprihensible", "incomprehensible",
- "inconprehensible", "incomprehensible",
- "inconsistentcies", "inconsistencies",
- "inconstitutional", "unconstitutional",
- "incrompehensible", "incomprehensible",
- "indistinguisable", "indistinguishable",
- "institutionlized", "institutionalized",
- "intellectualiser", "intellectuals",
- "intellectualisme", "intellectuals",
- "interchangeabley", "interchangeably",
- "internationnally", "internationally",
- "interpretaciones", "interpretations",
- "interpretationen", "interpretations",
- "manoeuverability", "maneuverability",
- "massachusettians", "massachusetts",
- "microtransacions", "microtransactions",
- "microtransacting", "microtransactions",
- "microtransactios", "microtransactions",
- "microtransactons", "microtransactions",
- "microtransations", "microtransactions",
- "microtranscation", "microtransactions",
- "mircotransaction", "microtransactions",
- "miscommunciation", "miscommunication",
- "miscommunicaiton", "miscommunication",
- "miscomunnication", "miscommunication",
- "miscummunication", "miscommunication",
- "misinterpretated", "misinterpreted",
- "misinterpretions", "misinterpreting",
- "misinterpretting", "misinterpreting",
- "misproportionate", "disproportionate",
- "misrepresenation", "misrepresentation",
- "misrepresentaion", "misrepresentation",
- "misrepresentated", "misrepresented",
- "misrepresentatie", "misrepresentation",
- "misrepresentativ", "misrepresentation",
- "misubderstanding", "misunderstandings",
- "misudnerstanding", "misunderstandings",
- "misundarstanding", "misunderstandings",
- "misunderatanding", "misunderstandings",
- "misunderdtanding", "misunderstandings",
- "misundersatnding", "misunderstandings",
- "misundersranding", "misunderstandings",
- "misunderstadings", "misunderstandings",
- "misunderstadning", "misunderstandings",
- "misunderstamding", "misunderstandings",
- "misunderstandigs", "misunderstandings",
- "misunderstandimg", "misunderstandings",
- "misunderstandind", "misunderstandings",
- "misunderstanging", "misunderstandings",
- "misunderstanidng", "misunderstandings",
- "misunderstanings", "misunderstandings",
- "misunderstansing", "misunderstandings",
- "misunderstanting", "misunderstandings",
- "misunderstending", "misunderstandings",
- "misunderstnading", "misunderstandings",
- "misunderstsnding", "misunderstandings",
- "misunderstunding", "misunderstandings",
- "misundertsanding", "misunderstandings",
- "misundrestanding", "misunderstandings",
- "misunterstanding", "misunderstandings",
- "nationalistische", "nationalistic",
- "nationalististic", "nationalistic",
- "neconstitutional", "unconstitutional",
- "notwhithstanding", "notwithstanding",
- "objectificiation", "objectification",
- "organisationnels", "organisations",
- "perpendiculaires", "perpendicular",
- "phillosophically", "philosophically",
- "preinitalization", "preinitialization",
- "prescriptionists", "prescriptions",
- "procrastinarting", "procrastinating",
- "procrastinationg", "procrastinating",
- "procrastinazione", "procrastination",
- "professionalisim", "professionalism",
- "professionalisme", "professionals",
- "professionallism", "professionalism",
- "professionnalism", "professionalism",
- "programattically", "programmatically",
- "proportionallity", "proportionally",
- "reaponsibilities", "responsibilities",
- "reinitalizations", "reinitializations",
- "representaciones", "representations",
- "representationen", "representations",
- "representationer", "representations",
- "repsonsibilities", "responsibilities",
- "responcibilities", "responsibilities",
- "responisbilities", "responsibilities",
- "responsabilities", "responsibilities",
- "responsebilities", "responsibilities",
- "straightforeward", "straightforward",
- "surrepetitiously", "surreptitiously",
- "technologicially", "technologically",
- "unconditionnally", "unconditionally",
- "unconfortability", "discomfort",
- "unconstititional", "unconstitutional",
- "uncontrollablely", "uncontrollably",
- "underestimateing", "underestimating",
- "understandablely", "understandably",
- "unintentionnally", "unintentionally",
- "unsubstantianted", "unsubstantiated",
- "unsubstantiative", "unsubstantiated",
- "acclimitization", "acclimatization",
- "accomplishemnts", "accomplishments",
- "accountabillity", "accountability",
- "acknolwedgement", "acknowledgement",
- "acknoweldgement", "acknowledgement",
- "acknowldegement", "acknowledgement",
- "acknowlegdement", "acknowledgement",
- "administratieve", "administrative",
- "administratiors", "administrators",
- "administrativne", "administrative",
- "aforementionned", "aforementioned",
- "anitdepressants", "antidepressants",
- "antidepressents", "antidepressants",
- "archetecturally", "architecturally",
- "associationthis", "associations",
- "authobiographic", "autobiographic",
- "awknowledgement", "acknowledgement",
- "bureaucratische", "bureaucratic",
- "cardiovascualar", "cardiovascular",
- "carnagie-mellon", "carnegie-mellon",
- "carnigie-mellon", "carnegie-mellon",
- "celebrationists", "celebrations",
- "charactaristics", "characteristics",
- "characterisitcs", "characteristics",
- "characterisitic", "characteristic",
- "characterizaton", "characterization",
- "charactersistic", "characteristic",
- "charactersitics", "characteristics",
- "charactoristics", "characteristics",
- "charecteristics", "characteristics",
- "comfrontational", "confrontational",
- "commuinications", "communications",
- "compatabilities", "compatibilities",
- "complimentarity", "complimentary",
- "compositionwise", "compositions",
- "confidenciality", "confidential",
- "confidentuality", "confidential",
- "confrentational", "confrontational",
- "confrontacional", "confrontational",
- "conglaturations", "congratulations",
- "congradulations", "congratulations",
- "congragulations", "congratulations",
- "congratualtions", "congratulations",
- "congraturations", "congratulations",
- "consequentually", "consequently",
- "constitutionnal", "constitutional",
- "deinitalization", "deinitialization",
- "denominationals", "denominations",
- "destinationhash", "destinations",
- "deterministisch", "deterministic",
- "developmentwise", "developments",
- "differantiation", "differentiation",
- "differenciation", "differentiation",
- "differientation", "differentiation",
- "discriminatoire", "discriminate",
- "discriminatorie", "discriminate",
- "disproportiante", "disproportionate",
- "disproportinate", "disproportionate",
- "elecrtomagnetic", "electromagnetic",
- "electormagnetic", "electromagnetic",
- "electromagentic", "electromagnetic",
- "electromagnatic", "electromagnetic",
- "electromangetic", "electromagnetic",
- "electromegnetic", "electromagnetic",
- "electronagnetic", "electromagnetic",
- "enivronmentally", "environmentally",
- "entrepreneurers", "entrepreneurs",
- "enviornmentally", "environmentally",
- "enviromentalist", "environmentalist",
- "environemntally", "environmentally",
- "envrionmentally", "environmentally",
- "evolutionarilly", "evolutionary",
- "experementation", "experimentation",
- "experimantation", "experimentation",
- "experimentacion", "experimentation",
- "experimentating", "experimentation",
- "experimenterade", "experimented",
- "experimintation", "experimentation",
- "expirementation", "experimentation",
- "extraodrinarily", "extraordinarily",
- "extraordinairly", "extraordinarily",
- "extraordinarely", "extraordinarily",
- "extraordinaryly", "extraordinarily",
- "extraterrestial", "extraterrestrial",
- "extroardinarily", "extraordinarily",
- "fondamentalists", "fundamentalists",
- "fundamendalists", "fundamentalists",
- "fundamentalisme", "fundamentals",
- "fundamentalismo", "fundamentals",
- "fundamentalista", "fundamentals",
- "fundamentalisti", "fundamentals",
- "fundamnetalists", "fundamentalists",
- "fundemantalists", "fundamentalists",
- "fundimentalists", "fundamentalists",
- "fundumentalists", "fundamentalists",
- "gongratulations", "congratulations",
- "grammaticallity", "grammatically",
- "gundamentalists", "fundamentalists",
- "idiosynchracies", "idiosyncrasies",
- "implementaitons", "implementations",
- "implimentations", "implementations",
- "inapporpriately", "inappropriately",
- "inappropraitely", "inappropriately",
- "inappropriatley", "inappropriately",
- "incompatability", "incompatibility",
- "incompetentence", "incompetence",
- "incomprehensibe", "incomprehensible",
- "incomprehesible", "incomprehensible",
- "inconcequential", "inconsequential",
- "inconcistencies", "inconsistencies",
- "inconditionally", "unconditionally",
- "inconsecuential", "inconsequential",
- "inconsequantial", "inconsequential",
- "inconsequencial", "inconsequential",
- "inconsequentual", "inconsequential",
- "inconsiquential", "inconsequential",
- "inconsistancies", "inconsistencies",
- "inconsistencias", "inconsistencies",
- "inconsistensies", "inconsistencies",
- "inconsistenties", "inconsistencies",
- "independentisme", "independents",
- "independentiste", "independents",
- "independentness", "independents",
- "inexperiencable", "inexperience",
- "inplementations", "implementations",
- "instantaneoulsy", "instantaneous",
- "institutionella", "institutional",
- "institutionnels", "institutions",
- "instutionalized", "institutionalized",
- "insubstantiated", "unsubstantiated",
- "interchangabley", "interchangeably",
- "interchangebale", "interchangeable",
- "intercontinetal", "intercontinental",
- "interpertations", "interpretations",
- "interpratations", "interpretations",
- "interpritations", "interpretations",
- "intersectionals", "intersections",
- "intrepretations", "interpretations",
- "investigationes", "investigations",
- "journalistische", "journalistic",
- "libertarianisim", "libertarianism",
- "libertarianisme", "libertarians",
- "libertarianismo", "libertarians",
- "libertarianists", "libertarians",
- "libertariansism", "libertarianism",
- "manisfestations", "manifestations",
- "manouverability", "maneuverability",
- "manufacturerers", "manufacturers",
- "marshmallowiest", "marshmallows",
- "marshmallowness", "marshmallows",
- "microtransacton", "microtransactions",
- "mininterpreting", "misinterpreting",
- "miscommuniation", "miscommunication",
- "miscommunicatie", "miscommunication",
- "miscommuniction", "miscommunication",
- "misinterperting", "misinterpreting",
- "misinterprating", "misinterpreting",
- "misinterprented", "misinterpret",
- "misinterprested", "misinterpret",
- "misinterpretion", "misinterpreting",
- "misinterpretted", "misinterpreted",
- "misinterpriting", "misinterpreting",
- "misintrepreting", "misinterpreting",
- "misrepresention", "misrepresenting",
- "misunderstading", "misunderstanding",
- "misunderstandig", "misunderstandings",
- "misunderstandng", "misunderstandings",
- "misunderstaning", "misunderstanding",
- "multicultralism", "multiculturalism",
- "multinationella", "multinational",
- "nationalistisch", "nationalists",
- "nationalistisen", "nationalists",
- "nationalistiska", "nationalists",
- "nationalistiske", "nationalists",
- "nationalistiskt", "nationalists",
- "nationalistista", "nationalists",
- "objectificaiton", "objectification",
- "objectivication", "objectification",
- "organisationens", "organisations",
- "organisationers", "organisations",
- "overestimateing", "overestimating",
- "paychologically", "psychologically",
- "performancetest", "performances",
- "performancewise", "performances",
- "perpendiculaire", "perpendicular",
- "pharamceuticals", "pharmaceutical",
- "pharmacueticals", "pharmaceutical",
- "philoshopically", "philosophically",
- "philosohpically", "philosophically",
- "philosophycally", "philosophically",
- "phsycologically", "psychologically",
- "phychologically", "psychologically",
- "phylosophically", "philosophically",
- "physcologically", "psychologically",
- "precrastination", "procrastination",
- "prefessionalism", "professionalism",
- "premonasterians", "premonstratensians",
- "procastrinating", "procrastinating",
- "procastrination", "procrastination",
- "procrascinating", "procrastinating",
- "procrastenating", "procrastinating",
- "procrastiantion", "procrastination",
- "procrastibating", "procrastinating",
- "procrastibation", "procrastination",
- "procrastonating", "procrastinating",
- "procrestinating", "procrastinating",
- "procrestination", "procrastination",
- "professionalsim", "professionalism",
- "prograstination", "procrastination",
- "progressionists", "progressions",
- "progressionwise", "progressions",
- "prokrastination", "procrastination",
- "proportionallly", "proportionally",
- "proscratination", "procrastination",
- "pscyhologically", "psychologically",
- "pshycologically", "psychologically",
- "psichologically", "psychologically",
- "psychedelicious", "psychedelics",
- "psychedelicness", "psychedelics",
- "psycholigically", "psychologically",
- "psychopathische", "psychopathic",
- "pyschologically", "psychologically",
- "racionalization", "rationalization",
- "rationalizaiton", "rationalization",
- "rationalizating", "rationalization",
- "reccomendations", "recommendations",
- "recommandations", "recommendations",
- "recommondations", "recommendations",
- "reinitalization", "reinitialization",
- "repersentations", "representations",
- "represantations", "representations",
- "represantatives", "representatives",
- "representatieve", "representative",
- "representativas", "representatives",
- "representetives", "representatives",
- "representitives", "representatives",
- "responibilities", "responsibilities",
- "responsibilites", "responsibilities",
- "responsibilitys", "responsibilities",
- "responsibillity", "responsibility",
- "responsibilties", "responsibilities",
- "responsiblities", "responsibilities",
- "ridiculoussness", "ridiculousness",
- "saskatchewinian", "saskatchewan",
- "satisfactorally", "satisfactory",
- "satisfactorilly", "satisfactory",
- "schizophreniiic", "schizophrenic",
- "sensationalisim", "sensationalism",
- "spreadsheeticus", "spreadsheets",
- "starightforward", "straightforward",
- "straigthforward", "straightforward",
- "striaghtforward", "straightforward",
- "sustainabillity", "sustainability",
- "technoligically", "technologically",
- "troubelshooting", "troubleshooting",
- "troublehsooting", "troubleshooting",
- "troubleshotting", "troubleshooting",
- "trustworthyness", "trustworthiness",
- "ubsubstantiated", "unsubstantiated",
- "unappropriately", "inappropriately",
- "uncomfortablely", "uncomfortably",
- "uncomfortablity", "uncomfortably",
- "unconditionable", "unconditional",
- "unconstituional", "unconstitutional",
- "uncontitutional", "unconstitutional",
- "uncontrollabley", "uncontrollably",
- "uncontrollablly", "uncontrollably",
- "unconventionnal", "unconventional",
- "underastimating", "underestimating",
- "underestemating", "underestimating",
- "understandabley", "understandably",
- "unintensionally", "unintentionally",
- "unprofessionnal", "unprofessional",
- "unresponsivness", "unresponsive",
- "unsibstantiated", "unsubstantiated",
- "unsubstanciated", "unsubstantiated",
- "unsubstansiated", "unsubstantiated",
- "unsusbtantiated", "unsubstantiated",
- "untranslateable", "untranslatable",
- "vulernabilities", "vulnerabilities",
- "vulnarabilities", "vulnerabilities",
- "vulnurabilities", "vulnerabilities",
- "vunlerabilities", "vulnerabilities",
- "vurnerabilities", "vulnerabilities",
- "accomplishemnt", "accomplishment",
- "accomplishents", "accomplishes",
- "acconplishment", "accomplishment",
- "acknowledgeing", "acknowledging",
- "acknowledgemnt", "acknowledgement",
- "acomplishments", "accomplishments",
- "administartion", "administration",
- "administartors", "administrators",
- "administraters", "administrators",
- "administratief", "administrative",
- "administratiei", "administrative",
- "administratior", "administrator",
- "administrativo", "administration",
- "adminsitration", "administration",
- "adminsitrative", "administrative",
- "adminsitrators", "administrators",
- "affectionatley", "affectionate",
- "aforememtioned", "aforementioned",
- "aforementioend", "aforementioned",
- "alternativelly", "alternatively",
- "amministrative", "administrative",
- "anitdepressant", "antidepressants",
- "approproximate", "approximate",
- "approximatelly", "approximately",
- "archeaologists", "archeologists",
- "architechtures", "architectures",
- "architectureal", "architectural",
- "architecturial", "architectural",
- "assassintation", "assassination",
- "authenitcation", "authentication",
- "authenticaiton", "authentication",
- "authobiography", "autobiography",
- "breakthroughts", "breakthroughs",
- "bureaucratisch", "bureaucratic",
- "calssification", "classification",
- "capatilization", "capitalization",
- "capitalizacion", "capitalization",
- "capitalizaiton", "capitalization",
- "capitalizating", "capitalization",
- "capitilazation", "capitalization",
- "capitolization", "capitalization",
- "captialization", "capitalization",
- "cardiocascular", "cardiovascular",
- "cardiovascualr", "cardiovascular",
- "cardiovasuclar", "cardiovascular",
- "caridovascular", "cardiovascular",
- "cessationalism", "sensationalism",
- "cessationalist", "sensationalist",
- "charactaristic", "characteristic",
- "characterisics", "characteristics",
- "characterisitc", "characteristics",
- "characteristcs", "characteristics",
- "characteritics", "characteristic",
- "charactersitic", "characteristics",
- "charasteristic", "characteristics",
- "charecteristic", "characteristic",
- "cheeseburguers", "cheeseburgers",
- "cinematagraphy", "cinematography",
- "cinematagrophy", "cinematography",
- "cinematograhpy", "cinematography",
- "cinematogrophy", "cinematography",
- "cinematogrpahy", "cinematography",
- "cinemetography", "cinematography",
- "cinimatography", "cinematography",
- "circumstansial", "circumstantial",
- "circumstantual", "circumstantial",
- "circumstential", "circumstantial",
- "circunstantial", "circumstantial",
- "classificaiton", "classification",
- "coincedentally", "coincidentally",
- "coinsidentally", "coincidentally",
- "commemmorating", "commemorating",
- "communciations", "communications",
- "compatablities", "compatibilities",
- "compatibillity", "compatibility",
- "compatiblities", "compatibilities",
- "competitioners", "competitions",
- "comphrehensive", "comprehensive",
- "computationnal", "computational",
- "concatentation", "concatenation",
- "conciderations", "considerations",
- "condescenscion", "condescension",
- "condradictions", "contradictions",
- "configuartions", "configurations",
- "confugurations", "configurations",
- "conglaturation", "congratulations",
- "congratulatons", "congratulations",
- "conicidentally", "coincidentally",
- "conifgurations", "configurations",
- "conscioussness", "consciousness",
- "consentrations", "concentrations",
- "consiciousness", "consciousness",
- "considerablely", "considerably",
- "considerstions", "considerations",
- "constititional", "constitutional",
- "constitucional", "constitutional",
- "contamporaries", "contemporaries",
- "contemporaneus", "contemporaneous",
- "contraceptivos", "contraceptives",
- "contradicitons", "contradictions",
- "contradictiong", "contradicting",
- "contriceptives", "contraceptives",
- "controceptives", "contraceptives",
- "controdictions", "contradictions",
- "conversacional", "conversational",
- "converstaional", "conversational",
- "correpsondence", "correspondence",
- "correspondants", "correspondents",
- "correspondense", "correspondence",
- "correspondente", "correspondence",
- "corrispondants", "correspondents",
- "corrispondence", "correspondence",
- "corrospondence", "correspondence",
- "costumizations", "customization",
- "councidentally", "coincidentally",
- "crystalisation", "crystallisation",
- "curcumstantial", "circumstantial",
- "demenstrations", "demonstrations",
- "deminstrations", "demonstrations",
- "demonstartions", "demonstrations",
- "demonstrativno", "demonstrations",
- "demonstrativos", "demonstrations",
- "demosntrations", "demonstrations",
- "desintegration", "disintegration",
- "deterioriating", "deteriorating",
- "determinisitic", "deterministic",
- "differentiaton", "differentiation",
- "disatisfaction", "dissatisfaction",
- "discrimanatory", "discriminatory",
- "discriminacion", "discrimination",
- "discriminitory", "discriminatory",
- "disillusionned", "disillusioned",
- "diskrimination", "discrimination",
- "disproportiate", "disproportionate",
- "distingiushing", "distinguishing",
- "distingquished", "distinguished",
- "distingusihing", "distinguishing",
- "distinquishing", "distinguishing",
- "distuingishing", "distinguishing",
- "dysfunctionnal", "dysfunctional",
- "eldistribution", "redistribution",
- "electromagnetc", "electromagnetic",
- "electromagntic", "electromagnetic",
- "endoctrination", "indoctrination",
- "enthusiastisch", "enthusiastic",
- "entrepreneuers", "entrepreneurs",
- "entrepreneures", "entrepreneurs",
- "enviormentally", "environmentally",
- "enviromentally", "environmentally",
- "environmentals", "environments",
- "environmentaly", "environmentally",
- "experimentaion", "experimentation",
- "experimentella", "experimental",
- "extraordinairy", "extraordinary",
- "extraordinarly", "extraordinary",
- "extrordinarily", "extraordinarily",
- "fondamentalist", "fundamentalist",
- "foreshadowning", "foreshadowing",
- "functionallity", "functionality",
- "fundamendalist", "fundamentalist",
- "fundamentalits", "fundamentalists",
- "fundamnetalist", "fundamentalist",
- "fundemantalist", "fundamentalist",
- "fundimentalist", "fundamentalist",
- "fundumentalist", "fundamentalist",
- "generalizacion", "generalization",
- "generalizating", "generalization",
- "generelization", "generalization",
- "geographacilly", "geographically",
- "geographycally", "geographically",
- "geogrpahically", "geographically",
- "geopraphically", "geographically",
- "goegraphically", "geographically",
- "grandchilderen", "grandchildren",
- "gravitationnal", "gravitational",
- "groubdbreaking", "groundbreaking",
- "groudnbreaking", "groundbreaking",
- "hallcuinations", "hallucination",
- "hallicunations", "hallucinations",
- "hallucenations", "hallucinations",
- "halluciantions", "hallucinations",
- "hallucinaitons", "hallucination",
- "hallunications", "hallucinations",
- "hallusinations", "hallucinations",
- "halluzinations", "hallucinations",
- "hellucinations", "hallucinations",
- "heterosexuella", "heterosexual",
- "hipothetically", "hypothetically",
- "homosexuallity", "homosexuality",
- "hullucinations", "hallucinations",
- "hyopthetically", "hypothetically",
- "hypathetically", "hypothetically",
- "hypethetically", "hypothetically",
- "hypotehtically", "hypothetically",
- "hypotethically", "hypothetically",
- "identificacion", "identification",
- "identificaiton", "identification",
- "identificativo", "identification",
- "identifikation", "identification",
- "imlpementation", "implementations",
- "impelmentation", "implementations",
- "impersonationg", "impersonating",
- "implementacion", "implementation",
- "implementaiton", "implementation",
- "implementating", "implementation",
- "implementatino", "implementations",
- "implemetnation", "implementations",
- "implimentation", "implementation",
- "impossibillity", "impossibility",
- "inadvertantely", "inadvertently",
- "inappropriatly", "inappropriately",
- "inapproprietly", "inappropriately",
- "incompatablity", "incompatibility",
- "incompatiblity", "incompatibility",
- "inconsequental", "inconsequential",
- "inconsistentcy", "inconsistency",
- "incontrollably", "uncontrollably",
- "inconventional", "unconventional",
- "inconvienenced", "inconvenience",
- "indestrictible", "indestructible",
- "indestructuble", "indestructible",
- "indetification", "identification",
- "indistructible", "indestructible",
- "individuallity", "individuality",
- "indocrtination", "indoctrination",
- "indoctrication", "indoctrination",
- "indoktrination", "indoctrination",
- "industiralized", "industrialized",
- "industrailized", "industrialized",
- "industrualized", "industrialized",
- "industructible", "indestructible",
- "inexplicablely", "inexplicably",
- "infrastracture", "infrastructure",
- "infrastructuur", "infrastructure",
- "infrastrucutre", "infrastructure",
- "infrastrukture", "infrastructure",
- "infrastrutture", "infrastructure",
- "infrasturcture", "infrastructure",
- "initalisations", "initialisations",
- "initalizations", "initializations",
- "inplementation", "implementation",
- "inspirationnal", "inspirational",
- "instinctivelly", "instinctively",
- "institutionale", "institutionalized",
- "institutionals", "institutions",
- "institutionnal", "institutional",
- "intellectualis", "intellectuals",
- "intellectualls", "intellectuals",
- "intellecutally", "intellectually",
- "intercepticons", "interceptions",
- "interchangable", "interchangeable",
- "interchangably", "interchangeably",
- "interchangeble", "interchangeable",
- "interchangebly", "interchangeably",
- "interlectually", "intellectually",
- "internationaal", "international",
- "internationaly", "internationally",
- "internationnal", "international",
- "interpersonnal", "interpersonal",
- "interpertation", "interpretation",
- "interpratation", "interpretation",
- "interpretacion", "interpretation",
- "interpretaiton", "interpretations",
- "interpretating", "interpretation",
- "interpritation", "interpretation",
- "interstellaire", "interstellar",
- "intillectually", "intellectually",
- "intrepretation", "interpretation",
- "invesitgations", "investigations",
- "investiagtions", "investigations",
- "investigatiors", "investigations",
- "investigativos", "investigations",
- "investigstions", "investigations",
- "irrationallity", "irrationally",
- "irresponsibile", "irresponsible",
- "journalistisch", "journalistic",
- "justificativos", "justifications",
- "koncentrations", "concentrations",
- "liberatrianism", "libertarianism",
- "libertarainism", "libertarianism",
- "libertariansim", "libertarianism",
- "libertarinaism", "libertarianism",
- "libertaryanism", "libertarianism",
- "libertatianism", "libertarianism",
- "liberterianism", "libertarianism",
- "libretarianism", "libertarianism",
- "manufactureers", "manufactures",
- "manufactureras", "manufactures",
- "manufacturered", "manufactured",
- "manufactureres", "manufacturers",
- "manufactureros", "manufactures",
- "massachusettes", "massachusetts",
- "massachussetts", "massachusetts",
- "mataphorically", "metaphorically",
- "mathameticians", "mathematicians",
- "mathemagically", "mathematically",
- "mathematitians", "mathematicians",
- "mathemetically", "mathematically",
- "mathemeticians", "mathematicians",
- "mathimatically", "mathematically",
- "mediterainnean", "mediterranean",
- "mediterrannean", "mediterranean",
- "metaphotically", "metaphorically",
- "metephorically", "metaphorically",
- "methaporically", "metaphorically",
- "metiphorically", "metaphorically",
- "metophorically", "metaphorically",
- "metropolitaine", "metropolitan",
- "misconseptions", "misconceptions",
- "misinterperted", "misinterpreted",
- "misintrepreted", "misinterpreted",
- "mulitnationals", "multinational",
- "mulitplication", "multiplication",
- "multiplicacion", "multiplication",
- "multiplicaiton", "multiplication",
- "multiplicativo", "multiplication",
- "multiplikation", "multiplication",
- "mutlinationals", "multinational",
- "mutliplication", "multiplication",
- "nationalisitic", "nationalistic",
- "nationalistics", "nationalists",
- "nationalisties", "nationalists",
- "nationalistisk", "nationalists",
- "neighbourhoood", "neighbourhood",
- "nieghbourhoods", "neighbourhood",
- "northereastern", "northeastern",
- "objectificaton", "objectification",
- "opthalmologist", "ophthalmologist",
- "organizacional", "organizational",
- "organizaitonal", "organizational",
- "organziational", "organizational",
- "orginazational", "organizational",
- "overestemating", "overestimating",
- "overextimating", "overestimating",
- "overhwelmingly", "overwhelmingly",
- "overhwlemingly", "overwhelmingly",
- "overpolulation", "overpopulation",
- "overpopluation", "overpopulation",
- "oversetimating", "overestimating",
- "overshadowered", "overshadowed",
- "overwhemlingly", "overwhelmingly",
- "overwhlemingly", "overwhelmingly",
- "paliamentarian", "parliamentarian",
- "parliamentiary", "parliamentary",
- "performancepcs", "performances",
- "personalitites", "personalities",
- "pharamceutical", "pharmaceutical",
- "pharmaceudical", "pharmaceutical",
- "pharmacuetical", "pharmaceutical",
- "pharmaseutical", "pharmaceutical",
- "pharmeceutical", "pharmaceutical",
- "philosophicaly", "philosophically",
- "phramaceutical", "pharmaceutical",
- "playthroughers", "playthroughs",
- "porportionally", "proportionally",
- "practitionners", "practitioners",
- "predeterminded", "predetermined",
- "predominantely", "predominantly",
- "predominantley", "predominantly",
- "preinitalizing", "preinitializing",
- "prerequisities", "prerequisite",
- "procrastinatin", "procrastination",
- "procrastinaton", "procrastination",
- "professionials", "professionalism",
- "professionnals", "professionals",
- "profitabillity", "profitability",
- "progressivelly", "progressively",
- "progressivisme", "progressives",
- "pronounciation", "pronunciation",
- "proportianally", "proportionally",
- "proportionalty", "proportionally",
- "proportionella", "proportionally",
- "proprotionally", "proportionally",
- "protruberances", "protuberances",
- "pseudononymous", "pseudonymous",
- "psychologicaly", "psychologically",
- "qaulifications", "qualification",
- "qualifiactions", "qualification",
- "qualificaitons", "qualifications",
- "quarterbackers", "quarterbacks",
- "rationalizaton", "rationalization",
- "reaponsibility", "responsibility",
- "recommandation", "recommendation",
- "recommedations", "recommendations",
- "recommondation", "recommendation",
- "reconnaissence", "reconnaissance",
- "reconstruccion", "reconstruction",
- "reconsturction", "reconstruction",
- "redistirbution", "redistribution",
- "redistribucion", "redistribution",
- "redistributivo", "redistribution",
- "redistrubition", "redistribution",
- "refridgeration", "refrigeration",
- "rehabilitacion", "rehabilitation",
- "rehabilitaiton", "rehabilitation",
- "reinforcemnets", "reinforcements",
- "rekommendation", "recommendation",
- "rektifications", "certifications",
- "reniforcements", "reinforcements",
- "repersentation", "representation",
- "represantation", "representation",
- "represantative", "representative",
- "representacion", "representation",
- "representaiton", "representations",
- "representatief", "representative",
- "representating", "representation",
- "representativo", "representation",
- "representetive", "representative",
- "representitive", "representative",
- "representstion", "representations",
- "representstive", "representatives",
- "represetnation", "representations",
- "represnetation", "representations",
- "reprezentative", "representative",
- "repsonsibility", "responsibility",
- "resistribution", "redistribution",
- "responcibility", "responsibility",
- "responisbility", "responsibility",
- "responnsibilty", "responsibility",
- "responsability", "responsibility",
- "responsibilies", "responsibilities",
- "responsibities", "responsibilities",
- "restaraunteurs", "restaurateurs",
- "retroactivelly", "retroactively",
- "revolutionairy", "revolutionary",
- "revolutionnary", "revolutionary",
- "ridicilousness", "ridiculousness",
- "ridicoulusness", "ridiculousness",
- "rienforcements", "reinforcements",
- "righteoussness", "righteousness",
- "satisfactoraly", "satisfactory",
- "satisfactority", "satisfactorily",
- "sceintifically", "scientifically",
- "schizophrentic", "schizophrenic",
- "screenwrighter", "screenwriter",
- "sensacionalism", "sensationalism",
- "sensacionalist", "sensationalist",
- "sensasionalism", "sensationalism",
- "sensasionalist", "sensationalist",
- "sensationality", "sensationalist",
- "sensationalizm", "sensationalism",
- "sensationalsim", "sensationalism",
- "sensationilism", "sensationalism",
- "sensationilist", "sensationalist",
- "sensationslism", "sensationalism",
- "sensetionalism", "sensationalism",
- "sensibilisiert", "sensibilities",
- "sentationalism", "sensationalism",
- "sentationalist", "sensationalist",
- "senzationalism", "sensationalism",
- "senzationalist", "sensationalist",
- "sepcifications", "specification",
- "simaltaneously", "simultaneously",
- "simeltaneously", "simultaneously",
- "similtaneously", "simultaneously",
- "simlutaneously", "simultaneously",
- "simplificacion", "simplification",
- "simplificaiton", "simplification",
- "simplificating", "simplification",
- "simulatenously", "simultaneously",
- "simulatneously", "simultaneously",
- "simultaenously", "simultaneously",
- "simultainously", "simultaneously",
- "simultaneoulsy", "simultaneously",
- "simultaniously", "simultaneously",
- "simulteanously", "simultaneously",
- "sistematically", "systematically",
- "slaugterhouses", "slaughterhouses",
- "specailization", "specialization",
- "specialication", "specialization",
- "specializaiton", "specialization",
- "specificaitons", "specification",
- "speciliazation", "specialization",
- "spectacularely", "spectacularly",
- "spectacularily", "spectacularly",
- "spesifications", "specifications",
- "spezialisation", "specialization",
- "sportsmansship", "sportsmanship",
- "spreadsheeters", "spreadsheets",
- "straightforwad", "straightforward",
- "subconcsiously", "subconsciously",
- "subconsicously", "subconsciously",
- "subsconciously", "subconsciously",
- "sunconsciously", "subconsciously",
- "superintendant", "superintendent",
- "suppliementing", "supplementing",
- "surrepetitious", "surreptitious",
- "survivabililty", "survivability",
- "survivabillity", "survivability",
- "sustainabiltiy", "sustainability",
- "syncronization", "synchronization",
- "systemetically", "systematically",
- "systimatically", "systematically",
- "technologicaly", "technologically",
- "thermodinamics", "thermodynamics",
- "thermodyanmics", "thermodynamics",
- "thermodymamics", "thermodynamics",
- "thermodymanics", "thermodynamics",
- "thermodynamcis", "thermodynamics",
- "thermodynanics", "thermodynamics",
- "thermodynmaics", "thermodynamics",
- "thernodynamics", "thermodynamics",
- "theromdynamics", "thermodynamics",
- "transformacion", "transformation",
- "transfromation", "transformation",
- "transitionable", "transitional",
- "transitionning", "transitioning",
- "transofrmation", "transformation",
- "trasnformation", "transformation",
- "trasnportation", "transportation",
- "unbelievablely", "unbelievably",
- "unchallengable", "unchallengeable",
- "uncomfortabley", "uncomfortably",
- "uncomfortablly", "uncomfortably",
- "unconciousness", "unconsciousness",
- "unconditionaly", "unconditionally",
- "unconditionnal", "unconditional",
- "unconsciouslly", "unconsciously",
- "uncontrallable", "uncontrollable",
- "uncontrallably", "uncontrollably",
- "uncontrolablly", "uncontrollably",
- "unconvectional", "unconventional",
- "unconvencional", "unconventional",
- "unconvensional", "unconventional",
- "unconventianal", "unconventional",
- "underastimated", "underestimated",
- "underestamated", "underestimated",
- "underestemated", "underestimated",
- "underestimeted", "underestimated",
- "undersetimated", "underestimated",
- "understandebly", "understandably",
- "understandible", "understandable",
- "understandibly", "understandably",
- "undestructible", "indestructible",
- "unforetunately", "unfortunately",
- "unfortunatelly", "unfortunately",
- "unfourtunately", "unfortunately",
- "uninitalizable", "uninitializable",
- "unintelligient", "unintelligent",
- "unintentionaly", "unintentionally",
- "unintentionnal", "unintentional",
- "unmanouverable", "unmaneuverable",
- "unneccessarily", "unnecessarily",
- "unnecessarilly", "unnecessarily",
- "unprecendented", "unprecedented",
- "unprofessionel", "unprofessional",
- "unreasonablely", "unreasonably",
- "unsubstantiaed", "unsubstantiated",
- "unsurprizingly", "unsurprisingly",
- "vizualisations", "visualization",
- "vulnerabilites", "vulnerabilities",
- "vulnerabillity", "vulnerability",
- "vulnerablility", "vulnerability",
- "wholeheartadly", "wholeheartedly",
- "wholeheartidly", "wholeheartedly",
- "abbrievations", "abbreviation",
- "accelleration", "acceleration",
- "accomadations", "accommodations",
- "accommadating", "accommodating",
- "accommadation", "accommodation",
- "accommidation", "accommodation",
- "accomodations", "accommodations",
- "accomondating", "accommodating",
- "accomondation", "accommodation",
- "accomplishent", "accomplishment",
- "accountabilty", "accountability",
- "accredidation", "accreditation",
- "acknolwedging", "acknowledging",
- "acknowlegding", "acknowledging",
- "acomplishment", "accomplishment",
- "acquaintaince", "acquaintance",
- "acquaintences", "acquaintances",
- "acquaintinces", "acquaintances",
- "acquanitances", "acquaintance",
- "acquantainces", "acquaintances",
- "acquantiances", "acquaintances",
- "acquiantances", "acquaintances",
- "acquiantences", "acquaintances",
- "adminastrator", "administrator",
- "administartor", "administrator",
- "administraion", "administration",
- "administraron", "administrator",
- "administrater", "administrator",
- "administratio", "administrator",
- "administraton", "administration",
- "adminsitrator", "administrator",
- "adminstration", "administration",
- "adminstrative", "administrative",
- "admissability", "admissibility",
- "adnimistrator", "administrators",
- "adverticement", "advertisement",
- "advertisiment", "advertisement",
- "advertisments", "advertisements",
- "advirtisement", "advertisement",
- "aestethically", "aesthetically",
- "aesthatically", "aesthetically",
- "aesthitically", "aesthetically",
- "affectionnate", "affectionate",
- "aforementiond", "aforementioned",
- "agriculturual", "agricultural",
- "agrumentative", "argumentative",
- "alterantively", "alternatively",
- "alternativets", "alternatives",
- "alternativley", "alternatively",
- "alternitavely", "alternatively",
- "alternitively", "alternatively",
- "aninteresting", "uninteresting",
- "annoucnements", "announcements",
- "antagonisitic", "antagonistic",
- "anthropolgist", "anthropologist",
- "apporpriately", "appropriately",
- "apporpriation", "appropriation",
- "apporximately", "approximately",
- "appreciateing", "appreciating",
- "appreciateive", "appreciative",
- "appreciationg", "appreciating",
- "appropirately", "appropriately",
- "appropiration", "appropriation",
- "appropraitely", "appropriately",
- "appropreation", "appropriation",
- "appropriatley", "appropriately",
- "appropropiate", "appropriate",
- "approrpiation", "appropriation",
- "approxamately", "approximately",
- "approxiamtely", "approximately",
- "approximatley", "approximately",
- "approximitely", "approximately",
- "aqcuaintances", "acquaintances",
- "aqquaintances", "acquaintances",
- "archaelogical", "archaeological",
- "archaelogists", "archaeologists",
- "archeaologist", "archeologist",
- "archetectural", "architectural",
- "architechture", "architecture",
- "architechural", "architectural",
- "architectrual", "architectural",
- "architecutral", "architectural",
- "argumentitive", "argumentative",
- "arugmentative", "argumentative",
- "asethetically", "aesthetically",
- "assasinations", "assassinations",
- "audomoderator", "automoderator",
- "australianess", "australians",
- "authenticaion", "authentication",
- "authenticaton", "authentication",
- "autherization", "authorization",
- "authoratitive", "authoritative",
- "authoritatian", "authoritarian",
- "authoritation", "authorization",
- "authorititive", "authoritative",
- "authoritorian", "authoritarian",
- "authorotative", "authoritative",
- "authroization", "authorization",
- "automoderador", "automoderator",
- "automoderater", "automoderator",
- "automodorator", "automoderator",
- "automoterator", "automoderator",
- "autoritharian", "authoritarian",
- "availabillity", "availability",
- "awknowledging", "acknowledging",
- "billingualism", "bilingualism",
- "billionairres", "billionaire",
- "borderlanders", "borderlands",
- "breadtfeeding", "breastfeeding",
- "breastfeading", "breastfeeding",
- "breatsfeeding", "breastfeeding",
- "broadacasting", "broadcasting",
- "bureaucractic", "bureaucratic",
- "bureaucratics", "bureaucrats",
- "bureaucratius", "bureaucrats",
- "californiaman", "californian",
- "calrification", "clarification",
- "capitalizaton", "capitalization",
- "carbohdyrates", "carbohydrates",
- "carbohidrates", "carbohydrates",
- "carbohyrdates", "carbohydrates",
- "carboyhdrates", "carbohydrates",
- "carthographer", "cartographer",
- "catagorically", "categorically",
- "catastrophies", "catastrophe",
- "catastrophize", "catastrophe",
- "catigorically", "categorically",
- "catterpillars", "caterpillars",
- "celebrationis", "celebrations",
- "ceritfication", "certifications",
- "certificaiton", "certification",
- "championchips", "championship",
- "championshiop", "championships",
- "championsship", "championships",
- "chanpionships", "championships",
- "charactarized", "characterized",
- "characterisic", "characteristic",
- "characteristc", "characteristics",
- "characterists", "characteristics",
- "charicterized", "characterized",
- "charismatisch", "charismatic",
- "checkpointusa", "checkpoints",
- "cheeseburgare", "cheeseburger",
- "cheeseburgler", "cheeseburger",
- "cheeseburguer", "cheeseburger",
- "cheezeburgers", "cheeseburgers",
- "chornological", "chronological",
- "chronoligical", "chronological",
- "chronologicly", "chronological",
- "cinematograhy", "cinematography",
- "cinematograpy", "cinematography",
- "circomference", "circumference",
- "circumcission", "circumcision",
- "circumferance", "circumference",
- "circumsicions", "circumcision",
- "circumstanial", "circumstantial",
- "circumstantal", "circumstantial",
- "circumstnaces", "circumstance",
- "circunference", "circumference",
- "circunstances", "circumstances",
- "cirucmference", "circumference",
- "cirucmstances", "circumstances",
- "civilications", "civilizations",
- "civilizaitons", "civilizations",
- "clarificaiton", "clarification",
- "clasification", "clarification",
- "clerification", "clarification",
- "coincidentaly", "coincidentally",
- "coincidential", "coincidental",
- "colaborations", "collaborations",
- "collabaration", "collaboration",
- "collaberation", "collaboration",
- "collaberative", "collaborative",
- "collaboratore", "collaborate",
- "collectioners", "collections",
- "collectivelly", "collectively",
- "collobaration", "collaboration",
- "combatibility", "compatibility",
- "comeptitively", "competitively",
- "comfortablely", "comfortably",
- "comfortablity", "comfortably",
- "comfrontation", "confrontation",
- "commemerative", "commemorative",
- "commericially", "commercially",
- "commerorative", "commemorative",
- "comminication", "communication",
- "comminucation", "communications",
- "commissionees", "commissions",
- "commissionned", "commissioned",
- "commissionner", "commissioner",
- "commmemorated", "commemorated",
- "commuications", "communications",
- "commuincation", "communications",
- "communciation", "communication",
- "communiaction", "communications",
- "communicaiton", "communication",
- "communicatoin", "communications",
- "communicatons", "communications",
- "compadibility", "compatibility",
- "comparativley", "comparatively",
- "comparetively", "comparatively",
- "comparitavely", "comparatively",
- "comparitively", "comparatively",
- "compatability", "compatibility",
- "compatibiltiy", "compatibility",
- "compeditively", "competitively",
- "compensantion", "compensation",
- "compensationg", "compensating",
- "comperatively", "comparatively",
- "comperhension", "comprehension",
- "competatively", "competitively",
- "competitavely", "competitively",
- "competitevely", "competitively",
- "competitivley", "competitively",
- "competiveness", "competitiveness",
- "compilcations", "complication",
- "compitability", "compatibility",
- "complciations", "complication",
- "complecations", "complications",
- "compliactions", "complication",
- "complicaitons", "complication",
- "complilations", "complications",
- "complimentery", "complimentary",
- "complimentoni", "complimenting",
- "complimentory", "complimentary",
- "comprehention", "comprehension",
- "computacional", "computational",
- "comtamination", "contamination",
- "comtemplating", "contemplating",
- "concatination", "contamination",
- "conceivablely", "conceivably",
- "concencration", "concentration",
- "concenrtation", "concentrations",
- "concentartion", "concentrations",
- "concentracion", "concentration",
- "concentraited", "concentrated",
- "concentraiton", "concentrations",
- "concentratons", "concentrations",
- "concervatives", "conservatives",
- "concideration", "consideration",
- "concioussness", "consciousness",
- "concnetration", "concentrations",
- "concsiousness", "consciousness",
- "condascending", "condescending",
- "condescencion", "condescension",
- "condescendion", "condescension",
- "condescensing", "condescension",
- "condiscending", "condescending",
- "conditionning", "conditioning",
- "condradicting", "contradicting",
- "condradiction", "contradiction",
- "condradictory", "contradictory",
- "conecntration", "concentrations",
- "conenctration", "concentrations",
- "confidentally", "confidentially",
- "configrations", "configurations",
- "configruation", "configurations",
- "configuartion", "configuration",
- "configuracion", "configuration",
- "configuraiton", "configuration",
- "configuratoin", "configurations",
- "configureable", "configurable",
- "confrentation", "confrontation",
- "confrontacion", "confrontation",
- "confrontating", "confrontation",
- "confrontativo", "confrontation",
- "congratualted", "congratulate",
- "conifguration", "configurations",
- "conisderation", "considerations",
- "connecticunts", "connecticut",
- "connectivitiy", "connectivity",
- "conpassionate", "compassionate",
- "conplications", "complications",
- "conplimentary", "complimentary",
- "conplimenting", "complimenting",
- "conprehension", "comprehension",
- "consdieration", "considerations",
- "consenquently", "consequently",
- "consentrating", "concentrating",
- "consentration", "concentration",
- "consequencies", "consequence",
- "consequentely", "consequently",
- "consequeseces", "consequences",
- "conservatisim", "conservatism",
- "conservativsm", "conservatism",
- "conservitives", "conservatives",
- "consicousness", "consciousness",
- "considerabely", "considerable",
- "considerabile", "considerable",
- "considerabley", "considerably",
- "considerablly", "considerably",
- "consideracion", "consideration",
- "consideratoin", "considerations",
- "considerstion", "considerations",
- "considertaion", "considerations",
- "consituencies", "constituencies",
- "consitutional", "constitutional",
- "constallation", "constellation",
- "constarnation", "consternation",
- "constillation", "constellation",
- "constituintes", "constituents",
- "constituional", "constitutional",
- "constitutents", "constitutes",
- "constitutinal", "constitutional",
- "constructicon", "construction",
- "constructieve", "constructive",
- "constructiong", "constructing",
- "consttruction", "construction",
- "contaminacion", "contamination",
- "contaminanted", "contaminated",
- "contanimation", "contamination",
- "contenplating", "contemplating",
- "contimplating", "contemplating",
- "contraceptivo", "contraception",
- "contradiccion", "contradiction",
- "contradicitng", "contradicting",
- "contradiciton", "contradiction",
- "contradictary", "contradictory",
- "contradictons", "contradicts",
- "contraticting", "contradicting",
- "contravercial", "controversial",
- "contraversial", "controversial",
- "contreception", "contraception",
- "contreversial", "controversial",
- "contributeurs", "contributes",
- "contributiors", "contributors",
- "contriception", "contraception",
- "contridictory", "contradictory",
- "contritutions", "contributions",
- "contriversial", "controversial",
- "controception", "contraception",
- "controdicting", "contradicting",
- "controdiction", "contradiction",
- "controvercial", "controversial",
- "controverisal", "controversial",
- "controversary", "controversy",
- "controversity", "controversy",
- "controvertial", "controversial",
- "contstruction", "construction",
- "conventionnal", "conventional",
- "converastions", "conservation",
- "conversationa", "conservation",
- "conversationg", "conservation",
- "conversationy", "conservation",
- "conversatiosn", "conservation",
- "conversatives", "conservatives",
- "converstaions", "conversations",
- "convorsations", "conversations",
- "cooresponding", "corresponding",
- "coorperations", "corporations",
- "correctionals", "corrections",
- "correpsonding", "corresponding",
- "correspondant", "correspondent",
- "correspondece", "correspondence",
- "corresponders", "corresponds",
- "corresponsing", "corresponding",
- "corrispondant", "correspondent",
- "corrisponding", "corresponding",
- "corrosponding", "corresponding",
- "costomization", "customization",
- "costumization", "customization",
- "counterfeight", "counterfeit",
- "creationistas", "creationists",
- "cricumference", "circumference",
- "cringeworthey", "cringeworthy",
- "cringeworthly", "cringeworthy",
- "crytopgraphic", "cryptographic",
- "curcumference", "circumference",
- "curcumstances", "circumstances",
- "custumization", "customization",
- "cuztomization", "customization",
- "decentraliced", "decentralized",
- "decentrilized", "decentralized",
- "decomissioned", "decommissioned",
- "decompositing", "decomposing",
- "definitivelly", "definitively",
- "deinitalizing", "deinitializing",
- "demenstration", "demonstration",
- "democraticaly", "democratically",
- "democraticlly", "democratically",
- "demoninations", "denominations",
- "demonstarting", "demonstrating",
- "demonstartion", "demonstration",
- "demonstraiton", "demonstrations",
- "demonstratbly", "demonstrably",
- "demonstraties", "demonstrate",
- "demonstrativo", "demonstration",
- "demosntrating", "demonstrating",
- "demosntration", "demonstrations",
- "denomenations", "denominations",
- "denomonations", "denominations",
- "deomnstration", "demonstrations",
- "dermatalogist", "dermatologist",
- "dermatolagist", "dermatologist",
- "dermatoligist", "dermatologist",
- "dermatologyst", "dermatologist",
- "dermetologist", "dermatologist",
- "dermitologist", "dermatologist",
- "derpatologist", "dermatologist",
- "desentralized", "decentralized",
- "desillusioned", "disillusioned",
- "desintegrated", "disintegrated",
- "desinterested", "disinterested",
- "determenation", "determination",
- "determinacion", "determination",
- "determinining", "determining",
- "determinisitc", "deterministic",
- "determinsitic", "deterministic",
- "detmatologist", "dermatologist",
- "developmently", "developmental",
- "dezentralized", "decentralized",
- "differantiate", "differentiate",
- "differenciate", "differentiate",
- "differintiate", "differentiate",
- "diffirentiate", "differentiate",
- "disadvandages", "disadvantaged",
- "disadvantadge", "disadvantaged",
- "disadvanteged", "disadvantaged",
- "disadvanteges", "disadvantages",
- "disadvatanges", "disadvantages",
- "disadventaged", "disadvantaged",
- "disadventages", "disadvantages",
- "disallusioned", "disillusioned",
- "disappearence", "disappearance",
- "disappearnace", "disappearance",
- "disappearring", "disappearing",
- "disatvantaged", "disadvantaged",
- "disatvantages", "disadvantages",
- "disciplinairy", "disciplinary",
- "disciplinerad", "disciplined",
- "discipliniary", "disciplinary",
- "disconnecters", "disconnects",
- "discontinuted", "discontinued",
- "discrimianted", "discriminated",
- "discriminante", "discriminate",
- "discriminatie", "discriminate",
- "discriminatin", "discrimination",
- "disillisioned", "disillusioned",
- "disillutioned", "disillusioned",
- "disingenuious", "disingenuous",
- "disollusioned", "disillusioned",
- "disrecpectful", "disrespectful",
- "disrecpecting", "disrespecting",
- "disrepsectful", "disrespectful",
- "disrepsecting", "disrespecting",
- "disresepctful", "disrespectful",
- "disresepcting", "disrespecting",
- "disrespection", "disrespecting",
- "disrespekting", "disrespecting",
- "disrispectful", "disrespectful",
- "disrispecting", "disrespecting",
- "dissagreement", "disagreement",
- "dissapearance", "disappearance",
- "dissapointted", "dissapointed",
- "dissappointed", "disappointed",
- "dissobediance", "disobedience",
- "dissobedience", "disobedience",
- "distingishing", "distinguishing",
- "distinguising", "distinguishing",
- "distinquished", "distinguished",
- "distirbutions", "distributions",
- "distiungished", "distinguished",
- "distribustion", "distributions",
- "distributiors", "distributors",
- "distributivos", "distributions",
- "distrobutions", "distributions",
- "distrubitions", "distributions",
- "distuingished", "distinguished",
- "documantaries", "documentaries",
- "documenatries", "documentaries",
- "documentacion", "documentation",
- "documentaires", "documentaries",
- "documentaiton", "documentation",
- "documentarios", "documentaries",
- "documentaties", "documentaries",
- "documentating", "documentation",
- "documenteries", "documentaries",
- "documentories", "documentaries",
- "drammatically", "grammatically",
- "dsyfunctional", "dysfunctional",
- "dumbfoundeads", "dumbfounded",
- "dusfunctional", "dysfunctional",
- "dustification", "justification",
- "dysfonctional", "dysfunctional",
- "dysfucntional", "dysfunctional",
- "dysfuncitonal", "dysfunctional",
- "dysfunktional", "dysfunctional",
- "easthetically", "aesthetically",
- "effectiviness", "effectiveness",
- "effictiveness", "effectiveness",
- "effortlessely", "effortlessly",
- "effortlessley", "effortlessly",
- "embarrasement", "embarrassment",
- "embarrasments", "embarrassment",
- "embarressment", "embarrassment",
- "emberrassment", "embarrassment",
- "encarceration", "incarceration",
- "encorporating", "incorporating",
- "encyclopeadia", "encyclopedia",
- "encyclopeadic", "encyclopedia",
- "encyclopeedia", "encyclopedia",
- "encycolpedias", "encyclopedia",
- "endoctrinated", "indoctrinated",
- "enlightenting", "enlightening",
- "enlightnement", "enlightenment",
- "enligthenment", "enlightenment",
- "enteratinment", "entertainment",
- "enterpreneurs", "entrepreneurs",
- "enterprenuers", "entrepreneurs",
- "enterpreuners", "entrepreneurs",
- "entertianment", "entertainment",
- "enthusiasists", "enthusiasts",
- "enthusiastics", "enthusiasts",
- "entrepraneurs", "entrepreneurs",
- "entreprenaurs", "entrepreneurs",
- "entrepreneuer", "entrepreneurs",
- "entreprenours", "entrepreneurs",
- "entreprenuers", "entrepreneurs",
- "entreprenures", "entrepreneurs",
- "entrepreuners", "entrepreneurs",
- "entretainment", "entertainment",
- "enviornmental", "environmental",
- "environemntal", "environmental",
- "environmently", "environmental",
- "envolutionary", "evolutionary",
- "envrionmental", "environmental",
- "estabilshment", "establishments",
- "establishemnt", "establishments",
- "establishmnet", "establishments",
- "establsihment", "establishments",
- "estbalishment", "establishments",
- "ethnocentricm", "ethnocentrism",
- "evolutionairy", "evolutionary",
- "evolutionarly", "evolutionary",
- "evolutionnary", "evolutionary",
- "exaggeratting", "exaggerating",
- "excpetionally", "exceptionally",
- "executioneers", "executioner",
- "existentiella", "existential",
- "expectionally", "exceptionally",
- "experementing", "experimenting",
- "experienceing", "experiencing",
- "experimentais", "experiments",
- "experimention", "experimenting",
- "experimentors", "experiments",
- "expirementing", "experimenting",
- "expodentially", "exponentially",
- "exponantially", "exponentially",
- "exponencially", "exponentially",
- "exponentiella", "exponential",
- "extraodrinary", "extraordinary",
- "extraordianry", "extraordinary",
- "extraordinair", "extraordinary",
- "extraordinaly", "extraordinary",
- "extraoridnary", "extraordinary",
- "extremeophile", "extremophile",
- "extroardinary", "extraordinary",
- "familiarizate", "familiarize",
- "fantasitcally", "fantastically",
- "fantasmically", "fantastically",
- "fantistically", "fantastically",
- "faptastically", "fantastically",
- "figurativeley", "figuratively",
- "figurativelly", "figuratively",
- "frankenstiens", "frankenstein",
- "frankenstined", "frankenstein",
- "frankenstiner", "frankenstein",
- "frankenstines", "frankenstein",
- "friendzoneado", "friendzoned",
- "fucntionality", "functionality",
- "funcitonality", "functionality",
- "functionailty", "functionality",
- "fundamentalis", "fundamentals",
- "fundamnetally", "fundamentally",
- "fundementally", "fundamentally",
- "fundimentally", "fundamentally",
- "gamifications", "ramifications",
- "generalizaing", "generalizing",
- "generalizaton", "generalization",
- "generationals", "generations",
- "generationens", "generations",
- "generationers", "generations",
- "generationnal", "generational",
- "geographicaly", "geographically",
- "geographicial", "geographical",
- "geometricians", "geometers",
- "goreshadowing", "foreshadowing",
- "governmential", "governmental",
- "gradification", "gratification",
- "grammarically", "grammatically",
- "grandchildern", "grandchildren",
- "gratificacion", "gratification",
- "gratificaiton", "gratification",
- "grativational", "gravitational",
- "gravitacional", "gravitational",
- "gravitaitonal", "gravitational",
- "hallcuination", "hallucination",
- "hallicunation", "hallucination",
- "hallucenation", "hallucination",
- "halluciantion", "hallucinations",
- "hallukination", "hallucination",
- "hallunication", "hallucination",
- "hallusination", "hallucination",
- "halluzination", "hallucination",
- "heiroglyphics", "hieroglyphics",
- "hellucination", "hallucination",
- "highlightning", "highlighting",
- "homesexuality", "homosexuality",
- "homosexualtiy", "homosexuality",
- "homosexulaity", "homosexuality",
- "horizontallly", "horizontally",
- "hullucination", "hallucination",
- "hypocriticial", "hypocritical",
- "hypotheticaly", "hypothetically",
- "hystericallly", "hysterically",
- "identificaton", "identification",
- "ideoligically", "ideologically",
- "ideosyncratic", "idiosyncratic",
- "idiologically", "ideologically",
- "illistrations", "illustrations",
- "illustartions", "illustrations",
- "imperfactions", "imperfections",
- "impersinating", "impersonating",
- "implementaion", "implementation",
- "implementatin", "implementations",
- "implimenation", "implementation",
- "imprefections", "imperfections",
- "impresonating", "impersonating",
- "inaccessibile", "inaccessible",
- "inadventently", "inadvertently",
- "inadverdently", "inadvertently",
- "inadvertantly", "inadvertently",
- "inadvertendly", "inadvertently",
- "inapporpriate", "inappropriate",
- "inappropirate", "inappropriate",
- "inappropraite", "inappropriate",
- "inaproppriate", "inappropriate",
- "incarcaration", "incarceration",
- "incarciration", "incarceration",
- "incarseration", "incarceration",
- "incerceration", "incarceration",
- "incidentially", "incidentally",
- "incomfortable", "uncomfortable",
- "incomfortably", "uncomfortably",
- "incompatabile", "incompatible",
- "incompatiable", "incompatible",
- "incompatibile", "incompatible",
- "inconciderate", "inconsiderate",
- "inconcistency", "inconsistency",
- "inconditional", "unconditional",
- "inconsciously", "unconsciously",
- "inconsiderant", "inconsiderate",
- "inconsistance", "inconsistency",
- "inconsistancy", "inconsistency",
- "inconsistenly", "inconsistency",
- "inconsistensy", "inconsistency",
- "inconsistenty", "inconsistency",
- "inconveinence", "inconvenience",
- "inconveniance", "inconvenience",
- "inconveniente", "inconvenience",
- "inconvienence", "inconvenience",
- "incoroporated", "incorporated",
- "incorparating", "incorporating",
- "incorperating", "incorporating",
- "incorperation", "incorporation",
- "incorruptable", "incorruptible",
- "incramentally", "incrementally",
- "incrementarla", "incremental",
- "incrementarlo", "incremental",
- "indavertently", "inadvertently",
- "indefinitelly", "indefinitely",
- "independantes", "independents",
- "independantly", "independently",
- "independendet", "independent",
- "independendly", "independently",
- "indepentently", "independently",
- "indespensable", "indispensable",
- "indespensible", "indispensable",
- "indestructble", "indestructible",
- "indestructibe", "indestructible",
- "indictrinated", "indoctrinated",
- "indipendently", "independently",
- "indispensible", "indispensable",
- "indivuduality", "individuality",
- "indocrtinated", "indoctrinated",
- "indocternated", "indoctrinated",
- "indoctornated", "indoctrinated",
- "indoctrinatie", "indoctrinated",
- "indoctrinatin", "indoctrination",
- "indoctronated", "indoctrinated",
- "industrialied", "industrialized",
- "industrialzed", "industrialized",
- "inexeprienced", "inexperience",
- "inexpeirenced", "inexperience",
- "inexpereinced", "inexperienced",
- "inexperianced", "inexperienced",
- "inexperiecned", "inexperience",
- "inexperineced", "inexperience",
- "inexpierenced", "inexperienced",
- "inexplicabley", "inexplicably",
- "inexplicablly", "inexplicably",
- "infilitration", "infiltration",
- "infrastructre", "infrastructure",
- "infrastrucure", "infrastructure",
- "inintelligent", "unintelligent",
- "ininteresting", "uninteresting",
- "initalisation", "initialisation",
- "initalization", "initialization",
- "inperfections", "imperfections",
- "inpersonating", "impersonating",
- "inpossibility", "impossibility",
- "inpredictable", "unpredictable",
- "inresponsible", "irresponsible",
- "insectiverous", "insectivorous",
- "insecuritites", "insecurities",
- "insiginficant", "insignificant",
- "insiginifcant", "insignificant",
- "insignificent", "insignificant",
- "insignificunt", "insignificant",
- "insignifigant", "insignificant",
- "insiprational", "inspirational",
- "insperational", "inspirational",
- "inspiritional", "inspirational",
- "inspriational", "inspirational",
- "instantaenous", "instantaneous",
- "instantanious", "instantaneous",
- "instanteneous", "instantaneous",
- "instantenious", "instantaneous",
- "instincitvely", "instinctively",
- "instinctivley", "instinctively",
- "instititional", "institutional",
- "institutionel", "institutional",
- "insturmentals", "instrumental",
- "instutitional", "institutional",
- "insustainable", "unsustainable",
- "intelelctuals", "intellectuals",
- "intellectualy", "intellectually",
- "intellectuels", "intellectuals",
- "intellecutals", "intellectuals",
- "intellegently", "intelligently",
- "intelluctuals", "intellectuals",
- "intepretation", "interpretation",
- "intereactions", "intersections",
- "interesctions", "intersections",
- "interlectuals", "intellectuals",
- "intermittient", "intermittent",
- "intermittment", "intermittent",
- "internacional", "international",
- "interpersonel", "interpersonal",
- "interpresonal", "interpersonal",
- "interpretaion", "interpretation",
- "interpretarea", "interpreter",
- "interpretarem", "interpreter",
- "interpretares", "interpreter",
- "interpretarse", "interpreter",
- "interpretarte", "interpreter",
- "interpretatin", "interpretations",
- "interpreteert", "interpreter",
- "interragation", "interrogation",
- "interregation", "interrogation",
- "interrigation", "interrogation",
- "interrogacion", "interrogation",
- "interrogativo", "interrogation",
- "intertainment", "entertainment",
- "intillectuals", "intellectuals",
- "intraspection", "introspection",
- "intrensically", "intrinsically",
- "intriniscally", "intrinsically",
- "intrinsecally", "intrinsically",
- "intrisincally", "intrinsically",
- "intristically", "intrinsically",
- "introductiory", "introductory",
- "introspeccion", "introspection",
- "introspectivo", "introspection",
- "introspektion", "introspection",
- "invertibrates", "invertebrates",
- "invesitgation", "investigation",
- "invesitgative", "investigative",
- "invesitgators", "investigators",
- "investagators", "investigators",
- "investegating", "investigating",
- "investegators", "investigators",
- "investiagtion", "investigation",
- "investiagtive", "investigative",
- "investigacion", "investigation",
- "investigaiton", "investigations",
- "investigaters", "investigators",
- "investigativo", "investigation",
- "investigatons", "investigations",
- "investigsting", "investigating",
- "investigstion", "investigations",
- "investogators", "investigators",
- "invisibillity", "invisibility",
- "involuntarely", "involuntary",
- "involuntarity", "involuntary",
- "invulnerabile", "invulnerable",
- "irrationallly", "irrationally",
- "irresponcible", "irresponsible",
- "irresponisble", "irresponsible",
- "irresponsable", "irresponsible",
- "irresponsbile", "irresponsible",
- "irreversiable", "irreversible",
- "irreversibelt", "irreversible",
- "irreversibile", "irreversible",
- "irrisponsible", "irresponsible",
- "jacksonvillle", "jacksonville",
- "journalisitic", "journalistic",
- "journalistens", "journalists",
- "journalisters", "journalists",
- "journalistisk", "journalists",
- "jsutification", "justifications",
- "jurisdicitons", "jurisdictions",
- "jurisidctions", "jurisdictions",
- "juristictions", "jurisdictions",
- "jursidictions", "jurisdictions",
- "jusitfication", "justifications",
- "justifiaction", "justifications",
- "justificacion", "justification",
- "justificaiton", "justification",
- "justificativo", "justification",
- "justificatons", "justifications",
- "justificstion", "justifications",
- "justiifcation", "justifications",
- "karbohydrates", "carbohydrates",
- "knoweldgeable", "knowledgeable",
- "knowledegable", "knowledgeable",
- "knowledgebale", "knowledgable",
- "knowlegdeable", "knowledgeable",
- "kollaboration", "collaboration",
- "koncentration", "concentration",
- "konfiguration", "configuration",
- "konfrontation", "confrontation",
- "konservatives", "conservatives",
- "konstellation", "constellation",
- "kontamination", "contamination",
- "legitimatelly", "legitimately",
- "libertariaism", "libertarianism",
- "libertariansm", "libertarianism",
- "libitarianisn", "libertarianism",
- "lighthearthed", "lighthearted",
- "mainfestation", "manifestation",
- "manafacturers", "manufacturers",
- "manafacturing", "manufacturing",
- "manafestation", "manifestation",
- "manefestation", "manifestation",
- "manfuacturers", "manufactures",
- "manifacturers", "manufacturers",
- "manifacturing", "manufacturing",
- "manifastation", "manifestation",
- "manifestacion", "manifestation",
- "manifestating", "manifestation",
- "manifistation", "manifestation",
- "manipulationg", "manipulating",
- "manufacterers", "manufacturers",
- "manufactering", "manufacturing",
- "manufacterurs", "manufactures",
- "manufactorers", "manufacturers",
- "manufactoring", "manufacturing",
- "manufactuered", "manufactured",
- "manufactuerer", "manufacturer",
- "manufactueres", "manufactures",
- "manufacturedd", "manufactured",
- "manufactureds", "manufactures",
- "manufacturerd", "manufactured",
- "manufacturier", "manufacturer",
- "manufacturors", "manufacturers",
- "manufactuters", "manufactures",
- "manufacutrers", "manufactures",
- "manufcaturers", "manufactures",
- "marshmalllows", "marshmallows",
- "massachsuetts", "massachusetts",
- "massachucetts", "massachusetts",
- "massachuestts", "massachusetts",
- "massachusents", "massachusetts",
- "massachusites", "massachusetts",
- "massachussets", "massachusetts",
- "massechusetts", "massachusetts",
- "masturbateing", "masturbating",
- "materialisimo", "materialism",
- "mathamatician", "mathematician",
- "mathametician", "mathematician",
- "mathematicals", "mathematics",
- "mathematicaly", "mathematically",
- "mathematicans", "mathematics",
- "mathematicion", "mathematician",
- "mathematitian", "mathematician",
- "mathemetician", "mathematician",
- "mathmatically", "mathematically",
- "mathmaticians", "mathematicians",
- "mechanicallly", "mechanically",
- "medeterranean", "mediterranean",
- "meditarrenean", "mediterranean",
- "meditereanean", "mediterranean",
- "membranaphone", "membranophone",
- "metamorphysis", "metamorphosis",
- "metaphoricaly", "metaphorically",
- "metaphoricial", "metaphorical",
- "metaphysicals", "metaphysics",
- "metaphysicans", "metaphysics",
- "methamatician", "mathematician",
- "methematician", "mathematician",
- "metropolitain", "metropolitan",
- "metropolitcan", "metropolitan",
- "metropolitian", "metropolitan",
- "millionairres", "millionaire",
- "minneapolites", "minneapolis",
- "misanderstood", "misunderstood",
- "miscellanious", "miscellaneous",
- "misconcpetion", "misconceptions",
- "misconecption", "misconceptions",
- "misinterperet", "misinterpret",
- "misinterprate", "misinterpret",
- "misinterprent", "misinterpret",
- "misinterprted", "misinterpret",
- "misogynisitic", "misogynistic",
- "misrepreseted", "misrepresented",
- "misunterstood", "misunderstood",
- "modificaitons", "modifications",
- "motivationals", "motivations",
- "motivationnal", "motivational",
- "mulitnational", "multinational",
- "multimational", "multinational",
- "multiplicaton", "multiplication",
- "muncipalities", "municipalities",
- "munnicipality", "municipality",
- "mutlinational", "multinational",
- "nacionalistic", "nationalistic",
- "narcissisitic", "narcissistic",
- "narcississtic", "narcissistic",
- "natioanlistic", "nationalistic",
- "nationalisitc", "nationalistic",
- "nationalistes", "nationalists",
- "nationalsitic", "nationalistic",
- "neigbhourhood", "neighbourhood",
- "neighboorhoud", "neighbourhood",
- "neighborehood", "neighbourhood",
- "neighborhoood", "neighborhoods",
- "neighbourbood", "neighbourhood",
- "neighbourgood", "neighbourhood",
- "neighbourhoud", "neighbourhood",
- "neighourhoods", "neighborhoods",
- "nieghborhoods", "neighborhoods",
- "nieghbourhood", "neighbourhood",
- "noncombatents", "noncombatants",
- "noninitalized", "noninitialized",
- "northwestener", "northwestern",
- "notificaitons", "notifications",
- "occassionally", "occasionally",
- "operationable", "operational",
- "oppertunities", "opportunities",
- "opprotunities", "opportunities",
- "oppurtunities", "opportunities",
- "opthamologist", "ophthalmologist",
- "organistaions", "organisations",
- "organizatinal", "organizational",
- "organizativos", "organizations",
- "organsiations", "organisations",
- "organziations", "organizations",
- "orginasations", "organisations",
- "orginazations", "organizations",
- "overpopulaton", "overpopulation",
- "overreactiong", "overreacting",
- "overshaddowed", "overshadowed",
- "overwheliming", "overwhelming",
- "overwhelmigly", "overwhelmingly",
- "overwhelmingy", "overwhelmingly",
- "overwhelminly", "overwhelmingly",
- "palestininans", "palestinians",
- "paraphraseing", "paraphrasing",
- "paraphrashing", "paraphrasing",
- "parilamentary", "parliamentary",
- "parlaimentary", "parliamentary",
- "parliamantary", "parliamentary",
- "parliamentery", "parliamentary",
- "parliamnetary", "parliamentary",
- "parliementary", "parliamentary",
- "particiaption", "participation",
- "participacion", "participation",
- "participantes", "participants",
- "participativo", "participation",
- "particularely", "particularly",
- "particularily", "particularly",
- "particularlly", "particularly",
- "partizipation", "participation",
- "passionatelly", "passionately",
- "paychiatrists", "psychiatrists",
- "paychologists", "psychologists",
- "pennsylvainia", "pennsylvania",
- "pennsylvanica", "pennsylvania",
- "pennsylvannia", "pennsylvania",
- "perdominantly", "predominantly",
- "perpandicular", "perpendicular",
- "perpendicualr", "perpendicular",
- "perpenticular", "perpendicular",
- "perpetuationg", "perpetuating",
- "perpindicular", "perpendicular",
- "personalitits", "personalities",
- "pessimistisch", "pessimistic",
- "pharmaceutial", "pharmaceutical",
- "philisophical", "philosophical",
- "philosiphical", "philosophical",
- "philosohpical", "philosophical",
- "philosophycal", "philosophically",
- "philospohical", "philosophical",
- "phisiological", "physiological",
- "photagraphers", "photographers",
- "photographics", "photographs",
- "photographied", "photographed",
- "photographier", "photographer",
- "photograpphed", "photographed",
- "photogrophers", "photographers",
- "photogrpahers", "photographers",
- "photoshoppade", "photoshopped",
- "photoshoppped", "photoshopped",
- "phsyiological", "physiological",
- "phychiatrists", "psychiatrists",
- "phychological", "psychological",
- "phychologists", "psychologists",
- "phylosophical", "philosophical",
- "physciatrists", "psychiatrists",
- "physcological", "psychological",
- "physcologists", "psychologists",
- "physioligical", "physiological",
- "planeswlakers", "planeswalker",
- "plansewalkers", "planeswalker",
- "playthroughts", "playthroughs",
- "polysaccaride", "polysaccharide",
- "practicallity", "practically",
- "practicioners", "practitioners",
- "practisioners", "practitioners",
- "practitioneer", "practitioners",
- "practitionner", "practitioner",
- "pratictioners", "practitioners",
- "preconceieved", "preconceived",
- "predecessores", "predecessors",
- "predetermiend", "predetermined",
- "predetirmined", "predetermined",
- "preditermined", "predetermined",
- "predomenantly", "predominantly",
- "predominently", "predominantly",
- "pregressively", "progressively",
- "preinitalized", "preinitialized",
- "preinitalizes", "preinitializes",
- "preliferation", "proliferation",
- "prependicular", "perpendicular",
- "preposterious", "preposterous",
- "prerequisties", "prerequisite",
- "prerequistite", "prerequisite",
- "prescribtions", "prescriptions",
- "presumptuious", "presumptuous",
- "pretedermined", "predetermined",
- "problematisch", "problematic",
- "proclaimation", "proclamation",
- "prodominantly", "predominantly",
- "professionnal", "professional",
- "profitiablity", "profitability",
- "profitibality", "profitability",
- "progressivily", "progressively",
- "progressivley", "progressively",
- "prononciation", "pronunciation",
- "pronouciation", "pronunciation",
- "pronunciacion", "pronunciation",
- "pronunciating", "pronunciation",
- "pronuncuation", "pronunciation",
- "pronunication", "pronunciation",
- "pronuntiation", "pronunciation",
- "propabilities", "probabilities",
- "proportionaly", "proportionally",
- "proportionnal", "proportional",
- "proseletyzing", "proselytizing",
- "protagonistas", "protagonists",
- "protagonistes", "protagonists",
- "protestantisk", "protestants",
- "protruberance", "protuberance",
- "provocativley", "provocative",
- "pscyhiatrists", "psychiatrists",
- "pscyhological", "psychological",
- "pscyhologists", "psychologists",
- "pshycological", "psychological",
- "pshycologists", "psychologists",
- "psichological", "psychological",
- "psychaitrists", "psychiatrists",
- "psychedellics", "psychedelics",
- "psychiatrisch", "psychiatric",
- "psycholigical", "psychological",
- "psycholigists", "psychologists",
- "psychologycal", "psychologically",
- "psychologysts", "psychologists",
- "psychyatrists", "psychiatrists",
- "psysiological", "physiological",
- "purpendicular", "perpendicular",
- "pyschiatrists", "psychiatrists",
- "pyschological", "psychological",
- "pyschologists", "psychologists",
- "qaulification", "qualification",
- "qualifiaction", "qualification",
- "qualificaiton", "qualifications",
- "qualificatons", "qualifications",
- "qualifikation", "qualification",
- "questionalble", "questionable",
- "quinessential", "quintessential",
- "ramificaitons", "ramifications",
- "realisitcally", "realistically",
- "realtionships", "relationships",
- "reccommending", "recommending",
- "receptionnist", "receptionist",
- "receptionsist", "receptionist",
- "reconaissance", "reconnaissance",
- "reconcilation", "reconciliation",
- "reconnaisance", "reconnaissance",
- "reconstrucion", "reconstruction",
- "recreationnal", "recreational",
- "rectangulaire", "rectangular",
- "redistribuito", "redistribution",
- "redistributin", "redistribution",
- "reencarnation", "reincarnation",
- "refridgerator", "refrigerator",
- "rehabilitaion", "rehabilitation",
- "rehabilitatin", "rehabilitation",
- "rehabilitaton", "rehabilitation",
- "reincarantion", "reincarnation",
- "reincatnation", "reincarnation",
- "reinforcemens", "reinforcements",
- "reinforcemnts", "reinforcements",
- "reinitalising", "reinitialising",
- "reinitalizing", "reinitializing",
- "reinkarnation", "reincarnation",
- "reinstallling", "reinstalling",
- "reintarnation", "reincarnation",
- "relationshits", "relationships",
- "relationsship", "relationships",
- "relatiopnship", "relationship",
- "relentlessely", "relentlessly",
- "relentlessley", "relentlessly",
- "relinqushment", "relinquishment",
- "remifications", "ramifications",
- "reprehenisble", "reprehensible",
- "reprehensable", "reprehensible",
- "reprehinsible", "reprehensible",
- "represenation", "representation",
- "represensible", "reprehensible",
- "representaion", "representation",
- "representatie", "representatives",
- "representatin", "representations",
- "representerad", "represented",
- "representitve", "representative",
- "representives", "representatives",
- "repricussions", "repercussions",
- "reprihensible", "reprehensible",
- "resolutionary", "revolutionary",
- "respectivelly", "respectively",
- "responsibiliy", "responsibility",
- "responsibilty", "responsibility",
- "responsiblity", "responsibility",
- "respositories", "repositories",
- "resssurecting", "resurrecting",
- "ressurrection", "resurrection",
- "restaraunteur", "restaurateur",
- "retoractively", "retroactively",
- "retroactivily", "retroactively",
- "retroactivley", "retroactively",
- "retrocatively", "retroactively",
- "revelutionary", "revolutionary",
- "revolutionair", "revolutionary",
- "revolutionens", "revolutions",
- "revolutioners", "revolutions",
- "revoultionary", "revolutionary",
- "ridiculouness", "ridiculousness",
- "rienforcement", "reinforcements",
- "righetousness", "righteousness",
- "rightiousness", "righteousness",
- "rigtheousness", "righteousness",
- "rollarcoaster", "rollercoaster",
- "rollercaoster", "rollercoaster",
- "rollercoaters", "rollercoaster",
- "rollercoatser", "rollercoaster",
- "rollerocaster", "rollercoaster",
- "rollertoaster", "rollercoaster",
- "rollorcoaster", "rollercoaster",
- "sacrastically", "sarcastically",
- "sarcasitcally", "sarcastically",
- "satisfactorly", "satisfactory",
- "scandianvians", "scandinavian",
- "scateboarding", "skateboarding",
- "schisophrenic", "schizophrenic",
- "schiziphrenic", "schizophrenic",
- "schizophernia", "schizophrenia",
- "schizophernic", "schizophrenic",
- "schizophrania", "schizophrenia",
- "schizoprhenia", "schizophrenia",
- "schizoprhenic", "schizophrenic",
- "schozophrenia", "schizophrenia",
- "schozophrenic", "schizophrenic",
- "schyzophrenia", "schizophrenia",
- "schyzophrenic", "schizophrenic",
- "schziophrenia", "schizophrenia",
- "schziophrenic", "schizophrenic",
- "scientificaly", "scientifically",
- "scientificlly", "scientifically",
- "segementation", "segmentation",
- "sensationable", "sensational",
- "sensationails", "sensationalism",
- "sensationaism", "sensationalism",
- "sensationalim", "sensationalism",
- "sensationella", "sensational",
- "shcizophrenic", "schizophrenic",
- "significanlty", "significantly",
- "significently", "significantly",
- "signifigantly", "significantly",
- "simultaneosly", "simultaneously",
- "simultaneuous", "simultaneous",
- "simultanously", "simultaneously",
- "singificantly", "significantly",
- "skatebaording", "skateboarding",
- "skateborading", "skateboarding",
- "socioecenomic", "socioeconomic",
- "socioecomonic", "socioeconomic",
- "socioeconimic", "socioeconomic",
- "sohpisticated", "sophisticated",
- "sophisitcated", "sophisticated",
- "sophistacated", "sophisticated",
- "sophistocated", "sophisticated",
- "sophosticated", "sophisticated",
- "spacification", "specification",
- "specializaton", "specialization",
- "specificaiton", "specifications",
- "specificatons", "specifications",
- "specifikation", "specification",
- "spectaculaire", "spectacular",
- "spectaculalry", "spectacularly",
- "spectatularly", "spectacularly",
- "spesification", "specification",
- "spirituallity", "spiritually",
- "sponatenously", "spontaneously",
- "spontaenously", "spontaneously",
- "spontainously", "spontaneously",
- "spontaneoulsy", "spontaneously",
- "spontaneuosly", "spontaneously",
- "spontaniously", "spontaneously",
- "spontanuously", "spontaneously",
- "sponteanously", "spontaneously",
- "sponteneously", "spontaneously",
- "sporstmanship", "sportsmanship",
- "sportmansship", "sportsmanship",
- "sportsmamship", "sportsmanship",
- "sportsmenship", "sportsmanship",
- "sprotsmanship", "sportsmanship",
- "stakeboarding", "skateboarding",
- "startegically", "strategically",
- "statisitcally", "statistically",
- "statistacally", "statistically",
- "stereotipical", "stereotypical",
- "stereotpyical", "stereotypical",
- "stereotypcial", "stereotypical",
- "stereotypeing", "stereotyping",
- "stereotypying", "stereotyping",
- "steriotypical", "stereotypical",
- "steroetypical", "stereotypical",
- "steryotypical", "stereotypical",
- "storytellling", "storytelling",
- "stragegically", "strategically",
- "stragetically", "strategically",
- "straightenend", "straightened",
- "straitforward", "straightforward",
- "stratagically", "strategically",
- "stratigically", "strategically",
- "strawberrries", "strawberries",
- "stregnthening", "strengthening",
- "strenghtening", "strengthening",
- "strengthining", "strengthening",
- "stretegically", "strategically",
- "subcatagories", "subcategories",
- "subconsciosly", "subconsciously",
- "subconsciouly", "subconsciously",
- "subconsiously", "subconsciously",
- "subjectivelly", "subjectively",
- "subscribtions", "subscriptions",
- "substancially", "substantially",
- "substanitally", "substantially",
- "substansially", "substantially",
- "substantiable", "substantial",
- "substantually", "substantially",
- "substitutents", "substitutes",
- "successfullly", "successfully",
- "supermarkedet", "supermarket",
- "supermarkerts", "supermarkets",
- "superpowereds", "superpowers",
- "supersticious", "superstitious",
- "superstisious", "superstitious",
- "superstitiosi", "superstitious",
- "superstitiuos", "superstitious",
- "superstituous", "superstitious",
- "suphisticated", "sophisticated",
- "supscriptions", "subscriptions",
- "surreptiously", "surreptitiously",
- "survavibility", "survivability",
- "survibability", "survivability",
- "survivabiltiy", "survivability",
- "survivalibity", "survivability",
- "survivavility", "survivability",
- "survivebility", "survivability",
- "susbtantially", "substantially",
- "sustainabilty", "sustainability",
- "synchornously", "synchronously",
- "systematicaly", "systematically",
- "systematiclly", "systematically",
- "techmological", "technological",
- "technicallity", "technically",
- "technoligical", "technological",
- "technologicly", "technological",
- "techonlogical", "technological",
- "telaportation", "teleportation",
- "teleportating", "teleportation",
- "teleprotation", "teleportation",
- "teliportation", "teleportation",
- "teloportation", "teleportation",
- "territoriella", "territorial",
- "theoratically", "theoretically",
- "theoritically", "theoretically",
- "therapeutisch", "therapeutic",
- "thereotically", "theoretically",
- "thermodynaics", "thermodynamics",
- "thermodynamcs", "thermodynamics",
- "theroetically", "theoretically",
- "thoeretically", "theoretically",
- "tranistioning", "transitioning",
- "transcendance", "transcendence",
- "transcribtion", "transcription",
- "transcripcion", "transcription",
- "transferrring", "transferring",
- "transformarea", "transformer",
- "transformarem", "transformer",
- "transformarse", "transformers",
- "transformaton", "transformation",
- "transformered", "transformed",
- "transgengered", "transgendered",
- "transisioning", "transitioning",
- "transitionals", "transitions",
- "transitionnal", "transitional",
- "transitionned", "transitioned",
- "transkription", "transcription",
- "translyvanian", "transylvania",
- "transmisisons", "transmissions",
- "transmissable", "transmissible",
- "transmisssion", "transmissions",
- "transparantie", "transparent",
- "transparentcy", "transparency",
- "transplantees", "transplants",
- "transporation", "transportation",
- "transportaion", "transportation",
- "transportarme", "transporter",
- "transportarse", "transporter",
- "transportarte", "transporter",
- "transporteurs", "transporter",
- "transsexuella", "transsexual",
- "transylvannia", "transylvania",
- "trasngendered", "transgendered",
- "troubleshooot", "troubleshoot",
- "udnerestimate", "underestimated",
- "umcomfortable", "uncomfortable",
- "umcomfortably", "uncomfortably",
- "umpredictable", "unpredictable",
- "unappropriate", "inappropriate",
- "unbelievabley", "unbelievably",
- "unbelievablly", "unbelievably",
- "uncertaintity", "uncertainty",
- "uncomfertable", "uncomfortable",
- "uncomfertably", "uncomfortably",
- "uncomfortabel", "uncomfortably",
- "uncomforyable", "uncomfortably",
- "uncomfrotable", "uncomfortable",
- "uncomfrotably", "uncomfortably",
- "uncomftorable", "uncomfortable",
- "uncomftorably", "uncomfortably",
- "unconcsiously", "unconsciously",
- "unconfortable", "uncomfortable",
- "unconfortably", "uncomfortably",
- "unconscioulsy", "unconsciously",
- "unconsicously", "unconsciously",
- "unconsiderate", "inconsiderate",
- "uncontrollabe", "uncontrollable",
- "uncontrollaby", "uncontrollably",
- "unconventinal", "unconventional",
- "uncounciously", "unconsciously",
- "uncousciously", "unconsciously",
- "underastimate", "underestimate",
- "underesitmate", "underestimated",
- "underestamate", "underestimate",
- "underestemate", "underestimate",
- "underestiamte", "underestimated",
- "undergratuate", "undergraduate",
- "underhwelming", "underwhelming",
- "underhwleming", "underwhelming",
- "underminining", "undermining",
- "underpowererd", "underpowered",
- "undersetimate", "underestimate",
- "understandble", "understandable",
- "understandbly", "understandably",
- "underwealming", "underwhelming",
- "underwhemling", "underwhelming",
- "underwhleming", "underwhelming",
- "undoctrinated", "indoctrinated",
- "unexpectadely", "unexpectedly",
- "unfomfortable", "uncomfortable",
- "unforgiveable", "unforgivable",
- "unfortuantely", "unfortunately",
- "unfortunantly", "unfortunately",
- "unfortunatley", "unfortunately",
- "unfortuneatly", "unfortunately",
- "unfortunetely", "unfortunately",
- "unilaterallly", "unilaterally",
- "uninstallling", "uninstalling",
- "unintellegent", "unintelligent",
- "unintelligant", "unintelligent",
- "unintensional", "unintentional",
- "uninteristing", "uninteresting",
- "universitites", "universities",
- "unnecassarily", "unnecessarily",
- "unneccesarily", "unnecessarily",
- "unnecessairly", "unnecessarily",
- "unnecessarely", "unnecessarily",
- "unnecessarity", "unnecessarily",
- "unnecesserily", "unnecessarily",
- "unnecissarily", "unnecessarily",
- "unnessecarily", "unnecessarily",
- "unoperational", "nonoperational",
- "unprecendeted", "unprecedented",
- "unprecidented", "unprecedented",
- "unpredecented", "unprecedented",
- "unpredicatble", "unpredictable",
- "unpredictible", "unpredictable",
- "unpresedented", "unprecedented",
- "unpridictable", "unpredictable",
- "unprofessinal", "unprofessional",
- "unrealistisch", "unrealistic",
- "unreasonabley", "unreasonably",
- "unreasonablly", "unreasonably",
- "unrestrictred", "unrestricted",
- "unsistainable", "unsustainable",
- "unsubscribade", "unsubscribed",
- "unsubscribbed", "unsubscribe",
- "unsuccesfully", "unsuccessfully",
- "unsuccessfull", "unsuccessful",
- "unsucessfully", "unsuccessfully",
- "unsuprisingly", "unsurprisingly",
- "unsuprizingly", "unsurprisingly",
- "unsustainible", "unsustainable",
- "unsustianable", "unsustainable",
- "vertification", "certification",
- "villification", "vilification",
- "virualization", "visualization",
- "visualizacion", "visualization",
- "visualizaiton", "visualization",
- "visualizating", "visualization",
- "vitualization", "visualization",
- "vizualization", "visualization",
- "volounteering", "volunteering",
- "vulberability", "vulnerability",
- "vulernability", "vulnerability",
- "vulnarability", "vulnerability",
- "vulnerabiltiy", "vulnerability",
- "vulnurability", "vulnerability",
- "vunlerability", "vulnerability",
- "vurnerability", "vulnerability",
- "weightlfiting", "weightlifting",
- "weightlifitng", "weightlifting",
- "weightligting", "weightlifting",
- "weigthlifting", "weightlifting",
- "wholeheartdly", "wholeheartedly",
- "wholeheartedy", "wholeheartedly",
- "wholeheartely", "wholeheartedly",
- "wieghtlifting", "weightlifting",
- "abberivation", "abbreviation",
- "abberviation", "abbreviation",
- "abbreivation", "abbreviation",
- "abbreveation", "abbreviation",
- "abbrievation", "abbreviation",
- "abortificant", "abortifacient",
- "abrreviation", "abbreviation",
- "academcially", "academically",
- "accedentally", "accidentally",
- "accelarating", "accelerating",
- "accelaration", "acceleration",
- "acceleartion", "acceleration",
- "acceleraptor", "accelerator",
- "accelorating", "accelerating",
- "accessibilty", "accessibility",
- "accidentlaly", "accidently",
- "accomadating", "accommodating",
- "accomadation", "accommodation",
- "accomodating", "accommodating",
- "accomodation", "accommodation",
- "accrediation", "accreditation",
- "acculumation", "accumulation",
- "accumalation", "accumulation",
- "accumilation", "accumulation",
- "acedemically", "academically",
- "acheivements", "achievements",
- "acknolwedged", "acknowledged",
- "acknolwedges", "acknowledges",
- "acknoweldged", "acknowledged",
- "acknoweldges", "acknowledges",
- "acknowiedged", "acknowledged",
- "acknowladges", "acknowledges",
- "acknowldeged", "acknowledged",
- "acknowledget", "acknowledgement",
- "acknowleding", "acknowledging",
- "acknowlegded", "acknowledged",
- "acknowlegdes", "acknowledges",
- "ackumulation", "accumulation",
- "acquaintaces", "acquaintances",
- "acquaintence", "acquaintance",
- "acquantaince", "acquaintance",
- "acquantiance", "acquaintances",
- "acquiantance", "acquaintances",
- "acquiantence", "acquaintance",
- "adknowledged", "acknowledged",
- "adknowledges", "acknowledges",
- "administored", "administer",
- "adminsitered", "administered",
- "adminstrator", "administrator",
- "advantagious", "advantageous",
- "advantegeous", "advantageous",
- "adventageous", "advantageous",
- "adventureous", "adventures",
- "adventureres", "adventures",
- "adventurious", "adventurous",
- "adventuruous", "adventurous",
- "advertisiers", "advertisers",
- "advertisment", "advertisement",
- "advertisters", "advertisers",
- "advertisting", "advertising",
- "aestheticaly", "aesthetically",
- "aestheticlly", "aesthetically",
- "afficianados", "aficionados",
- "afficionados", "aficionados",
- "afghanisthan", "afghanistan",
- "afterhtought", "afterthought",
- "afterthougth", "afterthought",
- "aggressivley", "aggressively",
- "agircultural", "agricultural",
- "agknowledged", "acknowledged",
- "agnosticisim", "agnosticism",
- "agracultural", "agricultural",
- "agriculteral", "agricultural",
- "agriculteurs", "agriculture",
- "agricultrual", "agricultural",
- "agriculutral", "agricultural",
- "agrigultural", "agricultural",
- "agrocultural", "agricultural",
- "allegiancies", "allegiance",
- "alterantives", "alternatives",
- "alternatevly", "alternately",
- "alternatiely", "alternately",
- "alternatieve", "alternative",
- "alternativly", "alternatively",
- "alternativos", "alternatives",
- "alternatvely", "alternately",
- "alternitives", "alternatives",
- "altruistisch", "altruistic",
- "amendmenters", "amendments",
- "amohetamines", "amphetamines",
- "ampehtamines", "amphetamines",
- "ampethamines", "amphetamines",
- "amphatamines", "amphetamines",
- "amphedamines", "amphetamines",
- "amphetamenes", "amphetamines",
- "amphetemines", "amphetamines",
- "amphetimines", "amphetamines",
- "amphetmaines", "amphetamines",
- "anecdotallly", "anecdotally",
- "annhiliation", "annihilation",
- "annihalition", "annihilation",
- "annihilatron", "annihilation",
- "annihliation", "annihilation",
- "annilihation", "annihilation",
- "anniversairy", "anniversary",
- "anniversarry", "anniversary",
- "anniversiary", "anniversary",
- "annoucenment", "announcements",
- "annoucnement", "announcement",
- "announcemnet", "announcements",
- "announcemnts", "announcements",
- "anphetamines", "amphetamines",
- "ansalisation", "nasalisation",
- "ansalization", "nasalization",
- "antaganistic", "antagonistic",
- "antagonisitc", "antagonistic",
- "antagonostic", "antagonist",
- "antibioticos", "antibiotics",
- "anticiaption", "anticipation",
- "anticipacion", "anticipation",
- "antisipation", "anticipation",
- "antogonistic", "antagonistic",
- "antrhopology", "anthropology",
- "antrophology", "anthropology",
- "apllications", "applications",
- "apocalypitic", "apocalyptic",
- "apologistics", "apologists",
- "apologizeing", "apologizing",
- "apostrophied", "apostrophe",
- "apostrophies", "apostrophe",
- "apperciation", "appreciation",
- "applicaitons", "applications",
- "appoitnments", "appointments",
- "apporachable", "approachable",
- "appraochable", "approachable",
- "appreceating", "appreciating",
- "appreciaters", "appreciates",
- "appreciatied", "appreciative",
- "appreicating", "appreciating",
- "appreication", "appreciation",
- "appretiation", "appreciation",
- "appropriatin", "appropriation",
- "appropriatly", "appropriately",
- "appropriaton", "appropriation",
- "approprietly", "appropriately",
- "approstraphe", "apostrophe",
- "approxiately", "approximately",
- "approximatly", "approximately",
- "approximetly", "approximately",
- "aproximately", "approximately",
- "aqcuaintance", "acquaintance",
- "aqquaintance", "acquaintance",
- "arbitrariliy", "arbitrarily",
- "arbitrarilly", "arbitrarily",
- "archetecture", "architecture",
- "architechure", "architecture",
- "architectual", "architectural",
- "architectuur", "architecture",
- "architecutre", "architecture",
- "architexture", "architecture",
- "arcitechture", "architecture",
- "areodynamics", "aerodynamics",
- "argicultural", "agricultural",
- "argumentatie", "argumentative",
- "arithmetisch", "arithmetic",
- "armageddomon", "armageddon",
- "arrengements", "arrangements",
- "articifially", "artificially",
- "artificailly", "artificially",
- "artificiella", "artificial",
- "artificually", "artificially",
- "artifiically", "artificially",
- "assasination", "assassination",
- "assassinatin", "assassination",
- "assissinated", "assassinated",
- "associationg", "associating",
- "assoications", "associations",
- "assosiations", "associations",
- "assosication", "assassination",
- "assotiations", "associations",
- "assymetrical", "asymmetrical",
- "asthetically", "aesthetically",
- "astranomical", "astronomical",
- "astromonical", "astronomical",
- "astronautlis", "astronauts",
- "astronimical", "astronomical",
- "astronomicly", "astronomical",
- "athleticisim", "athleticism",
- "atmosphereic", "atmospheric",
- "audiobookmrs", "audiobooks",
- "auhtenticate", "authenticate",
- "australianas", "australians",
- "australianos", "australians",
- "authentisity", "authenticity",
- "authorithies", "authorities",
- "authoritiers", "authorities",
- "authorizaton", "authorization",
- "authrorities", "authorities",
- "autochtonous", "autochthonous",
- "autocorrrect", "autocorrect",
- "automobilies", "automobile",
- "automodertor", "automoderator",
- "automonomous", "autonomous",
- "auxilliaries", "auxiliaries",
- "avaliability", "availability",
- "avialability", "availability",
- "awknowledged", "acknowledged",
- "awknowledges", "acknowledges",
- "awkwardsness", "awkwardness",
- "babysittting", "babysitting",
- "beaurocratic", "bureaucratic",
- "beautifullly", "beautifully",
- "belligerante", "belligerent",
- "beuraucratic", "bureaucratic",
- "billionairre", "billionaire",
- "billionaries", "billionaires",
- "billioniares", "billionaires",
- "bioligically", "biologically",
- "birmingharam", "birmingham",
- "bittersweeet", "bittersweet",
- "blamethrower", "flamethrower",
- "blueberrries", "blueberries",
- "blueprintcss", "blueprints",
- "boardcasting", "broadcasting",
- "bobybuilding", "bodybuilding",
- "bodybuidling", "bodybuilding",
- "bodybuilidng", "bodybuilding",
- "bodybuliding", "bodybuilding",
- "bodydbuilder", "bodybuilder",
- "bombardement", "bombardment",
- "boradcasting", "broadcasting",
- "botivational", "motivational",
- "brainwahsing", "brainwashing",
- "brakethrough", "breakthrough",
- "braodcasting", "broadcasting",
- "brazilianese", "brazilians",
- "brazilianess", "brazilians",
- "breakthorugh", "breakthrough",
- "breaktrhough", "breakthrough",
- "breastfeedig", "breastfeeding",
- "breastfeeing", "breastfeeding",
- "breasttaking", "breathtaking",
- "brianwashing", "brainwashing",
- "broadcastors", "broadcasts",
- "brotherhoood", "brotherhood",
- "buearucratic", "bureaucratic",
- "bueraucratic", "bureaucratic",
- "bulletprooof", "bulletproof",
- "bureaocratic", "bureaucratic",
- "bureaucracie", "bureaucratic",
- "bureaucracts", "bureaucrats",
- "bureaucrates", "bureaucrats",
- "bureuacratic", "bureaucratic",
- "businessemen", "businessmen",
- "cababilities", "capabilities",
- "caclulations", "calculations",
- "calcluations", "calculation",
- "calcualtions", "calculations",
- "calculationg", "calculating",
- "calculatoare", "calculator",
- "californains", "californian",
- "californican", "californian",
- "californinan", "californian",
- "caluclations", "calculations",
- "camouflagued", "camouflage",
- "canceltation", "cancellation",
- "cannibalisim", "cannibalism",
- "canniballism", "cannibalism",
- "cannotations", "connotations",
- "capitalistes", "capitalists",
- "caracterized", "characterized",
- "carbohydrats", "carbohydrates",
- "carbohyrdate", "carbohydrates",
- "caricaturale", "caricature",
- "caricaturile", "caricature",
- "caricaturise", "caricature",
- "caricaturize", "caricature",
- "catastraphic", "catastrophic",
- "catastrohpic", "catastrophic",
- "catastrophie", "catastrophe",
- "categoricaly", "categorically",
- "categoriezed", "categorized",
- "catergorized", "categorized",
- "caterpillers", "caterpillars",
- "catestrophic", "catastrophic",
- "catholicisim", "catholicism",
- "catholocisim", "catholicism",
- "catistrophic", "catastrophic",
- "catostraphic", "catastrophic",
- "catostrophic", "catastrophic",
- "catterpilars", "caterpillars",
- "catterpillar", "caterpillar",
- "celebratings", "celebrations",
- "celebritites", "celebrities",
- "celibrations", "celebrations",
- "cententenial", "centennial",
- "cercumstance", "circumstance",
- "cerification", "verification",
- "certificiate", "certificate",
- "challengeing", "challenging",
- "chamiponship", "championships",
- "champinoship", "championships",
- "championchip", "championship",
- "championsihp", "championships",
- "championsips", "championships",
- "champiosnhip", "championships",
- "champoinship", "championship",
- "chanpionship", "championship",
- "charactarize", "characterize",
- "charaterized", "characterized",
- "charismastic", "charismatic",
- "cheerlearder", "cheerleader",
- "cheerleeders", "cheerleaders",
- "cheeseberger", "cheeseburger",
- "cheeseborger", "cheeseburger",
- "cheesebruger", "cheeseburgers",
- "cheeseburges", "cheeseburgers",
- "cheeseburgie", "cheeseburger",
- "cheezeburger", "cheeseburger",
- "chirstianity", "christianity",
- "chocolateers", "chocolates",
- "chrisitanity", "christianity",
- "christainity", "christianity",
- "christiantiy", "christianity",
- "christinaity", "christianity",
- "chromosomers", "chromosomes",
- "chronologial", "chronological",
- "chrsitianity", "christianity",
- "cilivization", "civilizations",
- "circulatiing", "circulating",
- "circulationg", "circulating",
- "circumcisied", "circumcised",
- "circumcition", "circumcision",
- "circumsicion", "circumcision",
- "circumsision", "circumcision",
- "circumsition", "circumcision",
- "circumsizion", "circumcision",
- "circumstanes", "circumstance",
- "circumstanta", "circumstantial",
- "circumstante", "circumstance",
- "circuncision", "circumcision",
- "circunstance", "circumstance",
- "civiliaztion", "civilizations",
- "civilizacion", "civilization",
- "civilizaiton", "civilization",
- "civilizatoin", "civilizations",
- "civilizatons", "civilizations",
- "civilziation", "civilizations",
- "civizilation", "civilizations",
- "claculations", "calculations",
- "classificato", "classification",
- "cockroachers", "cockroaches",
- "coefficienct", "coefficient",
- "coencidental", "coincidental",
- "coincedental", "coincidental",
- "coincidencal", "coincidental",
- "coincidentia", "coincidental",
- "coindidental", "coincidental",
- "coinsidental", "coincidental",
- "cointerpoint", "counterpoint",
- "collaberator", "collaborate",
- "collaboratie", "collaborate",
- "collaboratin", "collaboration",
- "collectivily", "collectively",
- "collectivley", "collectively",
- "colonialisim", "colonialism",
- "colonizacion", "colonization",
- "colonizators", "colonizers",
- "colonozation", "colonization",
- "combanations", "combinations",
- "combonations", "combinations",
- "comdemnation", "condemnation",
- "comemmorates", "commemorates",
- "comemoretion", "commemoration",
- "comeptitions", "competitions",
- "comfirmation", "confirmation",
- "comfortabley", "comfortably",
- "comfortablly", "comfortably",
- "comissioning", "commissioning",
- "commandemnts", "commandment",
- "commandmants", "commandments",
- "commandmends", "commandments",
- "commemmorate", "commemorate",
- "commendments", "commandments",
- "commenteries", "commenters",
- "commenwealth", "commonwealth",
- "commerciales", "commercials",
- "commerically", "commercially",
- "comminicated", "communicated",
- "commishioned", "commissioned",
- "commishioner", "commissioner",
- "commisioning", "commissioning",
- "commissionar", "commissioner",
- "commissionor", "commissioner",
- "committments", "commitments",
- "commoditites", "commodities",
- "commomwealth", "commonwealth",
- "commonhealth", "commonwealth",
- "commonweatlh", "commonwealth",
- "commonwelath", "commonwealth",
- "communciated", "communicated",
- "communiation", "communication",
- "communicatie", "communicate",
- "communicatin", "communications",
- "communicaton", "communication",
- "communitites", "communities",
- "compansating", "compensating",
- "compansation", "compensation",
- "comparativly", "comparatively",
- "comparisions", "comparisons",
- "comparission", "comparisons",
- "comparissons", "comparisons",
- "compatablity", "compatibility",
- "compatibiliy", "compatibility",
- "compatibilty", "compatibility",
- "compatiblity", "compatibility",
- "compensacion", "compensation",
- "compensative", "compensate",
- "compesitions", "compositions",
- "competetions", "competitions",
- "competitevly", "competitively",
- "competitiion", "competition",
- "competitiors", "competitors",
- "competitivly", "competitively",
- "competitivos", "competitions",
- "compinsating", "compensating",
- "compinsation", "compensation",
- "complainging", "complaining",
- "completetion", "completion",
- "compliations", "compilation",
- "complicacion", "complication",
- "complicatied", "complicate",
- "complicaties", "complicate",
- "complicatred", "complicate",
- "complicatted", "complicate",
- "complilation", "complication",
- "complimation", "complication",
- "complimenary", "complimentary",
- "complimentje", "complimented",
- "complimentry", "complimentary",
- "complination", "complication",
- "complitation", "complication",
- "composistion", "compositions",
- "compramising", "compromising",
- "compremising", "compromising",
- "compresssion", "compression",
- "compromissen", "compromise",
- "compromisses", "compromises",
- "compromizing", "compromising",
- "compromosing", "compromising",
- "comptability", "compatibility",
- "compulsivley", "compulsive",
- "compulsorary", "compulsory",
- "computarized", "computerized",
- "comrpomising", "compromising",
- "comtaminated", "contaminated",
- "comtemporary", "contemporary",
- "conbinations", "combinations",
- "concatinated", "contaminated",
- "conceivabley", "conceivably",
- "concellation", "cancellation",
- "concentraded", "concentrated",
- "concentraing", "concentrating",
- "concentraion", "concentration",
- "concentrarte", "concentrate",
- "concentratie", "concentrate",
- "concentratin", "concentration",
- "concequences", "consequences",
- "concequently", "consequently",
- "concersation", "conservation",
- "concervation", "conservation",
- "concervatism", "conservatism",
- "concervative", "conservative",
- "conciderable", "considerable",
- "conciderably", "considerably",
- "conciousness", "consciousness",
- "conclusiones", "conclusions",
- "conclusivley", "conclusive",
- "condamnation", "condemnation",
- "condemantion", "condemnation",
- "condenmation", "condemnation",
- "condescening", "condescending",
- "condescenion", "condescension",
- "conditionnal", "conditional",
- "conditionned", "conditioned",
- "conditionner", "conditioner",
- "condmenation", "condemnation",
- "condolencies", "condolences",
- "condolensces", "condolences",
- "condomnation", "condemnation",
- "condradicted", "contradicted",
- "conenctivity", "connectivity",
- "confedential", "confidential",
- "confederancy", "confederacy",
- "confederatie", "confederate",
- "confermation", "confirmation",
- "confersation", "conservation",
- "confessionis", "confessions",
- "confidencial", "confidential",
- "confidentail", "confidential",
- "confidentaly", "confidently",
- "confidentely", "confidently",
- "confidentiel", "confidential",
- "configuratin", "configurations",
- "configuraton", "configuration",
- "confirmacion", "confirmation",
- "confrimation", "confirmation",
- "confrontaion", "confrontation",
- "congegration", "congregation",
- "congergation", "congregation",
- "congradulate", "congratulate",
- "congragation", "congregation",
- "congragulate", "congratulate",
- "congratualte", "congratulate",
- "congregacion", "congregation",
- "congresional", "congressional",
- "congresssman", "congressman",
- "congresssmen", "congressmen",
- "congretation", "congregation",
- "congrigation", "congregation",
- "conicidental", "coincidental",
- "connatations", "connotations",
- "connecticuit", "connecticut",
- "connectivety", "connectivity",
- "connetations", "connotations",
- "connitations", "connotations",
- "connonations", "connotations",
- "conolization", "colonization",
- "conpensating", "compensating",
- "conpensation", "compensation",
- "conpetitions", "competitions",
- "conplimented", "complimented",
- "conpromising", "compromising",
- "consciouness", "consciousness",
- "consciouslly", "consciously",
- "consectutive", "consecutive",
- "consecuences", "consequences",
- "consecuentes", "consequences",
- "consecuently", "consequently",
- "consensuarlo", "consensual",
- "consentrated", "concentrated",
- "consentrates", "concentrates",
- "conseqeunces", "consequence",
- "consequenses", "consequences",
- "consequental", "consequently",
- "consequneces", "consequence",
- "conservacion", "conservation",
- "conservaties", "conservatives",
- "conservativo", "conservation",
- "conservativs", "conservatism",
- "conservitave", "conservatives",
- "conservitism", "conservatism",
- "conservitive", "conservative",
- "considerarle", "considerable",
- "considerarte", "considerate",
- "consideraste", "considerate",
- "consideratie", "considerate",
- "consideratin", "considerations",
- "consideribly", "considerably",
- "consilidated", "consolidated",
- "consipracies", "conspiracies",
- "consiquently", "consequently",
- "consistantly", "consistently",
- "consistencey", "consistency",
- "consistentcy", "consistently",
- "consitutents", "constituents",
- "consoldiated", "consolidated",
- "consolitated", "consolidate",
- "consolodated", "consolidated",
- "consoltation", "consultation",
- "conspericies", "conspiracies",
- "conspiracize", "conspiracies",
- "conspiriator", "conspirator",
- "conspiricies", "conspiracies",
- "conspriacies", "conspiracies",
- "consqeuences", "consequence",
- "constinually", "continually",
- "constitition", "constitution",
- "constituante", "constituents",
- "constituants", "constituents",
- "constituates", "constitutes",
- "constitucion", "constitution",
- "constituient", "constitute",
- "constituinte", "constituents",
- "constitutiei", "constitute",
- "constitutues", "constitute",
- "constiutents", "constituents",
- "constracting", "constructing",
- "constraction", "construction",
- "constrainsts", "constraints",
- "construccion", "construction",
- "construciton", "construction",
- "constructeds", "constructs",
- "constructief", "constructive",
- "constructies", "constructs",
- "constructifs", "constructs",
- "constructiin", "constructing",
- "constructivo", "construction",
- "consturction", "construction",
- "consultating", "consultation",
- "consumerisim", "consumerism",
- "contaiminate", "contaminate",
- "contaminatie", "contaminated",
- "contaminaton", "contamination",
- "contaminents", "containment",
- "contamporary", "contemporary",
- "contanimated", "contaminated",
- "contaniments", "containment",
- "contemperary", "contemporary",
- "contemporany", "contemporary",
- "continentais", "continents",
- "continential", "continental",
- "contineously", "continuously",
- "continiously", "continuously",
- "continuacion", "continuation",
- "continuating", "continuation",
- "continuativo", "continuation",
- "continuining", "continuing",
- "contirbution", "contribution",
- "contirbutors", "contributors",
- "contiunation", "continuation",
- "contrabution", "contribution",
- "contraceptie", "contraceptives",
- "contradicing", "contradicting",
- "contradicion", "contradiction",
- "contradicory", "contradictory",
- "contradictie", "contradicted",
- "contradictin", "contradiction",
- "contradicton", "contradiction",
- "contraticted", "contradicted",
- "contribucion", "contribution",
- "contribuitor", "contributor",
- "contributers", "contributors",
- "contributivo", "contribution",
- "contributons", "contributors",
- "contrictions", "contractions",
- "contridicted", "contradicted",
- "controlleras", "controllers",
- "controlllers", "controllers",
- "controverial", "controversial",
- "controveries", "controversies",
- "controversal", "controversial",
- "controversey", "controversy",
- "contructions", "contractions",
- "conveinently", "conveniently",
- "convencional", "conventional",
- "conveniantly", "conveniently",
- "converastion", "conversations",
- "converdation", "conservation",
- "conversacion", "conversation",
- "conversaiton", "conversations",
- "conversatino", "conservation",
- "conversatism", "conservatism",
- "conversatoin", "conversations",
- "conversiones", "conversions",
- "converstaion", "conversation",
- "convertables", "convertibles",
- "convertiable", "convertible",
- "convertibile", "convertible",
- "convervation", "conservation",
- "convervatism", "conservatism",
- "converzation", "conservation",
- "convesration", "conservation",
- "convienently", "conveniently",
- "convorsation", "conversation",
- "convseration", "conservation",
- "coordenation", "coordination",
- "coordiantion", "coordination",
- "coordinacion", "coordination",
- "coordinaters", "coordinates",
- "coordinatior", "coordinator",
- "coordinatore", "coordinate",
- "coordonation", "coordination",
- "cooridnation", "coordination",
- "coorperation", "cooperation",
- "coprorations", "corporations",
- "corinthianos", "corinthians",
- "corinthinans", "corinthians",
- "corparations", "corporations",
- "corperations", "corporations",
- "corporativos", "corporations",
- "corproations", "corporations",
- "corrdination", "coordination",
- "correponding", "corresponding",
- "correposding", "corresponding",
- "correspondes", "corresponds",
- "correspondig", "corresponding",
- "corresponing", "corresponding",
- "corrisponded", "corresponded",
- "costomizable", "customizable",
- "costumizable", "customizable",
- "councidental", "coincidental",
- "counsellling", "counselling",
- "counterfiets", "counterfeit",
- "counterfited", "counterfeit",
- "counterracts", "counterparts",
- "countertraps", "counterparts",
- "countrywides", "countryside",
- "coutnerparts", "counterparts",
- "coutnerpoint", "counterpoint",
- "covnersation", "conservation",
- "crankenstein", "frankenstein",
- "creationisim", "creationism",
- "creationnism", "creationism",
- "creationnist", "creationist",
- "creationsism", "creationism",
- "creationsist", "creationist",
- "creationsits", "creationists",
- "credibillity", "credibility",
- "crigneworthy", "cringeworthy",
- "cringewhorty", "cringeworthy",
- "cringeworhty", "cringeworthy",
- "cringewrothy", "cringeworthy",
- "cringyworthy", "cringeworthy",
- "criticallity", "critically",
- "criticiszing", "criticising",
- "croporations", "corporations",
- "crucifiction", "crucifixion",
- "cuestionable", "questionable",
- "culiminating", "culminating",
- "cumulatative", "cumulative",
- "cuntaminated", "contaminated",
- "curcumcision", "circumcision",
- "curcumstance", "circumstance",
- "custamizable", "customizable",
- "custimizable", "customizable",
- "customizaton", "customization",
- "customizeble", "customizable",
- "customizible", "customizable",
- "custumizable", "customizable",
- "cuztomizable", "customizable",
- "dabilitating", "debilitating",
- "dangerousely", "dangerously",
- "decensitized", "desensitized",
- "deceptionist", "receptionist",
- "declareation", "declaration",
- "decomposeion", "decomposition",
- "decomposited", "decomposed",
- "decscription", "description",
- "deffensively", "defensively",
- "deficiancies", "deficiencies",
- "deficiencias", "deficiencies",
- "deficiensies", "deficiencies",
- "definatively", "definitively",
- "defininitely", "definitively",
- "definitavely", "definitively",
- "definitevely", "definitively",
- "definitifely", "definitively",
- "definitinely", "definitively",
- "definititely", "definitively",
- "definitivley", "definitively",
- "deinitalized", "deinitialized",
- "deinitalizes", "deinitializes",
- "delibaretely", "deliberately",
- "deliberatley", "deliberately",
- "delibirately", "deliberately",
- "delibitating", "debilitating",
- "deliverately", "deliberately",
- "delusionally", "delusively",
- "demesticated", "domesticated",
- "democracries", "democracies",
- "democraphics", "demographics",
- "democratisch", "democratic",
- "demograhpics", "demographics",
- "demogrpahics", "demographics",
- "demonination", "denominations",
- "demonstarted", "demonstrated",
- "demonstartes", "demonstrates",
- "demonstrabil", "demonstrably",
- "demonstraion", "demonstration",
- "demonstraits", "demonstrates",
- "demonstrants", "demonstrates",
- "demonstratie", "demonstrate",
- "demonstratin", "demonstration",
- "demonstrerat", "demonstrate",
- "demosntrably", "demonstrably",
- "demosntrated", "demonstrated",
- "demosntrates", "demonstrates",
- "demostration", "demonstration",
- "denomenation", "denomination",
- "denominacion", "denomination",
- "denominatior", "denominator",
- "denominatons", "denominations",
- "denomonation", "denomination",
- "deomgraphics", "demographics",
- "depencencies", "dependencies",
- "dependancies", "dependencies",
- "dependencias", "dependencies",
- "dependenices", "dependencies",
- "dependensies", "dependencies",
- "deperecation", "deprecation",
- "deplacements", "replacements",
- "deregualtion", "deregulation",
- "deregulaiton", "deregulation",
- "derugulation", "deregulation",
- "describtions", "descriptions",
- "descriminant", "discriminant",
- "descriptivos", "descriptions",
- "desctiptions", "descriptions",
- "desctruction", "destruction",
- "desencitized", "desensitized",
- "desensatized", "desensitized",
- "desensitived", "desensitized",
- "desentisized", "desensitized",
- "desentitized", "desensitized",
- "desentizised", "desensitized",
- "desginations", "destinations",
- "desgustingly", "disgustingly",
- "desitnations", "destinations",
- "despectively", "respectively",
- "despensaries", "dispensaries",
- "desperatedly", "desperately",
- "desperatelly", "desperately",
- "desqualified", "disqualified",
- "desregarding", "disregarding",
- "dessertation", "dissertation",
- "destiantions", "destinations",
- "destinctions", "destinations",
- "destractions", "distractions",
- "destributors", "distributors",
- "determinanti", "determination",
- "determinaton", "determination",
- "determinging", "determining",
- "determinisic", "deterministic",
- "determinisim", "determinism",
- "deterministc", "deterministic",
- "determinitic", "deterministic",
- "detrimential", "detrimental",
- "developement", "development",
- "developmenet", "developments",
- "develpoments", "developments",
- "devolopement", "development",
- "devolopments", "developments",
- "diasspointed", "dissapointed",
- "dicitonaries", "dictionaries",
- "dictadorship", "dictatorship",
- "dictarorship", "dictatorship",
- "dictatorshop", "dictatorship",
- "dictionaires", "dictionaries",
- "didsapointed", "dissapointed",
- "differencial", "differential",
- "differencies", "differences",
- "differentate", "differentiate",
- "differnetial", "differential",
- "difficulites", "difficulties",
- "difficutlies", "difficulties",
- "diffuculties", "difficulties",
- "dimensionals", "dimensions",
- "dimensionnal", "dimensional",
- "dimensionsal", "dimensional",
- "diplomatisch", "diplomatic",
- "directionnal", "directional",
- "disaapointed", "dissapointed",
- "disadvandage", "disadvantaged",
- "disadvantged", "disadvantaged",
- "disadvantges", "disadvantages",
- "disadvatange", "disadvantage",
- "disadventage", "disadvantage",
- "disagremeent", "disagreements",
- "disapointing", "disappointing",
- "disappearnce", "disappearance",
- "disappearred", "disappeared",
- "disapperaing", "disappearing",
- "disaspointed", "dissapointed",
- "disastisfied", "dissatisfied",
- "disatissfied", "dissatisfied",
- "disatvantage", "disadvantage",
- "discertation", "dissertation",
- "disciniplary", "disciplinary",
- "disciplanary", "disciplinary",
- "disciplenary", "disciplinary",
- "disciplinare", "discipline",
- "disciplinera", "disciplinary",
- "disciplinery", "disciplinary",
- "disclipinary", "disciplinary",
- "disconencted", "disconnected",
- "disconnectes", "disconnects",
- "disconnectme", "disconnected",
- "disconnectus", "disconnects",
- "discontiuned", "discontinued",
- "discountined", "discontinued",
- "discreditied", "discredited",
- "discreditted", "discredited",
- "discriminare", "discriminate",
- "discriminted", "discriminated",
- "disctinction", "distinction",
- "disctinctive", "distinctive",
- "disctintions", "distinctions",
- "discualified", "disqualified",
- "discustingly", "disgustingly",
- "disemination", "dissemination",
- "disenchanged", "disenchanted",
- "disengenuous", "disingenuous",
- "disenginuous", "disingenuous",
- "disensitized", "desensitized",
- "disgareement", "disagreements",
- "disgruntaled", "disgruntled",
- "disgrunteled", "disgruntled",
- "disguntingly", "disgustingly",
- "disingeneous", "disingenuous",
- "disingenious", "disingenuous",
- "disinteresed", "disinterested",
- "disintereted", "disinterested",
- "dismantleing", "dismantling",
- "disobediance", "disobedience",
- "disobeidence", "disobedience",
- "dispalcement", "displacement",
- "dispapointed", "dissapointed",
- "dispencaries", "dispensaries",
- "dispensaires", "dispensaries",
- "dispensarios", "dispensaries",
- "dispensiries", "dispensaries",
- "dispensories", "dispensaries",
- "disqaulified", "disqualified",
- "disqualifyed", "disqualified",
- "disqustingly", "disgustingly",
- "disrecpected", "disrespected",
- "disrepsected", "disrespected",
- "disresepcted", "disrespected",
- "disrespecful", "disrespectful",
- "disrespecing", "disrespecting",
- "disrespectul", "disrespectful",
- "disrespekted", "disrespected",
- "disrtibution", "distributions",
- "dissapearing", "disappearing",
- "dissapionted", "dissapointed",
- "dissapoimted", "dissapointed",
- "dissapoitned", "dissapointed",
- "dissaponited", "dissapointed",
- "dissapoonted", "dissapointed",
- "dissapounted", "dissapointed",
- "dissappinted", "dissapointed",
- "dissapponted", "dissapointed",
- "dissastified", "dissatisfied",
- "dissatisifed", "dissatisfied",
- "dissatsified", "dissatisfied",
- "dissepointed", "dissapointed",
- "dissipointed", "dissapointed",
- "dissobediant", "disobedient",
- "dissobedient", "disobedient",
- "dissopointed", "dissapointed",
- "disspaointed", "dissapointed",
- "dissppointed", "dissapointed",
- "dissspointed", "dissapointed",
- "distinations", "distinctions",
- "distincitons", "distinctions",
- "distingished", "distinguished",
- "distingishes", "distinguishes",
- "distinguised", "distinguished",
- "distirbuting", "distributing",
- "distirbution", "distribution",
- "distrabution", "distribution",
- "distribitors", "distributors",
- "distribtuion", "distributions",
- "distribucion", "distribution",
- "distribuited", "distributed",
- "distribuiton", "distributions",
- "distribuitor", "distributor",
- "distribusion", "distributions",
- "distributino", "distributions",
- "distributior", "distributor",
- "distributons", "distributors",
- "distributore", "distribute",
- "distriubtion", "distributions",
- "distrobution", "distribution",
- "distrubances", "disturbance",
- "distrubiting", "distributing",
- "distrubition", "distribution",
- "distrubitors", "distributors",
- "distrubution", "distribution",
- "distrubutors", "distributors",
- "distructions", "distractions",
- "distustingly", "disgustingly",
- "ditactorship", "dictatorship",
- "documenation", "documentation",
- "documentaion", "documentation",
- "documentaire", "documentaries",
- "documentarse", "documentaries",
- "documentarsi", "documentaries",
- "domesitcated", "domesticated",
- "domisticated", "domesticated",
- "donesticated", "domesticated",
- "donwloadable", "downloadable",
- "dossapointed", "dissapointed",
- "downlaodable", "downloadable",
- "downloadbale", "downloadable",
- "downloadeble", "downloadable",
- "drankenstein", "frankenstein",
- "dublications", "publications",
- "dusgustingly", "disgustingly",
- "dynamicallly", "dynamically",
- "dyregulation", "deregulation",
- "earthquackes", "earthquakes",
- "earthquakers", "earthquakes",
- "econimically", "economically",
- "economisesti", "economists",
- "educationnal", "educational",
- "effectionate", "affectionate",
- "effectivelly", "effectively",
- "effectivenss", "effectiveness",
- "efficienctly", "efficiency",
- "effordlessly", "effortlessly",
- "ejacualtions", "ejaculation",
- "electorlytes", "electrolytes",
- "electricrain", "electrician",
- "electrictian", "electrician",
- "electrobytes", "electrolytes",
- "electrocytes", "electrolytes",
- "electrolites", "electrolytes",
- "electroltyes", "electrolytes",
- "electronicas", "electronics",
- "electronicos", "electronics",
- "electroyltes", "electrolytes",
- "elektrolytes", "electrolytes",
- "eloctrolytes", "electrolytes",
- "embarassment", "embarrassment",
- "embarasssing", "embarassing",
- "embarrasment", "embarrassment",
- "embarressing", "embarrassing",
- "embarrissing", "embarrassing",
- "emberrassing", "embarrassing",
- "emphetamines", "amphetamines",
- "emprisonment", "imprisonment",
- "encarcerated", "incarcerated",
- "enceclopedia", "encyclopedia",
- "enchancement", "enhancement",
- "enchancments", "enchantments",
- "enchantmants", "enchantments",
- "enchentments", "enchantments",
- "enciclopedia", "encyclopedia",
- "enclycopedia", "encyclopedia",
- "encorporated", "incorporated",
- "encourageing", "encouraging",
- "encyclapedia", "encyclopedia",
- "encyclepedia", "encyclopedia",
- "encyclopadia", "encyclopedia",
- "encyclopeida", "encyclopedia",
- "encyclopidia", "encyclopedia",
- "encycolpedia", "encyclopedia",
- "encyklopedia", "encyclopedia",
- "encylcopedia", "encyclopedia",
- "encyplopedia", "encyclopedia",
- "endoresments", "endorsement",
- "enemployment", "unemployment",
- "enfringement", "infringement",
- "enlightended", "enlightened",
- "enlightenend", "enlightened",
- "enlightented", "enlightened",
- "enlightining", "enlightening",
- "enligthening", "enlightening",
- "entaglements", "entanglements",
- "entartaining", "entertaining",
- "enterpreneur", "entrepreneurs",
- "enterprenuer", "entrepreneur",
- "entertainted", "entertained",
- "enthusiaists", "enthusiasts",
- "enthusuastic", "enthusiastic",
- "entoxication", "intoxication",
- "entrepeneurs", "entrepreneurs",
- "entreperneur", "entrepreneurs",
- "entreprenaur", "entrepreneur",
- "entrepreners", "entrepreneurs",
- "entrepreneus", "entrepreneurs",
- "entreprenour", "entrepreneur",
- "entreprenure", "entrepreneurs",
- "entreprenurs", "entrepreneurs",
- "entrepreuner", "entrepreneurs",
- "entretaining", "entertaining",
- "enviormental", "environmental",
- "enviornments", "environments",
- "enviromental", "environmental",
- "environemnts", "environments",
- "environmentl", "environmentally",
- "environmetal", "environmental",
- "envrionments", "environments",
- "errorneously", "erroneously",
- "establishmet", "establishments",
- "evelutionary", "evolutionary",
- "exagerrating", "exaggerating",
- "exaggarating", "exaggerating",
- "exaggaration", "exaggeration",
- "exaggeratted", "exaggerated",
- "exaggurating", "exaggerating",
- "exagguration", "exaggeration",
- "exceptionaly", "exceptionally",
- "exceptionnal", "exceptional",
- "exclusiveity", "exclusivity",
- "exclusivelly", "exclusively",
- "exclusivitiy", "exclusivity",
- "excorciating", "excruciating",
- "excrusiating", "excruciating",
- "excurciating", "excruciating",
- "exectuioners", "executioner",
- "executioneer", "executioner",
- "executionees", "executions",
- "executioness", "executions",
- "executionier", "executioner",
- "executionner", "executioner",
- "exeggerating", "exaggerating",
- "exeggeration", "exaggeration",
- "expeditonary", "expeditionary",
- "expendatures", "expenditures",
- "expendetures", "expenditures",
- "expentitures", "expenditures",
- "experamental", "experimental",
- "expereincing", "experiencing",
- "experemental", "experimental",
- "experiancing", "experiencing",
- "experiemntal", "experimental",
- "experiemnted", "experimented",
- "experimantal", "experimental",
- "experimentan", "experimentation",
- "experimentes", "experiments",
- "experimentle", "experimented",
- "experimentos", "experiments",
- "experimentul", "experimental",
- "expidentures", "expenditures",
- "expierencing", "experiencing",
- "expiremental", "experimental",
- "expiremented", "experimented",
- "explaination", "explanation",
- "explenations", "explanations",
- "expliotation", "exploitation",
- "exploitaiton", "exploitation",
- "exploitating", "exploitation",
- "exploititive", "exploitative",
- "explortation", "exploitation",
- "explotiation", "exploitation",
- "explotiative", "exploitative",
- "expolitation", "exploitation",
- "expolitative", "exploitative",
- "exponentialy", "exponentially",
- "expropiation", "expropriation",
- "extensivelly", "extensively",
- "extradiction", "extradition",
- "extraordiary", "extraordinary",
- "extraordinay", "extraordinary",
- "extrapolerat", "extrapolate",
- "extrapoloate", "extrapolate",
- "extremistisk", "extremists",
- "extrordinary", "extraordinary",
- "extruciating", "excruciating",
- "facilitatile", "facilitate",
- "fahrenheight", "fahrenheit",
- "falmethrower", "flamethrower",
- "familiarlize", "familiarize",
- "fanslaughter", "manslaughter",
- "fantasticaly", "fantastically",
- "fantasticlly", "fantastically",
- "fashionalble", "fashionable",
- "fermantation", "fermentation",
- "fermentacion", "fermentation",
- "fermentaiton", "fermentation",
- "fermentating", "fermentation",
- "fermintation", "fermentation",
- "fictionaries", "dictionaries",
- "figuartively", "figuratively",
- "figuratevely", "figuratively",
- "figurativley", "figuratively",
- "figuretively", "figuratively",
- "figuritively", "figuratively",
- "fingerpoints", "fingerprints",
- "firefigthers", "firefighters",
- "flamethorwer", "flamethrower",
- "flametrhower", "flamethrower",
- "flanethrower", "flamethrower",
- "flexibillity", "flexibility",
- "flourishment", "flourishing",
- "fluctiations", "fluctuations",
- "flucutations", "fluctuations",
- "fluxtuations", "fluctuations",
- "forgivenness", "forgiveness",
- "fortunatelly", "fortunately",
- "framethrower", "flamethrower",
- "frankenstain", "frankenstein",
- "frankensteen", "frankenstein",
- "frankenstine", "frankenstein",
- "frankinstein", "frankenstein",
- "frementation", "fermentation",
- "friendzonded", "friendzoned",
- "friendzonned", "friendzoned",
- "friendzowned", "friendzoned",
- "fringeworthy", "cringeworthy",
- "fronkenstein", "frankenstein",
- "fruitsations", "frustrations",
- "frustrastion", "frustrations",
- "fucntionally", "functionally",
- "funcitonally", "functionally",
- "functionable", "functional",
- "functionaliy", "functionally",
- "functionalty", "functionality",
- "functionlity", "functionality",
- "functionning", "functioning",
- "fundamentais", "fundamentals",
- "fundamentalt", "fundamentalist",
- "fundamentaly", "fundamentally",
- "fundemantals", "fundamentals",
- "fundementals", "fundamentals",
- "fundimentals", "fundamentals",
- "furstrations", "frustrations",
- "futuristisch", "futuristic",
- "fwankenstein", "frankenstein",
- "geneological", "genealogical",
- "generacional", "generational",
- "generalizare", "generalize",
- "generalizate", "generalize",
- "generelizing", "generalizing",
- "geograhpical", "geographical",
- "geographicly", "geographical",
- "geographisch", "geographic",
- "geogrpahical", "geographical",
- "goegraphical", "geographical",
- "governemntal", "governmental",
- "governmently", "governmental",
- "grammaticaal", "grammatical",
- "grammaticaly", "grammatically",
- "grandchilden", "grandchildren",
- "grandchilder", "grandchildren",
- "grandchilren", "grandchildren",
- "grassrooters", "grassroots",
- "gringeworthy", "cringeworthy",
- "guantanameow", "guantanamo",
- "guantanamero", "guantanamo",
- "hallucinatin", "hallucinations",
- "hallucinaton", "hallucination",
- "handwritting", "handwriting",
- "harrassments", "harassments",
- "headqaurters", "headquarters",
- "headquatered", "headquartered",
- "healthercare", "healthcare",
- "heavywieghts", "heavyweight",
- "helicopteros", "helicopters",
- "hererosexual", "heterosexual",
- "heretosexual", "heterosexual",
- "heteresexual", "heterosexual",
- "hetreosexual", "heterosexual",
- "highligthing", "highlighting",
- "hipocritical", "hypocritical",
- "hipothetical", "hypothetical",
- "histarically", "historically",
- "histerically", "historically",
- "historicians", "historians",
- "homogeneized", "homogenized",
- "homogenenous", "homogeneous",
- "homosexuales", "homosexuals",
- "homosexualiy", "homosexuality",
- "homosexualls", "homosexuals",
- "homosexualty", "homosexuality",
- "homosexuella", "homosexual",
- "hopsitalized", "hospitalized",
- "horisontally", "horizontally",
- "horizantally", "horizontally",
- "horiztonally", "horizontally",
- "horozontally", "horizontally",
- "hospitallity", "hospitality",
- "hospitilized", "hospitalized",
- "hospitolized", "hospitalized",
- "hosptialized", "hospitalized",
- "humanitarien", "humanitarian",
- "humanitarion", "humanitarian",
- "humanitatian", "humanitarian",
- "humaniterian", "humanitarian",
- "humantiarian", "humanitarian",
- "huminatarian", "humanitarian",
- "hurricanefps", "hurricanes",
- "hyopthetical", "hypothetical",
- "hypathetical", "hypothetical",
- "hypertrophey", "hypertrophy",
- "hypethetical", "hypothetical",
- "hypocrticial", "hypocritical",
- "hypocrytical", "hypocritical",
- "hypotehtical", "hypothetical",
- "hypotethical", "hypothetical",
- "hypotherical", "hypothetical",
- "hypotheticly", "hypothetical",
- "hystarically", "hysterically",
- "hystorically", "hysterically",
- "idealistisch", "idealistic",
- "identificato", "identification",
- "identifierad", "identified",
- "identifieras", "identifies",
- "identifyable", "identifiable",
- "ideologicaly", "ideologically",
- "idiosyncracy", "idiosyncrasy",
- "illegetimate", "illegitimate",
- "illegitamate", "illegitimate",
- "illegitamite", "illegitimate",
- "illegitemate", "illegitimate",
- "illegitimite", "illegitimate",
- "illigetimate", "illegitimate",
- "illigitemate", "illegitimate",
- "illistration", "illustration",
- "illsutration", "illustrations",
- "illustartion", "illustration",
- "illustraitor", "illustrator",
- "illustraties", "illustrate",
- "illustratior", "illustrator",
- "imcompatible", "incompatible",
- "imcompetence", "incompetence",
- "imexperience", "inexperience",
- "immediatelly", "immediately",
- "immortallity", "immortality",
- "imperialfist", "imperialist",
- "imperialisim", "imperialism",
- "imperialstic", "imperialist",
- "implamenting", "implementing",
- "implausibile", "implausible",
- "implecations", "implications",
- "implementase", "implements",
- "implementasi", "implements",
- "implementato", "implementation",
- "implentation", "implementation",
- "implimenting", "implementing",
- "imporvements", "improvements",
- "impossibilty", "impossibility",
- "impossiblely", "impossibly",
- "impossiblity", "impossibly",
- "impovershied", "impoverished",
- "impoversihed", "impoverished",
- "imprefection", "imperfections",
- "improsonment", "imprisonment",
- "improviserad", "improvised",
- "imrpovements", "improvements",
- "imtimidating", "intimidating",
- "imtimidation", "intimidation",
- "inaccesibles", "inaccessible",
- "inaccessable", "inaccessible",
- "inaccessbile", "inaccessible",
- "inaccurasies", "inaccuracies",
- "inaccuraties", "inaccuracies",
- "inaccuricies", "inaccuracies",
- "inacuraccies", "inaccuracies",
- "inadvertenly", "inadvertently",
- "inappropiate", "inappropriate",
- "inapproprate", "inappropriate",
- "inappropriae", "inappropriately",
- "inappropriet", "inappropriately",
- "inattractive", "unattractive",
- "inbelievable", "unbelievable",
- "incarcelated", "incarcerated",
- "incarcirated", "incarcerated",
- "incarserated", "incarcerated",
- "incedentally", "incidentally",
- "incentiveise", "incentives",
- "incestigator", "investigator",
- "incomaptible", "incompatible",
- "incomparible", "incompatible",
- "incompatable", "incompatible",
- "incompatibil", "incompatible",
- "incompetance", "incompetence",
- "incompetente", "incompetence",
- "incompitable", "incompatible",
- "incomptetent", "incompetent",
- "inconcistent", "inconsistent",
- "inconsistant", "inconsistent",
- "inconsistecy", "inconsistency",
- "inconsisteny", "inconsistency",
- "inconveinent", "inconvenient",
- "inconveniant", "inconvenient",
- "inconveniece", "inconvenience",
- "inconvenince", "inconvenience",
- "inconvienent", "inconvenient",
- "incorparated", "incorporated",
- "incorperated", "incorporated",
- "incorportaed", "incorporated",
- "incorportate", "incorporate",
- "incrediblely", "incredibly",
- "incrementers", "increments",
- "incremential", "incremental",
- "indefinately", "indefinitely",
- "indefineable", "undefinable",
- "indefinetely", "indefinitely",
- "indefinitive", "indefinite",
- "indefinitley", "indefinitely",
- "indefintiely", "indefinitely",
- "indepedantly", "independently",
- "indepencence", "independence",
- "independance", "independence",
- "independante", "independents",
- "independenet", "independents",
- "independenly", "independently",
- "independense", "independents",
- "independente", "independence",
- "independetly", "independently",
- "indepentents", "independents",
- "indetifiable", "identifiable",
- "indianaoplis", "indianapolis",
- "indianopolis", "indianapolis",
- "indicentally", "incidentally",
- "indifferance", "indifference",
- "indifferente", "indifference",
- "indiffernece", "indifference",
- "indimidating", "intimidating",
- "indimidation", "intimidation",
- "indipendence", "independence",
- "indisputible", "indisputable",
- "indisputibly", "indisputably",
- "individuales", "individuals",
- "individualty", "individuality",
- "individuella", "individual",
- "indiviudally", "individually",
- "indivudually", "individually",
- "indpendently", "independently",
- "indroduction", "introduction",
- "indroductory", "introductory",
- "industriella", "industrial",
- "industrijske", "industries",
- "inefficienct", "inefficient",
- "inefficienty", "inefficiently",
- "inevitablely", "inevitably",
- "inevitablity", "inevitably",
- "inevititably", "inevitably",
- "inexblicably", "inexplicably",
- "inexpectedly", "unexpectedly",
- "inexpereince", "inexperience",
- "inexperiance", "inexperience",
- "inexperieced", "inexperienced",
- "inexperiened", "inexperienced",
- "inexperiente", "inexperience",
- "inexpierence", "inexperienced",
- "inexplicabil", "inexplicably",
- "inexplicibly", "inexplicably",
- "infalability", "infallibility",
- "infilitrated", "infiltrated",
- "infiltraitor", "infiltrator",
- "infiltratior", "infiltrator",
- "infiltratred", "infiltrate",
- "influenceing", "influencing",
- "infogrpahics", "infographic",
- "inforgivable", "unforgivable",
- "infrantryman", "infantryman",
- "infridgement", "infringement",
- "infrignement", "infringement",
- "ingestigator", "investigator",
- "ingredientes", "ingredients",
- "ingreediants", "ingredients",
- "ininterested", "uninterested",
- "initalizable", "initializable",
- "inkompatible", "incompatible",
- "inkompetence", "incompetence",
- "inkonsistent", "inconsistent",
- "inlightening", "enlightening",
- "innersection", "intersection",
- "innerstellar", "interstellar",
- "inpenetrable", "impenetrable",
- "inplementing", "implementing",
- "inplications", "implications",
- "inpoverished", "impoverished",
- "inprisonment", "imprisonment",
- "inproductive", "unproductive",
- "inprovements", "improvements",
- "inresponsive", "unresponsive",
- "insentivised", "insensitive",
- "insentivises", "insensitive",
- "insignifiant", "insignificant",
- "insignificat", "insignificant",
- "insinuationg", "insinuating",
- "instabillity", "instability",
- "instalaltion", "installations",
- "installatons", "installations",
- "installatron", "installation",
- "instantaneos", "instantaneous",
- "instantaneus", "instantaneous",
- "instantanous", "instantaneous",
- "instinctivly", "instinctively",
- "institutuion", "institution",
- "instramental", "instrumental",
- "instrcutions", "instruction",
- "instrucitons", "instruction",
- "instructiosn", "instruction",
- "instructores", "instructors",
- "instrumentos", "instruments",
- "instrumentul", "instrumental",
- "insturmental", "instrumental",
- "instutitions", "institutions",
- "insuccessful", "unsuccessful",
- "insufficiant", "insufficient",
- "insuffucient", "insufficient",
- "insuspecting", "unsuspecting",
- "intaxication", "intoxication",
- "intelelctual", "intellectuals",
- "intellectals", "intellectuals",
- "intellectaul", "intellectuals",
- "intellectuel", "intellectual",
- "intellecutal", "intellectual",
- "intelligance", "intelligence",
- "intelligenly", "intelligently",
- "intelligente", "intelligence",
- "intelligenty", "intelligently",
- "intelligient", "intelligent",
- "intenational", "international",
- "intentionnal", "intentional",
- "intepretator", "interpretor",
- "interatellar", "interstellar",
- "interational", "international",
- "intercection", "interception",
- "intercepcion", "interception",
- "interceptons", "interceptions",
- "intereaction", "intersection",
- "interections", "interactions",
- "interersting", "interpreting",
- "interesction", "intersection",
- "interestigly", "interestingly",
- "interestinly", "interestingly",
- "interferance", "interference",
- "interfereing", "interfering",
- "interferisce", "interferes",
- "interferisse", "interferes",
- "interferring", "interfering",
- "intergration", "integration",
- "interlectual", "intellectual",
- "intermediare", "intermediate",
- "intermediete", "intermediate",
- "intermettent", "intermittent",
- "intermideate", "intermediate",
- "intermidiate", "intermediate",
- "internatinal", "international",
- "internationl", "international",
- "internations", "interactions",
- "internediate", "intermediate",
- "internelized", "internalized",
- "internilized", "internalized",
- "interperters", "interpreter",
- "interperting", "interpreting",
- "interprating", "interpreting",
- "interpretare", "interpreter",
- "interpretato", "interpretation",
- "interpreteer", "interpreter",
- "interpretier", "interpreter",
- "interpretion", "interpreting",
- "interpretter", "interpreter",
- "interpriting", "interpreting",
- "interraccial", "interracial",
- "interractial", "interracial",
- "interrogatin", "interrogation",
- "interrumping", "interrupting",
- "interrupteds", "interrupts",
- "interruptors", "interrupts",
- "interseccion", "intersection",
- "interseciton", "intersections",
- "interseption", "interception",
- "intersetllar", "interstellar",
- "interstallar", "interstellar",
- "interstaller", "interstellar",
- "intersteller", "interstellar",
- "interstellor", "interstellar",
- "intertaining", "entertaining",
- "intertwinded", "intertwined",
- "intertwinned", "intertwined",
- "interveiwing", "interviewing",
- "intervencion", "intervention",
- "interveneing", "intervening",
- "intervension", "intervention",
- "interviening", "interviewing",
- "intidimation", "intimidation",
- "intillectual", "intellectual",
- "intimidacion", "intimidation",
- "intimidative", "intimidate",
- "intimitading", "intimidating",
- "intimitating", "intimidating",
- "intimitation", "intimidation",
- "intorduction", "introduction",
- "intorductory", "introductory",
- "intoxicacion", "intoxication",
- "intoxination", "intoxication",
- "intrepreting", "interpreting",
- "intrinsicaly", "intrinsically",
- "introdiction", "introduction",
- "introduccion", "introduction",
- "introduceras", "introduces",
- "introduceres", "introduces",
- "introduciton", "introduction",
- "introductary", "introductory",
- "introducting", "introduction",
- "introductury", "introductory",
- "introduktion", "introduction",
- "introspectin", "introspection",
- "intruduction", "introduction",
- "intruductory", "introductory",
- "intsrumental", "instrumental",
- "intuitivelly", "intuitively",
- "inturrupting", "interrupting",
- "invervention", "intervention",
- "investagated", "investigated",
- "investagator", "investigator",
- "investegated", "investigated",
- "investegator", "investigator",
- "investigaron", "investigator",
- "investigater", "investigator",
- "investigatie", "investigative",
- "investigatin", "investigation",
- "investigatio", "investigator",
- "investigaton", "investigation",
- "investingate", "investigate",
- "investogator", "investigator",
- "invicibility", "invisibility",
- "invididually", "individually",
- "invisibiltiy", "invisibility",
- "invisilibity", "invisibility",
- "invisivility", "invisibility",
- "invlunerable", "invulnerable",
- "involnerable", "invulnerable",
- "involuntairy", "involuntary",
- "involuntarly", "involuntary",
- "invonvenient", "inconvenient",
- "invulenrable", "invulnerable",
- "invulernable", "invulnerable",
- "invulnarable", "invulnerable",
- "invulnerbale", "invulnerable",
- "invulnurable", "invulnerable",
- "invulverable", "invulnerable",
- "invunlerable", "invulnerable",
- "invurnerable", "invulnerable",
- "irrationably", "irrationally",
- "irrationatly", "irrationally",
- "irrationella", "irrational",
- "irreplacable", "irreplaceable",
- "irresistable", "irresistible",
- "irresistably", "irresistibly",
- "irrespecitve", "irrespective",
- "irresponsble", "irresponsible",
- "irresponsibe", "irresponsible",
- "irreverisble", "irreversible",
- "irreversebly", "irreversible",
- "irreversibel", "irreversible",
- "irrevirsible", "irreversible",
- "irrispective", "irrespective",
- "irriversible", "irreversible",
- "isdefinitely", "indefinitely",
- "isntallation", "installation",
- "isntrumental", "instrumental",
- "jackonsville", "jacksonville",
- "jounralistic", "journalistic",
- "jouranlistic", "journalistic",
- "journalisitc", "journalistic",
- "journalistes", "journalists",
- "judgementals", "judgements",
- "juggernaunts", "juggernaut",
- "juridisction", "jurisdictions",
- "jurisdiccion", "jurisdiction",
- "jurisdiciton", "jurisdiction",
- "jurisdiktion", "jurisdiction",
- "jurisfiction", "jurisdiction",
- "jurisidction", "jurisdiction",
- "juristiction", "jurisdiction",
- "jursidiction", "jurisdiction",
- "jusridiction", "jurisdiction",
- "justificatin", "justifications",
- "katastrophic", "catastrophic",
- "kidnergarten", "kindergarten",
- "kindergarden", "kindergarten",
- "kingergarten", "kindergarten",
- "kintergarten", "kindergarten",
- "knolwedgable", "knowledgable",
- "knoweldgable", "knowledgable",
- "knowladgable", "knowledgable",
- "knowldegable", "knowledgable",
- "knowldgeable", "knowledgable",
- "knowleagable", "knowledgable",
- "knowledagble", "knowledgable",
- "knowledeable", "knowledgable",
- "knowledgabel", "knowledgable",
- "knowledgeble", "knowledgeable",
- "knowledgebly", "knowledgable",
- "knowledgible", "knowledgable",
- "knowlegdable", "knowledgable",
- "knowlegeable", "knowledgeable",
- "knwoledgable", "knowledgable",
- "kolonization", "colonization",
- "kombinations", "combinations",
- "kommissioner", "commissioner",
- "kompensation", "compensation",
- "konfidential", "confidential",
- "konfirmation", "confirmation",
- "kongregation", "congregation",
- "konservatism", "conservatism",
- "konservative", "conservative",
- "konsultation", "consultation",
- "konversation", "conversation",
- "koordination", "coordination",
- "krankenstein", "frankenstein",
- "leaglization", "legalization",
- "legalizacion", "legalization",
- "legalizaiton", "legalization",
- "legendariske", "legendaries",
- "legimitately", "legitimately",
- "legislatiors", "legislators",
- "legistration", "registration",
- "legitamately", "legitimately",
- "legitamitely", "legitimately",
- "legitemately", "legitimately",
- "legitimatley", "legitimately",
- "legitimitely", "legitimately",
- "liberatrians", "libertarians",
- "libertarains", "libertarians",
- "libertariens", "libertarians",
- "libertaryans", "libertarians",
- "libertatians", "libertarians",
- "liberterians", "libertarians",
- "libretarians", "libertarians",
- "lighthearded", "lighthearted",
- "linguisticas", "linguistics",
- "linguisticos", "linguistics",
- "linguistisch", "linguistics",
- "litllefinger", "littlefinger",
- "littelfinger", "littlefinger",
- "litterfinger", "littlefinger",
- "littiefinger", "littlefinger",
- "littlefigner", "littlefinger",
- "littlefinder", "littlefinger",
- "littlepinger", "littlefinger",
- "lnowledgable", "knowledgable",
- "longitudonal", "longitudinal",
- "madturbating", "masturbating",
- "madturbation", "masturbation",
- "magnificient", "magnificent",
- "maintainance", "maintenance",
- "maintainence", "maintenance",
- "maintenaince", "maintenance",
- "malfucntions", "malfunction",
- "manafactured", "manufactured",
- "manafacturer", "manufacturer",
- "manafactures", "manufactures",
- "manifactured", "manufactured",
- "manifacturer", "manufacturer",
- "manifactures", "manufactures",
- "manifestaion", "manifestation",
- "manifestanti", "manifestation",
- "manipluating", "manipulating",
- "manipluation", "manipulation",
- "manipualting", "manipulating",
- "manipualtion", "manipulation",
- "manipualtive", "manipulative",
- "manipulacion", "manipulation",
- "manipulitive", "manipulative",
- "maniuplating", "manipulating",
- "maniuplation", "manipulation",
- "maniuplative", "manipulative",
- "manouverable", "maneuverable",
- "mansalughter", "manslaughter",
- "manslaugther", "manslaughter",
- "mansluaghter", "manslaughter",
- "manufactered", "manufactured",
- "manufacterer", "manufacturer",
- "manufacteres", "manufactures",
- "manufacteurs", "manufactures",
- "manufactored", "manufactured",
- "manufactorer", "manufacturer",
- "manufactores", "manufactures",
- "manufactuers", "manufacturers",
- "manufactuing", "manufacturing",
- "manufacturas", "manufactures",
- "manufacturor", "manufacturer",
- "manufactuter", "manufacture",
- "manufacuters", "manufactures",
- "manufacutred", "manufacture",
- "manufacutres", "manufactures",
- "manufaturing", "manufacturing",
- "manupilating", "manipulating",
- "manupulating", "manipulating",
- "manupulation", "manipulation",
- "manupulative", "manipulative",
- "marchmallows", "marshmallows",
- "marganilized", "marginalized",
- "margenalized", "marginalized",
- "marginilized", "marginalized",
- "marhsmallows", "marshmallows",
- "marshamllows", "marshmallows",
- "marshmallons", "marshmallows",
- "masoginistic", "misogynistic",
- "masogynistic", "misogynistic",
- "massachusets", "massachusetts",
- "massachustts", "massachusetts",
- "masterbation", "masturbation",
- "masterpeices", "masterpiece",
- "mastrubating", "masturbating",
- "mastrubation", "masturbation",
- "mastubration", "masturbation",
- "masturabting", "masturbating",
- "masturabtion", "masturbation",
- "masturbacion", "masturbation",
- "masturbaited", "masturbated",
- "masturbathon", "masturbation",
- "masturbsting", "masturbating",
- "masturdating", "masturbating",
- "mastutbation", "masturbation",
- "mataphorical", "metaphorical",
- "mataphysical", "metaphysical",
- "matchmakeing", "matchmaking",
- "mathemathics", "mathematics",
- "mathematican", "mathematician",
- "mathematicas", "mathematics",
- "mathematicks", "mathematics",
- "mathematicly", "mathematical",
- "mathematisch", "mathematics",
- "mathemetical", "mathematical",
- "matheticians", "mathematicians",
- "mathimatical", "mathematical",
- "mathmatician", "mathematician",
- "mecahnically", "mechanically",
- "mechancially", "mechanically",
- "meditaciones", "medications",
- "mediteranean", "mediterranean",
- "mediterraean", "mediterranean",
- "mediterranen", "mediterranean",
- "memerization", "memorization",
- "memorizacion", "memorization",
- "memorozation", "memorization",
- "metalurgical", "metallurgical",
- "metaphisical", "metaphysical",
- "metaphoricly", "metaphorical",
- "metaphsyical", "metaphysical",
- "metaphyiscal", "metaphysical",
- "metaphyscial", "metaphysical",
- "metaphysisch", "metaphysics",
- "metephorical", "metaphorical",
- "metephysical", "metaphysical",
- "meterologist", "meteorologist",
- "meterosexual", "heterosexual",
- "methaporical", "metaphorical",
- "methematical", "mathematical",
- "metiphorical", "metaphorical",
- "metophorical", "metaphorical",
- "metorpolitan", "metropolitan",
- "metrololitan", "metropolitan",
- "metropilitan", "metropolitan",
- "metroploitan", "metropolitan",
- "metropolians", "metropolis",
- "metropoliten", "metropolitan",
- "metropolitin", "metropolitan",
- "metropoliton", "metropolitan",
- "microcentres", "microcenter",
- "microphonies", "microphones",
- "microscophic", "microscopic",
- "microscopice", "microscope",
- "microscoptic", "microscopic",
- "midfieldiers", "midfielders",
- "millenialism", "millennialism",
- "millionairre", "millionaire",
- "millionaries", "millionaires",
- "millioniares", "millionaires",
- "minimalisitc", "minimalist",
- "minimalisity", "minimalist",
- "mininterpret", "misinterpret",
- "minipulating", "manipulating",
- "minipulation", "manipulation",
- "minipulative", "manipulative",
- "miracilously", "miraculously",
- "miracurously", "miraculous",
- "miscarraiges", "miscarriage",
- "miscelaneous", "miscellaneous",
- "miscellanous", "miscellaneous",
- "mischievious", "mischievous",
- "misdameanors", "misdemeanors",
- "misdeamenors", "misdemeanor",
- "misfourtunes", "misfortunes",
- "misgoynistic", "misogynistic",
- "misinterpert", "misinterpret",
- "misinterpred", "misinterpreted",
- "misinterprit", "misinterpreting",
- "misinterpted", "misinterpret",
- "misintrepret", "misinterpret",
- "misisonaries", "missionaries",
- "misoganistic", "misogynistic",
- "misogenistic", "misogynistic",
- "misoginystic", "misogynistic",
- "misognyistic", "misogynistic",
- "misogonistic", "misogynistic",
- "misogynisitc", "misogynistic",
- "misogynsitic", "misogynistic",
- "misogynystic", "misogynistic",
- "missionaires", "missionaries",
- "mississipppi", "mississippi",
- "misspellling", "misspelling",
- "misteriously", "mysteriously",
- "misundersood", "misunderstood",
- "misunderstod", "misunderstood",
- "misygonistic", "misogynistic",
- "modificacion", "modification",
- "modificaiton", "modification",
- "modificatons", "modifications",
- "modifikation", "modification",
- "modivational", "motivational",
- "moisterizing", "moisturizing",
- "moistorizing", "moisturizing",
- "moisutrizing", "moisturizing",
- "momentarilly", "momentarily",
- "monolithisch", "monolithic",
- "mositurizing", "moisturizing",
- "motherbaords", "motherboards",
- "motherborads", "motherboards",
- "motivacional", "motivational",
- "motovational", "motivational",
- "mousturizing", "moisturizing",
- "muktitasking", "multitasking",
- "mulittasking", "multitasking",
- "multinatinal", "multinational",
- "multitaksing", "multitasking",
- "munipulative", "manipulative",
- "mutlitasking", "multitasking",
- "mysoganistic", "misogynistic",
- "mysogenistic", "misogynistic",
- "mysogonistic", "misogynistic",
- "mysterioulsy", "mysteriously",
- "nacionalists", "nationalists",
- "narcisisstic", "narcissistic",
- "narcissictic", "narcissistic",
- "narcissisism", "narcissism",
- "narcissisist", "narcissist",
- "narcissisitc", "narcissist",
- "narcississts", "narcissist",
- "narssicistic", "narcissistic",
- "natioanlists", "nationalists",
- "nationalisic", "nationalistic",
- "nationalisim", "nationalism",
- "nationalistc", "nationalistic",
- "nationalites", "nationalist",
- "nationalitic", "nationalistic",
- "nationalitys", "nationalist",
- "nationallity", "nationally",
- "nationalsits", "nationalists",
- "nationalties", "nationalist",
- "nazionalists", "nationalists",
- "neccessarily", "necessarily",
- "neccessities", "necessities",
- "necessarilly", "necessarily",
- "necessitites", "necessities",
- "neckbearders", "neckbeards",
- "neckbeardese", "neckbeards",
- "neckbeardest", "neckbeards",
- "neckbeardies", "neckbeards",
- "neckbeardius", "neckbeards",
- "negociations", "negotiations",
- "negoitations", "negotiations",
- "negotiatians", "negotiations",
- "negotiatiing", "negotiating",
- "negotiationg", "negotiating",
- "negotiatiors", "negotiations",
- "neigbhorhood", "neighborhoods",
- "neigbourhood", "neighbourhood",
- "neighboorhod", "neighbourhood",
- "neighborhing", "neighboring",
- "neighborhods", "neighborhoods",
- "neighbourghs", "neighbours",
- "neighbourhod", "neighbourhood",
- "neighbourood", "neighbourhood",
- "neighbrohood", "neighborhoods",
- "neighourhood", "neighborhood",
- "neoroscience", "neuroscience",
- "neruological", "neurological",
- "neruoscience", "neuroscience",
- "netropolitan", "metropolitan",
- "neuorscience", "neuroscience",
- "neuralogical", "neurological",
- "neuroligical", "neurological",
- "neurosceince", "neuroscience",
- "neuroscienze", "neuroscience",
- "neurosicence", "neuroscience",
- "neverhteless", "nevertheless",
- "nieghborhood", "neighborhood",
- "norhtwestern", "northwestern",
- "nothingsness", "nothingness",
- "noticeablely", "noticeably",
- "notificacion", "notification",
- "notificaiton", "notification",
- "notificatons", "notifications",
- "nuerological", "neurological",
- "nueroscience", "neuroscience",
- "nutritionnal", "nutritional",
- "obersvations", "observations",
- "objectivelly", "objectively",
- "objectiviser", "objectives",
- "objectivitiy", "objectivity",
- "obversations", "observations",
- "ocassionally", "occasionally",
- "occaisonally", "occasionally",
- "occasioanlly", "occasionally",
- "occassionaly", "occasionally",
- "occationally", "occasionally",
- "occurrencies", "occurrences",
- "offensivelly", "offensively",
- "ogranisation", "organisation",
- "omniverously", "omnivorously",
- "operationnal", "operational",
- "opportuniste", "opportunities",
- "opportunites", "opportunities",
- "oppositition", "opposition",
- "opthalmology", "ophthalmology",
- "optimistisch", "optimistic",
- "optimizacion", "optimization",
- "optimizating", "optimization",
- "optimziation", "optimization",
- "optmizations", "optimizations",
- "oragnisation", "organisation",
- "orchastrated", "orchestrated",
- "orchestarted", "orchestrated",
- "orchestraded", "orchestrated",
- "orchistrated", "orchestrated",
- "orgainsation", "organisation",
- "orgainzation", "organizations",
- "organisaiton", "organisation",
- "organisatons", "organisations",
- "organistaion", "organisation",
- "organizacion", "organization",
- "organizaiton", "organization",
- "organizativo", "organization",
- "organizatons", "organizations",
- "organsiation", "organisation",
- "organziation", "organization",
- "orginasation", "organisation",
- "orginazation", "organization",
- "orgnaisation", "organisations",
- "originallity", "originality",
- "outraegously", "outrageously",
- "outrageoulsy", "outrageously",
- "outragesouly", "outrageously",
- "outrageuosly", "outrageously",
- "outragiously", "outrageously",
- "outsourceing", "outsourcing",
- "overbearring", "overbearing",
- "overblocking", "overclocking",
- "overclcoking", "overclocking",
- "overclicking", "overclocking",
- "overcloaking", "overclocking",
- "overclockign", "overclocking",
- "overclokcing", "overclocking",
- "overhearting", "overreacting",
- "overheathing", "overheating",
- "overhtinking", "overthinking",
- "overhwelming", "overwhelming",
- "overlappping", "overlapping",
- "overlcocking", "overclocking",
- "overreaktion", "overreaction",
- "overwealming", "overwhelming",
- "overwhelemed", "overwhelmed",
- "overwhemling", "overwhelming",
- "overwhleming", "overwhelming",
- "owerpowering", "overpowering",
- "painkilllers", "painkillers",
- "palastinians", "palestinians",
- "palesitnians", "palestinians",
- "palestenians", "palestinians",
- "palestinains", "palestinians",
- "palestiniens", "palestinians",
- "palestininan", "palestinian",
- "palestininas", "palestinians",
- "palistinians", "palestinians",
- "palythroughs", "playthroughs",
- "parapharsing", "paraphrasing",
- "paraphenalia", "paraphernalia",
- "paraphrashed", "paraphrase",
- "paraphrazing", "paraphrasing",
- "paraprashing", "paraphrasing",
- "paraprhasing", "paraphrasing",
- "parenthesees", "parentheses",
- "parenthesies", "parenthesis",
- "parliamentry", "parliamentary",
- "partecipants", "participants",
- "partecipated", "participated",
- "parternships", "partnership",
- "particapated", "participated",
- "particiapnts", "participant",
- "particiapted", "participated",
- "participante", "participate",
- "participaste", "participants",
- "participatie", "participated",
- "participatin", "participation",
- "participatns", "participant",
- "participaton", "participant",
- "participents", "participants",
- "particualrly", "particularly",
- "particulalry", "particularly",
- "particullary", "particularly",
- "passionatley", "passionately",
- "pathalogical", "pathological",
- "pathelogical", "pathological",
- "patholigical", "pathological",
- "paychedelics", "psychedelics",
- "paychiatrist", "psychiatrist",
- "paychologist", "psychologist",
- "paychopathic", "psychopathic",
- "penetratiing", "penetrating",
- "penisylvania", "pennsylvania",
- "pennsilvania", "pennsylvania",
- "pennslyvania", "pennsylvania",
- "pennsylvaina", "pennsylvania",
- "pennsyvlania", "pennsylvania",
- "pennyslvania", "pennsylvania",
- "penssylvania", "pennsylvania",
- "pentsylvania", "pennsylvania",
- "percentagens", "percentages",
- "perferential", "preferential",
- "performantes", "performances",
- "performences", "performances",
- "perfromances", "performances",
- "peridoically", "periodically",
- "peripathetic", "peripatetic",
- "periphereals", "peripherals",
- "peripherials", "peripherals",
- "permanantely", "permanently",
- "permanentely", "permanently",
- "permissiable", "permissible",
- "peroidically", "periodically",
- "perpatrators", "perpetrators",
- "perpatuating", "perpetuating",
- "perpertators", "perpetrators",
- "perpertrated", "perpetrated",
- "perpetraitor", "perpetrator",
- "perpetraters", "perpetrators",
- "perpetuaters", "perpetuates",
- "perpitrators", "perpetrators",
- "perposefully", "purposefully",
- "perposterous", "preposterous",
- "perpretators", "perpetrators",
- "perpsectives", "perspectives",
- "perputrators", "perpetrators",
- "perputuating", "perpetuating",
- "persepctives", "perspectives",
- "perservation", "preservation",
- "perseverence", "perseverance",
- "personalites", "personalities",
- "personallity", "personally",
- "personilized", "personalized",
- "perspecitves", "perspectives",
- "perspectivas", "perspectives",
- "persumptuous", "presumptuous",
- "perticularly", "particularly",
- "pertubations", "perturbations",
- "pessimisitic", "pessimistic",
- "pessimisstic", "pessimistic",
- "phenomenonal", "phenomenal",
- "phenomenonly", "phenomenally",
- "phenomonenon", "phenomenon",
- "phialdelphia", "philadelphia",
- "philadalphia", "philadelphia",
- "philadelhpia", "philadelphia",
- "philadeplhia", "philadelphia",
- "philadlephia", "philadelphia",
- "philedalphia", "philadelphia",
- "philedelphia", "philadelphia",
- "philidalphia", "philadelphia",
- "philippinnes", "philippines",
- "philippinoes", "philippines",
- "philisophers", "philosophers",
- "philisophies", "philosophies",
- "phillippines", "philippines",
- "philosiphers", "philosophers",
- "philosiphies", "philosophies",
- "philosohpers", "philosopher",
- "philosohpies", "philosophies",
- "philosophiae", "philosophies",
- "philosophics", "philosophies",
- "philosophios", "philosophies",
- "philospohers", "philosophers",
- "philospohies", "philosophies",
- "photagrapher", "photographer",
- "photochopped", "photoshopped",
- "photograhper", "photographer",
- "photograpers", "photographers",
- "photographes", "photographs",
- "photographyi", "photographic",
- "photogropher", "photographer",
- "photogrpahed", "photographed",
- "photogrpaher", "photographer",
- "photoshipped", "photoshopped",
- "photoshooped", "photoshopped",
- "photoshoppad", "photoshopped",
- "phychedelics", "psychedelics",
- "phychiatrist", "psychiatrist",
- "phychologist", "psychologist",
- "phychopathic", "psychopathic",
- "physcedelics", "psychedelics",
- "physciatrist", "psychiatrist",
- "physcologist", "psychologist",
- "physcopathic", "psychopathic",
- "physicallity", "physically",
- "physiologial", "physiological",
- "pilgrimmages", "pilgrimages",
- "pitchforkers", "pitchforks",
- "pkaythroughs", "playthroughs",
- "plabeswalker", "planeswalker",
- "plaestinians", "palestinians",
- "planeswaller", "planeswalker",
- "planeswlaker", "planeswalker",
- "planetwalker", "planeswalker",
- "plansewalker", "planeswalker",
- "plauthroughs", "playthroughs",
- "playhtroughs", "playthroughs",
- "playtgroughs", "playthroughs",
- "playthorughs", "playthroughs",
- "playthourghs", "playthroughs",
- "playthrougth", "playthroughs",
- "playthrouhgs", "playthroughs",
- "playthtoughs", "playthroughs",
- "playtrhoughs", "playthroughs",
- "populationes", "populations",
- "pornograpghy", "pornography",
- "porportional", "proportional",
- "portabillity", "portability",
- "portagonists", "protagonists",
- "positionning", "positioning",
- "positivitely", "positivity",
- "possessivize", "possessive",
- "possibillity", "possibility",
- "possiblility", "possibility",
- "possiblities", "possibilities",
- "powerfisting", "powerlifting",
- "powerlfiting", "powerlifting",
- "powerlifitng", "powerlifting",
- "powerlisting", "powerlifting",
- "powetlifting", "powerlifting",
- "powrrlifting", "powerlifting",
- "practicioner", "practitioner",
- "practisioner", "practitioner",
- "pratictioner", "practitioners",
- "precedessors", "predecessors",
- "preconveived", "preconceived",
- "predacessors", "predecessors",
- "predeccesors", "predecessor",
- "predecesores", "predecessor",
- "predescesors", "predecessors",
- "predessecors", "predecessors",
- "predetermind", "predetermined",
- "predicessors", "predecessors",
- "predocessors", "predecessors",
- "predomiantly", "predominately",
- "predominanty", "predominantly",
- "predominatly", "predominantly",
- "preferantial", "preferential",
- "preferentail", "preferential",
- "preformances", "performances",
- "preinitalize", "preinitialize",
- "preliminarly", "preliminary",
- "prematurelly", "prematurely",
- "premillenial", "premillennial",
- "preocupation", "preoccupation",
- "preperations", "preparations",
- "prepetrators", "perpetrators",
- "prepetuating", "perpetuating",
- "prepostorous", "preposterous",
- "preposturous", "preposterous",
- "prerequisets", "prerequisite",
- "prescirption", "prescriptions",
- "prescribtion", "prescription",
- "prescripcion", "prescription",
- "prescriptons", "prescriptions",
- "prescritpion", "prescriptions",
- "presedential", "presidential",
- "presentacion", "presentation",
- "presentaiton", "presentations",
- "preservacion", "preservation",
- "preservating", "preservation",
- "preservativo", "preservation",
- "presidencial", "presidential",
- "presidenital", "presidential",
- "presidentail", "presidential",
- "presnetation", "presentations",
- "presonalized", "personalized",
- "prespectives", "perspectives",
- "presrciption", "prescriptions",
- "presumpteous", "presumptuous",
- "presumputous", "presumptuous",
- "prevantative", "preventative",
- "preventation", "presentation",
- "preventetive", "preventative",
- "preventitive", "preventative",
- "prezidential", "presidential",
- "principlaity", "principality",
- "probabiliste", "probabilities",
- "probabilites", "probabilities",
- "probabillity", "probability",
- "probablistic", "probabilistic",
- "proclomation", "proclamation",
- "proconceived", "preconceived",
- "profesisonal", "professionals",
- "professiinal", "professionalism",
- "professioanl", "professionals",
- "professiomal", "professionalism",
- "professionel", "professional",
- "professionsl", "professionalism",
- "professoinal", "professionals",
- "professonial", "professionals",
- "proffesional", "professional",
- "proficientcy", "proficiency",
- "profissional", "professional",
- "profitabiliy", "profitability",
- "profitabilty", "profitability",
- "profressions", "progressions",
- "progatonists", "protagonists",
- "programmeurs", "programmer",
- "progressieve", "progressive",
- "progressioin", "progressions",
- "progressiong", "progressing",
- "progressisme", "progresses",
- "progressiste", "progresses",
- "progressivas", "progressives",
- "progressivey", "progressively",
- "progressivly", "progressively",
- "progressivsm", "progressives",
- "progresssing", "progressing",
- "progresssion", "progressions",
- "progresssive", "progressives",
- "prohibitting", "prohibiting",
- "projecticles", "projectiles",
- "proletariaat", "proletariat",
- "proletariant", "proletariat",
- "proletaricat", "proletariat",
- "prominantely", "prominently",
- "promiscuious", "promiscuous",
- "promisculous", "promiscuous",
- "promotionnal", "promotional",
- "pronounceing", "pronouncing",
- "pronunciaton", "pronunciation",
- "propertional", "proportional",
- "propesterous", "preposterous",
- "proportianal", "proportional",
- "proportionel", "proportional",
- "proposterous", "preposterous",
- "proprotional", "proportional",
- "prostetution", "prostitution",
- "prostitition", "prostitution",
- "prostitucion", "prostitution",
- "prostituiton", "prostitution",
- "prostitutiei", "prostitute",
- "protaganists", "protagonists",
- "protaginists", "protagonists",
- "protagnoists", "protagonists",
- "protestantes", "protestants",
- "protoganists", "protagonists",
- "prouncements", "pronouncements",
- "pruposefully", "purposefully",
- "pscyhologist", "psychologist",
- "pscyhopathic", "psychopathic",
- "pshyciatrist", "psychiatrist",
- "pshycologist", "psychologist",
- "pshycopathic", "psychopathic",
- "psichologist", "psychologist",
- "psychaitrist", "psychiatrist",
- "psychedellic", "psychedelic",
- "psychedilics", "psychedelics",
- "psychemedics", "psychedelics",
- "psychiatirst", "psychiatrists",
- "psychiatrics", "psychiatrist",
- "psychiatrict", "psychiatrist",
- "psychiatrits", "psychiatrists",
- "psychistrist", "psychiatrist",
- "psychodelics", "psychedelics",
- "psycholigist", "psychologist",
- "psychologial", "psychological",
- "psychologits", "psychologists",
- "psychologyst", "psychologist",
- "psychopathes", "psychopaths",
- "psychyatrist", "psychiatrist",
- "puplications", "publications",
- "puritannical", "puritanical",
- "purpetrators", "perpetrators",
- "purpetuating", "perpetuating",
- "purpusefully", "purposefully",
- "pyschedelics", "psychedelics",
- "pyschiatrist", "psychiatrist",
- "pyschologist", "psychologist",
- "pyschopathic", "psychopathic",
- "qualificaton", "qualification",
- "qualifierais", "qualifiers",
- "qualtitative", "quantitative",
- "quantatitive", "quantitative",
- "quantititive", "quantitative",
- "quarterblack", "quarterback",
- "quesitonable", "questionable",
- "questionalbe", "questionable",
- "questionning", "questioning",
- "questionsign", "questioning",
- "radioactieve", "radioactive",
- "rationallity", "rationally",
- "reactionairy", "reactionary",
- "reactionnary", "reactionary",
- "realisticaly", "realistically",
- "realisticlly", "realistically",
- "reasonablely", "reasonably",
- "recallection", "recollection",
- "reccomending", "recommending",
- "reccommended", "recommended",
- "recepcionist", "receptionist",
- "receptionest", "receptionist",
- "recgonizable", "recognizable",
- "reciporcated", "reciprocate",
- "reciprociate", "reciprocate",
- "reciprocrate", "reciprocate",
- "recognizible", "recognizable",
- "recolleciton", "recollection",
- "recommanding", "recommending",
- "recommendeds", "recommends",
- "recommendors", "recommends",
- "recommeneded", "recommended",
- "recommenting", "recommending",
- "recongizable", "recognizable",
- "recontructed", "reconstructed",
- "recpetionist", "receptionist",
- "recreacional", "recreational",
- "recriational", "recreational",
- "referenceing", "referencing",
- "refirgerator", "refrigerator",
- "refriderator", "refrigerator",
- "refrigarator", "refrigerator",
- "refrigerador", "refrigerator",
- "refrigerater", "refrigerator",
- "refrigirator", "refrigerator",
- "regenaration", "regeneration",
- "regeneracion", "regeneration",
- "regestration", "registration",
- "registartion", "registration",
- "registrating", "registration",
- "regrigerator", "refrigerator",
- "regulatorias", "regulators",
- "regulatories", "regulators",
- "regulatorios", "regulators",
- "reicarnation", "reincarnation",
- "reinforcemnt", "reinforcement",
- "reinitalised", "reinitialised",
- "reinitalises", "reinitialises",
- "reinitalized", "reinitialized",
- "reinitalizes", "reinitializes",
- "reinstallled", "reinstalled",
- "reisntalling", "reinstalling",
- "relaitonship", "relationships",
- "relatinoship", "relationships",
- "reliabillity", "reliability",
- "reluctanctly", "reluctantly",
- "remarkablely", "remarkably",
- "rememberance", "remembrance",
- "reminiscient", "reminiscent",
- "renaissaince", "renaissance",
- "renegeration", "regeneration",
- "reorganision", "reorganisation",
- "repalcements", "replacements",
- "repersenting", "representing",
- "reporduction", "reproduction",
- "reporductive", "reproductive",
- "reprecussion", "repercussions",
- "representate", "representative",
- "represention", "representing",
- "representive", "representative",
- "reproducable", "reproducible",
- "reproduccion", "reproduction",
- "reproduciton", "reproduction",
- "reproducting", "reproduction",
- "reproductivo", "reproduction",
- "reproduktion", "reproduction",
- "repsectfully", "respectfully",
- "repsectively", "respectively",
- "republicanas", "republicans",
- "republicanos", "republicans",
- "republicants", "republicans",
- "republicians", "republicans",
- "requerimento", "requirement",
- "requeriments", "requirements",
- "requierments", "requirements",
- "requriements", "requirements",
- "resembelance", "resemblance",
- "reseptionist", "receptionist",
- "reserrection", "resurrection",
- "resintalling", "reinstalling",
- "resistancies", "resistances",
- "resistencias", "resistances",
- "respecitvely", "respectively",
- "respectabile", "respectable",
- "respectivily", "respectively",
- "respectivley", "respectively",
- "respectuflly", "respectfully",
- "respiratiory", "respiratory",
- "responsabile", "responsible",
- "responsaveis", "responsive",
- "responsbilty", "responsibly",
- "responsibile", "responsible",
- "responsibily", "responsibility",
- "responsibley", "responsibly",
- "responsibliy", "responsibly",
- "responsiblty", "responsibly",
- "ressemblance", "resemblance",
- "ressemblence", "resemblance",
- "ressurection", "resurrection",
- "restaurantes", "restaurants",
- "restauration", "restoration",
- "restauraunts", "restaurants",
- "restirctions", "restrictions",
- "restrainting", "restraining",
- "restrcitions", "restriction",
- "restricitons", "restrictions",
- "resurreccion", "resurrection",
- "resurrektion", "resurrection",
- "retalitation", "retaliation",
- "retributioon", "retribution",
- "retroactivly", "retroactively",
- "revolutionay", "revolutionary",
- "revolutionos", "revolutions",
- "rezurrection", "resurrection",
- "rictatorship", "dictatorship",
- "ridicilously", "ridiculously",
- "ridicoulusly", "ridiculously",
- "righteouness", "righteousness",
- "rockerfeller", "rockefeller",
- "rollercoaser", "rollercoaster",
- "rollercoater", "rollercoaster",
- "romanitcally", "romantically",
- "roundabounts", "roundabout",
- "rudimentatry", "rudimentary",
- "rysurrection", "resurrection",
- "sacksonville", "jacksonville",
- "sacreligious", "sacrilegious",
- "sacrificeing", "sacrificing",
- "saksatchewan", "saskatchewan",
- "salughtering", "slaughtering",
- "sanctionning", "sanctioning",
- "sarcasticaly", "sarcastically",
- "sarcasticlly", "sarcastically",
- "sascatchewan", "saskatchewan",
- "saskatcehwan", "saskatchewan",
- "saskatchawan", "saskatchewan",
- "saskatechwan", "saskatchewan",
- "sasketchawan", "saskatchewan",
- "sasketchewan", "saskatchewan",
- "sasktachewan", "saskatchewan",
- "satasfaction", "satisfaction",
- "satasfactory", "satisfactory",
- "satisfaccion", "satisfaction",
- "satisfacting", "satisfaction",
- "satisfcation", "satisfaction",
- "satisfiction", "satisfaction",
- "satistactory", "satisfactory",
- "satsifaction", "satisfaction",
- "satsifactory", "satisfactory",
- "scandanivian", "scandinavian",
- "scandenavian", "scandinavian",
- "scandianvian", "scandinavian",
- "scandinacian", "scandinavian",
- "scandinaivan", "scandinavia",
- "scandinavica", "scandinavian",
- "scandinavien", "scandinavian",
- "scandinavion", "scandinavian",
- "scandivanian", "scandinavian",
- "scandonavian", "scandinavian",
- "schizophrena", "schizophrenia",
- "scholarhsips", "scholarships",
- "scholerships", "scholarships",
- "scholorships", "scholarships",
- "scnadinavian", "scandinavian",
- "screenshoots", "screenshot",
- "sensationail", "sensational",
- "sensationnal", "sensational",
- "sensibilites", "sensibilities",
- "sensitivitiy", "sensitivity",
- "sentimentals", "sentiments",
- "sertificates", "certificates",
- "serveillance", "surveillance",
- "seskatchewan", "saskatchewan",
- "shakesperean", "shakespeare",
- "shamelessely", "shamelessly",
- "shamelessley", "shamelessly",
- "shampionship", "championship",
- "shardholders", "shareholders",
- "shenanigains", "shenanigans",
- "shenanigangs", "shenanigans",
- "shenaniganns", "shenanigans",
- "shenanighans", "shenanigans",
- "shopkeeepers", "shopkeepers",
- "showboarding", "snowboarding",
- "siginificant", "significant",
- "significanly", "significantly",
- "significante", "significance",
- "significanty", "significantly",
- "significatly", "significantly",
- "signleplayer", "singleplayer",
- "simaltaneous", "simultaneous",
- "simeltaneous", "simultaneous",
- "similaraties", "similarities",
- "similiarites", "similarities",
- "similiarties", "similarities",
- "similiraties", "similarities",
- "similtaneous", "simultaneous",
- "simliarities", "similarities",
- "simlutaneous", "simultaneous",
- "simpathizers", "sympathizers",
- "simplistisch", "simplistic",
- "simulatenous", "simultaneous",
- "simulatneous", "simultaneous",
- "simultaenous", "simultaneous",
- "simultaneuos", "simultaneous",
- "simultanious", "simultaneous",
- "simulteneous", "simultaneous",
- "singelplayer", "singleplayer",
- "singlepalyer", "singleplayer",
- "sinlgeplayer", "singleplayer",
- "situationals", "situations",
- "situationnal", "situational",
- "skandinavian", "scandinavian",
- "skateboaring", "skateboarding",
- "skrawberries", "strawberries",
- "slaugthering", "slaughtering",
- "sloughtering", "slaughtering",
- "sluaghtering", "slaughtering",
- "snowballling", "snowballing",
- "snowbaording", "snowboarding",
- "socialistisk", "socialists",
- "socialogical", "sociological",
- "socioeconimc", "socioeconomic",
- "socioeconmic", "socioeconomic",
- "socioligical", "sociological",
- "sociopolical", "sociological",
- "somethingest", "somethings",
- "sophisticaed", "sophisticated",
- "sophisticted", "sophisticated",
- "southamption", "southampton",
- "southernerns", "southerners",
- "sovereighnty", "sovereignty",
- "sovereignety", "sovereignty",
- "sovereignity", "sovereignty",
- "specialistes", "specialists",
- "specializare", "specialize",
- "specializate", "specialize",
- "specializeds", "specializes",
- "specializied", "specialize",
- "speciallized", "specialised",
- "specifcation", "specification",
- "spectacuarly", "spectacular",
- "spectaculair", "spectacular",
- "spectaculary", "spectacularly",
- "spectacullar", "spectacularly",
- "specualtions", "speculation",
- "spermatozoan", "spermatozoon",
- "spesifically", "specifically",
- "spirituallly", "spiritually",
- "spirtiuality", "spirituality",
- "spirutuality", "spirituality",
- "spontaneosly", "spontaneously",
- "spontaneouly", "spontaneously",
- "spreadhseets", "spreadsheets",
- "spreadsheats", "spreadsheets",
- "spreadsheeds", "spreadsheets",
- "spreadsheeet", "spreadsheets",
- "standartized", "standardized",
- "standerdized", "standardized",
- "stardardized", "standardized",
- "starightened", "straightened",
- "starwberries", "strawberries",
- "statisticaly", "statistically",
- "stereotpying", "stereotyping",
- "stereotypers", "stereotypes",
- "stereotypian", "stereotyping",
- "steriotyping", "stereotyping",
- "steroetyping", "stereotyping",
- "steryotyping", "stereotyping",
- "straigntened", "straightened",
- "straigthened", "straightened",
- "strategicaly", "strategically",
- "strategiclly", "strategically",
- "strawburries", "strawberries",
- "streemlining", "streamlining",
- "streightened", "straightened",
- "strenghening", "strengthening",
- "strenghtened", "strengthened",
- "strengtheing", "strengthening",
- "stroytelling", "storytelling",
- "subconcsious", "subconscious",
- "subconsicous", "subconscious",
- "subcouncious", "subconscious",
- "subcsription", "subscriptions",
- "subesquently", "subsequently",
- "subjectivety", "subjectively",
- "subjectivily", "subjectively",
- "subjectivley", "subjectively",
- "subjudgation", "subjugation",
- "subredditors", "subreddits",
- "subscirption", "subscriptions",
- "subsconcious", "subconscious",
- "subscribbers", "subscribers",
- "subscribbing", "subscribing",
- "subscribirse", "subscriber",
- "subscribtion", "subscription",
- "subscriptons", "subscriptions",
- "subscritpion", "subscriptions",
- "subscrpition", "subscriptions",
- "subsiquently", "subsequently",
- "subsrciption", "subscriptions",
- "subsricption", "subscriptions",
- "substantialy", "substantially",
- "substantitve", "substantive",
- "substitition", "substitution",
- "substituters", "substitutes",
- "substitutivo", "substitution",
- "substitutues", "substitutes",
- "substracting", "subtracting",
- "substraction", "subtraction",
- "subterranian", "subterranean",
- "succsessfull", "successful",
- "sunconscious", "subconscious",
- "supermarkeds", "supermarkets",
- "supermarkers", "supermarkets",
- "supermarkert", "supermarkets",
- "supermarkten", "supermarket",
- "supermarktes", "supermarkets",
- "supernarkets", "supermarkets",
- "supernatrual", "supernatural",
- "supersticion", "superstition",
- "superstision", "superstition",
- "superstitios", "superstitious",
- "superstitous", "superstitious",
- "supervisiors", "supervisors",
- "supervisoras", "supervisors",
- "supervisores", "supervisors",
- "supllemental", "supplemental",
- "supplamental", "supplemental",
- "supplamented", "supplemented",
- "supplimental", "supplemental",
- "suppresssion", "suppression",
- "supscription", "subscription",
- "supsiciously", "suspiciously",
- "surprizingly", "surprisingly",
- "surrenderred", "surrendered",
- "surrundering", "surrendering",
- "survaillance", "surveillance",
- "survaillence", "surveillance",
- "survallience", "surveillance",
- "surveillence", "surveillance",
- "survelliance", "surveillance",
- "surviellance", "surveillance",
- "survivabiity", "survivability",
- "survivabiliy", "survivability",
- "survivabilty", "survivability",
- "susceptiable", "susceptible",
- "susceptibile", "susceptible",
- "suspeciously", "suspiciously",
- "suspicioulsy", "suspiciously",
- "suspiciuosly", "suspiciously",
- "suspisiously", "suspiciously",
- "sustainabily", "sustainability",
- "symapthizers", "sympathizers",
- "symetrically", "symmetrically",
- "symmetricaly", "symmetrically",
- "sympathethic", "sympathetic",
- "sympathsizer", "sympathizers",
- "sympathyzers", "sympathizers",
- "sympethizers", "sympathizers",
- "symphatizers", "sympathizers",
- "sympithizers", "sympathizers",
- "syncronously", "synchronously",
- "sysmatically", "systematically",
- "systematisch", "systematic",
- "tablespooons", "tablespoon",
- "tacticallity", "tactically",
- "tangencially", "tangentially",
- "tangenitally", "tangentially",
- "tangientally", "tangentially",
- "teamfighters", "teamfights",
- "teansylvania", "transylvania",
- "techanically", "mechanically",
- "techincality", "technicality",
- "technologial", "technological",
- "telelevision", "television",
- "teleportaion", "teleportation",
- "teleportaton", "teleportation",
- "temepratures", "temperatures",
- "temparatures", "temperatures",
- "temperaturas", "temperatures",
- "temporarilly", "temporarily",
- "tempreatures", "temperatures",
- "tempuratures", "temperatures",
- "tengentially", "tangentially",
- "termendously", "tremendously",
- "territorrial", "territorial",
- "territorries", "territories",
- "testasterone", "testosterone",
- "testestorone", "testosterone",
- "thanskgiving", "thanksgiving",
- "theologicial", "theological",
- "theoreticaly", "theoretically",
- "thermomenter", "thermometer",
- "thermomether", "thermometer",
- "thumbnailers", "thumbnails",
- "thunderboldt", "thunderbolt",
- "tindergarten", "kindergarten",
- "torubleshoot", "troubleshoot",
- "totalitarion", "totalitarian",
- "totalitatian", "totalitarian",
- "touchscreeen", "touchscreen",
- "traditionaly", "traditionally",
- "traditionnal", "traditional",
- "tradtionally", "traditionally",
- "tramendously", "tremendously",
- "tramsformers", "transformers",
- "tramsforming", "transforming",
- "tranditional", "transitional",
- "tranistional", "transitional",
- "tranistioned", "transitioned",
- "tranlsations", "translations",
- "tranmsission", "transmissions",
- "transaltions", "translations",
- "transaprency", "transparency",
- "transational", "transitional",
- "transcations", "transactions",
- "transcendant", "transcendent",
- "transcripton", "transcription",
- "transcriptus", "transcripts",
- "transesxuals", "transsexuals",
- "transfarmers", "transformers",
- "transfarring", "transferring",
- "transferrred", "transferred",
- "transformare", "transformers",
- "transformase", "transforms",
- "transformees", "transforms",
- "transforners", "transformers",
- "transfromers", "transformers",
- "transfroming", "transforming",
- "transgenderd", "transgendered",
- "transgendred", "transgendered",
- "transgenered", "transgender",
- "transicional", "transitional",
- "transilvania", "transylvania",
- "transimssion", "transmissions",
- "transisioned", "transitioned",
- "translastion", "translations",
- "translateing", "translating",
- "translationg", "translating",
- "translucient", "translucent",
- "translyvania", "transylvania",
- "transmisions", "transmission",
- "transmisison", "transmission",
- "transmissons", "transmissions",
- "transmitirte", "transmitter",
- "transmittted", "transmitted",
- "transmorfers", "transformer",
- "transofrmers", "transformers",
- "transofrming", "transforming",
- "transparancy", "transparency",
- "transparenty", "transparency",
- "transparrent", "transparent",
- "transperancy", "transparency",
- "transperency", "transparency",
- "transplantes", "transplants",
- "transporteur", "transporter",
- "transportion", "transporting",
- "transpotting", "transporting",
- "transsmision", "transmissions",
- "transylmania", "transylvania",
- "transylvanai", "transylvania",
- "trasnferring", "transferring",
- "trasnformers", "transformers",
- "trasnforming", "transforming",
- "trasnmission", "transmissions",
- "trasnparency", "transparency",
- "trasnporting", "transporting",
- "trememdously", "tremendously",
- "tremendoulsy", "tremendously",
- "tremondously", "tremendously",
- "troubelshoot", "troubleshoot",
- "troublehsoot", "troubleshoot",
- "trumendously", "tremendously",
- "trustworthly", "trustworthy",
- "ubsubscribed", "unsubscribed",
- "udnerpowered", "underpowered",
- "umbelievable", "unbelievable",
- "umemployment", "unemployment",
- "unaccaptable", "unacceptable",
- "unacceptible", "unacceptable",
- "unaccpetable", "unacceptable",
- "unacompanied", "unaccompanied",
- "unappealling", "unappealing",
- "unattractice", "unattractive",
- "unautherized", "unauthorized",
- "unauthroized", "unauthorized",
- "unbeleivable", "unbelievable",
- "unbeleivably", "unbelievably",
- "unbeliavable", "unbelievable",
- "unbeliavably", "unbelievably",
- "unbeliebable", "unbelievable",
- "unbelieveble", "unbelievable",
- "unbelievibly", "unbelievably",
- "unbeliveable", "unbelievable",
- "unbeliveably", "unbelievably",
- "unbelizeable", "unbelievable",
- "unbolievable", "unbelievable",
- "uncertainity", "uncertainty",
- "uncertaintly", "uncertainty",
- "uncompatible", "incompatible",
- "unconditinal", "unconditional",
- "unconsciosly", "unconsciously",
- "unconsciouly", "unconsciously",
- "unconsistent", "inconsistent",
- "unconvenient", "inconvenient",
- "unconvential", "unconventional",
- "undecideable", "undecidable",
- "undefinitely", "indefinitely",
- "undeniablely", "undeniably",
- "undergradate", "undergraduate",
- "undergradute", "undergraduate",
- "underminding", "undermining",
- "undermineing", "undermining",
- "undermineras", "undermines",
- "undermineres", "undermines",
- "underminging", "undermining",
- "underminning", "undermining",
- "undertakeing", "undertaking",
- "underwhelimg", "underwhelming",
- "underwheling", "underwhelming",
- "undesireable", "undesirable",
- "undoubtedbly", "undoubtedly",
- "unemployemnt", "unemployment",
- "unemplyoment", "unemployment",
- "unempolyment", "unemployment",
- "unenployment", "unemployment",
- "unequalities", "inequalities",
- "unexpectadly", "unexpectedly",
- "unexpectetly", "unexpectedly",
- "unexpectidly", "unexpectedly",
- "unexperience", "inexperience",
- "unexpextedly", "unexpectedly",
- "unexplicably", "inexplicably",
- "unforgetable", "unforgettable",
- "unforgiveble", "unforgivable",
- "unforgivible", "unforgivable",
- "unfortunatly", "unfortunately",
- "unfortunetly", "unfortunately",
- "unilatreally", "unilaterally",
- "uniliterally", "unilaterally",
- "unimpresssed", "unimpressed",
- "uninitalised", "uninitialised",
- "uninitalized", "uninitialized",
- "uninstallimg", "uninstalling",
- "uninstallled", "uninstalled",
- "unintentinal", "unintentional",
- "uninteresing", "uninteresting",
- "uninterneted", "uninterested",
- "uninterruped", "uninterrupted",
- "uninterupted", "uninterrupted",
- "unisntalling", "uninstalling",
- "unitesstates", "unitedstates",
- "univerisites", "universities",
- "univeristies", "universities",
- "universitets", "universities",
- "unliaterally", "unilaterally",
- "unneccessary", "unnecessary",
- "unnecesarily", "unnecessarily",
- "unnecessairy", "unnecessarily",
- "unnecessarly", "unnecessarily",
- "unnistalling", "uninstalling",
- "unpredictabe", "unpredictable",
- "unpreductive", "unproductive",
- "unproduktive", "unproductive",
- "unrealisitic", "unrealistic",
- "unreaponsive", "unresponsive",
- "unreasonalby", "unreasonably",
- "unrepsonsive", "unresponsive",
- "unresponcive", "unresponsive",
- "unresponisve", "unresponsive",
- "unresponsibe", "unresponsive",
- "unrestircted", "unrestricted",
- "unrestrcited", "unrestricted",
- "unristricted", "unrestricted",
- "unseccessful", "unsuccessful",
- "unsespecting", "unsuspecting",
- "unsibscribed", "unsubscribed",
- "unsoliciated", "unsolicited",
- "unsolicitied", "unsolicited",
- "unsubscirbed", "unsubscribed",
- "unsubscrible", "unsubscribed",
- "unsubscrided", "unsubscribed",
- "unsubscriped", "unsubscribed",
- "unsubscrubed", "unsubscribed",
- "unsubsrcibed", "unsubscribed",
- "unsucessfull", "unsuccessful",
- "unsunscribed", "unsubscribed",
- "unsurprizing", "unsurprising",
- "unsusbcribed", "unsubscribed",
- "unsustainble", "unsustainable",
- "unvelievable", "unbelievable",
- "unvelievably", "unbelievably",
- "unviersities", "universities",
- "unvulnerable", "invulnerable",
- "varification", "verification",
- "vegetarianas", "vegetarians",
- "vegetarianos", "vegetarians",
- "verficiation", "verification",
- "verificacion", "verification",
- "verificaiton", "verification",
- "verifikation", "verification",
- "vernaculaire", "vernacular",
- "versatillity", "versatility",
- "verticallity", "vertically",
- "videogamemes", "videogames",
- "visualizaton", "visualization",
- "vocabularily", "vocabulary",
- "vocabularity", "vocabulary",
- "volonteering", "volunteering",
- "volounteered", "volunteered",
- "voluntarilly", "voluntarily",
- "volunterring", "volunteering",
- "vulnerabilty", "vulnerability",
- "weightlifing", "weightlifting",
- "withdrawalls", "withdrawals",
- "withdrawling", "withdrawing",
- "withdrawning", "withdrawing",
- "wonderfullly", "wonderfully",
- "worshippping", "worshipping",
- "xenophobical", "xenophobia",
- "abandenment", "abandonment",
- "abandomnent", "abandonment",
- "abandonding", "abandoning",
- "abandonnent", "abandonment",
- "abandonning", "abandoning",
- "abbreviatin", "abbreviation",
- "abbreviaton", "abbreviation",
- "abdominable", "abdominal",
- "abomanation", "abomination",
- "abominacion", "abomination",
- "abomonation", "abomination",
- "abonimation", "abomination",
- "aboriginial", "aboriginal",
- "aborigional", "aboriginal",
- "abreviation", "abbreviation",
- "abritrarily", "arbitrarily",
- "abritration", "arbitration",
- "absolutelly", "absolutely",
- "absolutelys", "absolutes",
- "absolutisme", "absolutes",
- "absolutiste", "absolutes",
- "abstraccion", "abstraction",
- "abstraktion", "abstraction",
- "abstruction", "abstraction",
- "abundancies", "abundances",
- "academicaly", "academically",
- "academicese", "academics",
- "accelarated", "accelerated",
- "accelarator", "accelerator",
- "accelerater", "accelerator",
- "acceleratie", "accelerate",
- "acceleratio", "accelerator",
- "acceleraton", "acceleration",
- "accelorated", "accelerated",
- "accelorator", "accelerator",
- "acceptabelt", "acceptable",
- "accesseries", "accessories",
- "accessibile", "accessible",
- "accessibily", "accessibility",
- "accessoires", "accessories",
- "accidantely", "accidently",
- "accidentaly", "accidentally",
- "accidentely", "accidently",
- "accidential", "accidental",
- "accidentily", "accidently",
- "accidentlay", "accidently",
- "accidentley", "accidently",
- "accidentlly", "accidently",
- "accomadated", "accommodated",
- "accomadates", "accommodates",
- "accommadate", "accommodate",
- "accommidate", "accommodate",
- "accomodated", "accommodated",
- "accomodates", "accommodates",
- "accomondate", "accommodate",
- "accompained", "accompanied",
- "accompanyed", "accompanied",
- "accompianed", "accompanied",
- "accompinied", "accompanied",
- "accomplises", "accomplishes",
- "accomplishs", "accomplishes",
- "accomponied", "accompanied",
- "accountatns", "accountants",
- "accountents", "accountants",
- "accquainted", "acquainted",
- "accrediated", "accredited",
- "accreditied", "accredited",
- "accreditted", "accredited",
- "acculumated", "accumulated",
- "accumalated", "accumulated",
- "accumelated", "accumulated",
- "accumilated", "accumulated",
- "accumulatin", "accumulation",
- "accumulaton", "accumulation",
- "accuratelly", "accurately",
- "accustommed", "accustomed",
- "acheivement", "achievement",
- "acheivments", "achievements",
- "achievemint", "achievement",
- "achievemnts", "achievements",
- "achievments", "achievements",
- "achivements", "achievements",
- "acknolwedge", "acknowledge",
- "acknoweldge", "acknowledge",
- "acknowleded", "acknowledged",
- "acknowlegde", "acknowledge",
- "acknowleged", "acknowledge",
- "acknowleges", "acknowledges",
- "acknwoledge", "acknowledges",
- "acomplished", "accomplished",
- "acopalyptic", "apocalyptic",
- "acquaintace", "acquaintance",
- "acquisation", "acquisition",
- "activateing", "activating",
- "activationg", "activating",
- "activistion", "activision",
- "additinally", "additionally",
- "additionaly", "additionally",
- "additonally", "additionally",
- "adequatedly", "adequately",
- "adjectiveus", "adjectives",
- "administerd", "administered",
- "administrar", "administrator",
- "administren", "administer",
- "administrer", "administer",
- "administres", "administer",
- "administrez", "administer",
- "adminstered", "administered",
- "adminstrate", "administrate",
- "admittadely", "admittedly",
- "adolencence", "adolescence",
- "adolescance", "adolescence",
- "adolescense", "adolescence",
- "advantadges", "advantages",
- "advantageos", "advantageous",
- "advantageus", "advantageous",
- "advantagous", "advantageous",
- "adventerous", "adventures",
- "adventourus", "adventurous",
- "adversiting", "advertising",
- "advertisors", "advertisers",
- "advertisted", "advertised",
- "aesthethics", "aesthetics",
- "afficionado", "aficionado",
- "affiliction", "affiliation",
- "affirmitave", "affirmative",
- "affirmitive", "affirmative",
- "affixiation", "affiliation",
- "affrimative", "affirmative",
- "afgahnistan", "afghanistan",
- "afganhistan", "afghanistan",
- "afghanastan", "afghanistan",
- "afghansitan", "afghanistan",
- "afhganistan", "afghanistan",
- "afternarket", "aftermarket",
- "afterthougt", "afterthought",
- "aggaravates", "aggravates",
- "aggragating", "aggravating",
- "aggregatore", "aggregate",
- "aggressivly", "aggressively",
- "aggresssion", "aggression",
- "aggrovating", "aggravating",
- "agnostacism", "agnosticism",
- "agnostisicm", "agnosticism",
- "agnostisism", "agnosticism",
- "agnostocism", "agnosticism",
- "agnsoticism", "agnosticism",
- "agonsticism", "agnosticism",
- "agressively", "aggressively",
- "agressivley", "agressive",
- "agressivnes", "agressive",
- "agricolture", "agriculture",
- "agriculteur", "agriculture",
- "agricultral", "agricultural",
- "agricultual", "agricultural",
- "agricutlure", "agriculture",
- "ahtleticism", "athleticism",
- "alcoholicas", "alcoholics",
- "alcoholicos", "alcoholics",
- "alcoholisim", "alcoholism",
- "algorithems", "algorithm",
- "algorithims", "algorithm",
- "algorithmes", "algorithms",
- "algorithmns", "algorithms",
- "algorithmus", "algorithms",
- "algorithyms", "algorithm",
- "algorythims", "algorithms",
- "alientating", "alienating",
- "alleigances", "allegiance",
- "alltogether", "altogether",
- "alterantive", "alternative",
- "alternatley", "alternately",
- "alternitive", "alternative",
- "altheticism", "athleticism",
- "altnerately", "alternately",
- "altruisitic", "altruistic",
- "altruistric", "altruistic",
- "amalgomated", "amalgamated",
- "ambulancier", "ambulance",
- "amerliorate", "ameliorate",
- "ammendments", "amendments",
- "ampehtamine", "amphetamine",
- "ampethamine", "amphetamine",
- "amphetamies", "amphetamines",
- "amphetamins", "amphetamines",
- "amphetemine", "amphetamine",
- "amphetimine", "amphetamine",
- "amphetmaine", "amphetamines",
- "analyticals", "analytics",
- "anarchistes", "anarchists",
- "ancedotally", "anecdotally",
- "androgenous", "androgynous",
- "anecdatally", "anecdotally",
- "anecdotelly", "anecdotally",
- "anecodtally", "anecdotally",
- "anectodally", "anecdotally",
- "anectotally", "anecdotally",
- "anedoctally", "anecdotally",
- "angosticism", "agnosticism",
- "anihilation", "annihilation",
- "anitbiotics", "antibiotics",
- "annihalated", "annihilated",
- "annihilaton", "annihilation",
- "annihilited", "annihilated",
- "annihliated", "annihilated",
- "annilihated", "annihilated",
- "anniversery", "anniversary",
- "annonymouse", "anonymous",
- "announceing", "announcing",
- "announcemet", "announcements",
- "announcemnt", "announcement",
- "announcents", "announces",
- "annoymously", "anonymously",
- "anonamously", "anonymously",
- "anonimously", "anonymously",
- "anonmyously", "anonymously",
- "anonomously", "anonymously",
- "anonymousny", "anonymously",
- "anouncement", "announcement",
- "antagonisic", "antagonistic",
- "antagonistc", "antagonistic",
- "antagonstic", "antagonist",
- "anthropolgy", "anthropology",
- "anthropoloy", "anthropology",
- "antibiodics", "antibiotics",
- "antibioitcs", "antibiotic",
- "antibioitic", "antibiotic",
- "antibitoics", "antibiotics",
- "antiboitics", "antibiotics",
- "anticapated", "anticipated",
- "anticiapted", "anticipated",
- "anticipatin", "anticipation",
- "antiobitics", "antibiotic",
- "antiquaited", "antiquated",
- "antisipated", "anticipated",
- "apacolyptic", "apocalyptic",
- "apocaliptic", "apocalyptic",
- "apocalpytic", "apocalyptic",
- "apocalytpic", "apocalyptic",
- "apolagizing", "apologizing",
- "apolegetics", "apologetics",
- "apologistas", "apologists",
- "apologistes", "apologists",
- "apostrophie", "apostrophe",
- "apparantely", "apparently",
- "appareances", "appearances",
- "apparentely", "apparently",
- "appartments", "apartments",
- "appeareance", "appearance",
- "appearences", "appearances",
- "apperciated", "appreciated",
- "apperciates", "appreciates",
- "appereances", "appearances",
- "applicabile", "applicable",
- "applicaiton", "application",
- "applicatins", "applicants",
- "applicatons", "applications",
- "appoitnment", "appointments",
- "apporaching", "approaching",
- "apporpriate", "appropriate",
- "apporximate", "approximate",
- "appraoching", "approaching",
- "apprearance", "appearance",
- "apprecaited", "appreciated",
- "apprecaites", "appreciates",
- "appreciaite", "appreciative",
- "appreciatie", "appreciative",
- "appreciatin", "appreciation",
- "appreciaton", "appreciation",
- "appreciatve", "appreciative",
- "appreicated", "appreciated",
- "appreicates", "appreciates",
- "apprentince", "apprentice",
- "appriciated", "appreciated",
- "appriciates", "appreciates",
- "apprieciate", "appreciate",
- "appropirate", "appropriate",
- "appropraite", "appropriate",
- "appropriato", "appropriation",
- "approxamate", "approximate",
- "approxiamte", "approximate",
- "approxmiate", "approximate",
- "aprehensive", "apprehensive",
- "apsirations", "aspirations",
- "aqcuisition", "acquisition",
- "aquaintance", "acquaintance",
- "aquiantance", "acquaintance",
- "arbitrairly", "arbitrarily",
- "arbitralily", "arbitrarily",
- "arbitrarely", "arbitrarily",
- "arbitrarion", "arbitration",
- "arbitratily", "arbitrarily",
- "arbritarily", "arbitrarily",
- "arbritation", "arbitration",
- "arcaheology", "archaeology",
- "archaoelogy", "archeology",
- "archeaology", "archaeology",
- "archimedian", "archimedean",
- "architechts", "architect",
- "architectes", "architects",
- "architecure", "architecture",
- "argiculture", "agriculture",
- "argumentate", "argumentative",
- "aribtrarily", "arbitrarily",
- "aribtration", "arbitration",
- "arithmentic", "arithmetic",
- "arithmethic", "arithmetic",
- "arithmetric", "arithmetic",
- "armagedddon", "armageddon",
- "armageddeon", "armageddon",
- "arrangments", "arrangements",
- "arrengement", "arrangement",
- "articluated", "articulated",
- "articualted", "articulated",
- "artifically", "artificially",
- "artificialy", "artificially",
- "aspergerers", "aspergers",
- "asphyxation", "asphyxiation",
- "aspriations", "aspirations",
- "assasinated", "assassinated",
- "assasinates", "assassinates",
- "assassiante", "assassinate",
- "assassinare", "assassinate",
- "assassinatd", "assassinated",
- "assassinato", "assassination",
- "assassinats", "assassins",
- "assassinted", "assassinated",
- "assembleing", "assembling",
- "assemblying", "assembling",
- "assertation", "assertion",
- "assignemnts", "assignments",
- "assimialted", "assimilate",
- "assimilatie", "assimilate",
- "assimilerat", "assimilate",
- "assimiliate", "assimilate",
- "assimliated", "assimilate",
- "assingments", "assignments",
- "assistantes", "assistants",
- "assocaition", "associations",
- "associaiton", "associations",
- "associaties", "associates",
- "associatons", "associations",
- "assoication", "association",
- "assosiating", "associating",
- "assosiation", "association",
- "assoziation", "association",
- "assumptious", "assumptions",
- "astonashing", "astonishing",
- "astonoshing", "astonishing",
- "astronaught", "astronaut",
- "astronaunts", "astronaut",
- "astronautas", "astronauts",
- "astronautes", "astronauts",
- "asychronous", "asynchronous",
- "asyncronous", "asynchronous",
- "atatchments", "attachments",
- "atheistisch", "atheistic",
- "athelticism", "athleticism",
- "athletecism", "athleticism",
- "athleticsim", "athleticism",
- "athletisicm", "athleticism",
- "athletisism", "athleticism",
- "atmopsheric", "atmospheric",
- "atmoshperic", "atmospheric",
- "atmosoheric", "atmospheric",
- "atomspheric", "atmospheric",
- "atrocitites", "atrocities",
- "attachemnts", "attachments",
- "attackerasu", "attackers",
- "attackerats", "attackers",
- "attactments", "attachments",
- "attributred", "attributed",
- "attributted", "attribute",
- "attrocities", "atrocities",
- "atttributes", "attributes",
- "audiobookas", "audiobooks",
- "audioboooks", "audiobook",
- "auotcorrect", "autocorrect",
- "austrailans", "australians",
- "austrailian", "australian",
- "australiaan", "australians",
- "australiams", "australians",
- "australiens", "australians",
- "australlian", "australian",
- "authenticiy", "authenticity",
- "authenticor", "authenticator",
- "authenticty", "authenticity",
- "authorative", "authoritative",
- "authoritate", "authoritative",
- "authoroties", "authorities",
- "autoatttack", "autoattack",
- "autocoreect", "autocorrect",
- "autocorrekt", "autocorrect",
- "autocorrent", "autocorrect",
- "autocorrext", "autocorrect",
- "autoctonous", "autochthonous",
- "autokorrect", "autocorrect",
- "automaticly", "automatically",
- "automatonic", "automation",
- "automoblies", "automobile",
- "auxillaries", "auxiliaries",
- "availabiliy", "availability",
- "availabilty", "availability",
- "availablity", "availability",
- "awesoneness", "awesomeness",
- "babysittter", "babysitter",
- "backbacking", "backpacking",
- "backgorunds", "backgrounds",
- "backhacking", "backpacking",
- "backjacking", "backpacking",
- "backtacking", "backpacking",
- "bangaldeshi", "bangladesh",
- "bangladesch", "bangladesh",
- "barceloneta", "barcelona",
- "bargainning", "bargaining",
- "battelfield", "battlefield",
- "battelfront", "battlefront",
- "battelships", "battleship",
- "battlefeild", "battlefield",
- "battlefiend", "battlefield",
- "battlefiled", "battlefield",
- "battlefornt", "battlefront",
- "battlehsips", "battleship",
- "beastiality", "bestiality",
- "beaurocracy", "bureaucracy",
- "beautyfully", "beautifully",
- "behaviorial", "behavioral",
- "belittleing", "belittling",
- "belittlling", "belittling",
- "belligerant", "belligerent",
- "belligirent", "belligerent",
- "bellweather", "bellwether",
- "benefitical", "beneficial",
- "bestiallity", "bestiality",
- "beuatifully", "beautifully",
- "beuraucracy", "bureaucracy",
- "beuraucrats", "bureaucrats",
- "billegerent", "belligerent",
- "billionairs", "billionaires",
- "billionarie", "billionaire",
- "billioniare", "billionaire",
- "biologicaly", "biologically",
- "birthdayers", "birthdays",
- "birthdaymas", "birthdays",
- "bittersweat", "bittersweet",
- "bitterwseet", "bittersweet",
- "blackberrry", "blackberry",
- "blacksmitch", "blacksmith",
- "bloodboorne", "bloodborne",
- "bluebarries", "blueberries",
- "blueburries", "blueberries",
- "blueprients", "blueprints",
- "bodybuildig", "bodybuilding",
- "bodybuildng", "bodybuilding",
- "bodybuiling", "bodybuilding",
- "bombardeada", "bombarded",
- "bombardeado", "bombarded",
- "bombarderad", "bombarded",
- "bordelrands", "borderlands",
- "bordlerands", "borderlands",
- "bortherhood", "brotherhood",
- "bourgeousie", "bourgeois",
- "boycottting", "boycotting",
- "bracelettes", "bracelets",
- "brainwahsed", "brainwashed",
- "brainwasing", "brainwashing",
- "braziliians", "brazilians",
- "breakthough", "breakthrough",
- "breakthrouh", "breakthrough",
- "breathtakng", "breathtaking",
- "brianwashed", "brainwashed",
- "brillaintly", "brilliantly",
- "broadcasing", "broadcasting",
- "broadcastes", "broadcasts",
- "broderlands", "borderlands",
- "brotherwood", "brotherhood",
- "buddhistisk", "buddhists",
- "buearucrats", "bureaucrats",
- "bueraucracy", "bureaucracy",
- "bueraucrats", "bureaucrats",
- "buisnessman", "businessman",
- "buisnessmen", "businessmen",
- "bullerproof", "bulletproof",
- "bulletbroof", "bulletproof",
- "bulletproff", "bulletproof",
- "bulletprrof", "bulletproof",
- "bullitproof", "bulletproof",
- "bureacuracy", "bureaucracy",
- "bureaocracy", "bureaucracy",
- "bureaocrats", "bureaucrats",
- "bureaucraps", "bureaucrats",
- "bureaucrash", "bureaucrats",
- "bureaucrasy", "bureaucrats",
- "bureaucrazy", "bureaucracy",
- "bureuacracy", "bureaucracy",
- "bureuacrats", "bureaucrats",
- "burueacrats", "bureaucrats",
- "businessnes", "businessmen",
- "busniessmen", "businessmen",
- "butterfiles", "butterflies",
- "butterfleye", "butterfly",
- "butterflyes", "butterflies",
- "butterfries", "butterflies",
- "butterlfies", "butterflies",
- "caclulating", "calculating",
- "caclulation", "calculation",
- "caclulators", "calculators",
- "cailbration", "calibration",
- "calbiration", "calibration",
- "calcualting", "calculating",
- "calcualtion", "calculations",
- "calcualtors", "calculators",
- "calculaters", "calculators",
- "calculatios", "calculators",
- "calculatons", "calculations",
- "calibartion", "calibration",
- "calibraiton", "calibration",
- "califorinan", "californian",
- "californain", "californian",
- "californica", "california",
- "californien", "californian",
- "californiia", "californian",
- "californina", "californian",
- "californnia", "californian",
- "califronian", "californian",
- "caluclating", "calculating",
- "caluclation", "calculation",
- "caluclators", "calculators",
- "caluculated", "calculated",
- "caluiflower", "cauliflower",
- "camouflague", "camouflage",
- "camouflauge", "camouflage",
- "campagining", "campaigning",
- "campainging", "campaigning",
- "canadianese", "canadians",
- "cannabilism", "cannibalism",
- "cannabolism", "cannibalism",
- "canniablism", "cannibalism",
- "cannibalizm", "cannibalism",
- "cannibaljim", "cannibalism",
- "cannibalsim", "cannibalism",
- "cannibilism", "cannibalism",
- "cannobalism", "cannibalism",
- "cannotation", "connotation",
- "capabilites", "capabilities",
- "capabilitiy", "capability",
- "capabillity", "capability",
- "capacitaron", "capacitor",
- "capacitores", "capacitors",
- "capatilists", "capitalists",
- "capatilized", "capitalized",
- "caperbility", "capability",
- "capitalisim", "capitalism",
- "capitilists", "capitalists",
- "capitilized", "capitalized",
- "capitolists", "capitalists",
- "capitolized", "capitalized",
- "captialists", "capitalists",
- "captialized", "capitalized",
- "cariactures", "caricature",
- "carniverous", "carnivorous",
- "castatrophe", "catastrophe",
- "catagorized", "categorized",
- "catapillars", "caterpillars",
- "catapillers", "caterpillars",
- "catasthrope", "catastrophe",
- "catastraphe", "catastrophe",
- "catastrohpe", "catastrophe",
- "catastropic", "catastrophic",
- "categroized", "categorized",
- "catepillars", "caterpillars",
- "catergorize", "categorize",
- "caterogized", "categorized",
- "caterpilars", "caterpillars",
- "caterpiller", "caterpillar",
- "catholacism", "catholicism",
- "catholicsim", "catholicism",
- "catholisicm", "catholicism",
- "catholisism", "catholicism",
- "catholizism", "catholicism",
- "catholocism", "catholicism",
- "catogerized", "categorized",
- "catterpilar", "caterpillar",
- "cauilflower", "cauliflower",
- "caulfilower", "cauliflower",
- "celebartion", "celebrations",
- "celebirties", "celebrities",
- "celebracion", "celebration",
- "celebrasion", "celebrations",
- "celebratons", "celebrations",
- "centipeddle", "centipede",
- "cerimonious", "ceremonious",
- "certaintity", "certainty",
- "certificaat", "certificate",
- "certificare", "certificate",
- "certificato", "certification",
- "certificats", "certificates",
- "challanging", "challenging",
- "challeneged", "challenged",
- "challeneger", "challenger",
- "challeneges", "challenges",
- "chameleooon", "chameleon",
- "championshp", "championship",
- "championsip", "championship",
- "chancellour", "chancellor",
- "charachters", "characters",
- "charasmatic", "charismatic",
- "charimastic", "charismatic",
- "charsimatic", "charismatic",
- "cheerleadra", "cheerleader",
- "cheerleards", "cheerleaders",
- "cheerleeder", "cheerleader",
- "cheesebuger", "cheeseburger",
- "cheeseburgs", "cheeseburgers",
- "chihuahuita", "chihuahua",
- "childrenmrs", "childrens",
- "chloesterol", "cholesterol",
- "cholesteral", "cholesterol",
- "cholestoral", "cholesterol",
- "cholestorol", "cholesterol",
- "cholosterol", "cholesterol",
- "chormosomes", "chromosomes",
- "christianty", "christianity",
- "chromasomes", "chromosomes",
- "chromesomes", "chromosomes",
- "chromisomes", "chromosomes",
- "chromosones", "chromosomes",
- "chromossome", "chromosomes",
- "chromozomes", "chromosomes",
- "chronicales", "chronicles",
- "chronichles", "chronicles",
- "cicrulating", "circulating",
- "cincinnasti", "cincinnati",
- "cincinnatti", "cincinnati",
- "cincinnnati", "cincinnati",
- "circimcised", "circumcised",
- "circluating", "circulating",
- "circualtion", "circulation",
- "circulacion", "circulation",
- "circumcison", "circumcision",
- "circumsiced", "circumcised",
- "circumsised", "circumcised",
- "circumstace", "circumstance",
- "circumvrent", "circumvent",
- "circuncised", "circumcised",
- "cirticising", "criticising",
- "ciruclating", "circulating",
- "ciruclation", "circulation",
- "citicenship", "citizenship",
- "citisenship", "citizenship",
- "citizinship", "citizenship",
- "civilizatin", "civilizations",
- "civilizaton", "civilization",
- "claculators", "calculators",
- "classifides", "classified",
- "cleanilness", "cleanliness",
- "cleanleness", "cleanliness",
- "cleanlyness", "cleanliness",
- "cleansiness", "cleanliness",
- "cliffbanger", "cliffhanger",
- "cliffhander", "cliffhanger",
- "cliffhangar", "cliffhanger",
- "clifthanger", "cliffhanger",
- "cockaroches", "cockroaches",
- "cockraoches", "cockroaches",
- "cockroackes", "cockroaches",
- "cocktailers", "cocktails",
- "coefficeint", "coefficient",
- "coefficiant", "coefficient",
- "coincedince", "coincidence",
- "coincidance", "coincidence",
- "coincidense", "coincidence",
- "coincidente", "coincidence",
- "coincidince", "coincidence",
- "coinsidence", "coincidence",
- "collabarate", "collaborate",
- "collaberate", "collaborate",
- "collaborant", "collaborate",
- "collaborare", "collaborate",
- "collaborato", "collaboration",
- "collapseing", "collapsing",
- "collaterial", "collateral",
- "collectieve", "collective",
- "collectivly", "collectively",
- "collectivos", "collections",
- "collobarate", "collaborate",
- "colloborate", "collaborate",
- "colonializm", "colonialism",
- "colonialsim", "colonialism",
- "colonianism", "colonialism",
- "colonizaton", "colonization",
- "comaprisons", "comparisons",
- "combiantion", "combinations",
- "combinacion", "combination",
- "combinaison", "combinations",
- "combinaiton", "combinations",
- "combinatino", "combinations",
- "combinatins", "combinations",
- "combinatios", "combinations",
- "combinining", "combining",
- "combonation", "combination",
- "comediantes", "comedians",
- "comeptition", "competition",
- "comeptitive", "competitive",
- "comeptitors", "competitors",
- "comfertable", "comfortable",
- "comfertably", "comfortably",
- "comfortabel", "comfortably",
- "comfortabil", "comfortably",
- "comfrotable", "comfortable",
- "comftorable", "comfortable",
- "comftorably", "comfortably",
- "comisioning", "commissioning",
- "comissioned", "commissioned",
- "comissioner", "commissioner",
- "commandered", "commanded",
- "commandmant", "commandment",
- "commantator", "commentator",
- "commendment", "commandment",
- "commentarea", "commenter",
- "commentaren", "commenter",
- "commentater", "commentator",
- "commenteers", "commenter",
- "commentries", "commenters",
- "commercialy", "commercially",
- "commericals", "commercials",
- "commericial", "commercial",
- "comminicate", "communicate",
- "comminucate", "communicate",
- "commisioned", "commissioned",
- "commisioner", "commissioner",
- "commisssion", "commissions",
- "committment", "commitment",
- "commodoties", "commodities",
- "commomplace", "commonplace",
- "commonspace", "commonplace",
- "commonweath", "commonwealth",
- "commonwelth", "commonwealth",
- "commuincate", "communicated",
- "communciate", "communicate",
- "communicted", "communicated",
- "communistas", "communists",
- "communistes", "communists",
- "compability", "compatibility",
- "compalation", "compilation",
- "compansated", "compensated",
- "comparabile", "comparable",
- "comparasion", "comparison",
- "comparasons", "comparisons",
- "comparement", "compartment",
- "comparetive", "comparative",
- "comparision", "comparison",
- "comparisson", "comparisons",
- "comparitave", "comparative",
- "comparitive", "comparative",
- "comparsions", "comparisons",
- "compassione", "compassionate",
- "compasssion", "compassion",
- "compatabile", "compatible",
- "compatative", "comparative",
- "compatiable", "compatible",
- "compatibile", "compatible",
- "compatibily", "compatibility",
- "compeditive", "competitive",
- "compeditors", "competitors",
- "compeitions", "competitions",
- "compeittion", "competitions",
- "compelation", "compilation",
- "compensante", "compensate",
- "compensatie", "compensate",
- "compensatin", "compensation",
- "compenstate", "compensate",
- "comperative", "comparative",
- "compesition", "composition",
- "competation", "computation",
- "competative", "competitive",
- "competators", "competitors",
- "competetion", "competition",
- "competetors", "competitors",
- "competiters", "competitors",
- "competiting", "competition",
- "competitior", "competitor",
- "competitivo", "competition",
- "competitoin", "competitions",
- "competitons", "competitors",
- "competution", "computation",
- "compilacion", "compilation",
- "compilcated", "complicate",
- "compination", "compilation",
- "compinsated", "compensated",
- "compitation", "computation",
- "compitetion", "competitions",
- "complacient", "complacent",
- "complciated", "complicate",
- "compleation", "compilation",
- "complecated", "complicated",
- "completaste", "completes",
- "completeing", "completing",
- "completeion", "completion",
- "completelly", "completely",
- "completelyl", "completely",
- "completelys", "completes",
- "completenes", "completes",
- "complexitiy", "complexity",
- "compliacted", "complicate",
- "compliation", "compilation",
- "complicarte", "complicate",
- "complicatie", "complicit",
- "complicatii", "complicit",
- "complicatin", "complicit",
- "complictaed", "complicate",
- "complimente", "complement",
- "complimenty", "complimentary",
- "complusions", "compulsion",
- "compolation", "compilation",
- "componenets", "components",
- "componentes", "components",
- "composicion", "composition",
- "composiiton", "compositions",
- "composision", "compositions",
- "compositied", "composite",
- "composities", "composite",
- "compositoin", "compositions",
- "compositons", "compositions",
- "compositore", "composite",
- "compostiion", "compositions",
- "compotition", "composition",
- "compramised", "compromised",
- "compramises", "compromises",
- "compremised", "compromised",
- "compremises", "compromises",
- "comprension", "compression",
- "compresores", "compressor",
- "compresssed", "compressed",
- "compresssor", "compressor",
- "comprimised", "compromised",
- "comprimises", "compromises",
- "compromessi", "compromises",
- "compromisng", "compromising",
- "compromisse", "compromises",
- "compromisso", "compromises",
- "compromized", "compromised",
- "compulstion", "compulsion",
- "compunation", "computation",
- "computacion", "computation",
- "computating", "computation",
- "computition", "computation",
- "conceivibly", "conceivably",
- "concencrate", "concentrate",
- "concentrace", "concentrate",
- "concentrade", "concentrated",
- "concentrait", "concentrate",
- "concentrant", "concentrate",
- "concentrare", "concentrate",
- "concentrato", "concentration",
- "concertmate", "concentrate",
- "conceviable", "conceivable",
- "conceviably", "conceivably",
- "concidering", "considering",
- "conciveable", "conceivable",
- "conciveably", "conceivably",
- "conclsuions", "concussions",
- "concludendo", "concluded",
- "conclussion", "conclusions",
- "conclussive", "conclusive",
- "conclutions", "conclusions",
- "concsiously", "consciously",
- "conculsions", "conclusions",
- "concusssion", "concussions",
- "condeferacy", "confederacy",
- "condicional", "conditional",
- "condidtions", "conditions",
- "conditionar", "conditioner",
- "conditionel", "conditional",
- "condolances", "condolences",
- "condolenses", "condolences",
- "condolonces", "condolences",
- "conductiong", "conducting",
- "condulences", "condolences",
- "conenctions", "connections",
- "conescutive", "consecutive",
- "confedaracy", "confederacy",
- "confedarate", "confederate",
- "confederecy", "confederacy",
- "conferances", "conferences",
- "conferedate", "confederate",
- "confererate", "confederate",
- "confescated", "confiscated",
- "confesssion", "confessions",
- "confidantly", "confidently",
- "configurare", "configure",
- "configurate", "configure",
- "configurato", "configuration",
- "confilcting", "conflicting",
- "confisgated", "confiscated",
- "conflciting", "conflicting",
- "confortable", "comfortable",
- "confrontato", "confrontation",
- "confussions", "confessions",
- "congrassman", "congressman",
- "congratuate", "congratulate",
- "conicidence", "coincidence",
- "conjonction", "conjunction",
- "conjucntion", "conjunction",
- "conjuncting", "conjunction",
- "conlcusions", "conclusions",
- "connatation", "connotation",
- "connecitcut", "connecticut",
- "connecticon", "connection",
- "connectiong", "connecting",
- "connectivty", "connectivity",
- "connetation", "connotation",
- "connonation", "connotation",
- "connotacion", "connotation",
- "conontation", "connotation",
- "conotations", "connotations",
- "conquerring", "conquering",
- "consdidered", "considered",
- "consectuive", "consecutive",
- "consecuence", "consequence",
- "conseguence", "consequence",
- "conselation", "consolation",
- "consentrate", "concentrate",
- "consequenes", "consequence",
- "consequense", "consequences",
- "consequente", "consequence",
- "consequenty", "consequently",
- "consequtive", "consecutive",
- "conservanti", "conservation",
- "conservatie", "conservatives",
- "conservaton", "conservation",
- "consficated", "confiscated",
- "considerabe", "considerate",
- "considerais", "considers",
- "considerant", "considerate",
- "considerato", "consideration",
- "considerble", "considerable",
- "considerbly", "considerably",
- "considereis", "considers",
- "consilation", "consolation",
- "consilidate", "consolidate",
- "consistance", "consistency",
- "consistenly", "consistently",
- "consistensy", "consistency",
- "consistenty", "consistently",
- "consitution", "constitution",
- "conslutants", "consultant",
- "consolacion", "consolation",
- "consoldiate", "consolidate",
- "consolidare", "consolidate",
- "consolodate", "consolidate",
- "consomation", "consolation",
- "conspiraces", "conspiracies",
- "conspiracys", "conspiracies",
- "conspirancy", "conspiracy",
- "constantins", "constants",
- "constantivs", "constants",
- "constarints", "constraint",
- "constituant", "constituent",
- "constituion", "constitution",
- "constituite", "constitute",
- "constitutie", "constitutes",
- "constrating", "constraint",
- "constriants", "constraints",
- "construcing", "constructing",
- "construcion", "construction",
- "construcive", "constructive",
- "constructie", "constructive",
- "constructos", "constructs",
- "constructur", "constructor",
- "constructus", "constructs",
- "constuction", "construction",
- "consturcted", "constructed",
- "consuelling", "counselling",
- "consulation", "consolation",
- "consultaion", "consultation",
- "consultanti", "consultation",
- "consumation", "consumption",
- "consumbales", "consumables",
- "consumersim", "consumerism",
- "consumibles", "consumables",
- "contagiosum", "contagious",
- "containered", "contained",
- "containmemt", "containment",
- "containters", "containers",
- "containting", "containing",
- "contaminato", "contamination",
- "contaminent", "containment",
- "contaminted", "contaminated",
- "contancting", "contracting",
- "contanimate", "contaminated",
- "contemplare", "contemplate",
- "contempoary", "contemporary",
- "contemporay", "contemporary",
- "contencious", "contentious",
- "contenental", "continental",
- "contengency", "contingency",
- "contenintal", "continental",
- "contenplate", "contemplate",
- "contensious", "contentious",
- "contentants", "contestants",
- "contentuous", "contentious",
- "contestaste", "contestants",
- "contestents", "contestants",
- "contianment", "containment",
- "contientous", "contentious",
- "contimplate", "contemplate",
- "continenets", "continents",
- "continentes", "continents",
- "continentul", "continental",
- "contingancy", "contingency",
- "contingient", "contingent",
- "contingincy", "contingency",
- "continously", "continuously",
- "continuarla", "continual",
- "continuarlo", "continual",
- "continuasse", "continues",
- "continueing", "continuing",
- "continuemos", "continues",
- "continueous", "continuous",
- "continuious", "continuous",
- "continuning", "continuing",
- "continunity", "continuity",
- "continuosly", "continuously",
- "continuting", "continuing",
- "continutity", "continuity",
- "continuuing", "continuing",
- "continuuity", "continuity",
- "contirbuted", "contributed",
- "contiunally", "continually",
- "contraccion", "contraction",
- "contraddice", "contradicted",
- "contradices", "contradicts",
- "contradtion", "contraction",
- "contraversy", "controversy",
- "contreversy", "controversy",
- "contribuent", "contribute",
- "contribuito", "contribution",
- "contributer", "contributor",
- "contributie", "contribute",
- "contributin", "contribution",
- "contributos", "contributors",
- "contribuyes", "contributes",
- "contricting", "contracting",
- "contriction", "contraction",
- "contridicts", "contradicts",
- "contriversy", "controversy",
- "controleurs", "controllers",
- "controllore", "controllers",
- "controvercy", "controversy",
- "controversa", "controversial",
- "contrubutes", "contributes",
- "contructing", "contracting",
- "contruction", "construction",
- "contructors", "contractors",
- "conveinence", "convenience",
- "conveneince", "convenience",
- "conveniance", "convenience",
- "conveniente", "convenience",
- "convenietly", "conveniently",
- "conventinal", "conventional",
- "converitble", "convertible",
- "conversaion", "conversion",
- "conversatin", "conversations",
- "converseley", "conversely",
- "converstion", "conversion",
- "convertirea", "converter",
- "convertirle", "convertible",
- "convertirme", "converter",
- "convertirte", "converter",
- "convicitons", "convictions",
- "convienence", "convenience",
- "convienient", "convenient",
- "convinceing", "convincing",
- "convincente", "convenient",
- "convincersi", "convinces",
- "convirtible", "convertible",
- "cooperacion", "cooperation",
- "cooperativo", "cooperation",
- "cooporation", "cooperation",
- "cooporative", "cooperative",
- "coordenated", "coordinated",
- "coordenates", "coordinates",
- "coordianted", "coordinated",
- "coordiantes", "coordinates",
- "coordiantor", "coordinator",
- "coordinador", "coordinator",
- "coordinants", "coordinates",
- "coordinater", "coordinator",
- "coordinaton", "coordination",
- "coordonated", "coordinated",
- "coordonates", "coordinates",
- "coordonator", "coordinator",
- "cooridnated", "coordinated",
- "cooridnates", "coordinates",
- "cooridnator", "coordinator",
- "copenhaagen", "copenhagen",
- "copenhaegen", "copenhagen",
- "copenhaguen", "copenhagen",
- "copenhangen", "copenhagen",
- "copmetitors", "competitors",
- "coproration", "corporation",
- "copyrigthed", "copyrighted",
- "corinthains", "corinthians",
- "corintheans", "corinthians",
- "corinthiens", "corinthians",
- "corinthinas", "corinthians",
- "cornithians", "corinthians",
- "corparation", "corporation",
- "corperation", "corporation",
- "corporacion", "corporation",
- "corporativo", "corporation",
- "corralation", "correlation",
- "correctings", "corrections",
- "correctivos", "corrections",
- "correktions", "corrections",
- "correktness", "correctness",
- "correlacion", "correlation",
- "correlaties", "correlates",
- "corrilation", "correlation",
- "corrisponds", "corresponds",
- "corrolation", "correlation",
- "corrosponds", "corresponds",
- "costitution", "constitution",
- "councellors", "councillors",
- "counrtyside", "countryside",
- "counsilling", "counselling",
- "countercoat", "counteract",
- "counteredit", "counterfeit",
- "counterfact", "counteract",
- "counterfait", "counterfeit",
- "counterfest", "counterfeit",
- "counterfiet", "counterfeit",
- "counterpaly", "counterplay",
- "counterpary", "counterplay",
- "counterpath", "counterpart",
- "counterpats", "counterparts",
- "counterpont", "counterpoint",
- "counterract", "counterpart",
- "counterside", "countryside",
- "countertrap", "counterpart",
- "countriside", "countryside",
- "countrycide", "countryside",
- "countrywise", "countryside",
- "courthourse", "courthouse",
- "coutnerfeit", "counterfeit",
- "coutnerpart", "counterpart",
- "coutnerplay", "counterplay",
- "creacionism", "creationism",
- "creationkit", "creationist",
- "creationsim", "creationism",
- "creationsit", "creationist",
- "creationsts", "creationists",
- "creativelly", "creatively",
- "credencials", "credentials",
- "credentails", "credentials",
- "credentaisl", "credentials",
- "credientals", "credentials",
- "credintials", "credentials",
- "cricitising", "criticising",
- "criculating", "circulating",
- "cringeworhy", "cringeworthy",
- "cringeworty", "cringeworthy",
- "cringewothy", "cringeworthy",
- "criticicing", "criticising",
- "criticisied", "criticise",
- "criticisims", "criticisms",
- "criticisize", "criticise",
- "criticiszed", "criticise",
- "critisicing", "criticizing",
- "critisising", "criticising",
- "critizicing", "criticizing",
- "critizising", "criticizing",
- "critizizing", "criticizing",
- "crockodiles", "crocodiles",
- "crocodiller", "crocodile",
- "crocodilule", "crocodile",
- "croporation", "corporation",
- "crossfiters", "crossfire",
- "cultivative", "cultivate",
- "curricullum", "curriculum",
- "customizabe", "customizable",
- "customizble", "customizable",
- "dangeroulsy", "dangerously",
- "dardenelles", "dardanelles",
- "deadlifters", "deadlifts",
- "dealershits", "dealerships",
- "deceptivley", "deceptive",
- "declaracion", "declaration",
- "decleration", "declaration",
- "declinining", "declining",
- "decloration", "declaration",
- "decoartions", "decoration",
- "decomposits", "decomposes",
- "decoratieve", "decorative",
- "decorativos", "decorations",
- "decotations", "decorations",
- "decsendants", "descendants",
- "deductiable", "deductible",
- "defenderlas", "defenders",
- "defenderlos", "defenders",
- "defendernos", "defenders",
- "defenesless", "defenseless",
- "defenisvely", "defensively",
- "defensivley", "defensively",
- "deficiencey", "deficiency",
- "deficienies", "deficiencies",
- "deficientcy", "deficiency",
- "definantley", "definately",
- "definatedly", "definately",
- "definateley", "definately",
- "definatelly", "definately",
- "definatelty", "definately",
- "definatetly", "definately",
- "definations", "definitions",
- "definatlely", "definately",
- "definetally", "definately",
- "definetlely", "definetly",
- "definitaley", "definately",
- "definitelly", "definitely",
- "definitevly", "definitively",
- "definitiely", "definitively",
- "definitieve", "definitive",
- "definitiley", "definitively",
- "definitivly", "definitively",
- "definitivno", "definition",
- "definitivos", "definitions",
- "definitlely", "definitly",
- "definitlety", "definitly",
- "deflecticon", "deflection",
- "degenererat", "degenerate",
- "degradacion", "degradation",
- "degradating", "degradation",
- "degragation", "degradation",
- "degridation", "degradation",
- "dehyrdation", "dehydration",
- "deinitalize", "deinitialize",
- "delaerships", "dealerships",
- "delapidated", "dilapidated",
- "delcaration", "declaration",
- "delearships", "dealerships",
- "delevopment", "development",
- "deliberante", "deliberate",
- "deliberatly", "deliberately",
- "deliberetly", "deliberately",
- "delightlful", "delightful",
- "deliverying", "delivering",
- "delusionnal", "delusional",
- "deminsional", "dimensional",
- "democarcies", "democracies",
- "democracize", "democracies",
- "democractic", "democratic",
- "democraphic", "demographic",
- "democrasies", "democracies",
- "democrazies", "democracies",
- "democrocies", "democracies",
- "demograhpic", "demographic",
- "demographis", "demographics",
- "demograpics", "demographics",
- "demogrpahic", "demographic",
- "demoninator", "denominator",
- "demonstarte", "demonstrate",
- "demonstates", "demonstrates",
- "demonstraby", "demonstrably",
- "demonstrant", "demonstrate",
- "demonstrats", "demonstrates",
- "demosntrate", "demonstrate",
- "denegrating", "denigrating",
- "denomenator", "denominator",
- "denominador", "denominator",
- "denominaron", "denominator",
- "denominater", "denominator",
- "denominaton", "denomination",
- "denomitator", "denominator",
- "denomonator", "denominator",
- "denonimator", "denominator",
- "deocrations", "decorations",
- "deomcracies", "democracies",
- "deparmental", "departmental",
- "depedencies", "dependencies",
- "dependancey", "dependency",
- "dependencey", "dependency",
- "dependencie", "dependence",
- "dependenies", "dependencies",
- "deplorabile", "deplorable",
- "depressieve", "depressive",
- "depresssion", "depression",
- "deprevation", "deprivation",
- "deprication", "deprivation",
- "deprivating", "deprivation",
- "deprivition", "deprivation",
- "deprovation", "deprivation",
- "depserately", "desperately",
- "depseration", "desperation",
- "deregulatin", "deregulation",
- "derivativos", "derivatives",
- "derivitaves", "derivatives",
- "derivitives", "derivatives",
- "derpivation", "deprivation",
- "derviatives", "derivatives",
- "descandants", "descendants",
- "descendands", "descendants",
- "descendends", "descended",
- "descendenta", "descendants",
- "descentants", "descendants",
- "descirption", "descriptions",
- "descprition", "descriptions",
- "describiste", "describes",
- "describtion", "description",
- "descripcion", "description",
- "descripiton", "descriptions",
- "descripters", "descriptors",
- "descriptoin", "descriptions",
- "descriptons", "descriptions",
- "descritpion", "descriptions",
- "descrpition", "descriptions",
- "desensitied", "desensitized",
- "desensitzed", "desensitized",
- "desentisize", "desensitized",
- "desgination", "designation",
- "designacion", "designation",
- "designstion", "designation",
- "desinations", "destinations",
- "desingation", "designation",
- "desitnation", "destination",
- "desoriented", "disoriented",
- "desparately", "desperately",
- "desparation", "desperation",
- "desperating", "desperation",
- "desperatley", "desperately",
- "despirately", "desperately",
- "despiration", "desperation",
- "destablized", "destabilized",
- "destiantion", "destinations",
- "destinaiton", "destinations",
- "destinatons", "destinations",
- "destinction", "destination",
- "destraction", "destruction",
- "destruccion", "destruction",
- "destruciton", "destruction",
- "destructivo", "destruction",
- "destruktion", "destruction",
- "destruktive", "destructive",
- "deteoriated", "deteriorated",
- "determanism", "determinism",
- "determening", "determining",
- "determenism", "determinism",
- "determinare", "determine",
- "determinato", "determination",
- "determinded", "determine",
- "determinsim", "determinism",
- "detramental", "detrimental",
- "detremental", "detrimental",
- "detrimentul", "detrimental",
- "detuschland", "deutschland",
- "deustchland", "deutschland",
- "deutchsland", "deutschland",
- "deutcshland", "deutschland",
- "deutschalnd", "deutschland",
- "deutshcland", "deutschland",
- "develepmont", "developments",
- "develompent", "developments",
- "developemnt", "developments",
- "developmant", "developmental",
- "developmetn", "developments",
- "developmnet", "developments",
- "developpers", "developers",
- "develpoment", "developments",
- "deveolpment", "developments",
- "deveploment", "developments",
- "devestating", "devastating",
- "devistating", "devastating",
- "deyhdration", "dehydration",
- "diagnositcs", "diagnostic",
- "diagnositic", "diagnostic",
- "diagonstics", "diagnostic",
- "dictatorhip", "dictatorship",
- "dictionaire", "dictionaries",
- "dictionairy", "dictionary",
- "dictionarys", "dictionaries",
- "dictionnary", "dictionary",
- "differances", "differences",
- "differantly", "differently",
- "differental", "differential",
- "differentes", "differences",
- "differneces", "differences",
- "differnetly", "differently",
- "difficulity", "difficulty",
- "difficultes", "difficulties",
- "dificulties", "difficulties",
- "dimensiones", "dimensions",
- "dimentional", "dimensional",
- "dimesnional", "dimensional",
- "diminisheds", "diminishes",
- "diminsihing", "diminishing",
- "diminuitive", "diminutive",
- "diminushing", "diminishing",
- "dinosaurios", "dinosaurs",
- "direccional", "directional",
- "direcitonal", "directional",
- "directorguy", "directory",
- "directorios", "directors",
- "direktional", "directional",
- "disadvantge", "disadvantage",
- "disagreemet", "disagreements",
- "disagreemtn", "disagreements",
- "disapperead", "disappeared",
- "disapporval", "disapproval",
- "disapprovel", "disapproval",
- "disasterous", "disastrous",
- "disastreous", "disastrous",
- "disastrious", "disastrous",
- "disastruous", "disastrous",
- "disatisfied", "dissatisfied",
- "disciplened", "disciplined",
- "disciplinas", "disciplines",
- "disciplince", "disciplines",
- "disclipined", "disciplined",
- "disclipines", "disciplines",
- "discogrophy", "discography",
- "discogrpahy", "discography",
- "disconencts", "disconnects",
- "disconneted", "disconnected",
- "disconnnect", "disconnect",
- "discontined", "discontinued",
- "discontiued", "discontinued",
- "discrapency", "discrepancy",
- "discretited", "discredited",
- "discrimante", "discriminate",
- "discrimiate", "discriminate",
- "discussiong", "discussing",
- "discusssion", "discussions",
- "disgraseful", "disgraceful",
- "disgrateful", "disgraceful",
- "disgrunteld", "disgruntled",
- "disgustigly", "disgustingly",
- "disgustingy", "disgustingly",
- "disgustinly", "disgustingly",
- "disicplined", "disciplined",
- "disicplines", "disciplines",
- "disingenuos", "disingenuous",
- "dismanlting", "dismantling",
- "dismantaled", "dismantled",
- "dismanteled", "dismantled",
- "disobediant", "disobedient",
- "disocgraphy", "discography",
- "disparingly", "disparagingly",
- "dispensaire", "dispensaries",
- "dispensarie", "dispenser",
- "dispensiary", "dispensary",
- "displacemnt", "displacement",
- "disposicion", "disposition",
- "disputandem", "disputandum",
- "disqualifed", "disqualified",
- "disregaring", "disregarding",
- "dissapeared", "disappeared",
- "dissapoined", "dissapointed",
- "dissapointd", "dissapointed",
- "dissapoited", "dissapointed",
- "dissappears", "disappears",
- "dissatisfed", "dissatisfied",
- "disscusions", "discussions",
- "dissertaion", "dissertation",
- "dissipatore", "dissipate",
- "distatesful", "distasteful",
- "distatseful", "distasteful",
- "disterbance", "disturbance",
- "disticntion", "distinctions",
- "distinciton", "distinction",
- "distincitve", "distinctive",
- "distinctily", "distinctly",
- "distingiush", "distinguish",
- "distinguise", "distinguished",
- "distinktion", "distinction",
- "distinquish", "distinguish",
- "distirbance", "disturbance",
- "distirbuted", "distribute",
- "distirbutor", "distributor",
- "distraccion", "distraction",
- "distractons", "distracts",
- "distraktion", "distraction",
- "distribitor", "distributor",
- "distribuent", "distribute",
- "distribuite", "distribute",
- "distribuito", "distribution",
- "distributie", "distributed",
- "distributin", "distribution",
- "distributio", "distributor",
- "distrobuted", "distributed",
- "distrubance", "disturbance",
- "distrubited", "distributed",
- "distrubitor", "distributor",
- "distrubuted", "distributed",
- "distrubutor", "distributor",
- "distructive", "destructive",
- "distuingish", "distinguish",
- "distunguish", "distinguish",
- "disturbante", "disturbance",
- "disturbence", "disturbance",
- "disucssions", "discussions",
- "divisionals", "divisions",
- "doccumented", "documented",
- "documantary", "documentary",
- "documenatry", "documentary",
- "documentare", "documentaries",
- "documentato", "documentation",
- "documentery", "documentary",
- "documentory", "documentary",
- "domesticted", "domesticated",
- "dominateurs", "dominates",
- "dominationg", "dominating",
- "donwloading", "downloading",
- "doublellift", "doublelift",
- "downlaoding", "downloading",
- "downloadbel", "downloadable",
- "downloadbig", "downloading",
- "downloadble", "downloadable",
- "downvoteers", "downvoters",
- "downvoteing", "downvoting",
- "downvoteres", "downvoters",
- "downvoteros", "downvoters",
- "downvoteurs", "downvoters",
- "downvotters", "downvoters",
- "downvotting", "downvoting",
- "dramaticaly", "dramatically",
- "dramaticlly", "dramatically",
- "drasitcally", "drastically",
- "dsyfunction", "dysfunction",
- "duetschland", "deutschland",
- "durabillity", "durability",
- "dyanmically", "dynamically",
- "dymanically", "dynamically",
- "dysfonction", "dysfunction",
- "dysfucntion", "dysfunction",
- "dysfunciton", "dysfunction",
- "dysfunktion", "dysfunction",
- "earhtquakes", "earthquakes",
- "earthqaukes", "earthquakes",
- "earthquacks", "earthquakes",
- "economicaly", "economically",
- "economiclly", "economically",
- "economisiti", "economist",
- "economistes", "economists",
- "educacional", "educational",
- "effeciently", "efficiently",
- "effecitvely", "effectively",
- "effectivley", "effectively",
- "efficeintly", "efficiently",
- "efficiantly", "efficiently",
- "efficientcy", "efficiently",
- "effortlesly", "effortlessly",
- "effortlessy", "effortlessly",
- "egaletarian", "egalitarian",
- "egalitatian", "egalitarian",
- "egaliterian", "egalitarian",
- "egostitical", "egotistical",
- "egotastical", "egotistical",
- "egotestical", "egotistical",
- "egotisitcal", "egotistical",
- "egotisticle", "egotistical",
- "egotystical", "egotistical",
- "ehtnicities", "ethnicities",
- "ejacluation", "ejaculation",
- "ejacualtion", "ejaculation",
- "electoratul", "electoral",
- "electornics", "electronics",
- "electricain", "electrician",
- "electricial", "electrical",
- "electricien", "electrician",
- "electricion", "electrician",
- "electricman", "electrician",
- "electrisity", "electricity",
- "electritian", "electrician",
- "electrocity", "electricity",
- "electrolyes", "electrolytes",
- "electrolyts", "electrolytes",
- "electroncis", "electrons",
- "electroylte", "electrolytes",
- "elementrary", "elementary",
- "eleminating", "eliminating",
- "elimanation", "elimination",
- "eliminacion", "elimination",
- "elimintates", "eliminates",
- "ellipitcals", "elliptical",
- "eloquentely", "eloquently",
- "emabrassing", "embarassing",
- "embaraasing", "embarassing",
- "embarasaing", "embarassing",
- "embarassign", "embarassing",
- "embarassimg", "embarassing",
- "embarassing", "embarrassing",
- "embarissing", "embarassing",
- "embarrasing", "embarrassing",
- "embarressed", "embarrassed",
- "embarrssing", "embarassing",
- "emergancies", "emergencies",
- "emergencias", "emergencies",
- "emergenices", "emergencies",
- "emmediately", "immediately",
- "emmisarries", "emissaries",
- "emotionella", "emotionally",
- "empahsizing", "emphasizing",
- "empathethic", "empathetic",
- "emphacizing", "emphasizing",
- "emphatising", "emphasizing",
- "emphatizing", "emphasizing",
- "emphazising", "emphasizing",
- "emphesizing", "emphasizing",
- "empiracally", "empirically",
- "empirialism", "imperialism",
- "empirialist", "imperialist",
- "enchamtment", "enchantment",
- "enchancment", "enchantment",
- "enchanement", "enchantment",
- "enchanthing", "enchanting",
- "enchantmant", "enchantment",
- "enchantmens", "enchantments",
- "enchantmets", "enchantments",
- "encomapsses", "encompasses",
- "encompasess", "encompasses",
- "encompesses", "encompasses",
- "encounteres", "encounters",
- "encoutnered", "encountered",
- "encryptiion", "encryption",
- "encyclopdia", "encyclopedia",
- "encylopedia", "encyclopedia",
- "endagnering", "endangering",
- "endandering", "endangering",
- "endorcement", "endorsement",
- "endoresment", "endorsement",
- "engagaments", "engagements",
- "engeneering", "engineering",
- "enginerring", "engineering",
- "enginnering", "engineering",
- "enlargments", "enlargements",
- "enligthened", "enlightened",
- "enourmously", "enormously",
- "enterpirses", "enterprises",
- "enterprices", "enterprises",
- "enterprishe", "enterprises",
- "entertainig", "entertaining",
- "entertwined", "entertained",
- "enthicities", "ethnicities",
- "enthisiasts", "enthusiasts",
- "enthuasists", "enthusiasts",
- "enthuisasts", "enthusiasts",
- "enthusaists", "enthusiasts",
- "enthusiants", "enthusiast",
- "enthusiasic", "enthusiastic",
- "enthusiasim", "enthusiasm",
- "enthusiasum", "enthusiasm",
- "enthusiatic", "enthusiastic",
- "enthusiests", "enthusiasts",
- "enthusigasm", "enthusiasm",
- "enthusisast", "enthusiasts",
- "entrepeneur", "entrepreneur",
- "entreperure", "entrepreneur",
- "entrepeuner", "entrepreneur",
- "entreprener", "entrepreneurs",
- "entreprenur", "entrepreneur",
- "entretained", "entertained",
- "envinroment", "environments",
- "enviorments", "environments",
- "enviornment", "environment",
- "envirnoment", "environment",
- "enviroments", "environments",
- "enviromnent", "environments",
- "environemnt", "environment",
- "environmnet", "environments",
- "envrionment", "environment",
- "equilavents", "equivalents",
- "equilbirium", "equilibrium",
- "equilevants", "equivalents",
- "equilibirum", "equilibrium",
- "equilibriam", "equilibrium",
- "equilibruim", "equilibrium",
- "equivalance", "equivalence",
- "equivalants", "equivalents",
- "equivalenet", "equivalents",
- "equivallent", "equivalent",
- "equivelance", "equivalence",
- "equivelants", "equivalents",
- "equivelents", "equivalents",
- "equivilants", "equivalents",
- "equivilence", "equivalence",
- "equivilents", "equivalents",
- "equivlalent", "equivalent",
- "equivlanets", "equivalents",
- "equivolence", "equivalence",
- "equivolents", "equivalents",
- "essencially", "essentially",
- "essentailly", "essentially",
- "essentialls", "essentials",
- "essentually", "essentially",
- "establising", "establishing",
- "ethicallity", "ethically",
- "ethincities", "ethnicities",
- "ethniticies", "ethnicities",
- "europeaners", "europeans",
- "europeaness", "europeans",
- "evaluatiing", "evaluating",
- "evaluationg", "evaluating",
- "evangalical", "evangelical",
- "evangelikal", "evangelical",
- "evengalical", "evangelical",
- "evenhtually", "eventually",
- "everyonehas", "everyones",
- "everyonelse", "everyones",
- "evidentally", "evidently",
- "exacarbated", "exacerbated",
- "exacberated", "exacerbated",
- "exagerating", "exaggerating",
- "exagerrated", "exaggerated",
- "exagerrates", "exaggerates",
- "exaggarated", "exaggerated",
- "exaggareted", "exaggerate",
- "exaggeratin", "exaggeration",
- "exaggerrate", "exaggerate",
- "exaggurated", "exaggerated",
- "exarcebated", "exacerbated",
- "excalmation", "exclamation",
- "excepcional", "exceptional",
- "exceptionel", "exceptional",
- "excessivley", "excessively",
- "exceutioner", "executioner",
- "exchanching", "exchanging",
- "exclamacion", "exclamation",
- "exclamating", "exclamation",
- "exclamativo", "exclamation",
- "exclemation", "exclamation",
- "exclimation", "exclamation",
- "exclucivity", "exclusivity",
- "exclusivety", "exclusivity",
- "exclusivily", "exclusivity",
- "exclusivley", "exclusively",
- "excpetional", "exceptional",
- "exculsively", "exclusively",
- "exculsivity", "exclusivity",
- "execitioner", "executioner",
- "execptional", "exceptional",
- "exectuables", "executable",
- "exectuioner", "executioner",
- "executionar", "executioner",
- "executionor", "executioner",
- "exerciseing", "exercising",
- "exeuctioner", "executioner",
- "existantial", "existential",
- "existencial", "existential",
- "existensial", "existential",
- "existentiel", "existential",
- "exlcamation", "exclamation",
- "exlcusively", "exclusively",
- "exlcusivity", "exclusivity",
- "exoskelaton", "exoskeleton",
- "expansiones", "expansions",
- "expectantcy", "expectancy",
- "expectating", "expectation",
- "expectional", "exceptional",
- "expendature", "expenditure",
- "expendeture", "expenditure",
- "expentiture", "expenditure",
- "expereinced", "experienced",
- "expereinces", "experiences",
- "experements", "experiments",
- "experianced", "experienced",
- "experiances", "experiences",
- "experiemnts", "experiments",
- "experiening", "experiencing",
- "experimetal", "experimental",
- "experimeted", "experimented",
- "experssions", "expressions",
- "expiditions", "expeditions",
- "expierenced", "experienced",
- "expierences", "experiences",
- "expirements", "experiments",
- "explainging", "explaining",
- "explaintory", "explanatory",
- "explanaiton", "explanations",
- "explanetary", "explanatory",
- "explanetory", "explanatory",
- "explanitary", "explanatory",
- "explanotory", "explanatory",
- "explenation", "explanation",
- "explenatory", "explanatory",
- "explicitely", "explicitly",
- "explicitily", "explicitly",
- "explination", "explanation",
- "explinatory", "explanatory",
- "exploitaion", "exploitation",
- "exploitatie", "exploitative",
- "explonation", "exploration",
- "exploracion", "exploration",
- "explorating", "exploration",
- "explorerers", "explorers",
- "explosiones", "explosions",
- "explotacion", "exploration",
- "expodential", "exponential",
- "exponantial", "exponential",
- "exponencial", "exponential",
- "exponentiel", "exponential",
- "expresscoin", "expression",
- "expressivos", "expressions",
- "expresssive", "expressive",
- "expressview", "expressive",
- "exprimental", "experimental",
- "expropiated", "expropriated",
- "extensiones", "extensions",
- "extensivley", "extensively",
- "extragavant", "extravagant",
- "extrapalate", "extrapolate",
- "extraploate", "extrapolate",
- "extrapolant", "extrapolate",
- "extrapolare", "extrapolate",
- "extrapolite", "extrapolate",
- "extrapulate", "extrapolate",
- "extravagent", "extravagant",
- "extravagina", "extravagant",
- "extravegant", "extravagant",
- "extravigant", "extravagant",
- "extravogant", "extravagant",
- "extremistas", "extremists",
- "extremistes", "extremists",
- "extropolate", "extrapolate",
- "fabircation", "fabrication",
- "fabricacion", "fabrication",
- "fabrikation", "fabrication",
- "facilitarte", "facilitate",
- "facilitiate", "facilitate",
- "facillitate", "facilitate",
- "facisnation", "fascination",
- "facsination", "fascination",
- "factuallity", "factually",
- "familairity", "familiarity",
- "familairize", "familiarize",
- "familiaries", "familiarize",
- "familierize", "familiarize",
- "fanatsizing", "fantasizing",
- "fanficitons", "fanfiction",
- "fantacising", "fantasizing",
- "fantacizing", "fantasizing",
- "fantasazing", "fantasizing",
- "fantasiaing", "fantasizing",
- "fantasyzing", "fantasizing",
- "fantazising", "fantasizing",
- "fascinacion", "fascination",
- "fascinatinf", "fascination",
- "fascisation", "fascination",
- "fascization", "fascination",
- "fashionalbe", "fashionable",
- "fashoinable", "fashionable",
- "fatalitites", "fatalities",
- "favoritisme", "favorites",
- "favoutrable", "favourable",
- "felxibility", "flexibility",
- "feministers", "feminists",
- "feministisk", "feminists",
- "fermentaion", "fermentation",
- "fermenterad", "fermented",
- "fertilizier", "fertilizer",
- "fertizilers", "fertilizer",
- "festivalens", "festivals",
- "fignernails", "fingernails",
- "fignerprint", "fingerprint",
- "figurativly", "figuratively",
- "finanically", "financially",
- "finantially", "financially",
- "fingerpints", "fingertips",
- "fingerpoint", "fingerprint",
- "fingertrips", "fingertips",
- "firefighers", "firefighters",
- "firefigther", "firefighters",
- "firendzoned", "friendzoned",
- "firghtening", "frightening",
- "flatterende", "flattered",
- "flawlessely", "flawlessly",
- "flawlessley", "flawlessly",
- "flexibiltiy", "flexibility",
- "flourescent", "fluorescent",
- "fluctuaties", "fluctuate",
- "fluctuative", "fluctuate",
- "flutteryshy", "fluttershy",
- "forcefullly", "forcefully",
- "foreseaable", "foreseeable",
- "foresseable", "foreseeable",
- "forgettting", "forgetting",
- "forgiviness", "forgiveness",
- "formallized", "formalized",
- "formattting", "formatting",
- "formidabble", "formidable",
- "formidabelt", "formidable",
- "formidabile", "formidable",
- "fortitudine", "fortitude",
- "fortuantely", "fortunately",
- "fortunantly", "fortunately",
- "fortunatley", "fortunately",
- "fortunetely", "fortunately",
- "franchieses", "franchises",
- "frankensite", "frankenstein",
- "frankensten", "frankenstein",
- "fransiscans", "franciscans",
- "freindships", "friendships",
- "freindzoned", "friendzoned",
- "frequenices", "frequencies",
- "frequensies", "frequencies",
- "frequenties", "frequencies",
- "frequentily", "frequently",
- "frequenzies", "frequencies",
- "friendboned", "friendzoned",
- "friendlines", "friendlies",
- "friendzonie", "friendzoned",
- "frientships", "friendships",
- "frientzoned", "friendzoned",
- "frightenend", "frightened",
- "frightining", "frightening",
- "frigthening", "frightening",
- "frinedzoned", "friendzoned",
- "frontlinies", "frontline",
- "frontlinjen", "frontline",
- "frustartion", "frustrations",
- "frustracion", "frustration",
- "frustraited", "frustrated",
- "frustrantes", "frustrates",
- "frustrasion", "frustrations",
- "frustrasted", "frustrates",
- "frustraties", "frustrates",
- "fucntioning", "functioning",
- "fulfillling", "fulfilling",
- "fulfullment", "fulfillment",
- "fullfilment", "fulfillment",
- "fullscreeen", "fullscreen",
- "funcitoning", "functioning",
- "functionaly", "functionally",
- "functionnal", "functional",
- "fundamentas", "fundamentals",
- "fundamently", "fundamental",
- "fundametals", "fundamentals",
- "fundamnetal", "fundamentals",
- "fundemantal", "fundamental",
- "fundemental", "fundamental",
- "fundimental", "fundamental",
- "furhtermore", "furthermore",
- "furstration", "frustration",
- "furthremore", "furthermore",
- "furthurmore", "furthermore",
- "futurisitic", "futuristic",
- "gangsterest", "gangsters",
- "gangsterous", "gangsters",
- "gauntlettes", "gauntlets",
- "geneologies", "genealogies",
- "generalizng", "generalizing",
- "generatting", "generating",
- "genitaliban", "genitalia",
- "gentlemanne", "gentlemen",
- "girlfirends", "girlfriends",
- "girlfreinds", "girlfriends",
- "girlfrients", "girlfriends",
- "glorifierad", "glorified",
- "glorifindel", "glorified",
- "goosebumbps", "goosebumps",
- "govenrments", "governments",
- "govermental", "governmental",
- "governemnts", "governments",
- "governmanet", "governmental",
- "governmeant", "governmental",
- "govormental", "governmental",
- "gracefullly", "gracefully",
- "grahpically", "graphically",
- "grammarical", "grammatical",
- "grammaticly", "grammatical",
- "grammitical", "grammatical",
- "graphcially", "graphically",
- "grassrooots", "grassroots",
- "gratuitious", "gratuitous",
- "gratuituous", "gratuitous",
- "gravitatiei", "gravitate",
- "grilfriends", "girlfriends",
- "grpahically", "graphically",
- "guaranteeds", "guarantees",
- "guerrillera", "guerrilla",
- "gunslingner", "gunslinger",
- "hamburgaren", "hamburger",
- "hamburgeres", "hamburgers",
- "hamburglers", "hamburgers",
- "hamburguers", "hamburgers",
- "handlebards", "handlebars",
- "handrwiting", "handwriting",
- "handycapped", "handicapped",
- "hanidcapped", "handicapped",
- "harassement", "harassment",
- "harrasments", "harassments",
- "harrassment", "harassment",
- "harvestgain", "harvesting",
- "headquartes", "headquarters",
- "headquaters", "headquarters",
- "hearhtstone", "hearthstone",
- "heartborken", "heartbroken",
- "heartbraker", "heartbreak",
- "heartbrakes", "heartbreak",
- "heartsthone", "hearthstone",
- "heaviweight", "heavyweight",
- "heavyweigth", "heavyweight",
- "heavywieght", "heavyweight",
- "helicoptors", "helicopters",
- "helicotpers", "helicopters",
- "helicpoters", "helicopters",
- "helictopers", "helicopters",
- "helikopters", "helicopters",
- "hemipsheres", "hemisphere",
- "hemishperes", "hemisphere",
- "herathstone", "hearthstone",
- "heterosexal", "heterosexual",
- "hexidecimal", "hexadecimal",
- "hierachical", "hierarchical",
- "hierarcical", "hierarchical",
- "highlighing", "highlighting",
- "highschoool", "highschool",
- "hipopotamus", "hippopotamus",
- "historicaly", "historically",
- "historicans", "historians",
- "historietas", "histories",
- "historinhas", "historians",
- "homecomeing", "homecoming",
- "homecomming", "homecoming",
- "homelesness", "homelessness",
- "homelessess", "homelessness",
- "homeowneris", "homeowners",
- "homoegenous", "homogeneous",
- "homogeneize", "homogenize",
- "homogenious", "homogeneous",
- "homogenuous", "homogeneous",
- "homophoboes", "homophobe",
- "homosexuais", "homosexuals",
- "homosexuels", "homosexuals",
- "hopelessely", "hopelessly",
- "hopelessley", "hopelessly",
- "hopsitality", "hospitality",
- "horizonatal", "horizontal",
- "horizontaal", "horizontal",
- "horizontaly", "horizontally",
- "horrendeous", "horrendous",
- "horrendious", "horrendous",
- "horrenduous", "horrendous",
- "hospitalzed", "hospitalized",
- "hospotality", "hospitality",
- "househoulds", "households",
- "humanitarna", "humanitarian",
- "humanitites", "humanities",
- "humilitaing", "humiliating",
- "humilitaion", "humiliation",
- "humillating", "humiliating",
- "humillation", "humiliation",
- "hurricaines", "hurricanes",
- "hurricances", "hurricanes",
- "hurricanger", "hurricane",
- "hyperbollic", "hyperbolic",
- "hyperbrophy", "hypertrophy",
- "hyperthropy", "hypertrophy",
- "hypertorphy", "hypertrophy",
- "hypertrohpy", "hypertrophy",
- "hypocritcal", "hypocritical",
- "hypocritial", "hypocritical",
- "hypocrities", "hypocrite",
- "hypothesees", "hypotheses",
- "hypothesies", "hypothesis",
- "hystericaly", "hysterically",
- "hystericlly", "hysterically",
- "iconclastic", "iconoclastic",
- "idealisitic", "idealistic",
- "identifible", "identifiable",
- "identitites", "identities",
- "identitties", "identities",
- "ideologiers", "ideologies",
- "ideologisen", "ideologies",
- "ideologiset", "ideologies",
- "ideologiske", "ideologies",
- "illegallity", "illegally",
- "illegitamte", "illegitimate",
- "illegitmate", "illegitimate",
- "illsutrator", "illustrator",
- "illuminanti", "illuminati",
- "illuminarti", "illuminati",
- "illuminatti", "illuminati",
- "illuminauti", "illuminati",
- "illuminiati", "illuminati",
- "illuminista", "illuminati",
- "illumintati", "illuminati",
- "illustarted", "illustrated",
- "illustartor", "illustrator",
- "illustraded", "illustrated",
- "illustraion", "illustration",
- "illustrater", "illustrator",
- "illustratie", "illustrate",
- "illustratin", "illustrations",
- "illustraton", "illustration",
- "imaganative", "imaginative",
- "imaganitive", "imaginative",
- "imaginacion", "imagination",
- "imaginatiei", "imaginative",
- "imaginating", "imagination",
- "imaginativo", "imagination",
- "imaginitave", "imaginative",
- "imbalanaced", "imbalanced",
- "imbalanaces", "imbalances",
- "imbalancers", "imbalances",
- "immatureity", "immaturity",
- "immedeately", "immediately",
- "immediantly", "immediately",
- "immediatley", "immediately",
- "immedietely", "immediately",
- "immideately", "immediately",
- "immidiately", "immediately",
- "immigraiton", "immigration",
- "immigrantes", "immigrants",
- "immoratlity", "immortality",
- "immortailty", "immortality",
- "immortalisy", "immortals",
- "impeccabile", "impeccable",
- "imperailist", "imperialist",
- "imperealist", "imperialist",
- "imperialims", "imperialism",
- "imperialsim", "imperialism",
- "imperiarist", "imperialist",
- "imperically", "empirically",
- "imperislist", "imperialist",
- "implausable", "implausible",
- "implausbile", "implausible",
- "implementas", "implements",
- "implementes", "implements",
- "implementig", "implementing",
- "implementos", "implements",
- "implicacion", "implication",
- "implicatons", "implications",
- "implicitely", "implicitly",
- "implicitily", "implicitly",
- "implikation", "implication",
- "implimented", "implemented",
- "importantce", "importance",
- "importently", "importantly",
- "imporvement", "improvement",
- "impossibile", "impossible",
- "impossibily", "impossibly",
- "impossibley", "impossibly",
- "impossiblly", "impossibly",
- "impoverised", "impoverished",
- "impracticle", "impractical",
- "impressario", "impresario",
- "impresssion", "impressions",
- "imprisonent", "imprisonment",
- "imprisonned", "imprisoned",
- "improbabile", "improbable",
- "improtantly", "importantly",
- "improvemnts", "improvements",
- "improvished", "improvised",
- "improvision", "improvisation",
- "improvments", "improvements",
- "impulsivley", "impulsive",
- "imrpovement", "improvement",
- "inaccessble", "inaccessible",
- "inaccuraces", "inaccuracies",
- "inaccurrate", "inaccurate",
- "inadvertant", "inadvertent",
- "inaguration", "inauguration",
- "inahbitants", "inhabitants",
- "incarantion", "incarnation",
- "incarcerato", "incarceration",
- "incarnacion", "incarnation",
- "incentivare", "incentive",
- "incentivate", "incentive",
- "incentivice", "incentive",
- "incentivies", "incentives",
- "incidencies", "incidence",
- "incidentaly", "incidentally",
- "incidential", "incidental",
- "inclanation", "inclination",
- "inclenation", "inclination",
- "inclinacion", "inclination",
- "inclinaison", "inclination",
- "incognition", "incognito",
- "incoherrent", "incoherent",
- "incompatble", "incompatible",
- "incompatent", "incompetent",
- "incompetant", "incompetent",
- "incompitent", "incompetent",
- "incompotent", "incompetent",
- "incomptable", "incompatible",
- "inconsisent", "inconsistent",
- "inconveniet", "inconvenient",
- "incoroprate", "incorporate",
- "incorparate", "incorporate",
- "incorperate", "incorporate",
- "incorporare", "incorporate",
- "incorported", "incorporated",
- "incorprates", "incorporates",
- "incorproate", "incorporated",
- "incramental", "incremental",
- "increadible", "incredible",
- "incrediable", "incredible",
- "incrediably", "incredibly",
- "incredibile", "incredible",
- "incredibily", "incredibly",
- "incredibley", "incredibly",
- "incrememnts", "increments",
- "incremenets", "increments",
- "incrementas", "increments",
- "incremently", "incremental",
- "incrementos", "increments",
- "incrimental", "incremental",
- "inctroduced", "introduced",
- "indefinetly", "indefinitely",
- "indefininte", "indefinite",
- "indefinitly", "indefinitely",
- "indepdenent", "independents",
- "indepedence", "independence",
- "indepednent", "independents",
- "independant", "independent",
- "independece", "independence",
- "independens", "independents",
- "independetn", "independents",
- "independets", "independents",
- "independnet", "independents",
- "indepentend", "independents",
- "indepentent", "independent",
- "indianapols", "indianapolis",
- "indicateurs", "indicates",
- "indicatiors", "indicators",
- "indictement", "indictment",
- "indifferant", "indifferent",
- "indiffernce", "indifference",
- "indigeneous", "indigenous",
- "indigenious", "indigenous",
- "indigenuous", "indigenous",
- "indigineous", "indigenous",
- "indipendent", "independent",
- "indirectely", "indirectly",
- "individiual", "individual",
- "individuais", "individuals",
- "individualy", "individually",
- "individuati", "individuality",
- "individuels", "individuals",
- "indivuduals", "individuals",
- "industriels", "industries",
- "ineffecitve", "ineffective",
- "ineffektive", "ineffective",
- "inefficeint", "inefficient",
- "inefficiant", "inefficient",
- "ineffictive", "ineffective",
- "ineffizient", "inefficient",
- "inequallity", "inequality",
- "inevitabile", "inevitable",
- "inevitabily", "inevitably",
- "inevitabley", "inevitably",
- "inevitablly", "inevitably",
- "inexpencive", "inexpensive",
- "inexpenisve", "inexpensive",
- "inexperiece", "inexperience",
- "inexperince", "inexperience",
- "inexplicaby", "inexplicably",
- "infallibale", "infallible",
- "infallibile", "infallible",
- "infectation", "infestation",
- "inferioirty", "inferiority",
- "infestating", "infestation",
- "infilitrate", "infiltrate",
- "infiltartor", "infiltrator",
- "infiltraron", "infiltrator",
- "infiltrarte", "infiltrate",
- "infiltrater", "infiltrator",
- "infiltratie", "infiltrate",
- "infiltrerat", "infiltrate",
- "infinitelly", "infinitely",
- "infintrator", "infiltrator",
- "inflamation", "inflammation",
- "inflatabale", "inflatable",
- "inflitrator", "infiltrator",
- "influancing", "influencing",
- "influencial", "influential",
- "influencian", "influencing",
- "influenting", "influencing",
- "influentual", "influential",
- "influincing", "influencing",
- "infograhpic", "infographic",
- "infograpgic", "infographic",
- "infogrpahic", "infographic",
- "informacion", "information",
- "informatice", "informative",
- "informatief", "informative",
- "informatiei", "informative",
- "informatike", "informative",
- "informativo", "information",
- "informitive", "informative",
- "infrigement", "infringement",
- "infringeing", "infringing",
- "infromation", "information",
- "infromative", "informative",
- "infulential", "influential",
- "ingerdients", "ingredients",
- "ingrediants", "ingredients",
- "ingreidents", "ingredient",
- "ingriedents", "ingredient",
- "inhabitents", "inhabitants",
- "inheirtance", "inheritance",
- "inheratance", "inheritance",
- "inheretance", "inheritance",
- "inheritence", "inheritance",
- "inhertiance", "inheritance",
- "initaitives", "initiatives",
- "initalisers", "initialisers",
- "initalising", "initialising",
- "initalizers", "initializers",
- "initalizing", "initializing",
- "initiaitive", "initiative",
- "inititiaves", "initiatives",
- "innocenters", "innocents",
- "innocentius", "innocents",
- "innoculated", "inoculated",
- "inpsiration", "inspiration",
- "inquisicion", "inquisition",
- "inquisistor", "inquisitor",
- "inquisiting", "inquisition",
- "inquisitior", "inquisitor",
- "inquisitivo", "inquisition",
- "inquizition", "inquisition",
- "insecurites", "insecurities",
- "insensative", "insensitive",
- "insensetive", "insensitive",
- "insentitive", "insensitive",
- "insepctions", "inspections",
- "inseperable", "inseparable",
- "insipration", "inspiration",
- "insitutions", "institutions",
- "insparation", "inspiration",
- "inspecticon", "inspection",
- "inspectoras", "inspectors",
- "insperation", "inspiration",
- "inspiracion", "inspiration",
- "inspirating", "inspiration",
- "inspriation", "inspiration",
- "instalation", "installation",
- "instalement", "installment",
- "installatin", "installations",
- "installeert", "installer",
- "installemnt", "installment",
- "installling", "installing",
- "installmant", "installment",
- "instanciate", "instantiate",
- "instantaneu", "instantaneous",
- "institucion", "institution",
- "institutiei", "institute",
- "instituttet", "institute",
- "instraments", "instruments",
- "instruccion", "instruction",
- "instruciton", "instruction",
- "instructers", "instructors",
- "instructior", "instructor",
- "instructios", "instructors",
- "instructivo", "instruction",
- "instructons", "instructors",
- "instruktion", "instruction",
- "instrumenal", "instrumental",
- "instrumetal", "instrumental",
- "insturction", "instruction",
- "insturctors", "instructors",
- "insturments", "instruments",
- "instutition", "institution",
- "instutution", "institution",
- "insufficent", "insufficient",
- "insuinating", "insinuating",
- "insuniating", "insinuating",
- "insurgencey", "insurgency",
- "intangiable", "intangible",
- "intangibile", "intangible",
- "inteferring", "interfering",
- "integracion", "integration",
- "integratron", "integration",
- "integrering", "interfering",
- "intelectual", "intellectual",
- "inteligence", "intelligence",
- "intellectul", "intellectuals",
- "intellectus", "intellectuals",
- "intellecual", "intellectual",
- "intellegent", "intelligent",
- "intelligant", "intelligent",
- "intencional", "intentional",
- "intentionly", "intentional",
- "interaccion", "interaction",
- "interactice", "interactive",
- "interacties", "interacts",
- "interactifs", "interacts",
- "interactins", "interacts",
- "interactios", "interacts",
- "interactivo", "interaction",
- "interactons", "interacts",
- "interaktion", "interaction",
- "interaktive", "interactive",
- "interasting", "interacting",
- "intercation", "integration",
- "interceptin", "interception",
- "intercoarse", "intercourse",
- "intercource", "intercourse",
- "interecting", "interacting",
- "interection", "interaction",
- "interelated", "interrelated",
- "interersted", "interpreted",
- "interesring", "interfering",
- "interessted", "interested",
- "interferece", "interference",
- "interferens", "interferes",
- "interferire", "interfere",
- "interfernce", "interference",
- "interferred", "interfere",
- "interferres", "interferes",
- "intergation", "integration",
- "intergrated", "integrated",
- "intermedate", "intermediate",
- "intermedite", "intermediate",
- "intermitent", "intermittent",
- "internation", "international",
- "interneters", "internets",
- "internetese", "internets",
- "internetest", "internets",
- "interneting", "interesting",
- "internetors", "internets",
- "internettes", "internets",
- "interperted", "interpreted",
- "interperter", "interpreter",
- "interprered", "interpreter",
- "interpretor", "interpreter",
- "interratial", "interracial",
- "interresing", "interfering",
- "interrogato", "interrogation",
- "interrputed", "interrupted",
- "interruping", "interrupting",
- "interruptes", "interrupts",
- "interruptis", "interrupts",
- "intersecton", "intersection",
- "interstelar", "interstellar",
- "intertained", "intertwined",
- "intertvined", "intertwined",
- "intertwyned", "intertwined",
- "intervalles", "intervals",
- "intervation", "integration",
- "interveiwed", "interviewed",
- "interveiwer", "interviewer",
- "intervenion", "intervening",
- "intervenire", "intervene",
- "interventie", "intervene",
- "intervewing", "intervening",
- "interviened", "interviewed",
- "interviewes", "interviews",
- "interviewie", "interviewer",
- "intervining", "intervening",
- "interwebers", "interwebs",
- "interwiever", "interviewer",
- "intestinces", "intestines",
- "inticracies", "intricacies",
- "intimadated", "intimidated",
- "intimidades", "intimidated",
- "intimidante", "intimidate",
- "intimidatie", "intimidated",
- "intimidatin", "intimidation",
- "intimidaton", "intimidation",
- "intimidiate", "intimidate",
- "intiminated", "intimidated",
- "intimitaded", "intimidated",
- "intimitated", "intimidated",
- "intiutively", "intuitively",
- "intoleranse", "intolerance",
- "intolerante", "intolerance",
- "intolerence", "intolerance",
- "intolernace", "intolerance",
- "intolorance", "intolerance",
- "intolorence", "intolerance",
- "intorducing", "introducing",
- "intorverted", "introverted",
- "intoxicatin", "intoxication",
- "intoxicaton", "intoxication",
- "intoxinated", "intoxicated",
- "intoxocated", "intoxicated",
- "intracacies", "intricacies",
- "intracicies", "intricacies",
- "intraverted", "introverted",
- "intrecacies", "intricacies",
- "intrepreted", "interpreted",
- "intrepreter", "interpreter",
- "intrerupted", "interrupted",
- "intricasies", "intricacies",
- "intricicies", "intricacies",
- "intrigueing", "intriguing",
- "intrinsisch", "intrinsic",
- "introducion", "introduction",
- "introducted", "introduced",
- "introductie", "introduce",
- "introvertie", "introverted",
- "introvertis", "introverts",
- "intruducing", "introducing",
- "intrumental", "instrumental",
- "intuatively", "intuitively",
- "intuitevely", "intuitively",
- "intuitivley", "intuitively",
- "intuituvely", "intuitively",
- "inutitively", "intuitively",
- "invaldiates", "invalidates",
- "invalidades", "invalidates",
- "invalidante", "invalidate",
- "invariabley", "invariably",
- "invariablly", "invariably",
- "inventiones", "inventions",
- "invesitgate", "investigate",
- "investagate", "investigate",
- "investiagte", "investigate",
- "investigare", "investigate",
- "invincibile", "invincible",
- "invincinble", "invincible",
- "invisibiity", "invisibility",
- "invisibiliy", "invisibility",
- "invokations", "invocations",
- "involantary", "involuntary",
- "involentary", "involuntary",
- "involintary", "involuntary",
- "involontary", "involuntary",
- "involunatry", "involuntary",
- "invulnerabe", "invulnerable",
- "invulnerble", "invulnerable",
- "iresistable", "irresistible",
- "iresistably", "irresistibly",
- "iresistible", "irresistible",
- "iresistibly", "irresistibly",
- "irrationaly", "irrationally",
- "irrationnal", "irrational",
- "islamisists", "islamists",
- "islamisters", "islamists",
- "islamistisk", "islamists",
- "isntruments", "instruments",
- "jacksonvile", "jacksonville",
- "jailbroaken", "jailbroken",
- "jailbrocken", "jailbroken",
- "jounralists", "journalists",
- "jouranlists", "journalists",
- "journalisim", "journalism",
- "journalistc", "journalistic",
- "journolists", "journalists",
- "judegmental", "judgemental",
- "judgamental", "judgemental",
- "judgementle", "judgemental",
- "judgementsl", "judgemental",
- "judgenental", "judgemental",
- "jugdemental", "judgemental",
- "juggernaugt", "juggernaut",
- "juggernault", "juggernaut",
- "juggernaunt", "juggernaut",
- "justifyable", "justifiable",
- "kidnappning", "kidnapping",
- "kidnappping", "kidnapping",
- "kilometeres", "kilometers",
- "kindergaten", "kindergarten",
- "knowledgabe", "knowledgable",
- "knowledgble", "knowledgable",
- "kryptoninte", "kryptonite",
- "lacklusture", "lackluster",
- "laughablely", "laughably",
- "legalizaing", "legalizing",
- "legalizaton", "legalization",
- "legalizeing", "legalizing",
- "legenadries", "legendaries",
- "legendaires", "legendaries",
- "legendarios", "legendaries",
- "legendarisk", "legendaries",
- "legendaryes", "legendaries",
- "legenderies", "legendaries",
- "legilsation", "legislation",
- "legislacion", "legislation",
- "legislativo", "legislation",
- "legistation", "legislation",
- "legistative", "legislative",
- "legistators", "legislators",
- "legitematly", "legitimately",
- "legitimancy", "legitimacy",
- "legitimatcy", "legitimacy",
- "legitimatly", "legitimately",
- "legitimetly", "legitimately",
- "legnedaries", "legendaries",
- "lengedaries", "legendaries",
- "liberalisim", "liberalism",
- "liberatrian", "libertarians",
- "libertairan", "libertarians",
- "libertarain", "libertarian",
- "libertarias", "libertarians",
- "libertarien", "libertarian",
- "libertaryan", "libertarian",
- "libertatian", "libertarian",
- "liberterian", "libertarian",
- "libguistics", "linguistics",
- "libretarian", "libertarian",
- "lieutennant", "lieutenant",
- "lieutentant", "lieutenant",
- "lightenning", "lightening",
- "lightenting", "lightening",
- "lightheared", "lighthearted",
- "lightheated", "lighthearted",
- "lightweigth", "lightweight",
- "lightwieght", "lightweight",
- "lightwright", "lightweight",
- "ligthweight", "lightweight",
- "limitaitons", "limitation",
- "linguisitcs", "linguistics",
- "linguisitic", "linguistic",
- "lingusitics", "linguistics",
- "lithuaninan", "lithuania",
- "littlefiger", "littlefinger",
- "littlefiner", "littlefinger",
- "lockscreeen", "lockscreen",
- "longevitity", "longevity",
- "lotharingen", "lothringen",
- "louisvillle", "louisville",
- "maginficent", "magnificent",
- "magneficent", "magnificent",
- "magnicifent", "magnificent",
- "magnifacent", "magnificent",
- "magnifecent", "magnificent",
- "magnificant", "magnificent",
- "magnitudine", "magnitude",
- "maintainted", "maintained",
- "maintanance", "maintenance",
- "maintanence", "maintenance",
- "maintenence", "maintenance",
- "maintianing", "maintaining",
- "maintinaing", "maintaining",
- "maintinance", "maintenance",
- "maintinence", "maintenance",
- "malfonction", "malfunction",
- "malfucntion", "malfunction",
- "malfunciton", "malfunction",
- "malfuncting", "malfunction",
- "malfunktion", "malfunction",
- "malpractise", "malpractice",
- "malpractive", "malpractice",
- "maneouvring", "manoeuvring",
- "manifestado", "manifesto",
- "manifestano", "manifesto",
- "manifestato", "manifesto",
- "manifestion", "manifesto",
- "manifestior", "manifesto",
- "manifestons", "manifests",
- "manifestors", "manifests",
- "manipluated", "manipulated",
- "manipualted", "manipulated",
- "manipulatie", "manipulative",
- "manipulatin", "manipulation",
- "manipulaton", "manipulation",
- "maniuplated", "manipulated",
- "mannerisims", "mannerisms",
- "manslaugher", "manslaughter",
- "manslaugter", "manslaughter",
- "manufacters", "manufactures",
- "manufacteur", "manufactures",
- "manufactued", "manufactured",
- "manufactuer", "manufacture",
- "manufacturs", "manufactures",
- "manufacuter", "manufacture",
- "manufacutre", "manufactures",
- "manufatured", "manufactured",
- "manupilated", "manipulated",
- "marganilize", "marginalized",
- "marhsmallow", "marshmallow",
- "marijuannas", "marijuana",
- "markerplace", "marketplace",
- "marketpalce", "marketplace",
- "marshamllow", "marshmallow",
- "marshmalows", "marshmallows",
- "masculanity", "masculinity",
- "masculenity", "masculinity",
- "masrhmallow", "marshmallow",
- "mastermined", "mastermind",
- "masterpeace", "masterpiece",
- "masterpeice", "masterpiece",
- "mastrubated", "masturbated",
- "mastrubates", "masturbate",
- "masturabted", "masturbated",
- "masturbaing", "masturbating",
- "masturbarte", "masturbate",
- "masturbathe", "masturbated",
- "masturbatie", "masturbated",
- "masturbatin", "masturbation",
- "masturbaton", "masturbation",
- "masturbsted", "masturbated",
- "masturpiece", "masterpiece",
- "masuclinity", "masculinity",
- "matchamking", "matchmaking",
- "materalists", "materialist",
- "materialsim", "materialism",
- "mathamatics", "mathematics",
- "mathcmaking", "matchmaking",
- "mathemagics", "mathematics",
- "mathemetics", "mathematics",
- "mathimatics", "mathematics",
- "matieralism", "materialism",
- "maybelleine", "maybelline",
- "maybelliene", "maybelline",
- "maybellinne", "maybelline",
- "maybellline", "maybelline",
- "mdifielders", "midfielders",
- "meatballers", "meatballs",
- "mecernaries", "mercenaries",
- "mechanicaly", "mechanically",
- "mechanichal", "mechanical",
- "mechaniclly", "mechanically",
- "mechanicsms", "mechanisms",
- "mechanisims", "mechanism",
- "mechanismus", "mechanisms",
- "medicaitons", "medications",
- "medicineras", "medicines",
- "meditatiing", "meditating",
- "meditationg", "meditating",
- "mentionning", "mentioning",
- "mercanaries", "mercenaries",
- "mercaneries", "mercenaries",
- "mercenaires", "mercenaries",
- "mercenarias", "mercenaries",
- "mercenarios", "mercenaries",
- "merceneries", "mercenaries",
- "merchandice", "merchandise",
- "merchandies", "merchandise",
- "merchanidse", "merchandise",
- "merchanters", "merchants",
- "merchendise", "merchandise",
- "merchindise", "merchandise",
- "mercinaries", "mercenaries",
- "mercineries", "mercenaries",
- "metabolisim", "metabolism",
- "metabolitic", "metabolic",
- "metaphisics", "metaphysics",
- "metaphorial", "metaphorical",
- "metaphorics", "metaphors",
- "metaphsyics", "metaphysics",
- "metaphyiscs", "metaphysics",
- "methodoligy", "methodology",
- "metholodogy", "methodology",
- "metropolian", "metropolitan",
- "metropolies", "metropolis",
- "metropollis", "metropolis",
- "metropolois", "metropolis",
- "micorcenter", "microcenter",
- "micorphones", "microphones",
- "microcender", "microcenter",
- "microcentre", "microcenter",
- "microcentro", "microcenter",
- "microhpones", "microphones",
- "microscrope", "microscope",
- "microwavees", "microwaves",
- "microwavers", "microwaves",
- "midfeilders", "midfielders",
- "midfiedlers", "midfielders",
- "midfileders", "midfielders",
- "midifelders", "midfielders",
- "millienaire", "millionaire",
- "millionairs", "millionaires",
- "millionarie", "millionaire",
- "millioniare", "millionaire",
- "mindlessely", "mindlessly",
- "mindlessley", "mindlessly",
- "minimalstic", "minimalist",
- "ministerens", "ministers",
- "ministerios", "ministers",
- "minneaoplis", "minneapolis",
- "minneaplois", "minneapolis",
- "minniapolis", "minneapolis",
- "miraculaous", "miraculous",
- "miraculosly", "miraculously",
- "miraculousy", "miraculously",
- "mircocenter", "microcenter",
- "mircophones", "microphones",
- "mircoscopic", "microscopic",
- "miscairrage", "miscarriage",
- "miscarraige", "miscarriage",
- "miscarridge", "miscarriage",
- "miscarriege", "miscarriage",
- "mischeivous", "mischievous",
- "mischevious", "mischievous",
- "misdameanor", "misdemeanor",
- "misdeamenor", "misdemeanor",
- "misdemeaner", "misdemeanor",
- "misdemenaor", "misdemeanor",
- "misdemenors", "misdemeanors",
- "misdimeanor", "misdemeanor",
- "misdomeanor", "misdemeanor",
- "miserablely", "miserably",
- "misfortunte", "misfortune",
- "misimformed", "misinformed",
- "misinterept", "misinterpret",
- "misinterpet", "misinterpret",
- "misoginysts", "misogynist",
- "misognyists", "misogynist",
- "misogyinsts", "misogynist",
- "misogynisic", "misogynistic",
- "misogynistc", "misogynistic",
- "misogynstic", "misogynist",
- "missionaire", "missionaries",
- "missionairy", "missionary",
- "missionares", "missionaries",
- "missionaris", "missionaries",
- "missionarry", "missionary",
- "missionnary", "missionary",
- "mississipis", "mississippi",
- "misspeeling", "misspelling",
- "misspellled", "misspelled",
- "mistakengly", "mistakenly",
- "mistakently", "mistakenly",
- "moderatedly", "moderately",
- "moderateurs", "moderates",
- "moderatorin", "moderation",
- "modificaton", "modification",
- "moisterizer", "moisturizer",
- "moistruizer", "moisturizer",
- "moisturizng", "moisturizing",
- "moisturizor", "moisturizer",
- "moistutizer", "moisturizer",
- "moisutrizer", "moisturizer",
- "moleculaire", "molecular",
- "molestating", "molestation",
- "moleststion", "molestation",
- "momemtarily", "momentarily",
- "momentairly", "momentarily",
- "momentaraly", "momentarily",
- "momentarely", "momentarily",
- "momenterily", "momentarily",
- "monestaries", "monasteries",
- "monitoreada", "monitored",
- "monitoreado", "monitored",
- "monogameous", "monogamous",
- "monolitihic", "monolithic",
- "monopollies", "monopolies",
- "monstorsity", "monstrosity",
- "monstrasity", "monstrosity",
- "monstrisity", "monstrosity",
- "monstrocity", "monstrosity",
- "monstrosoty", "monstrosity",
- "monstrostiy", "monstrosity",
- "monumentaal", "monumental",
- "monumentais", "monuments",
- "monumentals", "monuments",
- "monumentous", "monuments",
- "mositurizer", "moisturizer",
- "mosntrosity", "monstrosity",
- "motehrboard", "motherboard",
- "mothebroard", "motherboards",
- "motherbaord", "motherboard",
- "motherboads", "motherboards",
- "motherboars", "motherboards",
- "motherborad", "motherboard",
- "motherbords", "motherboards",
- "motherobard", "motherboards",
- "mothreboard", "motherboards",
- "motivatinal", "motivational",
- "motorcicles", "motorcycles",
- "motorcylces", "motorcycles",
- "mouthpeices", "mouthpiece",
- "mulitplayer", "multiplayer",
- "mulitplying", "multiplying",
- "multipalyer", "multiplayer",
- "multiplater", "multiplayer",
- "multiplebgs", "multiples",
- "multipleies", "multiples",
- "multitaskng", "multitasking",
- "multitudine", "multitude",
- "multiverese", "multiverse",
- "multyplayer", "multiplayer",
- "multyplying", "multiplying",
- "muncipality", "municipality",
- "murdererous", "murderers",
- "musicallity", "musically",
- "mutliplayer", "multiplayer",
- "mutliplying", "multiplying",
- "mysterieuse", "mysteries",
- "mysteriosly", "mysteriously",
- "mysteriouly", "mysteriously",
- "mysteriousy", "mysteriously",
- "napoleonian", "napoleonic",
- "narcisissim", "narcissism",
- "narcisissts", "narcissist",
- "narcisscism", "narcissism",
- "narcisscist", "narcissist",
- "narcissisim", "narcissism",
- "narcississm", "narcissism",
- "narcississt", "narcissist",
- "narcissistc", "narcissistic",
- "narcissitic", "narcissistic",
- "narcisssism", "narcissism",
- "narcisssist", "narcissist",
- "narcissstic", "narcissist",
- "natioanlist", "nationalist",
- "nationailty", "nationality",
- "nationalesl", "nationals",
- "nationalisn", "nationals",
- "nationalite", "nationalist",
- "nationalits", "nationalist",
- "nationalizm", "nationalism",
- "nationalsim", "nationalism",
- "neccesarily", "necessarily",
- "necessairly", "necessarily",
- "necessaties", "necessities",
- "necesseraly", "necessarily",
- "necesserily", "necessarily",
- "necessiates", "necessities",
- "necessitive", "necessities",
- "neckbeardos", "neckbeards",
- "neckbeardus", "neckbeards",
- "necormancer", "necromancer",
- "necromamcer", "necromancer",
- "necromanser", "necromancer",
- "necromencer", "necromancer",
- "needlessley", "needlessly",
- "negativeity", "negativity",
- "negativelly", "negatively",
- "negativitiy", "negativity",
- "negiotating", "negotiating",
- "negligiable", "negligible",
- "negociating", "negotiating",
- "negociation", "negotiation",
- "negoitating", "negotiating",
- "negoitation", "negotiation",
- "negotiatied", "negotiate",
- "negotiative", "negotiate",
- "negotiatons", "negotiations",
- "neigborhood", "neighborhood",
- "neigbouring", "neighbouring",
- "neighborhod", "neighborhood",
- "neighbourgs", "neighbours",
- "neighouring", "neighboring",
- "nercomancer", "necromancer",
- "nessasarily", "necessarily",
- "neurologial", "neurological",
- "neurosciene", "neuroscience",
- "neutrallity", "neutrality",
- "neverthelss", "nevertheless",
- "neverthless", "nevertheless",
- "newspapaers", "newspapers",
- "newspappers", "newspapers",
- "nieghboring", "neighboring",
- "nightmarket", "nightmare",
- "nonsencical", "nonsensical",
- "nonsenscial", "nonsensical",
- "nonsensicle", "nonsensical",
- "normallized", "normalized",
- "northwesten", "northwestern",
- "nostalgisch", "nostalgic",
- "noteworthly", "noteworthy",
- "noticeabley", "noticeably",
- "notificaton", "notification",
- "notoriuosly", "notoriously",
- "numericable", "numerical",
- "nurtitional", "nutritional",
- "nutricional", "nutritional",
- "nutrutional", "nutritional",
- "obamination", "abomination",
- "obersvation", "observation",
- "obilterated", "obliterated",
- "objectivety", "objectivity",
- "objectivify", "objectivity",
- "objectivily", "objectivity",
- "objectivley", "objectively",
- "obliberated", "obliterated",
- "obliderated", "obliterated",
- "obligerated", "obliterated",
- "oblitarated", "obliterated",
- "obliteraded", "obliterated",
- "obliterared", "obliterated",
- "oblitirated", "obliterated",
- "oblitorated", "obliterated",
- "obliverated", "obliterated",
- "observacion", "observation",
- "observaiton", "observant",
- "observasion", "observations",
- "observating", "observation",
- "observerats", "observers",
- "obsessivley", "obsessive",
- "obstruccion", "obstruction",
- "obstruktion", "obstruction",
- "obsturction", "obstruction",
- "obversation", "observation",
- "ocasionally", "occasionally",
- "ocassionaly", "occasionally",
- "occasionals", "occasions",
- "occasionaly", "occasionally",
- "occasionnal", "occasional",
- "occassional", "occasional",
- "occassioned", "occasioned",
- "occurrances", "occurrences",
- "offensivley", "offensively",
- "offesnively", "offensively",
- "officiallly", "officially",
- "olbiterated", "obliterated",
- "omniscienct", "omniscient",
- "operacional", "operational",
- "operasional", "operational",
- "operationel", "operational",
- "oppresssing", "oppressing",
- "oppresssion", "oppression",
- "opprotunity", "opportunity",
- "optimisitic", "optimistic",
- "optimizaton", "optimization",
- "optmization", "optimization",
- "orchestraed", "orchestrated",
- "orchestrial", "orchestra",
- "oreintation", "orientation",
- "organisaton", "organisation",
- "organiserad", "organised",
- "organistion", "organisation",
- "organizarea", "organizer",
- "organizarem", "organizer",
- "organizarme", "organizer",
- "organizarte", "organizer",
- "organiztion", "organization",
- "oridinarily", "ordinarily",
- "orientacion", "orientation",
- "originially", "originally",
- "originnally", "originally",
- "origniality", "originality",
- "ostensiably", "ostensibly",
- "ostensibily", "ostensibly",
- "outclasssed", "outclassed",
- "outnunbered", "outnumbered",
- "outperfroms", "outperform",
- "outpreforms", "outperform",
- "outrageosly", "outrageously",
- "outrageouly", "outrageously",
- "outragerous", "outrageous",
- "outskirters", "outskirts",
- "outsorucing", "outsourcing",
- "outsourcade", "outsourced",
- "outsoursing", "outsourcing",
- "overbraking", "overbearing",
- "overcapping", "overlapping",
- "overcharing", "overarching",
- "overclcoked", "overclocked",
- "overclicked", "overclocked",
- "overcloaked", "overclocked",
- "overclocing", "overclocking",
- "overclockig", "overclocking",
- "overclocled", "overclocked",
- "overcomeing", "overcoming",
- "overcomming", "overcoming",
- "overeaching", "overarching",
- "overfapping", "overlapping",
- "overheading", "overheating",
- "overhooking", "overlooking",
- "overhwelmed", "overwhelmed",
- "overkapping", "overlapping",
- "overklocked", "overclocked",
- "overlapsing", "overlapping",
- "overlcocked", "overclocked",
- "overlcoking", "overlooking",
- "overlooming", "overlooking",
- "overloooked", "overlooked",
- "overlordess", "overlords",
- "overmapping", "overlapping",
- "overpooling", "overlooking",
- "overpovered", "overpowered",
- "overpoweing", "overpowering",
- "overreacing", "overreacting",
- "overreactin", "overreaction",
- "overreacton", "overreaction",
- "overshaddow", "overshadowed",
- "overshadowd", "overshadowed",
- "overtapping", "overlapping",
- "overthining", "overthinking",
- "overthinkig", "overthinking",
- "overvlocked", "overclocked",
- "overwealmed", "overwhelmed",
- "overwelming", "overwhelming",
- "overwhelemd", "overwhelmed",
- "overwhelimg", "overwhelm",
- "overwheling", "overwhelming",
- "overwhemled", "overwhelmed",
- "overwhlemed", "overwhelmed",
- "overwritted", "overwrite",
- "pakistanais", "pakistani",
- "pakistanezi", "pakistani",
- "palceholder", "placeholder",
- "palesitnian", "palestinians",
- "palestenian", "palestinian",
- "palestinain", "palestinians",
- "palestinans", "palestinians",
- "palestinier", "palestine",
- "palistinian", "palestinian",
- "palythrough", "playthrough",
- "papanicalou", "papanicolaou",
- "parachutage", "parachute",
- "paragraphes", "paragraphs",
- "paramedicks", "paramedics",
- "paramedicos", "paramedics",
- "parameteres", "parameters",
- "paranthesis", "parenthesis",
- "parapharsed", "paraphrase",
- "paraprhased", "paraphrase",
- "parasitisme", "parasites",
- "parenthasis", "parenthesis",
- "parenthesys", "parentheses",
- "parenthises", "parenthesis",
- "parenthisis", "parenthesis",
- "parliamenty", "parliamentary",
- "parntership", "partnership",
- "parrallelly", "parallelly",
- "partecipant", "participant",
- "partecipate", "participate",
- "parternship", "partnership",
- "partiarchal", "patriarchal",
- "particapate", "participate",
- "particiapte", "participate",
- "participait", "participant",
- "participans", "participants",
- "participare", "participate",
- "participatd", "participant",
- "participati", "participant",
- "participats", "participant",
- "participent", "participant",
- "particpiate", "participated",
- "particually", "particularly",
- "particulaly", "particularly",
- "particulary", "particularly",
- "partnetship", "partnership",
- "partonizing", "patronizing",
- "passionatly", "passionately",
- "passionetly", "passionately",
- "passionnate", "passionate",
- "passporters", "passports",
- "pathologial", "pathological",
- "patriarchia", "patriarchal",
- "patriarcial", "patriarchal",
- "patriarical", "patriarchal",
- "patriotisch", "patriotic",
- "patriotisim", "patriotism",
- "patriottism", "patriotism",
- "patronozing", "patronizing",
- "peacefullly", "peacefully",
- "pedestirans", "pedestrians",
- "pedestrains", "pedestrians",
- "pedophilies", "pedophile",
- "pedophilles", "pedophile",
- "penetracion", "penetration",
- "penetrading", "penetrating",
- "penetrarion", "penetration",
- "penninsular", "peninsular",
- "pennsylvnia", "pennsylvania",
- "pepperocini", "pepperoni",
- "percantages", "percentages",
- "percautions", "precautions",
- "percentille", "percentile",
- "percpetions", "perceptions",
- "percusssion", "percussion",
- "perdicament", "predicament",
- "perdictable", "predictable",
- "perdictions", "predictions",
- "perephirals", "peripherals",
- "pereptually", "perpetually",
- "perferences", "preferences",
- "perfomrance", "performances",
- "perforamnce", "performances",
- "performaces", "performances",
- "performacne", "performances",
- "performanes", "performances",
- "performanse", "performances",
- "performence", "performance",
- "performnace", "performances",
- "perfromance", "performance",
- "perhiperals", "peripherals",
- "perihperals", "peripherals",
- "periodicaly", "periodically",
- "periperhals", "peripherals",
- "periphereal", "peripheral",
- "peripherial", "peripheral",
- "periphirals", "peripherals",
- "periphreals", "peripherals",
- "periphrials", "peripherals",
- "perjorative", "pejorative",
- "perliminary", "preliminary",
- "permamently", "permanently",
- "permanantly", "permanently",
- "permaturely", "prematurely",
- "permenantly", "permanently",
- "permenently", "permanently",
- "perminantly", "permanently",
- "perminently", "permanently",
- "permisisons", "permissions",
- "permissable", "permissible",
- "permisssion", "permissions",
- "pernamently", "permanently",
- "perosnality", "personality",
- "perparation", "preparation",
- "perpatrated", "perpetrated",
- "perpatrator", "perpetrator",
- "perpatuated", "perpetuated",
- "perpatuates", "perpetuates",
- "perpertated", "perpetuated",
- "perpertator", "perpetrators",
- "perpetraded", "perpetrated",
- "perpetrador", "perpetrator",
- "perpetraron", "perpetrator",
- "perpetrater", "perpetrator",
- "perpetuaded", "perpetuated",
- "perpetutate", "perpetuate",
- "perpetuties", "perpetuates",
- "perpitrated", "perpetrated",
- "perpitrator", "perpetrator",
- "perpretated", "perpetrated",
- "perpretator", "perpetrators",
- "perpsective", "perspective",
- "perputrator", "perpetrator",
- "perputually", "perpetually",
- "perputuated", "perpetuated",
- "perputuates", "perpetuates",
- "perrogative", "prerogative",
- "persceptive", "perspectives",
- "persectuion", "persecution",
- "persecucion", "persecution",
- "persecusion", "persecution",
- "persecutted", "persecuted",
- "persepctive", "perspective",
- "persicution", "persecution",
- "persistance", "persistence",
- "persistante", "persistent",
- "persistense", "persistence",
- "persistente", "persistence",
- "personhoood", "personhood",
- "perspecitve", "perspective",
- "perspectief", "perspective",
- "perspektive", "perspective",
- "persuassion", "persuasion",
- "persuassive", "persuasive",
- "persucution", "persecution",
- "persumption", "presumption",
- "pertubation", "perturbation",
- "pessimestic", "pessimistic",
- "pharamcists", "pharmacist",
- "phenomenona", "phenomena",
- "philadelpha", "philadelphia",
- "philadelpia", "philadelphia",
- "philiphines", "philippines",
- "philippenes", "philippines",
- "philippenis", "philippines",
- "philippides", "philippines",
- "philippinas", "philippines",
- "philippinos", "philippines",
- "philisopher", "philosopher",
- "phillipines", "philippines",
- "philosipher", "philosopher",
- "philosopers", "philosophers",
- "philosophae", "philosopher",
- "philosophia", "philosophical",
- "philosopies", "philosophies",
- "philosphies", "philosophies",
- "philospoher", "philosopher",
- "photograhed", "photographed",
- "photograher", "photographer",
- "photograhic", "photographic",
- "photograhpy", "photography",
- "photograped", "photographed",
- "photograper", "photographer",
- "photograpgh", "photographs",
- "photograpic", "photographic",
- "photogrpahs", "photographs",
- "photogrpahy", "photography",
- "physcedelic", "psychedelic",
- "physciatric", "psychiatric",
- "physcopaths", "psychopaths",
- "piankillers", "painkillers",
- "pilgrimmage", "pilgrimage",
- "pitchforcks", "pitchforks",
- "pitchforkes", "pitchforks",
- "plaestinian", "palestinian",
- "plagiariasm", "plagiarism",
- "planeswaker", "planeswalker",
- "planeswaler", "planeswalker",
- "planeswalkr", "planeswalker",
- "platfromers", "platformer",
- "playhtrough", "playthrough",
- "playthorugh", "playthrough",
- "playthourgh", "playthrough",
- "playthroguh", "playthroughs",
- "playthrougs", "playthroughs",
- "playthrouhg", "playthroughs",
- "playthtough", "playthrough",
- "playtrhough", "playthrough",
- "ploretariat", "proletariat",
- "policitally", "politically",
- "policitians", "politicians",
- "politicains", "politicians",
- "politicanti", "politician",
- "politiciens", "politicians",
- "politiicans", "politician",
- "polititians", "politicians",
- "polyphonyic", "polyphonic",
- "pomegranite", "pomegranate",
- "popluations", "populations",
- "poportional", "proportional",
- "popoulation", "population",
- "porjectiles", "projectiles",
- "porletariat", "proletariat",
- "pornagraphy", "pornography",
- "pornograghy", "pornography",
- "pornograhpy", "pornography",
- "pornograpgy", "pornography",
- "pornogrophy", "pornography",
- "pornogrpahy", "pornography",
- "porportions", "proportions",
- "portestants", "protestants",
- "portuguease", "portuguese",
- "portuguesse", "portuguese",
- "positionial", "positional",
- "positionnal", "positional",
- "positionned", "positioned",
- "positiveity", "positivity",
- "positiviely", "positively",
- "positivisme", "positives",
- "positivisty", "positivity",
- "positivitey", "positivity",
- "positivitiy", "positivity",
- "possesseurs", "possesses",
- "possesssion", "possessions",
- "possestions", "possessions",
- "possiblilty", "possibility",
- "potencially", "potentially",
- "potentailly", "potentially",
- "powerhourse", "powerhouse",
- "powerlifing", "powerlifting",
- "powerliftng", "powerlifting",
- "pracitcally", "practically",
- "practicarlo", "practical",
- "practioners", "practitioners",
- "practitions", "practitioners",
- "pragmatisch", "pragmatic",
- "precausions", "precautions",
- "precedessor", "predecessor",
- "precendence", "precedence",
- "precentages", "percentages",
- "preconceved", "preconceived",
- "preconcieve", "preconceived",
- "precuations", "precautions",
- "predacessor", "predecessor",
- "predecesser", "predecessor",
- "predections", "predictions",
- "predescesor", "predecessors",
- "predesessor", "predecessors",
- "predesposed", "predisposed",
- "predessecor", "predecessor",
- "predicatble", "predictable",
- "predicement", "predicament",
- "predicessor", "predecessor",
- "prediciment", "predicament",
- "predicitons", "predictions",
- "predictible", "predictable",
- "predictious", "predictions",
- "predictment", "predicament",
- "predisposte", "predisposed",
- "predocessor", "predecessor",
- "preferabbly", "preferably",
- "preferabely", "preferable",
- "preferabley", "preferably",
- "preferablly", "preferably",
- "preferances", "preferences",
- "preferenser", "preferences",
- "preferental", "preferential",
- "preferentes", "preferences",
- "preferrably", "preferably",
- "preferrring", "preferring",
- "preformance", "performance",
- "pregnanices", "pregnancies",
- "pregnencies", "pregnancies",
- "pregorative", "prerogative",
- "preipherals", "peripherals",
- "prejudicies", "prejudice",
- "preleminary", "preliminary",
- "prelimanary", "preliminary",
- "prelimenary", "preliminary",
- "premanently", "permanently",
- "prematuraly", "prematurely",
- "prematurily", "prematurely",
- "prematurley", "prematurely",
- "premilinary", "preliminary",
- "premissible", "permissible",
- "premissions", "permissions",
- "preorderded", "preordered",
- "preorderers", "preorders",
- "preparacion", "preparation",
- "preperation", "preparation",
- "prepetrated", "perpetrated",
- "prepetrator", "perpetrator",
- "prepetually", "perpetually",
- "prepetuated", "perpetuated",
- "prepetuates", "perpetuates",
- "preporation", "preparation",
- "preposterus", "preposterous",
- "prerequesit", "prerequisite",
- "prerequiste", "prerequisite",
- "prerequites", "prerequisite",
- "prerogitive", "prerogative",
- "prerogotive", "prerogative",
- "prescripton", "prescription",
- "presecution", "persecution",
- "presedintia", "presidential",
- "presentaion", "presentation",
- "presentatin", "presentations",
- "preservaton", "preservation",
- "preservered", "preserved",
- "presidencey", "presidency",
- "presidental", "presidential",
- "presidentcy", "presidency",
- "presistence", "persistence",
- "presitgious", "prestigious",
- "presitigous", "prestigious",
- "presomption", "presumption",
- "prespective", "perspective",
- "pressureing", "pressuring",
- "prestegious", "prestigious",
- "prestigeous", "prestigious",
- "prestigieus", "prestigious",
- "prestigiosa", "prestigious",
- "prestigiose", "prestigious",
- "prestigiosi", "prestigious",
- "prestigioso", "prestigious",
- "prestiguous", "prestigious",
- "presumabely", "presumably",
- "presumabley", "presumably",
- "presumptous", "presumptuous",
- "presumptuos", "presumptuous",
- "pretencious", "pretentious",
- "pretendendo", "pretended",
- "pretensious", "pretentious",
- "pretentieus", "pretentious",
- "prevailaing", "prevailing",
- "prevailling", "prevailing",
- "preventitve", "preventative",
- "preventivno", "prevention",
- "primatively", "primitively",
- "princessses", "princesses",
- "principales", "principles",
- "principalis", "principals",
- "principielt", "principle",
- "privatizied", "privatized",
- "priveledges", "privileges",
- "privelleges", "privileges",
- "privilegeds", "privileges",
- "privilegied", "privileged",
- "privilegien", "privilege",
- "privilegier", "privilege",
- "privilegies", "privilege",
- "proactivley", "proactive",
- "probabilaty", "probability",
- "probabilite", "probabilities",
- "probalibity", "probability",
- "probelmatic", "problematic",
- "problamatic", "problematic",
- "problimatic", "problematic",
- "problomatic", "problematic",
- "proccedings", "proceedings",
- "proccessing", "processing",
- "proceddings", "proceedings",
- "procedureal", "procedural",
- "procedurial", "procedural",
- "procedurile", "procedure",
- "processesor", "processors",
- "processeurs", "processes",
- "processsors", "processors",
- "procrastion", "procreation",
- "procriation", "procreation",
- "prodcutions", "productions",
- "prodictions", "productions",
- "producerats", "producers",
- "producitons", "productions",
- "productioin", "productions",
- "productivos", "productions",
- "productivty", "productivity",
- "produktions", "productions",
- "professinal", "professional",
- "professionl", "professionals",
- "professoras", "professors",
- "professores", "professors",
- "professorin", "profession",
- "professsion", "professions",
- "proficiancy", "proficiency",
- "proficienct", "proficient",
- "proficienty", "proficiency",
- "proficinecy", "proficiency",
- "profitabile", "profitable",
- "progerssion", "progressions",
- "progerssive", "progressives",
- "programable", "programmable",
- "programmare", "programmer",
- "programmars", "programmers",
- "programmate", "programme",
- "programmets", "programmers",
- "programmeur", "programmer",
- "programmier", "programmer",
- "programmmed", "programme",
- "programmmer", "programme",
- "progresison", "progressions",
- "progressers", "progresses",
- "progressief", "progressive",
- "progressino", "progressions",
- "progressivo", "progression",
- "progressoin", "progressions",
- "progressvie", "progressives",
- "prohabition", "prohibition",
- "prohibation", "prohibition",
- "prohibicion", "prohibition",
- "prohibiteds", "prohibits",
- "prohibitied", "prohibited",
- "prohibitifs", "prohibits",
- "prohibitivo", "prohibition",
- "prohibitons", "prohibits",
- "prohibitted", "prohibited",
- "projecticle", "projectile",
- "projectives", "projectiles",
- "projectlies", "projectiles",
- "prolateriat", "proletariat",
- "proletariet", "proletariat",
- "proletariot", "proletariat",
- "proletaryat", "proletariat",
- "proleteriat", "proletariat",
- "prolitariat", "proletariat",
- "prologomena", "prolegomena",
- "promenantly", "prominently",
- "promenently", "prominently",
- "prometheius", "prometheus",
- "prometheous", "prometheus",
- "promethesus", "prometheus",
- "prometheyus", "prometheus",
- "promimently", "prominently",
- "prominantly", "prominently",
- "prominately", "prominently",
- "promiscious", "promiscuous",
- "promocional", "promotional",
- "promsicuous", "promiscuous",
- "pronography", "pornography",
- "pronoucning", "pronouncing",
- "pronounched", "pronounced",
- "pronunciato", "pronunciation",
- "propaganada", "propaganda",
- "properitary", "proprietary",
- "propertiary", "proprietary",
- "propertions", "proportions",
- "prophechies", "prophecies",
- "propiertary", "proprietary",
- "propogation", "propagation",
- "proponenets", "proponents",
- "proponentes", "proponents",
- "proporition", "proposition",
- "proportians", "proportions",
- "proportinal", "proportional",
- "proposicion", "proposition",
- "propositivo", "proposition",
- "propostions", "proportions",
- "propreitary", "proprietary",
- "propriatary", "proprietary",
- "propriatery", "proprietary",
- "propriatory", "proprietary",
- "proprietery", "proprietary",
- "proprietory", "proprietary",
- "propriotary", "proprietary",
- "proprotions", "proportions",
- "propsective", "prospective",
- "propulstion", "propulsion",
- "prosectuion", "prosecution",
- "prosectuors", "prosecutors",
- "prosecuters", "prosecutors",
- "prosicution", "prosecution",
- "prosocution", "prosecution",
- "prosperious", "prosperous",
- "prospertity", "prosperity",
- "prospettive", "prospective",
- "prostethics", "prosthetic",
- "prosthethic", "prosthetic",
- "prostitites", "prostitutes",
- "prostitiute", "prostitute",
- "prostituate", "prostitute",
- "prostitudes", "prostitutes",
- "prostituees", "prostitutes",
- "prostituion", "prostitution",
- "prostitures", "prostitutes",
- "prostitutas", "prostitutes",
- "prostitutie", "prostitute",
- "prostitutin", "prostitution",
- "prostitutke", "prostitutes",
- "prostituton", "prostitution",
- "prostitutos", "prostitutes",
- "protability", "portability",
- "protaganist", "protagonist",
- "protaginist", "protagonist",
- "protagnoist", "protagonist",
- "protagoinst", "protagonists",
- "protagonits", "protagonists",
- "protagonsit", "protagonists",
- "protectings", "protections",
- "protectoras", "protectors",
- "protectores", "protectors",
- "protectrons", "protections",
- "protelariat", "proletariat",
- "protestents", "protestants",
- "protistants", "protestants",
- "protoganist", "protagonist",
- "protogonist", "protagonist",
- "protostants", "protestants",
- "protototype", "prototype",
- "provacative", "provocative",
- "provacotive", "provocative",
- "provicative", "provocative",
- "providencie", "providence",
- "provinciaal", "provincial",
- "provinicial", "provincial",
- "provisiones", "provisions",
- "provoactive", "provocative",
- "provocatief", "provocative",
- "provocitive", "provocative",
- "provocotive", "provocative",
- "provokative", "provocative",
- "pscyhedelic", "psychedelic",
- "pscyhiatric", "psychiatric",
- "pscyhopaths", "psychopaths",
- "pshyciatric", "psychiatric",
- "pshycopaths", "psychopaths",
- "psychaitric", "psychiatric",
- "psychedilic", "psychedelic",
- "psychedleic", "psychedelics",
- "psychiatist", "psychiatrist",
- "psychidelic", "psychedelic",
- "psychodelic", "psychedelic",
- "psychopants", "psychopaths",
- "psychopatch", "psychopath",
- "psychopatic", "psychopathic",
- "psychotisch", "psychotic",
- "psychriatic", "psychiatric",
- "publikation", "publication",
- "punctiation", "punctuation",
- "puncutation", "punctuation",
- "punshiments", "punishments",
- "punsihments", "punishments",
- "purchaseing", "purchasing",
- "purchashing", "purchasing",
- "purposefuly", "purposefully",
- "pyschedelic", "psychedelic",
- "pyschiatric", "psychiatric",
- "pyschopaths", "psychopaths",
- "qaurterback", "quarterback",
- "qualificato", "qualification",
- "qualifieres", "qualifiers",
- "quantitaive", "quantitative",
- "quantitatve", "quantitative",
- "quantitites", "quantities",
- "quantitties", "quantities",
- "quarantaine", "quarantine",
- "quarantenni", "quarantine",
- "quartercask", "quarterbacks",
- "quesitoning", "questioning",
- "questionned", "questioned",
- "questonable", "questionable",
- "radiaoctive", "radioactive",
- "radioactice", "radioactive",
- "radioactief", "radioactive",
- "radioaktive", "radioactive",
- "radiocative", "radioactive",
- "raidoactive", "radioactive",
- "reaccurring", "recurring",
- "reactionair", "reactionary",
- "realibility", "reliability",
- "realistisch", "realistic",
- "reaserchers", "researchers",
- "reaserching", "researching",
- "reasonabley", "reasonably",
- "reasonablly", "reasonably",
- "reassureing", "reassuring",
- "reassurring", "reassuring",
- "rebuildling", "rebuilding",
- "rebuplicans", "republicans",
- "reccomended", "recommended",
- "receptionst", "receptionist",
- "recgonition", "recognition",
- "recgonizing", "recognizing",
- "rechargable", "rechargeable",
- "recipientes", "recipients",
- "reciporcate", "reciprocate",
- "recipricate", "reciprocate",
- "reciprocant", "reciprocate",
- "reciprocite", "reciprocate",
- "recivership", "receivership",
- "reclutantly", "reluctantly",
- "recognicing", "recognizing",
- "recognision", "recognition",
- "recomending", "recommending",
- "recommandes", "recommends",
- "recommendes", "recommends",
- "recommented", "recommended",
- "reconcilled", "reconcile",
- "recongition", "recognition",
- "recongizing", "recognizing",
- "reconsidder", "reconsider",
- "recrational", "recreational",
- "recrutiment", "recruitment",
- "rectangluar", "rectangular",
- "rectangualr", "rectangular",
- "rectengular", "rectangular",
- "recuritment", "recruitment",
- "redundantcy", "redundancy",
- "reevalulate", "reevaluate",
- "reevalutate", "reevaluate",
- "reevaulated", "reevaluate",
- "refelctions", "reflections",
- "referancing", "referencing",
- "refereneced", "referenced",
- "refereneces", "references",
- "referincing", "referencing",
- "referrences", "references",
- "reflectivos", "reflections",
- "refreshener", "refresher",
- "refrubished", "refurbished",
- "refubrished", "refurbished",
- "refurbushed", "refurbished",
- "regeneratin", "regeneration",
- "regeneraton", "regeneration",
- "registerdns", "registers",
- "registeries", "registers",
- "registerred", "registered",
- "registraion", "registration",
- "regocnition", "recognition",
- "regresssion", "regression",
- "regresssive", "regressive",
- "regualtions", "regulations",
- "regulationg", "regulating",
- "regulatiors", "regulators",
- "reinassance", "renaissance",
- "reinforcemt", "reinforcement",
- "reinfornced", "reinforced",
- "reinitalise", "reinitialise",
- "reinitalize", "reinitialize",
- "reinstaling", "reinstalling",
- "reinstallng", "reinstalling",
- "reisntalled", "reinstalled",
- "relaibility", "reliability",
- "relatiation", "retaliation",
- "relationshp", "relationships",
- "relativiser", "relatives",
- "relativisme", "relatives",
- "relativitiy", "relativity",
- "relativitly", "relativity",
- "relcutantly", "reluctantly",
- "relentlesly", "relentlessly",
- "relentlessy", "relentlessly",
- "relevations", "revelations",
- "relfections", "reflections",
- "religeously", "religiously",
- "religionens", "religions",
- "religioners", "religions",
- "relpacement", "replacement",
- "reluctently", "reluctantly",
- "remarkabley", "remarkably",
- "remarkablly", "remarkably",
- "remasterred", "remastered",
- "remembrence", "remembrance",
- "reminescent", "reminiscent",
- "reminicient", "reminiscent",
- "reminiscant", "reminiscent",
- "reminiscint", "reminiscent",
- "reminscient", "reminiscent",
- "reminsicent", "reminiscent",
- "renaiisance", "renaissance",
- "renaiscance", "renaissance",
- "renaissanse", "renaissance",
- "renaissence", "renaissance",
- "renassaince", "renaissance",
- "renassiance", "renaissance",
- "reniassance", "renaissance",
- "rennovating", "renovating",
- "rennovation", "renovation",
- "repalcement", "replacement",
- "repbulicans", "republicans",
- "repeateadly", "repeatedly",
- "repectively", "respectively",
- "repersented", "represented",
- "replacemnet", "replacements",
- "replacemnts", "replacements",
- "repleacable", "replaceable",
- "repositiory", "repository",
- "representas", "represents",
- "representes", "represents",
- "represssion", "repression",
- "reproducion", "reproduction",
- "reproducive", "reproductive",
- "repsectable", "respectable",
- "repsonsible", "responsible",
- "repsonsibly", "responsibly",
- "republcians", "republicans",
- "republician", "republican",
- "republicons", "republicans",
- "repuglicans", "republicans",
- "requeriment", "requirement",
- "requierment", "requirements",
- "resemblence", "resemblance",
- "resemblense", "resembles",
- "reserachers", "researchers",
- "reseraching", "researching",
- "resgination", "resignation",
- "residencial", "residential",
- "residentail", "residential",
- "residentual", "residential",
- "resignacion", "resignation",
- "resignating", "resignation",
- "resignement", "resignment",
- "resignition", "resignation",
- "resintalled", "reinstalled",
- "resistansen", "resistances",
- "resistanses", "resistances",
- "resistences", "resistances",
- "resistnaces", "resistances",
- "resoltuions", "resolutions",
- "resotration", "restoration",
- "resoultions", "resolutions",
- "respecatble", "respectable",
- "respectabil", "respectable",
- "respectfuly", "respectfully",
- "respectible", "respectable",
- "respectivly", "respectively",
- "respectuful", "respectful",
- "respektable", "respectable",
- "resperatory", "respiratory",
- "resperitory", "respiratory",
- "respiritory", "respiratory",
- "respitatory", "respiratory",
- "responcible", "responsible",
- "responcibly", "responsibly",
- "respondendo", "responded",
- "responisble", "responsible",
- "responisbly", "responsibly",
- "responsable", "responsible",
- "responsably", "responsibly",
- "responsbile", "responsible",
- "responsbily", "responsibly",
- "responsibel", "responsibly",
- "responsibil", "responsibly",
- "responsivle", "responsive",
- "resporatory", "respiratory",
- "respository", "repository",
- "respriatory", "respiratory",
- "ressembling", "resembling",
- "ressurected", "resurrected",
- "restaraunts", "restaurants",
- "restaruants", "restaurants",
- "restauraunt", "restaurant",
- "restaurents", "restaurants",
- "resteraunts", "restaurants",
- "restirction", "restriction",
- "restorarion", "restoration",
- "restorating", "restoration",
- "restrainted", "restrained",
- "restrective", "restrictive",
- "restriccion", "restriction",
- "restricitng", "restricting",
- "restriciton", "restrictions",
- "restricitve", "restrictive",
- "restricteds", "restricts",
- "restricters", "restricts",
- "restrictied", "restrictive",
- "restrictifs", "restricts",
- "restrictins", "restricts",
- "restrictios", "restricts",
- "restrictivo", "restriction",
- "restrictons", "restricts",
- "restriktion", "restriction",
- "restriktive", "restrictive",
- "restrittive", "restrictive",
- "restructing", "restricting",
- "restruction", "restriction",
- "restuarants", "restaurants",
- "resturaunts", "restaurants",
- "resurecting", "resurrecting",
- "resurrecion", "resurrection",
- "retailation", "retaliation",
- "retalitated", "retaliated",
- "retardathon", "retardation",
- "retardating", "retardation",
- "retardatron", "retardation",
- "retartation", "retardation",
- "retirbution", "retribution",
- "retrebution", "retribution",
- "retribucion", "retribution",
- "retribuiton", "retribution",
- "retributivo", "retribution",
- "retribvtion", "retribution",
- "retrobution", "retribution",
- "retrubution", "retribution",
- "revealtions", "revelations",
- "revelaitons", "revelations",
- "revolations", "revolutions",
- "revoultions", "revolutions",
- "ridiculious", "ridiculous",
- "ridiculosly", "ridiculously",
- "ridiculouly", "ridiculously",
- "ridiculousy", "ridiculously",
- "rightfullly", "rightfully",
- "rolepalying", "roleplaying",
- "romanticaly", "romantically",
- "roundabaout", "roundabout",
- "roundabount", "roundabout",
- "rudimentery", "rudimentary",
- "rudimentory", "rudimentary",
- "ruidmentary", "rudimentary",
- "sacrifacing", "sacrificing",
- "sacrificare", "sacrifice",
- "sacrificied", "sacrifice",
- "sacrificies", "sacrifice",
- "sacrifieced", "sacrificed",
- "sacrifising", "sacrificing",
- "sacrifizing", "sacrificing",
- "salughtered", "slaughtered",
- "sanctionned", "sanctioned",
- "sarcastisch", "sarcastic",
- "saskatchewn", "saskatchewan",
- "saskatchwan", "saskatchewan",
- "satisfacion", "satisfaction",
- "satisfacory", "satisfactory",
- "scandanavia", "scandinavia",
- "scandanivia", "scandinavian",
- "scandenavia", "scandinavia",
- "scandianvia", "scandinavian",
- "scandimania", "scandinavia",
- "scandinaiva", "scandinavian",
- "scandinavan", "scandinavian",
- "scandivania", "scandinavian",
- "scandonavia", "scandinavia",
- "scarificing", "sacrificing",
- "scheduleing", "scheduling",
- "schedulling", "scheduling",
- "schoalrship", "scholarships",
- "scholarhips", "scholarship",
- "scholarstic", "scholastic",
- "scholership", "scholarship",
- "scholorship", "scholarship",
- "scientiests", "scientists",
- "scnadinavia", "scandinavia",
- "scrambleing", "scrambling",
- "screenshoot", "screenshot",
- "seamlessley", "seamlessly",
- "sedentarity", "sedentary",
- "seflishness", "selfishness",
- "segergation", "segregation",
- "segragation", "segregation",
- "segregacion", "segregation",
- "segretation", "segregation",
- "segrigation", "segregation",
- "selectivley", "selectively",
- "selfeshness", "selfishness",
- "senitmental", "sentimental",
- "sensacional", "sensational",
- "sensasional", "sensational",
- "sensationel", "sensational",
- "sensetional", "sensational",
- "sensitivety", "sensitivity",
- "sentamental", "sentimental",
- "sentemental", "sentimental",
- "sentenceing", "sentencing",
- "sentimentos", "sentiments",
- "sentimentul", "sentimental",
- "separatedly", "separately",
- "separatelly", "separately",
- "separatisme", "separates",
- "separatiste", "separates",
- "sepculating", "speculating",
- "serivceable", "serviceable",
- "serviciable", "serviceable",
- "settelement", "settlement",
- "settelments", "settlements",
- "settlemetns", "settlements",
- "sexualizied", "sexualized",
- "shakeapeare", "shakespeare",
- "shakepseare", "shakespeare",
- "shakesphere", "shakespeare",
- "shanenigans", "shenanigans",
- "shareholdes", "shareholders",
- "sharpeneing", "sharpening",
- "sharpenning", "sharpening",
- "shatterling", "shattering",
- "shatterring", "shattering",
- "sheakspeare", "shakespeare",
- "shenadigans", "shenanigans",
- "shenanagans", "shenanigans",
- "shenanagins", "shenanigans",
- "shenanegans", "shenanigans",
- "shenanegins", "shenanigans",
- "shenangians", "shenanigans",
- "shenanigens", "shenanigans",
- "shenanigins", "shenanigans",
- "shenenigans", "shenanigans",
- "sheninigans", "shenanigans",
- "shennaigans", "shenanigans",
- "shortenning", "shortening",
- "shortenting", "shortening",
- "signficiant", "significant",
- "signifantly", "significantly",
- "significane", "significance",
- "significato", "significant",
- "signifigant", "significant",
- "signifikant", "significant",
- "signitories", "signatories",
- "signularity", "singularity",
- "similarites", "similarities",
- "similarlity", "similarity",
- "similiarity", "similarity",
- "simluations", "simulations",
- "simplefying", "simplifying",
- "simplicitly", "simplicity",
- "simplifiing", "simplifying",
- "simplisitic", "simplistic",
- "simplyifing", "simplifying",
- "simualtions", "simulations",
- "simulatious", "simulations",
- "simultaneos", "simultaneous",
- "simultaneus", "simultaneous",
- "simultanous", "simultaneous",
- "singluarity", "singularity",
- "singualrity", "singularity",
- "singulairty", "singularity",
- "singularily", "singularity",
- "sitautional", "situational",
- "situacional", "situational",
- "situationly", "situational",
- "siutational", "situational",
- "skatebaords", "skateboard",
- "skateboader", "skateboard",
- "skepticisim", "skepticism",
- "skillshoots", "skillshots",
- "skillshosts", "skillshots",
- "slaugthered", "slaughtered",
- "slefishness", "selfishness",
- "sluaghtered", "slaughtered",
- "smarthpones", "smartphones",
- "snowboaring", "snowboarding",
- "snowbolling", "snowballing",
- "snowfalling", "snowballing",
- "socailizing", "socializing",
- "socialicing", "socializing",
- "socialistes", "socialists",
- "socialistos", "socialists",
- "socializare", "socialize",
- "sociapathic", "sociopathic",
- "sociologial", "sociological",
- "sociopathes", "sociopaths",
- "sociopathis", "sociopaths",
- "sociophatic", "sociopathic",
- "solidariety", "solidarity",
- "somethingis", "somethings",
- "sorrounding", "surrounding",
- "soundtrakcs", "soundtracks",
- "southamtpon", "southampton",
- "southanpton", "southampton",
- "southapmton", "southampton",
- "southernese", "southerners",
- "southerness", "southerners",
- "southernest", "southerners",
- "southernors", "southerners",
- "southmapton", "southampton",
- "southtampon", "southampton",
- "soveregnity", "sovereignty",
- "sovereighty", "sovereignty",
- "sovereingty", "sovereignty",
- "sovereinity", "sovereignty",
- "soveriegnty", "sovereignty",
- "soveriengty", "sovereignty",
- "soverignity", "sovereignty",
- "specailists", "specialists",
- "specailized", "specialized",
- "specailizes", "specializes",
- "specatcular", "spectacular",
- "specialiced", "specialized",
- "specialices", "specializes",
- "specialites", "specializes",
- "speciallist", "specialist",
- "speciallity", "specially",
- "speciallize", "specialize",
- "specialzied", "specialized",
- "specifcally", "specifically",
- "specificaly", "specifically",
- "specificato", "specification",
- "specificies", "specifics",
- "specifiying", "specifying",
- "specilaized", "specialize",
- "speciliazed", "specialize",
- "spectatores", "spectators",
- "spectatular", "spectacular",
- "spectauclar", "spectacular",
- "spectaulars", "spectaculars",
- "spectecular", "spectacular",
- "specualting", "speculating",
- "specualtion", "speculation",
- "specualtive", "speculative",
- "specularite", "speculative",
- "speculaties", "speculative",
- "spiritualiy", "spiritually",
- "spiritualty", "spirituality",
- "spirituella", "spiritually",
- "spirtiually", "spiritually",
- "spirutually", "spiritually",
- "spitirually", "spiritually",
- "sponatenous", "spontaneous",
- "sponatneous", "spontaneous",
- "sponsership", "sponsorship",
- "sponsorhips", "sponsorship",
- "sponsorhsip", "sponsorship",
- "sponsorshop", "sponsorship",
- "spontaenous", "spontaneous",
- "spontainous", "spontaneous",
- "spontaneuos", "spontaneous",
- "spontanious", "spontaneous",
- "sponteanous", "spontaneous",
- "sponteneous", "spontaneous",
- "spreadhseet", "spreadsheet",
- "spreadsheat", "spreadsheet",
- "spreadshets", "spreadsheets",
- "spreedsheet", "spreadsheet",
- "springfeild", "springfield",
- "springfiled", "springfield",
- "sprinklered", "sprinkled",
- "squirrelies", "squirrels",
- "squirrelius", "squirrels",
- "stabilizare", "stabilize",
- "stabilizied", "stabilize",
- "stabilizier", "stabilize",
- "stabilizies", "stabilize",
- "staggerring", "staggering",
- "staggerwing", "staggering",
- "stationairy", "stationary",
- "stationerad", "stationed",
- "stationnary", "stationary",
- "statisitcal", "statistical",
- "statisticly", "statistical",
- "statistisch", "statistics",
- "statsitical", "statistical",
- "stereotpyes", "stereotypes",
- "stereotying", "stereotyping",
- "steriotypes", "stereotypes",
- "steroetypes", "stereotypes",
- "steryotypes", "stereotypes",
- "stimluating", "stimulating",
- "stimualting", "stimulating",
- "stimualtion", "stimulation",
- "stimulantes", "stimulants",
- "stockpilled", "stockpile",
- "stormfrount", "stormfront",
- "storyteling", "storytelling",
- "straightden", "straightened",
- "straightend", "straightened",
- "straightmen", "straighten",
- "straightned", "straightened",
- "straightner", "straighten",
- "strangeshit", "strangest",
- "strategisch", "strategic",
- "strategiske", "strategies",
- "strawberies", "strawberries",
- "strawberrry", "strawberry",
- "strawbrerry", "strawberry",
- "strenghened", "strengthened",
- "strenghtend", "strengthen",
- "strenghtens", "strengthen",
- "strengtened", "strengthened",
- "structurels", "structures",
- "strugglebus", "struggles",
- "struggleing", "struggling",
- "stubborness", "stubbornness",
- "stutterring", "stuttering",
- "subcatagory", "subcategory",
- "subconscius", "subconscious",
- "subconscous", "subconscious",
- "subisdizing", "subsidizing",
- "subjectivly", "subjectively",
- "submergered", "submerged",
- "submisisons", "submissions",
- "subredddits", "subreddits",
- "subscirbers", "subscribers",
- "subscribbed", "subscribe",
- "subscribber", "subscriber",
- "subscriping", "subscribing",
- "subscriptin", "subscriptions",
- "subscripton", "subscription",
- "subsequenty", "subsequently",
- "subsidiezed", "subsidized",
- "subsidizied", "subsidized",
- "subsidizies", "subsidize",
- "subsiziding", "subsidizing",
- "subsquently", "subsequently",
- "subsrcibers", "subscribers",
- "substancial", "substantial",
- "substansial", "substantial",
- "substansive", "substantive",
- "substantied", "substantive",
- "substanties", "substantive",
- "substential", "substantial",
- "substitiute", "substitute",
- "substituded", "substituted",
- "substitudes", "substitutes",
- "substituion", "substitution",
- "substitures", "substitutes",
- "substitutie", "substitutes",
- "substitutos", "substitutes",
- "substitutue", "substitutes",
- "substracted", "subtracted",
- "suburburban", "suburban",
- "succesfully", "successfully",
- "successeurs", "successes",
- "successfull", "successful",
- "successfuly", "successfully",
- "successsion", "succession",
- "successully", "successfully",
- "succsesfull", "successfully",
- "sucessfully", "successfully",
- "sucseptible", "susceptible",
- "sufficently", "sufficiently",
- "suggestieve", "suggestive",
- "sumbissions", "submissions",
- "sunglassses", "sunglasses",
- "superceeded", "superseded",
- "superficiel", "superficial",
- "superfulous", "superfluous",
- "superhereos", "superhero",
- "superifical", "superficial",
- "superiorest", "superiors",
- "supermacist", "supremacist",
- "supermakert", "supermarkets",
- "supermakret", "supermarkets",
- "supermakter", "supermarkets",
- "supermarkts", "supermarkets",
- "supermaster", "supermarkets",
- "supernatual", "supernatural",
- "supersition", "supervision",
- "superstiton", "superstition",
- "supervisers", "supervisors",
- "supervisior", "supervisor",
- "suplimented", "supplemented",
- "supplaments", "supplements",
- "supplemetal", "supplemental",
- "supporteurs", "supporters",
- "supposedely", "supposedly",
- "supposidely", "supposedly",
- "supposingly", "supposedly",
- "suppresions", "suppression",
- "suppresssor", "suppressor",
- "supramacist", "supremacist",
- "supremacits", "supremacist",
- "supremasist", "supremacist",
- "supremicist", "supremacist",
- "suprimacist", "supremacist",
- "suprisingly", "surprisingly",
- "suprizingly", "surprisingly",
- "suroundings", "surroundings",
- "surpemacist", "supremacist",
- "surprisinly", "surprisingly",
- "surreptious", "surreptitious",
- "surroundign", "surroundings",
- "surroundigs", "surrounds",
- "surroundins", "surrounds",
- "surroundngs", "surrounds",
- "surveilence", "surveillance",
- "survivabily", "survivability",
- "susbtantial", "substantial",
- "susbtantive", "substantive",
- "suscepitble", "susceptible",
- "susceptable", "susceptible",
- "suscpetible", "susceptible",
- "susecptible", "susceptible",
- "suspectible", "susceptible",
- "suspiciosly", "suspiciously",
- "suspiciouly", "suspiciously",
- "suspiciouns", "suspicion",
- "suspicision", "suspicions",
- "suspicisons", "suspicions",
- "sustainible", "sustainable",
- "switerzland", "switzerland",
- "switserland", "switzerland",
- "switzlerand", "switzerland",
- "swizterland", "switzerland",
- "swtizerland", "switzerland",
- "symapthetic", "sympathetic",
- "symmertical", "symmetrical",
- "sympathatic", "sympathetic",
- "sympathiers", "sympathizers",
- "sympathsize", "sympathize",
- "sympethetic", "sympathetic",
- "symphatetic", "sympathetic",
- "symphatized", "sympathize",
- "symphatizer", "sympathizers",
- "symphatizes", "sympathize",
- "sympothetic", "sympathetic",
- "synthesasia", "synthesis",
- "synthesesia", "synthesis",
- "sypmathetic", "sympathetic",
- "tabelspoons", "tablespoons",
- "tablepsoons", "tablespoons",
- "tablespooon", "tablespoon",
- "tablesppons", "tablespoons",
- "tailgateing", "tailgating",
- "tailgatting", "tailgating",
- "tangentialy", "tangentially",
- "techincally", "technically",
- "techincians", "technicians",
- "techiniques", "techniques",
- "techncially", "technically",
- "technicalty", "technicality",
- "technichian", "technician",
- "technicials", "technicians",
- "techniciens", "technicians",
- "technitians", "technicians",
- "technnology", "technology",
- "technologia", "technological",
- "techticians", "technicians",
- "teleportato", "teleportation",
- "teleportion", "teleporting",
- "teleproting", "teleporting",
- "temeprature", "temperature",
- "temparament", "temperament",
- "temparature", "temperature",
- "temparement", "temperament",
- "tempearture", "temperatures",
- "temperamant", "temperament",
- "temperarily", "temporarily",
- "temperatues", "temperatures",
- "temperaturs", "temperatures",
- "temperatuur", "temperature",
- "temperement", "temperament",
- "tempermeant", "temperament",
- "tempertaure", "temperature",
- "temporairly", "temporarily",
- "temporaraly", "temporarily",
- "temporarity", "temporarily",
- "tempreature", "temperature",
- "temproarily", "temporarily",
- "tempurature", "temperature",
- "tepmorarily", "temporarily",
- "termanology", "terminology",
- "terminacion", "termination",
- "terminaison", "termination",
- "terminalogy", "terminology",
- "terminatior", "terminator",
- "terminatorn", "termination",
- "terminilogy", "terminology",
- "terminoligy", "terminology",
- "terratorial", "territorial",
- "terratories", "territories",
- "terretorial", "territorial",
- "terretories", "territories",
- "terrirorial", "territorial",
- "terrirories", "territories",
- "terriroties", "territories",
- "terristrial", "territorial",
- "territoires", "territories",
- "territorist", "terrorist",
- "territority", "territory",
- "terroristas", "terrorists",
- "terroristes", "terrorists",
- "terrorities", "territories",
- "terrotorial", "territorial",
- "terrotories", "territories",
- "testiclular", "testicular",
- "thankfullly", "thankfully",
- "thanksgivng", "thanksgiving",
- "theoligical", "theological",
- "theoratical", "theoretical",
- "theoreticly", "theoretical",
- "theoritical", "theoretical",
- "therapautic", "therapeutic",
- "therapeudic", "therapeutic",
- "therapeutuc", "therapeutic",
- "therapuetic", "therapeutic",
- "theraupetic", "therapeutic",
- "thereaputic", "therapeutic",
- "thereotical", "theoretical",
- "therepeutic", "therapeutic",
- "thermometor", "thermometer",
- "thermometre", "thermometer",
- "thermomiter", "thermometer",
- "thermomoter", "thermometer",
- "thermoneter", "thermometer",
- "thermostaat", "thermostat",
- "theroetical", "theoretical",
- "thoeretical", "theoretical",
- "threataning", "threatening",
- "threatended", "threatened",
- "threatining", "threatening",
- "throttleing", "throttling",
- "throughoput", "throughput",
- "throughtout", "throughout",
- "throughtput", "throughput",
- "thudnerbolt", "thunderbolt",
- "thunberbolt", "thunderbolt",
- "thunderblot", "thunderbolt",
- "thunderboat", "thunderbolt",
- "thunderbots", "thunderbolt",
- "thunderbowl", "thunderbolt",
- "thunderjolt", "thunderbolt",
- "thundervolt", "thunderbolt",
- "tightenting", "tightening",
- "tocuhscreen", "touchscreen",
- "torrentking", "torrenting",
- "torrentting", "torrenting",
- "torublesome", "troublesome",
- "torunaments", "tournaments",
- "totalitaran", "totalitarian",
- "totalitarni", "totalitarian",
- "touranments", "tournaments",
- "tournamnets", "tournaments",
- "tournemants", "tournaments",
- "tournements", "tournaments",
- "tournmanets", "tournaments",
- "tradicional", "traditional",
- "tradionally", "traditionally",
- "tradisional", "traditional",
- "traditionel", "traditional",
- "traditition", "tradition",
- "tragicallly", "tragically",
- "tramautized", "traumatized",
- "tramuatized", "traumatized",
- "trancendent", "transcendent",
- "trancending", "transcending",
- "tranclucent", "translucent",
- "trandgender", "transgender",
- "tranditions", "transitions",
- "tranistions", "transitions",
- "tranlastion", "translations",
- "tranlsating", "translating",
- "tranlsation", "translation",
- "tranluscent", "translucent",
- "trannsexual", "transsexual",
- "tranpshobic", "transphobic",
- "transaccion", "transaction",
- "transaciton", "transactions",
- "transalting", "translating",
- "transaltion", "translation",
- "transations", "transitions",
- "transcluent", "translucent",
- "transcripto", "transcription",
- "transctions", "transitions",
- "transculent", "translucent",
- "transending", "transcending",
- "transfender", "transgender",
- "transferers", "transfers",
- "transfering", "transferring",
- "transfersom", "transforms",
- "transfomers", "transforms",
- "transformas", "transforms",
- "transformes", "transformers",
- "transformis", "transforms",
- "transformus", "transforms",
- "transforums", "transforms",
- "transfromed", "transformed",
- "transfromer", "transformers",
- "transgemder", "transgender",
- "transgended", "transgendered",
- "transgenger", "transgender",
- "transgenres", "transgender",
- "transhpobic", "transphobic",
- "transisions", "transitions",
- "transisitor", "transistor",
- "transistion", "transition",
- "transistior", "transistor",
- "transitiond", "transitioned",
- "transitiong", "transitioning",
- "translatron", "translation",
- "translusent", "translucent",
- "transmatter", "transmitter",
- "transmision", "transmission",
- "transmissin", "transmissions",
- "transmisson", "transmission",
- "transmittor", "transmitter",
- "transmorged", "transformed",
- "transmutter", "transmitter",
- "transofrmed", "transformed",
- "transohobic", "transphobic",
- "transparant", "transparent",
- "transparecy", "transparency",
- "transpareny", "transparency",
- "transperant", "transparent",
- "transperent", "transparent",
- "transphonic", "transphobic",
- "transphopic", "transphobic",
- "transplanet", "transplant",
- "transporder", "transporter",
- "transporing", "transporting",
- "transportar", "transporter",
- "transportng", "transporting",
- "transportor", "transporter",
- "transseuxal", "transsexual",
- "transsexaul", "transsexual",
- "transsexuel", "transsexual",
- "transulcent", "translucent",
- "transylvnia", "transylvania",
- "tranzformer", "transformer",
- "tranzitions", "transitions",
- "tranzporter", "transporter",
- "trasncripts", "transcripts",
- "trasnferred", "transferred",
- "trasnformed", "transformed",
- "trasnformer", "transformer",
- "trasngender", "transgender",
- "trasnmitted", "transmitted",
- "trasnmitter", "transmitter",
- "trasnparent", "transparent",
- "trasnphobic", "transphobic",
- "trasnported", "transported",
- "trasnporter", "transporter",
- "traumatisch", "traumatic",
- "traumetized", "traumatized",
- "traumitized", "traumatized",
- "travellerhd", "travelled",
- "travellodge", "travelled",
- "tremendeous", "tremendous",
- "tremendious", "tremendous",
- "tremenduous", "tremendous",
- "trespessing", "trespassing",
- "tresspasing", "trespassing",
- "triggereing", "triggering",
- "triggerring", "triggering",
- "troubelsome", "troublesome",
- "truamatized", "traumatized",
- "trushworthy", "trustworthy",
- "trustowrthy", "trustworthy",
- "trustwhorty", "trustworthy",
- "trustworhty", "trustworthy",
- "truthfullly", "truthfully",
- "tupperwears", "tupperware",
- "turstworthy", "trustworthy",
- "ubiquitious", "ubiquitous",
- "ubiquituous", "ubiquitous",
- "ukraininans", "ukrainians",
- "ultimatelly", "ultimately",
- "unanimoulsy", "unanimous",
- "unappeasing", "unappealing",
- "unappeeling", "unappealing",
- "unathorised", "unauthorised",
- "unattendend", "unattended",
- "unatteneded", "unattended",
- "unattracive", "unattractive",
- "unauthoried", "unauthorized",
- "unavailible", "unavailable",
- "unavaliable", "unavailable",
- "unaviodable", "unavoidable",
- "unbalanaced", "unbalanced",
- "unbraikable", "unbreakable",
- "unbrakeable", "unbreakable",
- "unbreakabie", "unbreakable",
- "unbreakabke", "unbreakable",
- "unbreakbale", "unbreakable",
- "unbreakeble", "unbreakable",
- "unbrearable", "unbreakable",
- "uncensorred", "uncensored",
- "uncertaincy", "uncertainty",
- "uncertanity", "uncertainty",
- "uncertianty", "uncertainty",
- "unchangable", "unchangeable",
- "uncompetive", "uncompetitive",
- "unconcsious", "unconscious",
- "unconsicous", "unconscious",
- "uncouncious", "unconscious",
- "undeniabely", "undeniably",
- "undeniabley", "undeniably",
- "undeniablly", "undeniably",
- "undenialbly", "undeniably",
- "underestime", "underestimate",
- "undergating", "undertaking",
- "undergorund", "underground",
- "underheight", "underweight",
- "undermiming", "undermining",
- "undermindes", "undermines",
- "undernearth", "underneath",
- "underneight", "underweight",
- "underpining", "undermining",
- "underpowerd", "underpowered",
- "underpowred", "underpowered",
- "underratted", "underrated",
- "understannd", "understands",
- "understsand", "understands",
- "undertacker", "undertaker",
- "underwarter", "underwater",
- "underwieght", "underweight",
- "underwright", "underweight",
- "undesireble", "undesirable",
- "undesriable", "undesirable",
- "undetecable", "undetectable",
- "undiserable", "undesirable",
- "undoubedtly", "undoubtedly",
- "undoubetdly", "undoubtedly",
- "undoubtadly", "undoubtedly",
- "undoubtebly", "undoubtedly",
- "undoubtetly", "undoubtedly",
- "undreground", "underground",
- "unemployeed", "unemployed",
- "unemployent", "unemployment",
- "unemploymed", "unemployed",
- "unexpectdly", "unexpectedly",
- "unexpectely", "unexpectedly",
- "unfamilliar", "unfamiliar",
- "unfortuante", "unfortunate",
- "ungreatfull", "ungrateful",
- "unilateraly", "unilaterally",
- "unilaterlly", "unilaterally",
- "unimportent", "unimportant",
- "uninspiried", "uninspired",
- "uninstaling", "uninstalling",
- "uninstallng", "uninstalling",
- "uninteresed", "uninterested",
- "uniquesness", "uniqueness",
- "unisntalled", "uninstalled",
- "universella", "universally",
- "universites", "universities",
- "univesities", "universities",
- "unjustifyed", "unjustified",
- "unknowinlgy", "unknowingly",
- "unkowningly", "unknowingly",
- "unnecassary", "unnecessary",
- "unneccesary", "unnecessary",
- "unnecessery", "unnecessary",
- "unnecissary", "unnecessary",
- "unnessecary", "unnecessary",
- "unnistalled", "uninstalled",
- "unoriginial", "unoriginal",
- "unorigional", "unoriginal",
- "unoticeable", "unnoticeable",
- "unpleaseant", "unpleasant",
- "unportected", "unprotected",
- "unprepaired", "unprepared",
- "unpreparred", "unprepared",
- "unproducive", "unproductive",
- "unprotexted", "unprotected",
- "unqaulified", "unqualified",
- "unrealisitc", "unrealistic",
- "unrealsitic", "unrealistic",
- "unreasonbly", "unreasonably",
- "unregluated", "unregulated",
- "unregualted", "unregulated",
- "unregulared", "unregulated",
- "unrepentent", "unrepentant",
- "unresponive", "unresponsive",
- "unrestriced", "unrestricted",
- "unsettleing", "unsettling",
- "unsintalled", "uninstalled",
- "unsolicated", "unsolicited",
- "unsoliticed", "unsolicited",
- "unsolocited", "unsolicited",
- "unsubscirbe", "unsubscribe",
- "unsubscrbed", "unsubscribed",
- "unsubscried", "unsubscribed",
- "unsubscripe", "unsubscribe",
- "unsubscrive", "unsubscribe",
- "unsubscrube", "unsubscribe",
- "unsubsrcibe", "unsubscribe",
- "unsuccesful", "unsuccessful",
- "unsuccessul", "unsuccessful",
- "unsucesfuly", "unsuccessfully",
- "unsucessful", "unsuccessful",
- "unsunscribe", "unsubscribe",
- "unsuprising", "unsurprising",
- "unsuprizing", "unsurprising",
- "unsurprized", "unsurprised",
- "unsusbcribe", "unsubscribe",
- "unviersally", "universally",
- "unwarrented", "unwarranted",
- "utiliatrian", "utilitarian",
- "utilitatian", "utilitarian",
- "utiliterian", "utilitarian",
- "utilizacion", "utilization",
- "utilizaiton", "utilization",
- "utilizating", "utilization",
- "utiltiarian", "utilitarian",
- "vacciantion", "vaccination",
- "vaccinaties", "vaccinate",
- "vegaterians", "vegetarians",
- "vegetariens", "vegetarians",
- "vegetatians", "vegetarians",
- "vegeterians", "vegetarians",
- "vehementely", "vehemently",
- "venezuelean", "venezuela",
- "venezuelian", "venezuela",
- "ventalation", "ventilation",
- "ventelation", "ventilation",
- "ventialtion", "ventilation",
- "ventilacion", "ventilation",
- "verastility", "versatility",
- "verfication", "verification",
- "versatality", "versatility",
- "versitality", "versatility",
- "versitilaty", "versatility",
- "victorieuse", "victories",
- "victoriuous", "victorious",
- "vietnameese", "vietnamese",
- "vietnamesse", "vietnamese",
- "vietnamiese", "vietnamese",
- "vietnamnese", "vietnamese",
- "vigilanties", "vigilante",
- "visibillity", "visibility",
- "vocabularly", "vocabulary",
- "volatillity", "volatility",
- "volonteered", "volunteered",
- "volounteers", "volunteers",
- "volunatrily", "voluntarily",
- "voluntairly", "voluntarily",
- "volunteeers", "volunteers",
- "volunteraly", "voluntarily",
- "voluntereed", "volunteered",
- "volunterily", "voluntarily",
- "vulnerabile", "vulnerable",
- "wallpapaers", "wallpapers",
- "wallpappers", "wallpapers",
- "washingtion", "washington",
- "watermeleon", "watermelon",
- "waterprooof", "waterproof",
- "wavelegnths", "wavelength",
- "wavelenghth", "wavelength",
- "wavelenghts", "wavelength",
- "weaknessses", "weaknesses",
- "wellingston", "wellington",
- "wellingtion", "wellington",
- "westernerns", "westerners",
- "westmisnter", "westminster",
- "westmnister", "westminster",
- "westmonster", "westminster",
- "whisperered", "whispered",
- "whitholding", "withholding",
- "wikileakers", "wikileaks",
- "willingless", "willingness",
- "wincheseter", "winchester",
- "windsheilds", "windshield",
- "withdrawels", "withdrawals",
- "withdrawles", "withdrawals",
- "withhelding", "withholding",
- "withrdawing", "withdrawing",
- "witnesssing", "witnessing",
- "woodowrking", "woodworking",
- "woodworkign", "woodworking",
- "worhsipping", "worshipping",
- "workstaiton", "workstation",
- "workststion", "workstation",
- "worshopping", "worshipping",
- "xenophoblic", "xenophobic",
- "abandining", "abandoning",
- "abandonned", "abandoned",
- "abbreviato", "abbreviation",
- "abnoramlly", "abnormally",
- "abnormalty", "abnormally",
- "abnornally", "abnormally",
- "abominaton", "abomination",
- "abondoning", "abandoning",
- "aborginial", "aboriginal",
- "aboriganal", "aboriginal",
- "aborigenal", "aboriginal",
- "aborignial", "aboriginal",
- "aborigonal", "aboriginal",
- "aboroginal", "aboriginal",
- "aboslutely", "absolutely",
- "abosrption", "absorption",
- "abreviated", "abbreviated",
- "absintence", "abstinence",
- "absitnence", "abstinence",
- "absolument", "absolute",
- "absolutley", "absolutely",
- "absoprtion", "absorption",
- "absorbsion", "absorption",
- "absorbtion", "absorption",
- "absorpsion", "absorption",
- "absoultely", "absolutely",
- "abstanence", "abstinence",
- "abstenance", "abstinence",
- "abstenince", "abstinence",
- "abstinense", "abstinence",
- "abstinince", "abstinence",
- "absurditiy", "absurdity",
- "abundacies", "abundances",
- "academicas", "academics",
- "academicos", "academics",
- "academicus", "academics",
- "accdiently", "accidently",
- "accelarate", "accelerate",
- "accelerade", "accelerated",
- "accelerare", "accelerate",
- "accelerato", "acceleration",
- "acceleread", "accelerated",
- "accelertor", "accelerator",
- "accelorate", "accelerate",
- "acceptabel", "acceptable",
- "acceptabil", "acceptable",
- "acceptence", "acceptance",
- "accepterad", "accepted",
- "acceptible", "acceptable",
- "accerelate", "accelerated",
- "accesories", "accessories",
- "accessable", "accessible",
- "accessbile", "accessible",
- "accessoire", "accessories",
- "accessoirs", "accessories",
- "accicently", "accidently",
- "accidantly", "accidently",
- "accidebtly", "accidently",
- "accidenlty", "accidently",
- "accidentes", "accidents",
- "accidentky", "accidently",
- "accidently", "accidentally",
- "accidnetly", "accidently",
- "accomadate", "accommodate",
- "accomodate", "accommodate",
- "accompined", "accompanied",
- "accomplise", "accomplishes",
- "accompliss", "accomplishes",
- "accostumed", "accustomed",
- "accountent", "accountant",
- "accpetable", "acceptable",
- "accpetance", "acceptance",
- "accuastion", "accusation",
- "acculumate", "accumulate",
- "accumalate", "accumulate",
- "accumelate", "accumulate",
- "accumilate", "accumulate",
- "accumulare", "accumulate",
- "accumulato", "accumulation",
- "accumulted", "accumulated",
- "accuratley", "accurately",
- "accusating", "accusation",
- "accusition", "accusation",
- "accustumed", "accustomed",
- "acheivable", "achievable",
- "acheivment", "achievement",
- "acheviable", "achievable",
- "achiavable", "achievable",
- "achieveble", "achievable",
- "achievemnt", "achievement",
- "achievemts", "achieves",
- "achievents", "achieves",
- "achievment", "achievement",
- "achilleous", "achilles",
- "achiveable", "achievable",
- "achivement", "achievement",
- "acitvating", "activating",
- "acitvision", "activision",
- "acknowldge", "acknowledge",
- "acknowlede", "acknowledge",
- "acknowlege", "acknowledge",
- "acommodate", "accommodate",
- "acopalypse", "apocalypse",
- "acordingly", "accordingly",
- "acqauinted", "acquainted",
- "acquanited", "acquainted",
- "acquianted", "acquainted",
- "acquinated", "acquainted",
- "acquisiton", "acquisition",
- "acticating", "activating",
- "actication", "activation",
- "activacion", "activation",
- "activaters", "activates",
- "activiates", "activist",
- "activiites", "activist",
- "activisiom", "activism",
- "activisits", "activist",
- "activistas", "activists",
- "activistes", "activists",
- "activiting", "activating",
- "activizion", "activision",
- "acustommed", "accustomed",
- "adaptacion", "adaptation",
- "adaptating", "adaptation",
- "adaquetely", "adequately",
- "addicitons", "addictions",
- "addionally", "additionally",
- "additivies", "additive",
- "additivley", "additive",
- "addittions", "addictions",
- "addmission", "admission",
- "addresable", "addressable",
- "addressess", "addresses",
- "adequatley", "adequately",
- "adequetely", "adequately",
- "adequitely", "adequately",
- "adernaline", "adrenaline",
- "adjectivos", "adjectives",
- "adjustible", "adjustable",
- "admendment", "amendment",
- "administed", "administered",
- "administor", "administer",
- "administre", "administer",
- "administro", "administer",
- "adminsiter", "administer",
- "admissable", "admissible",
- "admittadly", "admittedly",
- "admittetly", "admittedly",
- "admittidly", "admittedly",
- "adolencent", "adolescent",
- "adolescant", "adolescent",
- "adolescene", "adolescence",
- "adoloscent", "adolescent",
- "adolsecent", "adolescent",
- "adpatation", "adaptation",
- "adreanline", "adrenaline",
- "adrelanine", "adrenaline",
- "adreneline", "adrenaline",
- "adreniline", "adrenaline",
- "adressable", "addressable",
- "advanteges", "advantages",
- "advatanges", "advantages",
- "adventrous", "adventurous",
- "adventrues", "adventures",
- "adventuers", "adventures",
- "adventuous", "adventurous",
- "adventuros", "adventurous",
- "adventurus", "adventurous",
- "adverticed", "advertised",
- "aestethics", "aesthetics",
- "aesthatics", "aesthetics",
- "aesthestic", "aesthetics",
- "affiliaton", "affiliation",
- "affilliate", "affiliate",
- "affirmitve", "affirmative",
- "afflcition", "affliction",
- "afflection", "affliction",
- "affliation", "affliction",
- "affliciton", "affliction",
- "afforadble", "affordable",
- "affordible", "affordable",
- "affortable", "affordable",
- "africaners", "africans",
- "africaness", "africans",
- "aftermaket", "aftermarket",
- "afternooon", "afternoon",
- "aggravanti", "aggravating",
- "aggraveted", "aggravated",
- "aggreement", "agreement",
- "aggregious", "egregious",
- "aggresions", "aggression",
- "aggressivo", "aggression",
- "aggrovated", "aggravated",
- "agnosticim", "agnosticism",
- "agnosticsm", "agnosticism",
- "agnostisch", "agnostic",
- "agnostiscm", "agnosticism",
- "agnostisim", "agnosticism",
- "agreeement", "agreement",
- "agricultre", "agriculture",
- "agricultue", "agriculture",
- "agriculure", "agriculture",
- "agricuture", "agriculture",
- "ailenating", "alienating",
- "ajdectives", "adjectives",
- "alchoholic", "alcoholic",
- "alchoolism", "alcoholism",
- "alcohalics", "alcoholics",
- "alcohalism", "alcoholism",
- "alcoholsim", "alcoholism",
- "aleinating", "alienating",
- "algorhitms", "algorithms",
- "algorithem", "algorithm",
- "algorithim", "algorithm",
- "algorithsm", "algorithms",
- "algorithum", "algorithm",
- "algorithym", "algorithm",
- "algoritmes", "algorithms",
- "algoritmos", "algorithms",
- "algorthims", "algorithms",
- "algortihms", "algorithms",
- "algorythms", "algorithms",
- "alievating", "alienating",
- "alledgedly", "allegedly",
- "allegeance", "allegiance",
- "allegedely", "allegedly",
- "allegedley", "allegedly",
- "allegience", "allegiance",
- "alleigance", "allegiance",
- "allergisch", "allergic",
- "alliegance", "allegiance",
- "alligeance", "allegiance",
- "alocholics", "alcoholics",
- "alocholism", "alcoholism",
- "alogrithms", "algorithms",
- "alphabeast", "alphabet",
- "alteracion", "alteration",
- "alterarion", "alteration",
- "alterating", "alteration",
- "alternador", "alternator",
- "alternater", "alternator",
- "alternatie", "alternatives",
- "alternatly", "alternately",
- "alternatve", "alternate",
- "alternetly", "alternately",
- "altogehter", "altogether",
- "altogheter", "altogether",
- "altriustic", "altruistic",
- "altruisitc", "altruistic",
- "altrusitic", "altruistic",
- "alturistic", "altruistic",
- "aluminimum", "aluminum",
- "amargeddon", "armageddon",
- "amateurest", "amateurs",
- "ambassabor", "ambassador",
- "ambassader", "ambassador",
- "ambassator", "ambassador",
- "ambassedor", "ambassador",
- "ambassidor", "ambassador",
- "ambassodor", "ambassador",
- "ambiguitiy", "ambiguity",
- "amendmants", "amendments",
- "amendmends", "amendments",
- "americains", "americas",
- "americanas", "americans",
- "americanis", "americas",
- "americanss", "americas",
- "americants", "americas",
- "americanus", "americans",
- "americares", "americas",
- "ammendment", "amendment",
- "amrageddon", "armageddon",
- "analitical", "analytical",
- "analitycal", "analytical",
- "analogeous", "analogous",
- "analyitcal", "analytical",
- "analyseles", "analyses",
- "analyseras", "analyses",
- "analyseres", "analyses",
- "analysised", "analyses",
- "analysises", "analyses",
- "analysisto", "analysts",
- "analystics", "analysts",
- "anarchisim", "anarchism",
- "anarchistm", "anarchism",
- "anarchiszm", "anarchism",
- "anarchsits", "anarchists",
- "anayltical", "analytical",
- "ancilliary", "ancillary",
- "androiders", "androids",
- "androidtvs", "androids",
- "anecdotale", "anecdote",
- "anecdotice", "anecdote",
- "anestheisa", "anesthesia",
- "anesthetia", "anesthesia",
- "anesthisia", "anesthesia",
- "anitbiotic", "antibiotic",
- "anitquated", "antiquated",
- "anitsocial", "antisocial",
- "aniversary", "anniversary",
- "annilihate", "annihilated",
- "anniverary", "anniversary",
- "anniversay", "anniversary",
- "anniversry", "anniversary",
- "annointing", "anointing",
- "annonceurs", "announcers",
- "annoucners", "announcers",
- "annoucning", "announcing",
- "announched", "announce",
- "annyoingly", "annoyingly",
- "anonymosly", "anonymously",
- "anonymousy", "anonymously",
- "antaganist", "antagonist",
- "antagnoist", "antagonist",
- "antarcitca", "antarctica",
- "antarctida", "antarctica",
- "anthropoly", "anthropology",
- "antibiodic", "antibiotic",
- "antibiotcs", "antibiotics",
- "antibitoic", "antibiotic",
- "antiboitic", "antibiotics",
- "anticapate", "anticipate",
- "anticiapte", "anticipate",
- "anticipare", "anticipate",
- "anticipato", "anticipation",
- "anticuated", "antiquated",
- "antiquited", "antiquated",
- "antiqvated", "antiquated",
- "antisipate", "anticipate",
- "antisocail", "antisocial",
- "antisosial", "antisocial",
- "antoganist", "antagonist",
- "antractica", "antarctica",
- "apacolypse", "apocalypse",
- "apartheied", "apartheid",
- "aplication", "application",
- "apocalipse", "apocalypse",
- "apocalpyse", "apocalypse",
- "apocalypes", "apocalypse",
- "apocalypic", "apocalyptic",
- "apocalyspe", "apocalypse",
- "apocalytic", "apocalyptic",
- "apocaplyse", "apocalypse",
- "apocolapse", "apocalypse",
- "apolagetic", "apologetic",
- "apolagized", "apologized",
- "apolegetic", "apologetic",
- "apoligetic", "apologetic",
- "apoligists", "apologists",
- "apoligized", "apologized",
- "apologisms", "apologists",
- "apologiste", "apologise",
- "apologitic", "apologetic",
- "apostraphe", "apostrophe",
- "apostrephe", "apostrophe",
- "apostrohpe", "apostrophe",
- "apostropes", "apostrophe",
- "apparantly", "apparently",
- "appareance", "appearance",
- "apparenlty", "apparently",
- "appartment", "apartment",
- "appealling", "appealing",
- "appearence", "appearance",
- "appearnace", "appearances",
- "apperances", "appearances",
- "apperantly", "apparently",
- "apperciate", "appreciate",
- "appereance", "appearance",
- "appetities", "appetite",
- "appetitite", "appetite",
- "appication", "application",
- "applainces", "appliances",
- "applicaple", "applicable",
- "applicates", "applicants",
- "applicaton", "application",
- "applicible", "applicable",
- "appliences", "appliances",
- "appointmet", "appointments",
- "appologies", "apologies",
- "apporached", "approached",
- "apporaches", "approaches",
- "appraoched", "approached",
- "appraoches", "approaches",
- "apprecaite", "appreciate",
- "appreciato", "appreciation",
- "appreciste", "appreciates",
- "apprecitae", "appreciates",
- "apprecited", "appreciated",
- "apprectice", "apprentice",
- "appreicate", "appreciate",
- "apprendice", "apprentice",
- "apprentace", "apprentice",
- "apprentise", "apprentice",
- "appretiate", "appreciate",
- "appretince", "apprentice",
- "appriceate", "appreciates",
- "appriciate", "appreciate",
- "appriecate", "appreciates",
- "approacing", "approaching",
- "appropiate", "appropriate",
- "approprate", "appropriate",
- "apropriate", "appropriate",
- "aproximate", "approximate",
- "apsotrophe", "apostrophe",
- "aptitudine", "aptitude",
- "aqcuainted", "acquainted",
- "aquisition", "acquisition",
- "aramgeddon", "armageddon",
- "arangement", "arrangement",
- "arbitarily", "arbitrarily",
- "arbitraily", "arbitrarily",
- "arbitraion", "arbitration",
- "arbitrairy", "arbitrarily",
- "arbitrarly", "arbitrary",
- "arbitraton", "arbitration",
- "arcehtypes", "archetypes",
- "archaelogy", "archaeology",
- "archaeolgy", "archaeology",
- "archaology", "archeology",
- "archatypes", "archetypes",
- "archetects", "architects",
- "archetipes", "archetypes",
- "archetpyes", "archetypes",
- "archetypus", "archetypes",
- "archeytpes", "archetypes",
- "archictect", "architect",
- "architechs", "architects",
- "architecht", "architect",
- "architecte", "architecture",
- "architexts", "architects",
- "architypes", "archetypes",
- "archtiects", "architects",
- "archytypes", "archetypes",
- "argentinia", "argentina",
- "arguements", "arguments",
- "argumentas", "arguments",
- "argumentos", "arguments",
- "arithemtic", "arithmetic",
- "arithmitic", "arithmetic",
- "aritmethic", "arithmetic",
- "armagaddon", "armageddon",
- "armageddan", "armageddon",
- "armagedden", "armageddon",
- "armageddin", "armageddon",
- "armagedeon", "armageddon",
- "armageedon", "armageddon",
- "armagideon", "armageddon",
- "armegaddon", "armageddon",
- "arrangerad", "arranged",
- "arrangment", "arrangement",
- "arthimetic", "arithmetic",
- "articifial", "artificial",
- "articluate", "articulate",
- "articualte", "articulate",
- "articulted", "articulated",
- "artifactos", "artifacts",
- "artificiel", "artificial",
- "artihmetic", "arithmetic",
- "artillerly", "artillery",
- "asbestoast", "asbestos",
- "asethetics", "aesthetics",
- "asisstants", "assistants",
- "aspiratons", "aspirations",
- "assasinate", "assassinate",
- "assassians", "assassin",
- "assassinas", "assassins",
- "assassines", "assassins",
- "assassinos", "assassins",
- "assemblare", "assemble",
- "assempling", "assembling",
- "assersions", "assertions",
- "assesement", "assessment",
- "assestment", "assessment",
- "assigments", "assignments",
- "assignemnt", "assignment",
- "assimalate", "assimilate",
- "assimilant", "assimilate",
- "assimilare", "assimilate",
- "assimliate", "assimilate",
- "assimulate", "assimilate",
- "assingment", "assignment",
- "assistanat", "assistants",
- "assistanse", "assistants",
- "assistante", "assistance",
- "assistence", "assistance",
- "assistendo", "assisted",
- "assistents", "assistants",
- "assmebling", "assembling",
- "assocaited", "associated",
- "assocaites", "associates",
- "assocation", "association",
- "associatie", "associated",
- "associatin", "associations",
- "associaton", "association",
- "associsted", "associates",
- "assoicated", "associated",
- "assoicates", "associates",
- "assosiated", "associated",
- "assosiates", "associates",
- "asssassans", "assassins",
- "assupmtion", "assumptions",
- "assymetric", "asymmetric",
- "asteroides", "asteroids",
- "asthetical", "aesthetical",
- "astonising", "astonishing",
- "astornauts", "astronauts",
- "astranauts", "astronauts",
- "astronatus", "astronauts",
- "astronaunt", "astronaut",
- "astronomia", "astronomical",
- "astronouts", "astronauts",
- "astronuats", "astronauts",
- "asutralian", "australian",
- "atatchment", "attachment",
- "athleticos", "athletics",
- "athleticsm", "athleticism",
- "athletiscm", "athleticism",
- "athletisim", "athleticism",
- "atmopshere", "atmosphere",
- "atmoshpere", "atmosphere",
- "atomsphere", "atmosphere",
- "atriculate", "articulate",
- "atrocoties", "atrocities",
- "atrosities", "atrocities",
- "attachemnt", "attachment",
- "attackeras", "attackers",
- "attactment", "attachment",
- "attemtping", "attempting",
- "attendence", "attendance",
- "attendents", "attendants",
- "attirbutes", "attributes",
- "attmepting", "attempting",
- "attracters", "attracts",
- "attractice", "attractive",
- "attracties", "attracts",
- "attractifs", "attracts",
- "attraktion", "attraction",
- "attraktive", "attractive",
- "attribuito", "attribution",
- "attritubes", "attributes",
- "auctioners", "auctions",
- "audioboook", "audiobook",
- "audioboost", "audiobooks",
- "auidobooks", "audiobooks",
- "auotattack", "autoattack",
- "austrailan", "australian",
- "austrailia", "australia",
- "australain", "australians",
- "australien", "australian",
- "australina", "australians",
- "austrlaian", "australians",
- "authenticy", "authenticity",
- "autherized", "authorized",
- "authoritay", "authority",
- "authorites", "authorities",
- "authorithy", "authority",
- "authroized", "authorized",
- "autistisch", "autistic",
- "autoattaks", "autoattack",
- "autocorect", "autocorrect",
- "autocorrct", "autocorrect",
- "autocorret", "autocorrect",
- "autograpgh", "autograph",
- "automatice", "automate",
- "automatico", "automation",
- "automatied", "automate",
- "automatiek", "automate",
- "automatron", "automation",
- "automatted", "automate",
- "automibile", "automobile",
- "automitive", "automotive",
- "automoblie", "automobile",
- "automomous", "autonomous",
- "automonous", "autonomous",
- "automotice", "automotive",
- "automotion", "automation",
- "automotize", "automotive",
- "automotove", "automotive",
- "autonamous", "autonomous",
- "autonation", "automation",
- "autonimous", "autonomous",
- "autonomity", "autonomy",
- "autononous", "autonomous",
- "auttoatack", "autoattack",
- "auxilliary", "auxiliary",
- "availabale", "available",
- "availaible", "available",
- "availiable", "available",
- "averageadi", "averaged",
- "averageifs", "averages",
- "awesomeley", "awesomely",
- "awesomelly", "awesomely",
- "awesomenss", "awesomeness",
- "awkwardess", "awkwardness",
- "babysister", "babysitter",
- "babysiting", "babysitting",
- "babysittng", "babysitting",
- "bachelores", "bachelors",
- "backgorund", "background",
- "backgroudn", "backgrounds",
- "backgrouds", "backgrounds",
- "backgrouns", "backgrounds",
- "backgruond", "backgrounds",
- "backpacing", "backpacking",
- "backpackng", "backpacking",
- "backrgound", "backgrounds",
- "backrounds", "backgrounds",
- "baksetball", "basketball",
- "balanceada", "balanced",
- "balanceado", "balanced",
- "balckberry", "blackberry",
- "balckhawks", "blackhawks",
- "balcksmith", "blacksmith",
- "bandwagoon", "bandwagon",
- "bangaldesh", "bangladesh",
- "bangladash", "bangladesh",
- "bangledash", "bangladesh",
- "bangledesh", "bangladesh",
- "banglidesh", "bangladesh",
- "bankrupcty", "bankruptcy",
- "bankruptsy", "bankruptcy",
- "bankrutpcy", "bankruptcy",
- "barabrians", "barbarians",
- "barbariens", "barbarians",
- "barbarions", "barbarians",
- "barbarisch", "barbaric",
- "barberians", "barbarians",
- "bargianing", "bargaining",
- "bartendars", "bartenders",
- "basektball", "basketball",
- "baskteball", "basketball",
- "bastardous", "bastards",
- "battelship", "battleship",
- "battelstar", "battlestar",
- "battlearts", "battlestar",
- "battlechip", "battleship",
- "battlefied", "battlefield",
- "battlefont", "battlefront",
- "battlehips", "battleship",
- "battlesaur", "battlestar",
- "battlescar", "battlestar",
- "battleshop", "battleship",
- "battlestsr", "battlestar",
- "beahviours", "behaviours",
- "beautifuly", "beautifully",
- "beautilful", "beautifully",
- "beautyfull", "beautiful",
- "becnhmarks", "benchmarks",
- "beethoveen", "beethoven",
- "begginings", "beginnings",
- "begininngs", "beginnings",
- "beginninng", "beginnings",
- "behaivours", "behaviours",
- "behaviorly", "behavioral",
- "behavoiral", "behavioral",
- "behavoiurs", "behaviours",
- "behavorial", "behavioral",
- "behavoural", "behavioral",
- "behvaiours", "behaviours",
- "beleagured", "beleaguered",
- "beleivable", "believable",
- "beliavable", "believable",
- "beliebable", "believable",
- "believeble", "believable",
- "beliveable", "believable",
- "benchamrks", "benchmarks",
- "benchmakrs", "benchmarks",
- "benckmarks", "benchmarks",
- "benefecial", "beneficial",
- "beneficary", "beneficiary",
- "beneficiul", "beneficial",
- "benefitial", "beneficial",
- "beneifical", "beneficial",
- "benelovent", "benevolent",
- "benevalent", "benevolent",
- "benevelant", "benevolent",
- "benevelent", "benevolent",
- "benevelont", "benevolent",
- "benevloent", "benevolent",
- "benevolant", "benevolent",
- "benificial", "beneficial",
- "benovelent", "benevolent",
- "bernouilli", "bernoulli",
- "besitality", "bestiality",
- "bestaility", "bestiality",
- "besteality", "bestiality",
- "betrayeado", "betrayed",
- "bilateraly", "bilaterally",
- "billborads", "billboards",
- "bioligical", "biological",
- "biologiset", "biologist",
- "biologiskt", "biologist",
- "birghtness", "brightness",
- "birmignham", "birmingham",
- "birmimgham", "birmingham",
- "bisexuella", "bisexual",
- "bitterseet", "bittersweet",
- "bitterswet", "bittersweet",
- "blackahwks", "blackhawks",
- "blackbarry", "blackberry",
- "blackbeary", "blackberry",
- "blackbeery", "blackberry",
- "blackcawks", "blackhawks",
- "blackhakws", "blackhawks",
- "blackhwaks", "blackhawks",
- "blackmsith", "blacksmith",
- "blackshits", "blacksmith",
- "blasphemey", "blasphemy",
- "blitzkreig", "blitzkrieg",
- "blochchain", "blockchain",
- "blockcahin", "blockchain",
- "blockchian", "blockchain",
- "bloodboner", "bloodborne",
- "bloodbonre", "bloodborne",
- "bloodborbe", "bloodborne",
- "bloodbrone", "bloodborne",
- "bloodporne", "bloodborne",
- "bloorborne", "bloodborne",
- "blueberies", "blueberries",
- "blueberris", "blueberries",
- "blueberrry", "blueberry",
- "bluebrints", "blueprints",
- "boardcasts", "broadcasts",
- "bodyheight", "bodyweight",
- "bodyweigth", "bodyweight",
- "bodywieght", "bodyweight",
- "bombarment", "bombardment",
- "bookmakred", "bookmarked",
- "bootlaoder", "bootloader",
- "bootleader", "bootloader",
- "boradcasts", "broadcasts",
- "borderlads", "borderlands",
- "borderlans", "borderlands",
- "bottelneck", "bottleneck",
- "bottlebeck", "bottleneck",
- "boundaires", "boundaries",
- "bounderies", "boundaries",
- "bourgeoius", "bourgeois",
- "boycutting", "boycotting",
- "boyfirends", "boyfriends",
- "boyfreinds", "boyfriends",
- "boyfrients", "boyfriends",
- "braceletes", "bracelets",
- "braceletts", "bracelets",
- "brainwased", "brainwashed",
- "brakedowns", "breakdowns",
- "braodcasts", "broadcasts",
- "brasillian", "brazilian",
- "bratenders", "bartenders",
- "brazilains", "brazilians",
- "brazileans", "brazilians",
- "braziliaan", "brazilians",
- "brazilions", "brazilians",
- "brazillans", "brazilians",
- "brightoner", "brighten",
- "brigthness", "brightness",
- "brillaince", "brilliance",
- "brilliante", "brilliance",
- "brillianty", "brilliantly",
- "brimestone", "brimstone",
- "brimingham", "birmingham",
- "broacasted", "broadcast",
- "brotherhod", "brotherhood",
- "brotherood", "brotherhood",
- "brusselers", "brussels",
- "brutallity", "brutally",
- "buisnesses", "businesses",
- "bulgariska", "bulgaria",
- "bulletpoof", "bulletproof",
- "bulletprof", "bulletproof",
- "bureaucats", "bureaucrats",
- "businesman", "businessman",
- "businesmen", "businessmen",
- "businessen", "businessmen",
- "butterfies", "butterflies",
- "cabinettas", "cabinets",
- "caclulated", "calculated",
- "caclulator", "calculator",
- "cahracters", "characters",
- "calcluator", "calculators",
- "calcualted", "calculated",
- "calcualtor", "calculator",
- "calculador", "calculator",
- "calcularon", "calculator",
- "calculater", "calculator",
- "calculatin", "calculations",
- "calibratin", "calibration",
- "calibraton", "calibration",
- "califnoria", "californian",
- "califonria", "californian",
- "califorian", "californian",
- "califorina", "california",
- "californai", "californian",
- "califronia", "california",
- "caligraphy", "calligraphy",
- "caliofrnia", "californian",
- "calrifying", "clarifying",
- "calssified", "classified",
- "caluclated", "calculated",
- "caluclator", "calculator",
- "caluculate", "calculate",
- "cambodican", "cambodia",
- "camofluage", "camouflage",
- "camoufalge", "camouflage",
- "camouglage", "camouflage",
- "campaiging", "campaigning",
- "campaignes", "campaigns",
- "cancellato", "cancellation",
- "candidatas", "candidates",
- "candidatxs", "candidates",
- "candidiate", "candidate",
- "canditates", "candidates",
- "cannibalsm", "cannibalism",
- "cannisters", "canisters",
- "cannonical", "canonical",
- "capabality", "capability",
- "capabiltiy", "capability",
- "capacators", "capacitors",
- "capaciters", "capacitors",
- "capactiors", "capacitors",
- "capasitors", "capacitors",
- "capatilism", "capitalism",
- "capatilist", "capitalist",
- "capatilize", "capitalize",
- "capialized", "capitalized",
- "capicators", "capacitors",
- "capitalisn", "capitals",
- "capitalits", "capitalists",
- "capitalsim", "capitalism",
- "capitalsit", "capitalists",
- "capitarist", "capitalist",
- "capitilism", "capitalism",
- "capitilist", "capitalist",
- "capitilize", "capitalize",
- "capitlaism", "capitalism",
- "capitlaist", "capitalist",
- "capitlaize", "capitalized",
- "capitolism", "capitalism",
- "capitolist", "capitalist",
- "capitolize", "capitalize",
- "captainers", "captains",
- "captialism", "capitalism",
- "captialist", "capitalist",
- "captialize", "capitalize",
- "captivitiy", "captivity",
- "caraciture", "caricature",
- "carciature", "caricature",
- "cardinales", "cardinals",
- "cardinalis", "cardinals",
- "carefullly", "carefully",
- "cariacture", "caricature",
- "caricatore", "caricature",
- "cariciture", "caricature",
- "caricuture", "caricature",
- "carismatic", "charismatic",
- "carribbean", "caribbean",
- "cartdridge", "cartridge",
- "cartdriges", "cartridges",
- "carthagian", "carthaginian",
- "cartilidge", "cartilage",
- "cartirdges", "cartridges",
- "cartrdiges", "cartridges",
- "cartriages", "cartridges",
- "cartrigdes", "cartridges",
- "casaulties", "casualties",
- "cassowarry", "cassowary",
- "casualites", "casualties",
- "casualries", "casualties",
- "casulaties", "casualties",
- "cataclysim", "cataclysm",
- "cataclysym", "cataclysm",
- "catagories", "categories",
- "catapillar", "caterpillar",
- "catapiller", "caterpillar",
- "catastrope", "catastrophe",
- "catastrphe", "catastrophe",
- "categorice", "categorize",
- "categoried", "categorized",
- "categoriei", "categorize",
- "cateogrize", "categorized",
- "catepillar", "caterpillar",
- "caterpilar", "caterpillar",
- "catholicsm", "catholicism",
- "catholicus", "catholics",
- "catholisim", "catholicism",
- "cativating", "activating",
- "cattleship", "battleship",
- "causalties", "casualties",
- "cautionsly", "cautiously",
- "celebratin", "celebration",
- "celebrites", "celebrities",
- "celebritiy", "celebrity",
- "cellpading", "cellpadding",
- "cellulaire", "cellular",
- "cemetaries", "cemeteries",
- "censorhsip", "censorship",
- "censurship", "censorship",
- "centipedle", "centipede",
- "ceremonias", "ceremonies",
- "ceremoniis", "ceremonies",
- "ceremonije", "ceremonies",
- "cerimonial", "ceremonial",
- "cerimonies", "ceremonies",
- "certainity", "certainty",
- "certainlyt", "certainty",
- "chairtable", "charitable",
- "chalenging", "challenging",
- "challanged", "challenged",
- "challanges", "challenges",
- "challegner", "challenger",
- "challender", "challenger",
- "challengue", "challenger",
- "challengur", "challenger",
- "challening", "challenging",
- "challneger", "challenger",
- "chanceller", "chancellor",
- "chancillor", "chancellor",
- "chansellor", "chancellor",
- "charachter", "character",
- "charactere", "characterize",
- "characterz", "characterize",
- "charactors", "characters",
- "charakters", "characters",
- "charatable", "charitable",
- "charecters", "characters",
- "charistics", "characteristics",
- "charitible", "charitable",
- "chartiable", "charitable",
- "chechpoint", "checkpoint",
- "checkpiont", "checkpoint",
- "checkpoins", "checkpoints",
- "checkponts", "checkpoints",
- "cheesecase", "cheesecake",
- "cheesecave", "cheesecake",
- "cheeseface", "cheesecake",
- "cheezecake", "cheesecake",
- "chemcially", "chemically",
- "chidlbirth", "childbirth",
- "chihuahuha", "chihuahua",
- "childbrith", "childbirth",
- "childrends", "childrens",
- "childrenis", "childrens",
- "childrents", "childrens",
- "chirstians", "christians",
- "chocalates", "chocolates",
- "chocloates", "chocolates",
- "chocoaltes", "chocolates",
- "chocolatie", "chocolates",
- "chocolatos", "chocolates",
- "chocolatte", "chocolates",
- "chocolotes", "chocolates",
- "cholestrol", "cholesterol",
- "chormosome", "chromosome",
- "chornicles", "chronicles",
- "chrisitans", "christians",
- "christains", "christians",
- "christiaan", "christian",
- "christimas", "christians",
- "christinas", "christians",
- "christines", "christians",
- "christmans", "christians",
- "chromasome", "chromosome",
- "chromesome", "chromosome",
- "chromisome", "chromosome",
- "chromosmes", "chromosomes",
- "chromosoms", "chromosomes",
- "chromosone", "chromosome",
- "chromosoom", "chromosome",
- "chromozome", "chromosome",
- "chronciles", "chronicles",
- "chronicals", "chronicles",
- "chronicels", "chronicles",
- "chronocles", "chronicles",
- "chronosome", "chromosome",
- "chrsitians", "christians",
- "cigarattes", "cigarettes",
- "cigerattes", "cigarettes",
- "cincinatti", "cincinnati",
- "cinncinati", "cincinnati",
- "circulaire", "circular",
- "circulaton", "circulation",
- "circumsice", "circumcised",
- "circumsied", "circumcised",
- "circumwent", "circumvent",
- "circunvent", "circumvent",
- "cirruculum", "curriculum",
- "claculator", "calculator",
- "clairfying", "clarifying",
- "clasically", "classically",
- "classicals", "classics",
- "classrooom", "classroom",
- "cleanliess", "cleanliness",
- "cleareance", "clearance",
- "cleverleys", "cleverly",
- "cliffhager", "cliffhanger",
- "climateers", "climates",
- "climatiser", "climates",
- "clincially", "clinically",
- "clitoridis", "clitoris",
- "clitorious", "clitoris",
- "co-incided", "coincided",
- "cockroachs", "cockroaches",
- "cockroahes", "cockroaches",
- "coefficent", "coefficient",
- "cognatious", "contagious",
- "cognitivie", "cognitive",
- "coincidnce", "coincide",
- "colelctive", "collective",
- "colelctors", "collectors",
- "collapsers", "collapses",
- "collaquial", "colloquial",
- "collasping", "collapsing",
- "collataral", "collateral",
- "collaterol", "collateral",
- "collatoral", "collateral",
- "collcetion", "collections",
- "colleauges", "colleagues",
- "colleciton", "collection",
- "collectems", "collects",
- "collectief", "collective",
- "collecties", "collects",
- "collectifs", "collects",
- "collectivo", "collection",
- "collectoin", "collections",
- "collectons", "collections",
- "collectros", "collects",
- "collegaues", "colleagues",
- "collequial", "colloquial",
- "colleteral", "collateral",
- "colliquial", "colloquial",
- "collission", "collisions",
- "collitions", "collisions",
- "colloqiual", "colloquial",
- "colloquail", "colloquial",
- "colloqueal", "colloquial",
- "collpasing", "collapsing",
- "colonialsm", "colonialism",
- "colorblend", "colorblind",
- "coloublind", "colorblind",
- "columbidae", "columbia",
- "comapnions", "companions",
- "comaprable", "comparable",
- "comaprison", "comparison",
- "comaptible", "compatible",
- "combatabts", "combatants",
- "combatents", "combatants",
- "combinatin", "combinations",
- "combinaton", "combination",
- "comediants", "comedians",
- "comepndium", "compendium",
- "comferting", "comforting",
- "comforming", "comforting",
- "comfortbly", "comfortably",
- "comisioned", "commissioned",
- "comisioner", "commissioner",
- "comissions", "commissions",
- "commandbox", "commando",
- "commandent", "commandment",
- "commandeur", "commanders",
- "commandore", "commanders",
- "commandpod", "commando",
- "commanists", "communists",
- "commemters", "commenters",
- "commencera", "commerce",
- "commenciez", "commence",
- "commentaar", "commentary",
- "commentare", "commenter",
- "commentars", "commenters",
- "commentart", "commentator",
- "commentery", "commentary",
- "commentsry", "commenters",
- "commercail", "commercials",
- "commercent", "commence",
- "commerical", "commercial",
- "comminists", "communists",
- "commisison", "commissions",
- "commissons", "commissions",
- "commiteted", "commited",
- "commodites", "commodities",
- "commtiment", "commitments",
- "communicae", "communicated",
- "communisim", "communism",
- "communiste", "communities",
- "communites", "communities",
- "communters", "commenters",
- "compadible", "compatible",
- "compagnons", "companions",
- "compainons", "companions",
- "compairson", "comparison",
- "compalined", "complained",
- "compandium", "compendium",
- "companians", "companions",
- "companines", "companions",
- "compansate", "compensate",
- "comparabil", "comparable",
- "comparason", "comparison",
- "comparaste", "compares",
- "comparatie", "comparative",
- "compareble", "comparable",
- "comparemos", "compares",
- "comparions", "comparison",
- "compariosn", "comparisons",
- "comparisen", "compares",
- "comparitve", "comparative",
- "comparsion", "comparison",
- "compartent", "compartment",
- "compartmet", "compartment",
- "compatibel", "compatible",
- "compatibil", "compatible",
- "compeating", "completing",
- "compeditor", "competitor",
- "compednium", "compendium",
- "compeeting", "completing",
- "compeltely", "completely",
- "compelting", "completing",
- "compeltion", "completion",
- "compemdium", "compendium",
- "compenduim", "compendium",
- "compenents", "components",
- "compenidum", "compendium",
- "compensare", "compensate",
- "comperable", "comparable",
- "comperhend", "comprehend",
- "compession", "compassion",
- "competance", "competence",
- "competator", "competitor",
- "competenet", "competence",
- "competense", "competence",
- "competenze", "competence",
- "competeted", "competed",
- "competetor", "competitor",
- "competidor", "competitor",
- "competiors", "competitors",
- "competitie", "competitive",
- "competitin", "competitions",
- "competitio", "competitor",
- "competiton", "competition",
- "competitve", "competitive",
- "compilance", "compliance",
- "compilaton", "compilation",
- "compinsate", "compensate",
- "compitable", "compatible",
- "compitance", "compliance",
- "complacant", "complacent",
- "complaince", "compliance",
- "complaines", "complaints",
- "complainig", "complaining",
- "complainte", "complained",
- "complation", "completion",
- "compleatly", "completely",
- "complecate", "complicate",
- "completeds", "completes",
- "completent", "complement",
- "completily", "complexity",
- "completito", "completion",
- "completley", "completely",
- "complexers", "complexes",
- "complexety", "complexity",
- "complianed", "compliance",
- "compliants", "complaints",
- "complicaed", "complicate",
- "complicare", "complicate",
- "complicati", "complicit",
- "complicato", "complication",
- "complicite", "complicate",
- "complicted", "complicated",
- "complience", "compliance",
- "complimate", "complicate",
- "complition", "completion",
- "complusion", "compulsion",
- "complusive", "compulsive",
- "complusory", "compulsory",
- "compolsive", "compulsive",
- "compolsory", "compulsory",
- "compolsury", "compulsory",
- "componants", "components",
- "componenet", "components",
- "componsate", "compensate",
- "comporable", "comparable",
- "compositae", "composite",
- "compositie", "composite",
- "compositon", "composition",
- "compraison", "comparisons",
- "compramise", "compromise",
- "comprassem", "compress",
- "comprehand", "comprehend",
- "compresion", "compression",
- "compresors", "compressor",
- "compresser", "compressor",
- "compressio", "compressor",
- "compresson", "compression",
- "comprihend", "comprehend",
- "comprimise", "compromise",
- "compromiss", "compromises",
- "compromize", "compromise",
- "compromsie", "compromises",
- "comprossor", "compressor",
- "compteting", "completing",
- "comptetion", "completion",
- "compulisve", "compulsive",
- "compulosry", "compulsory",
- "compulsary", "compulsory",
- "compulsery", "compulsory",
- "compulsing", "compulsion",
- "compulsivo", "compulsion",
- "compulsury", "compulsory",
- "compuslion", "compulsion",
- "compuslive", "compulsive",
- "compuslory", "compulsory",
- "compustion", "compulsion",
- "computanti", "computation",
- "conatiners", "containers",
- "concedendo", "conceded",
- "concedered", "conceded",
- "conceitual", "conceptual",
- "concentate", "concentrate",
- "concenting", "connecting",
- "conceptial", "conceptual",
- "conceptuel", "conceptual",
- "concersion", "concession",
- "concesions", "concession",
- "concidered", "considered",
- "conciously", "consciously",
- "concission", "concession",
- "conclsuion", "concussion",
- "conclusies", "conclusive",
- "conclution", "conclusion",
- "concorrent", "concurrent",
- "concsience", "conscience",
- "conculsion", "conclusion",
- "conculsive", "conclusive",
- "concurment", "concurrent",
- "concurrant", "concurrent",
- "concurrect", "concurrent",
- "concusions", "concussion",
- "concusison", "concussions",
- "condamning", "condemning",
- "condemming", "condemning",
- "condencing", "condemning",
- "condenming", "condemning",
- "condensend", "condensed",
- "condidtion", "condition",
- "conditinal", "conditional",
- "conditiner", "conditioner",
- "conditiond", "conditioned",
- "conditiong", "conditioning",
- "condmening", "condemning",
- "conduiting", "conducting",
- "conencting", "connecting",
- "conenction", "connection",
- "conenctors", "connectors",
- "conesencus", "consensus",
- "confedarcy", "confederacy",
- "confedence", "conference",
- "confedercy", "confederacy",
- "conferance", "conference",
- "conferenze", "conference",
- "conferming", "confirming",
- "confernece", "conferences",
- "confessino", "confessions",
- "confidance", "confidence",
- "confidenly", "confidently",
- "confidense", "confidence",
- "confidenty", "confidently",
- "conflcting", "conflating",
- "conflicing", "conflicting",
- "conflictos", "conflicts",
- "confliting", "conflating",
- "confriming", "confirming",
- "confussion", "confession",
- "congratule", "congratulate",
- "congresman", "congressman",
- "congresmen", "congressmen",
- "congressen", "congressmen",
- "conjecutre", "conjecture",
- "conjuction", "conjunction",
- "conjuncion", "conjunction",
- "conlcusion", "conclusion",
- "conncetion", "connections",
- "conneciton", "connection",
- "connecties", "connects",
- "connectins", "connects",
- "connectivy", "connectivity",
- "connectpro", "connector",
- "conneticut", "connecticut",
- "connotaion", "connotation",
- "conpsiracy", "conspiracy",
- "conqeuring", "conquering",
- "conqouring", "conquering",
- "conquerers", "conquerors",
- "conquoring", "conquering",
- "consciense", "conscience",
- "consciouly", "consciously",
- "consdiered", "considered",
- "consending", "consenting",
- "consensuel", "consensual",
- "consenusal", "consensual",
- "consequece", "consequence",
- "consequnce", "consequence",
- "conservare", "conserve",
- "conservato", "conservation",
- "conservice", "conserve",
- "conservies", "conserve",
- "conservite", "conserve",
- "consicence", "conscience",
- "consideras", "considers",
- "consideret", "considerate",
- "consipracy", "conspiracy",
- "consistant", "consistent",
- "consistens", "consists",
- "consisteny", "consistency",
- "consitency", "consistency",
- "consituted", "constituted",
- "conslutant", "consultant",
- "consluting", "consulting",
- "consolidad", "consolidated",
- "consonents", "consonants",
- "consorcium", "consortium",
- "conspirace", "conspiracies",
- "conspiricy", "conspiracy",
- "conspriacy", "conspiracy",
- "constaints", "constraints",
- "constatnly", "constantly",
- "constently", "constantly",
- "constitude", "constitute",
- "constitued", "constitute",
- "constituem", "constitute",
- "constituer", "constitute",
- "constitues", "constitutes",
- "constituie", "constitute",
- "constituit", "constitute",
- "constitutn", "constituents",
- "constituye", "constitute",
- "constnatly", "constantly",
- "constracts", "constructs",
- "constraits", "constraints",
- "constransi", "constraints",
- "constrants", "constraints",
- "construced", "constructed",
- "constructo", "construction",
- "construint", "constraint",
- "construits", "constructs",
- "construted", "constructed",
- "consueling", "consulting",
- "consultata", "consultant",
- "consultate", "consultant",
- "consultati", "consultant",
- "consultato", "consultation",
- "consultent", "consultant",
- "consumated", "consummated",
- "consumbale", "consumables",
- "consuments", "consumes",
- "consumirem", "consumerism",
- "consumires", "consumerism",
- "consumirse", "consumerism",
- "consumiste", "consumes",
- "consumpion", "consumption",
- "contaction", "contacting",
- "contageous", "contagious",
- "contagiosa", "contagious",
- "contagioso", "contagious",
- "contaigous", "contagious",
- "containors", "containers",
- "contaminen", "containment",
- "contanting", "contacting",
- "contection", "contention",
- "contectual", "contextual",
- "conteiners", "contenders",
- "contempate", "contemplate",
- "contemplat", "contempt",
- "contempory", "contemporary",
- "contenants", "continents",
- "contencion", "contention",
- "contendors", "contenders",
- "contenents", "continents",
- "conteneurs", "contenders",
- "contengent", "contingent",
- "contension", "contention",
- "contentino", "contention",
- "contentios", "contentious",
- "contentous", "contentious",
- "contestais", "contests",
- "contestans", "contests",
- "contestase", "contests",
- "contestion", "contention",
- "contestors", "contests",
- "contextful", "contextual",
- "contextuel", "contextual",
- "contextura", "contextual",
- "contianers", "containers",
- "contianing", "containing",
- "contibuted", "contributed",
- "contibutes", "contributes",
- "contigents", "continents",
- "contigious", "contagious",
- "contignent", "contingent",
- "continants", "continents",
- "continenal", "continental",
- "continenet", "continents",
- "contineous", "continuous",
- "continetal", "continental",
- "contingecy", "contingency",
- "contingeny", "contingency",
- "continient", "contingent",
- "continious", "continuous",
- "continiuty", "continuity",
- "contintent", "contingent",
- "continualy", "continually",
- "continuare", "continue",
- "continuati", "continuity",
- "continuato", "continuation",
- "continuent", "contingent",
- "continuety", "continuity",
- "continunes", "continents",
- "continuons", "continuous",
- "continutiy", "continuity",
- "continuuum", "continuum",
- "contitnent", "contingent",
- "contiuning", "containing",
- "contiunity", "continuity",
- "contorller", "controllers",
- "contracing", "contracting",
- "contractar", "contractor",
- "contracter", "contractor",
- "contractin", "contraction",
- "contractos", "contracts",
- "contradice", "contradicted",
- "contradics", "contradicts",
- "contredict", "contradict",
- "contribued", "contributed",
- "contribuem", "contribute",
- "contribuer", "contribute",
- "contribues", "contributes",
- "contribuie", "contribute",
- "contribuit", "contribute",
- "contributo", "contribution",
- "contributs", "contributes",
- "contribuye", "contribute",
- "contricted", "contracted",
- "contridict", "contradict",
- "contriubte", "contributes",
- "controlelr", "controllers",
- "controlers", "controls",
- "controling", "controlling",
- "controlles", "controls",
- "controvery", "controversy",
- "controvesy", "controversy",
- "contrubite", "contributes",
- "contrubute", "contribute",
- "contuining", "continuing",
- "contuinity", "continuity",
- "convaluted", "convoluted",
- "convcition", "convictions",
- "conveinent", "convenient",
- "conveluted", "convoluted",
- "convencion", "convention",
- "conveniant", "convenient",
- "conveniece", "convenience",
- "convenince", "convenience",
- "convential", "conventional",
- "converesly", "conversely",
- "convergens", "converse",
- "converison", "conversions",
- "converning", "converting",
- "conversare", "converse",
- "conversino", "conversions",
- "conversley", "conversely",
- "conversoin", "conversions",
- "conversons", "conversions",
- "convertion", "conversion",
- "convertire", "converter",
- "converying", "converting",
- "conveyered", "conveyed",
- "conviccion", "conviction",
- "conviciton", "conviction",
- "convienent", "convenient",
- "conviluted", "convoluted",
- "convincted", "convince",
- "convinsing", "convincing",
- "convinving", "convincing",
- "convoluded", "convoluted",
- "convoulted", "convoluted",
- "convulated", "convoluted",
- "convuluted", "convoluted",
- "cooperatve", "cooperative",
- "coordenate", "coordinate",
- "coordiante", "coordinate",
- "coordinare", "coordinate",
- "coordinato", "coordination",
- "coordinats", "coordinates",
- "coordonate", "coordinate",
- "cooridnate", "coordinate",
- "copehnagen", "copenhagen",
- "copenaghen", "copenhagen",
- "copenahgen", "copenhagen",
- "copengagen", "copenhagen",
- "copengahen", "copenhagen",
- "copenhagan", "copenhagen",
- "copenhague", "copenhagen",
- "copenhagun", "copenhagen",
- "copenhaven", "copenhagen",
- "copenhegan", "copenhagen",
- "copyrighed", "copyrighted",
- "copyrigted", "copyrighted",
- "corinthans", "corinthians",
- "corinthias", "corinthians",
- "corinthins", "corinthians",
- "cornmitted", "committed",
- "corporatie", "corporate",
- "corralated", "correlated",
- "corralates", "correlates",
- "correccion", "correction",
- "correciton", "corrections",
- "correcters", "correctors",
- "correctess", "correctness",
- "correctivo", "correction",
- "correctons", "corrections",
- "corregated", "correlated",
- "correkting", "correcting",
- "correlatas", "correlates",
- "correlatie", "correlated",
- "correlatos", "correlates",
- "correspend", "correspond",
- "corrilated", "correlated",
- "corrilates", "correlates",
- "corrispond", "correspond",
- "corrolated", "correlated",
- "corrolates", "correlates",
- "corrospond", "correspond",
- "corrpution", "corruption",
- "corrulates", "correlates",
- "corrupcion", "corruption",
- "cosmeticas", "cosmetics",
- "cosmeticos", "cosmetics",
- "costumized", "customized",
- "counceling", "counseling",
- "councellor", "councillor",
- "councelors", "counselors",
- "councilers", "councils",
- "counselers", "counselors",
- "counsellng", "counselling",
- "counsilers", "counselors",
- "counsiling", "counseling",
- "counsilors", "counselors",
- "counsolers", "counselors",
- "counsoling", "counseling",
- "countepart", "counteract",
- "counteratk", "counteract",
- "counterbat", "counteract",
- "countercat", "counteract",
- "countercut", "counteract",
- "counteries", "counters",
- "countoring", "countering",
- "countryies", "countryside",
- "countrying", "countering",
- "courcework", "coursework",
- "coursefork", "coursework",
- "courthosue", "courthouse",
- "courtrooom", "courtroom",
- "cousnelors", "counselors",
- "coutneract", "counteract",
- "coutnering", "countering",
- "covenental", "covenant",
- "cranberrry", "cranberry",
- "creationis", "creations",
- "creationsm", "creationism",
- "creationst", "creationist",
- "creativily", "creatively",
- "creativley", "creatively",
- "credibilty", "credibility",
- "creeperest", "creepers",
- "crimanally", "criminally",
- "criminalty", "criminally",
- "criminalul", "criminally",
- "criticable", "critical",
- "criticarlo", "critical",
- "criticiing", "criticising",
- "criticisim", "criticism",
- "criticisme", "criticise",
- "criticisng", "criticising",
- "criticists", "critics",
- "criticisze", "criticise",
- "criticizms", "criticisms",
- "criticizng", "criticizing",
- "critisiced", "criticized",
- "critisicms", "criticisms",
- "critisicsm", "criticisms",
- "critisiscm", "criticisms",
- "critisisms", "criticisms",
- "critisizes", "criticises",
- "critisizms", "criticisms",
- "critiziced", "criticized",
- "critizised", "criticized",
- "critizisms", "criticisms",
- "critizized", "criticized",
- "crocodille", "crocodile",
- "crossfiter", "crossfire",
- "crutchetts", "crutches",
- "crystalens", "crystals",
- "crystalisk", "crystals",
- "crystallis", "crystals",
- "cuatiously", "cautiously",
- "culterally", "culturally",
- "cultrually", "culturally",
- "culumative", "cumulative",
- "culutrally", "culturally",
- "cumbersone", "cumbersome",
- "cumbursome", "cumbersome",
- "cumpolsory", "compulsory",
- "cumulitive", "cumulative",
- "currancies", "currencies",
- "currenctly", "currency",
- "currenices", "currencies",
- "currentfps", "currents",
- "currentlys", "currents",
- "currentpos", "currents",
- "currentusa", "currents",
- "curriculem", "curriculum",
- "curriculim", "curriculum",
- "curriences", "currencies",
- "curroption", "corruption",
- "custimized", "customized",
- "customzied", "customized",
- "custumized", "customized",
- "cutscences", "cutscene",
- "cutscenses", "cutscene",
- "dangerouly", "dangerously",
- "dealerhsip", "dealerships",
- "deathamtch", "deathmatch",
- "deathmacth", "deathmatch",
- "debateable", "debatable",
- "decembeard", "december",
- "decendants", "descendants",
- "decendents", "descendants",
- "decideable", "decidable",
- "deciptions", "depictions",
- "decisiones", "decisions",
- "declarasen", "declares",
- "declaraste", "declares",
- "declaremos", "declares",
- "decomposit", "decompose",
- "decoracion", "decoration",
- "decorativo", "decoration",
- "decoritive", "decorative",
- "decroative", "decorative",
- "decsending", "descending",
- "dedicacion", "dedication",
- "dedikation", "dedication",
- "deducatble", "deductible",
- "deducitble", "deductible",
- "defacation", "defamation",
- "defamating", "defamation",
- "defanitely", "definately",
- "defelction", "deflection",
- "defendeers", "defender",
- "defendents", "defendants",
- "defenderes", "defenders",
- "defenesman", "defenseman",
- "defenselss", "defenseless",
- "defensivly", "defensively",
- "defianetly", "definately",
- "defiantely", "definately",
- "defiantley", "definately",
- "defibately", "definately",
- "deficately", "definately",
- "deficiancy", "deficiency",
- "deficience", "deficiencies",
- "deficienct", "deficient",
- "deficienty", "deficiency",
- "defiintely", "definately",
- "definaetly", "definately",
- "definaitly", "definately",
- "definaltey", "definately",
- "definataly", "definately",
- "definateky", "definately",
- "definately", "definitely",
- "definatily", "definately",
- "defination", "definition",
- "definative", "definitive",
- "definatlly", "definately",
- "definatrly", "definately",
- "definayely", "definately",
- "defineatly", "definately",
- "definetaly", "definately",
- "definetely", "definitely",
- "definetily", "definately",
- "definetlly", "definetly",
- "definettly", "definately",
- "definicion", "definition",
- "definietly", "definitely",
- "definining", "defining",
- "definitaly", "definately",
- "definiteyl", "definitly",
- "definitivo", "definition",
- "definitley", "definitely",
- "definitlly", "definitly",
- "definitlry", "definitly",
- "definitlty", "definitly",
- "definjtely", "definately",
- "definltely", "definately",
- "definotely", "definately",
- "definstely", "definately",
- "defintaley", "definately",
- "defintiely", "definitely",
- "defintiion", "definitions",
- "definutely", "definately",
- "deflaction", "deflection",
- "defleciton", "deflection",
- "deflektion", "deflection",
- "defniately", "definately",
- "degenarate", "degenerate",
- "degenerare", "degenerate",
- "degenerite", "degenerate",
- "degoratory", "derogatory",
- "degraderad", "degraded",
- "dehydraded", "dehydrated",
- "dehyrdated", "dehydrated",
- "deifnately", "definately",
- "deisgnated", "designated",
- "delaership", "dealership",
- "delearship", "dealership",
- "delegaties", "delegate",
- "delegative", "delegate",
- "delfection", "deflection",
- "delibarate", "deliberate",
- "deliberant", "deliberate",
- "delibirate", "deliberate",
- "deligthful", "delightful",
- "deliverate", "deliberate",
- "deliverees", "deliveries",
- "deliviered", "delivered",
- "deliviring", "delivering",
- "delporable", "deplorable",
- "delpoyment", "deployment",
- "delutional", "delusional",
- "dementieva", "dementia",
- "deminsions", "dimensions",
- "democracis", "democracies",
- "democracts", "democrat",
- "democratas", "democrats",
- "democrates", "democrats",
- "demograhic", "demographic",
- "demographs", "demographics",
- "demograpic", "demographic",
- "demolation", "demolition",
- "demolicion", "demolition",
- "demolision", "demolition",
- "demolitian", "demolition",
- "demoliting", "demolition",
- "demoloshed", "demolished",
- "demolution", "demolition",
- "demonished", "demolished",
- "demonstate", "demonstrate",
- "demonstras", "demonstrates",
- "demorcracy", "democracy",
- "denegerate", "degenerate",
- "denominato", "denomination",
- "denomintor", "denominator",
- "deocrative", "decorative",
- "deomcratic", "democratic",
- "deparments", "departments",
- "departmens", "departments",
- "departmnet", "departments",
- "depcitions", "depictions",
- "depdending", "depending",
- "depencency", "dependency",
- "dependance", "dependence",
- "dependancy", "dependency",
- "dependandt", "dependant",
- "dependends", "depended",
- "dependened", "depended",
- "dependenta", "dependant",
- "dependente", "dependence",
- "depicitons", "depictions",
- "deplorabel", "deplorable",
- "deplorabil", "deplorable",
- "deplorible", "deplorable",
- "deplyoment", "deployment",
- "depolyment", "deployment",
- "depositers", "deposits",
- "depressief", "depressive",
- "depressies", "depressive",
- "deprivaton", "deprivation",
- "deragotory", "derogatory",
- "derivaties", "derivatives",
- "deriviated", "derived",
- "derivitave", "derivative",
- "derivitive", "derivative",
- "derogatary", "derogatory",
- "derogatery", "derogatory",
- "derogetory", "derogatory",
- "derogitory", "derogatory",
- "derogotary", "derogatory",
- "derogotory", "derogatory",
- "derviative", "derivative",
- "descendats", "descendants",
- "descendend", "descended",
- "descenting", "descending",
- "descerning", "descending",
- "descipable", "despicable",
- "descisions", "decisions",
- "descriibes", "describes",
- "descripton", "description",
- "desginated", "designated",
- "desigining", "designing",
- "desireable", "desirable",
- "desktopbsd", "desktops",
- "despciable", "despicable",
- "desperatly", "desperately",
- "desperetly", "desperately",
- "despicaple", "despicable",
- "despicible", "despicable",
- "dessicated", "desiccated",
- "destinatin", "destinations",
- "destinaton", "destination",
- "destoryers", "destroyers",
- "destorying", "destroying",
- "destroyeds", "destroyers",
- "destroyeer", "destroyers",
- "destrucion", "destruction",
- "destrucive", "destructive",
- "destryoing", "destroying",
- "detectarlo", "detector",
- "detectaron", "detector",
- "detectoare", "detector",
- "determinas", "determines",
- "determinig", "determining",
- "determinsm", "determinism",
- "deutschand", "deutschland",
- "devastaded", "devastated",
- "devastaing", "devastating",
- "devastanti", "devastating",
- "devasteted", "devastated",
- "develepors", "developers",
- "develoeprs", "developers",
- "developmet", "developments",
- "developors", "develops",
- "developped", "developed",
- "developres", "develops",
- "develpment", "development",
- "devestated", "devastated",
- "devolvendo", "devolved",
- "deyhdrated", "dehydrated",
- "diagnosied", "diagnose",
- "diagnosies", "diagnosis",
- "diagnositc", "diagnostic",
- "diagnossed", "diagnose",
- "diagnosted", "diagnose",
- "diagnotics", "diagnostic",
- "diagonstic", "diagnostic",
- "dichotomoy", "dichotomy",
- "dicitonary", "dictionary",
- "diconnects", "disconnects",
- "dicovering", "discovering",
- "dictateurs", "dictates",
- "dictionare", "dictionaries",
- "differance", "difference",
- "differenly", "differently",
- "differense", "differences",
- "differente", "difference",
- "differentl", "differential",
- "differenty", "differently",
- "differnece", "difference",
- "difficulte", "difficulties",
- "difficults", "difficulties",
- "difficutly", "difficulty",
- "diffuculty", "difficulty",
- "diganostic", "diagnostic",
- "dimensinal", "dimensional",
- "dimentions", "dimensions",
- "dimesnions", "dimensions",
- "dimineshes", "diminishes",
- "diminising", "diminishing",
- "dimunitive", "diminutive",
- "dinosaures", "dinosaurs",
- "dinosaurus", "dinosaurs",
- "dipections", "depictions",
- "diplimatic", "diplomatic",
- "diplomacia", "diplomatic",
- "diplomancy", "diplomacy",
- "dipolmatic", "diplomatic",
- "directinla", "directional",
- "directionl", "directional",
- "directivos", "directions",
- "directores", "directors",
- "directorys", "directors",
- "directsong", "directions",
- "disaapoint", "disappoint",
- "disagreeed", "disagreed",
- "disapeared", "disappeared",
- "disappeard", "disappeared",
- "disappered", "disappeared",
- "disappiont", "disappoint",
- "disaproval", "disapproval",
- "disastorus", "disastrous",
- "disastrosa", "disastrous",
- "disastrose", "disastrous",
- "disastrosi", "disastrous",
- "disastroso", "disastrous",
- "disaterous", "disastrous",
- "discalimer", "disclaimer",
- "discapline", "discipline",
- "discepline", "discipline",
- "disception", "discretion",
- "discharded", "discharged",
- "disciplers", "disciples",
- "disciplies", "disciplines",
- "disciplins", "disciplines",
- "disciprine", "discipline",
- "disclamier", "disclaimer",
- "discliamer", "disclaimer",
- "disclipine", "discipline",
- "disclousre", "disclosure",
- "disclsoure", "disclosure",
- "discograhy", "discography",
- "discograpy", "discography",
- "discolsure", "disclosure",
- "disconenct", "disconnect",
- "disconncet", "disconnects",
- "disconnets", "disconnects",
- "discontued", "discounted",
- "discoruage", "discourages",
- "discources", "discourse",
- "discourgae", "discourages",
- "discourges", "discourages",
- "discoveres", "discovers",
- "discoveryd", "discovered",
- "discoverys", "discovers",
- "discrecion", "discretion",
- "discreddit", "discredited",
- "discrepany", "discrepancy",
- "discresion", "discretion",
- "discreting", "discretion",
- "discribing", "describing",
- "discrimine", "discriminate",
- "discrouage", "discourages",
- "discrption", "discretion",
- "discusison", "discussions",
- "discusting", "discussing",
- "disgracful", "disgraceful",
- "disgrunted", "disgruntled",
- "disgruntld", "disgruntled",
- "disguisted", "disguise",
- "disgustiny", "disgustingly",
- "disgustosa", "disgusts",
- "disgustose", "disgusts",
- "disgustosi", "disgusts",
- "disgustoso", "disgusts",
- "dishcarged", "discharged",
- "dishinored", "dishonored",
- "disicpline", "discipline",
- "disiplined", "disciplined",
- "dislcaimer", "disclaimer",
- "dismanteld", "dismantled",
- "dismanting", "dismantling",
- "dismentled", "dismantled",
- "dispecable", "despicable",
- "dispencary", "dispensary",
- "dispencers", "dispenser",
- "dispencing", "dispensing",
- "dispensare", "dispenser",
- "dispensory", "dispensary",
- "dispesnary", "dispensary",
- "dispicable", "despicable",
- "displayfps", "displays",
- "dispositon", "disposition",
- "dispostion", "disposition",
- "disputerad", "disputed",
- "disrecpect", "disrespect",
- "disrection", "discretion",
- "disrepsect", "disrespect",
- "disresepct", "disrespect",
- "disrespekt", "disrespect",
- "disription", "disruption",
- "disrispect", "disrespect",
- "disrputing", "disrupting",
- "disruptivo", "disruption",
- "disruptron", "disruption",
- "dissapears", "disappears",
- "dissappear", "disappear",
- "disscusion", "discussion",
- "dissmisive", "dismissive",
- "dissodance", "dissonance",
- "dissonante", "dissonance",
- "dissonence", "dissonance",
- "distastful", "distasteful",
- "disticntly", "distinctly",
- "distiction", "distinction",
- "distincion", "distinction",
- "distincive", "distinctive",
- "distinclty", "distinctly",
- "distinctie", "distinctive",
- "distinctin", "distinctions",
- "distingish", "distinguish",
- "distingush", "distinguish",
- "distintcly", "distinctly",
- "distoriton", "distortion",
- "distorsion", "distortion",
- "distortian", "distortion",
- "distortron", "distortion",
- "distractes", "distracts",
- "distractia", "district",
- "distractin", "district",
- "distractiv", "district",
- "distration", "distortion",
- "distribuem", "distribute",
- "distribuer", "distribute",
- "distribuie", "distribute",
- "distribuit", "distribute",
- "distributs", "distributors",
- "distribuye", "distribute",
- "distrotion", "distortion",
- "distrubing", "disturbing",
- "distrubtes", "distrust",
- "distrubute", "distribute",
- "distubring", "disturbing",
- "disturbace", "disturbance",
- "disturping", "disrupting",
- "disucssing", "discussing",
- "disucssion", "discussion",
- "disurption", "disruption",
- "ditributed", "distributed",
- "diversifiy", "diversify",
- "dividendes", "dividends",
- "dividendos", "dividends",
- "divideneds", "dividend",
- "divinition", "divination",
- "divinitory", "divinity",
- "divisiones", "divisions",
- "dobulelift", "doublelift",
- "doccuments", "documents",
- "documentry", "documentary",
- "dogmatisch", "dogmatic",
- "dolphinese", "dolphins",
- "domianting", "dominating",
- "domimation", "domination",
- "dominacion", "domination",
- "dominaters", "dominates",
- "donwgraded", "downgraded",
- "donwloaded", "downloaded",
- "donwvoters", "downvoters",
- "donwvoting", "downvoting",
- "doomsdaily", "doomsday",
- "doubellift", "doublelift",
- "doubleiift", "doublelift",
- "doubleleft", "doublelift",
- "doublelfit", "doublelift",
- "doublerift", "doublelift",
- "doulbelift", "doublelift",
- "downgarded", "downgraded",
- "downgrated", "downgrade",
- "downlaoded", "downloaded",
- "downloadas", "downloads",
- "downloades", "downloads",
- "downovting", "downvoting",
- "downroaded", "downgraded",
- "downsiders", "downsides",
- "downstaris", "downstairs",
- "downstiars", "downstairs",
- "downtokers", "downvoters",
- "downtoking", "downvoting",
- "downtraded", "downgraded",
- "downviting", "downvoting",
- "downvotear", "downvoters",
- "downvoteas", "downvoters",
- "downvoteds", "downvoters",
- "downvotees", "downvoters",
- "downvotesd", "downvoters",
- "downvotess", "downvoters",
- "downvotest", "downvoters",
- "downvoteur", "downvoters",
- "downvoties", "downvoters",
- "downvotres", "downvoters",
- "downvotted", "downvote",
- "downvottes", "downvoters",
- "downwoters", "downvoters",
- "downwoting", "downvoting",
- "drasticaly", "drastically",
- "drasticlly", "drastically",
- "draughtman", "draughtsman",
- "dumbbellls", "dumbbells",
- "dumbfouded", "dumbfounded",
- "dumbfouned", "dumbfounded",
- "dungeoness", "dungeons",
- "dupilcates", "duplicates",
- "duplicants", "duplicates",
- "duplicatas", "duplicates",
- "duplicitas", "duplicates",
- "duplifaces", "duplicates",
- "durabiltiy", "durability",
- "dyamically", "dynamically",
- "dynamicaly", "dynamically",
- "dynamicdns", "dynamics",
- "dynamiclly", "dynamically",
- "dynamicpsf", "dynamics",
- "dynamitage", "dynamite",
- "dysfuncion", "dysfunction",
- "earhtbound", "earthbound",
- "earthqauke", "earthquake",
- "earthquack", "earthquake",
- "earthquaks", "earthquakes",
- "earthquate", "earthquake",
- "earthqukes", "earthquakes",
- "easthetics", "aesthetics",
- "ecoligical", "ecological",
- "ecomonical", "economical",
- "econimical", "economical",
- "econimists", "economists",
- "economicas", "economics",
- "economicos", "economics",
- "economicus", "economics",
- "economisch", "economic",
- "economisit", "economists",
- "effeciency", "efficiency",
- "effectivly", "effectively",
- "efficeincy", "efficiency",
- "efficently", "efficiently",
- "efficiancy", "efficiency",
- "efficienct", "efficient",
- "efficienty", "efficiently",
- "egotistcal", "egotistical",
- "ehtnically", "ethnically",
- "ejaculaion", "ejaculation",
- "ejaculatie", "ejaculate",
- "ejaculatin", "ejaculation",
- "ejaculaton", "ejaculation",
- "ejaculatte", "ejaculate",
- "electircal", "electrical",
- "electivite", "elective",
- "electoraat", "electorate",
- "electorale", "electorate",
- "electorite", "electorate",
- "electornic", "electronic",
- "electrican", "electrician",
- "electriciy", "electricity",
- "electricty", "electricity",
- "electrinic", "electrician",
- "electroate", "electorate",
- "electrodan", "electron",
- "electroinc", "electron",
- "electrolye", "electrolytes",
- "electroman", "electron",
- "electroncs", "electrons",
- "electrones", "electrons",
- "electronik", "election",
- "electronis", "electronics",
- "electronix", "election",
- "elemantary", "elementary",
- "elementery", "elementary",
- "elementray", "elementary",
- "eleminated", "eliminated",
- "elephantes", "elephants",
- "elephantis", "elephants",
- "elephantos", "elephants",
- "elephantus", "elephants",
- "eletricity", "electricity",
- "elimanates", "eliminates",
- "elimenates", "eliminates",
- "elimentary", "elementary",
- "elimimates", "eliminates",
- "eliminaste", "eliminates",
- "eliminatin", "elimination",
- "eliminaton", "elimination",
- "eliminster", "eliminates",
- "ellipitcal", "elliptical",
- "ellipsical", "elliptical",
- "ellipticle", "elliptical",
- "ellitpical", "elliptical",
- "ellpitical", "elliptical",
- "eloquantly", "eloquently",
- "eloquintly", "eloquently",
- "emapthetic", "empathetic",
- "embarassed", "embarrassed",
- "embarassig", "embarassing",
- "embarrased", "embarrassed",
- "embarrases", "embarrassed",
- "embezelled", "embezzled",
- "emblamatic", "emblematic",
- "embodyment", "embodiment",
- "emergenies", "emergencies",
- "emmigrated", "emigrated",
- "emminently", "eminently",
- "emmisaries", "emissaries",
- "emobdiment", "embodiment",
- "emotionaly", "emotionally",
- "empahsized", "emphasized",
- "empahsizes", "emphasizes",
- "empathatic", "empathetic",
- "emphacized", "emphasized",
- "emphatetic", "empathetic",
- "emphatised", "emphasized",
- "emphatized", "emphasized",
- "emphatizes", "emphasizes",
- "emphazised", "emphasized",
- "emphazises", "emphasizes",
- "emphesized", "emphasized",
- "emphesizes", "emphasizes",
- "emphisized", "emphasized",
- "emphisizes", "emphasizes",
- "empiricaly", "empirically",
- "employeers", "employees",
- "employeurs", "employer",
- "emprisoned", "imprisoned",
- "encahnting", "enchanting",
- "enchancing", "enchanting",
- "enchanging", "enchanting",
- "enchantent", "enchantment",
- "enchantmet", "enchantments",
- "encompases", "encompasses",
- "encounterd", "encountered",
- "encountred", "encountered",
- "encouraing", "encouraging",
- "encoutners", "encounters",
- "encription", "encryption",
- "encrpytion", "encryption",
- "encyrption", "encryption",
- "endlessley", "endlessly",
- "endolithes", "endoliths",
- "enforceing", "enforcing",
- "engagemnet", "engagements",
- "engagemnts", "engagements",
- "engieneers", "engineers",
- "enginereed", "engineered",
- "enivitable", "inevitable",
- "enlargment", "enlargement",
- "enlighment", "enlighten",
- "enlightend", "enlightened",
- "enlightned", "enlightened",
- "enrolement", "enrollment",
- "enrollemnt", "enrollment",
- "enterpirse", "enterprise",
- "enterprice", "enterprise",
- "enterpries", "enterprises",
- "enterprize", "enterprise",
- "enterprsie", "enterprises",
- "enterrpise", "enterprises",
- "entertaing", "entertaining",
- "enthically", "ethnically",
- "enthisiast", "enthusiast",
- "enthuiasts", "enthusiast",
- "enthuisast", "enthusiasts",
- "enthusiams", "enthusiasm",
- "enthusiant", "enthusiast",
- "enthusiats", "enthusiast",
- "enthusiest", "enthusiast",
- "enthusists", "enthusiasts",
- "envelopped", "envelope",
- "enveloppen", "envelope",
- "enveloppes", "envelope",
- "enviorment", "environment",
- "enviroment", "environment",
- "environmet", "environments",
- "equiavlent", "equivalents",
- "equilavent", "equivalent",
- "equilibium", "equilibrium",
- "equilibrim", "equilibrium",
- "equilibrum", "equilibrium",
- "equippment", "equipment",
- "equitorial", "equatorial",
- "equivalant", "equivalent",
- "equivalnce", "equivalence",
- "equivalnet", "equivalents",
- "equivelant", "equivalent",
- "equivelent", "equivalent",
- "equivilant", "equivalent",
- "equivilent", "equivalent",
- "equivlaent", "equivalents",
- "equivolent", "equivalent",
- "eratically", "erratically",
- "escalative", "escalate",
- "escavation", "escalation",
- "esitmation", "estimation",
- "esoterisch", "esoteric",
- "especailly", "especially",
- "espeically", "especially",
- "espressino", "espresso",
- "espression", "espresso",
- "essencials", "essentials",
- "essensials", "essentials",
- "essentails", "essentials",
- "essentialy", "essentially",
- "essentiels", "essentials",
- "essentuals", "essentials",
- "estabishes", "establishes",
- "estimacion", "estimation",
- "estimativo", "estimation",
- "estination", "estimation",
- "ethicallly", "ethically",
- "ethincally", "ethnically",
- "ethnicites", "ethnicities",
- "ethnicitiy", "ethnicity",
- "euphorical", "euphoria",
- "euphorisch", "euphoric",
- "euthanaisa", "euthanasia",
- "euthanazia", "euthanasia",
- "euthanesia", "euthanasia",
- "evaluacion", "evaluation",
- "evalutaion", "evaluation",
- "evaulating", "evaluating",
- "evaulation", "evaluation",
- "eventaully", "eventually",
- "eventially", "eventually",
- "everyoneis", "everyones",
- "exacberate", "exacerbated",
- "exagerated", "exaggerated",
- "exagerates", "exaggerates",
- "exagerrate", "exaggerate",
- "exaggarate", "exaggerate",
- "exaggurate", "exaggerate",
- "exahusting", "exhausting",
- "exahustion", "exhaustion",
- "examinated", "examined",
- "examinerad", "examined",
- "exapansion", "expansion",
- "exapnsions", "expansions",
- "exauhsting", "exhausting",
- "exauhstion", "exhaustion",
- "excecuting", "executing",
- "excecution", "execution",
- "exceedigly", "exceedingly",
- "exceedinly", "exceedingly",
- "excellance", "excellence",
- "excellenet", "excellence",
- "excellenze", "excellence",
- "excerising", "exercising",
- "excessivly", "excessively",
- "exchangees", "exchanges",
- "excitiment", "excitement",
- "exclsuives", "exclusives",
- "exclusivas", "exclusives",
- "exclusivly", "exclusively",
- "exclusivos", "exclusives",
- "exclusivty", "exclusivity",
- "exclussive", "exclusives",
- "exclusvies", "exclusives",
- "excpetions", "exceptions",
- "exculsives", "exclusives",
- "exculsivly", "exclusively",
- "execptions", "exceptions",
- "exectuable", "executable",
- "exectuions", "executions",
- "exectuives", "executives",
- "execusions", "executions",
- "executabil", "executable",
- "executible", "executable",
- "executiner", "executioner",
- "executings", "executions",
- "executivas", "executives",
- "exeedingly", "exceedingly",
- "exepmtions", "exemptions",
- "exeptional", "exceptional",
- "exercicing", "exercising",
- "exercizing", "exercising",
- "exersicing", "exercising",
- "exersising", "exercising",
- "exersizing", "exercising",
- "exerternal", "external",
- "exeuctions", "executions",
- "exhasuting", "exhausting",
- "exhasution", "exhaustion",
- "exhaustivo", "exhaustion",
- "exhibicion", "exhibition",
- "exhibitons", "exhibits",
- "exhuasting", "exhausting",
- "exhuastion", "exhaustion",
- "exibitions", "exhibitions",
- "exictement", "excitement",
- "exipration", "expiration",
- "existantes", "existent",
- "existenial", "existential",
- "existental", "existential",
- "exlcusives", "exclusives",
- "exorbatant", "exorbitant",
- "exorbatent", "exorbitant",
- "exorbidant", "exorbitant",
- "exorbirant", "exorbitant",
- "exorbitent", "exorbitant",
- "expalining", "explaining",
- "expanisons", "expansions",
- "expansivos", "expansions",
- "expanssion", "expansions",
- "expantions", "expansions",
- "expecially", "especially",
- "expectaion", "expectation",
- "expectansy", "expectancy",
- "expectency", "expectancy",
- "expections", "exceptions",
- "expedetion", "expedition",
- "expedicion", "expedition",
- "expeditivo", "expedition",
- "expeiments", "experiments",
- "expemtions", "exemptions",
- "expendeble", "expendable",
- "expendible", "expendable",
- "expensable", "expendable",
- "expentancy", "expectancy",
- "expereince", "experience",
- "experement", "experiment",
- "experiance", "experience",
- "experieced", "experienced",
- "experieces", "experiences",
- "experiemnt", "experiment",
- "experiened", "experienced",
- "experiense", "experiences",
- "expermient", "experiments",
- "experssion", "expression",
- "expextancy", "expectancy",
- "expidetion", "expedition",
- "expierence", "experience",
- "expination", "expiration",
- "expirement", "experiment",
- "explanatin", "explanations",
- "explicatia", "explicit",
- "explicatie", "explicit",
- "explicatif", "explicit",
- "explicatii", "explicit",
- "explicetly", "explicitly",
- "explicilty", "explicitly",
- "explioting", "exploiting",
- "exploiding", "exploiting",
- "exploition", "exploiting",
- "explorarea", "explorer",
- "exploreres", "explorers",
- "explosivas", "explosives",
- "explossion", "explosions",
- "explossive", "explosives",
- "explosvies", "explosives",
- "explotions", "explosions",
- "explusions", "explosions",
- "expodition", "exposition",
- "expoliting", "exploiting",
- "expolsions", "explosions",
- "expolsives", "explosives",
- "exponental", "exponential",
- "exposicion", "exposition",
- "expositivo", "exposition",
- "expotition", "exposition",
- "exprensive", "expressive",
- "expresions", "expression",
- "expresison", "expressions",
- "expressens", "expresses",
- "expressief", "expressive",
- "expressley", "expressly",
- "expriation", "expiration",
- "extensivly", "extensively",
- "extentions", "extensions",
- "exterioara", "exterior",
- "exterioare", "exterior",
- "extermally", "externally",
- "extermists", "extremists",
- "extraccion", "extraction",
- "extractivo", "extraction",
- "extractnow", "extraction",
- "extradtion", "extraction",
- "extremaste", "extremes",
- "extremeley", "extremely",
- "extremelly", "extremely",
- "extrememly", "extremely",
- "extremests", "extremists",
- "extremised", "extremes",
- "extremisim", "extremism",
- "extremisme", "extremes",
- "extremiste", "extremes",
- "extrenally", "externally",
- "extrimists", "extremists",
- "eyeballers", "eyeballs",
- "fabriacted", "fabricated",
- "fabricatie", "fabricated",
- "faciliated", "facilitated",
- "facilitait", "facilitate",
- "facilitant", "facilitate",
- "facilitare", "facilitate",
- "facisnated", "fascinated",
- "facitilies", "facilities",
- "facsinated", "fascinated",
- "fahernheit", "fahrenheit",
- "fahrenhiet", "fahrenheit",
- "fallatious", "fallacious",
- "fallicious", "fallacious",
- "falshbacks", "flashbacks",
- "familiarty", "familiarity",
- "familiarze", "familiarize",
- "fanaticals", "fanatics",
- "fanfaction", "fanfiction",
- "fanfcition", "fanfiction",
- "fanficiton", "fanfiction",
- "fanserivce", "fanservice",
- "fanservise", "fanservice",
- "fanservive", "fanservice",
- "fantasiose", "fantasies",
- "farehnheit", "fahrenheit",
- "farhenheit", "fahrenheit",
- "fascianted", "fascinated",
- "fascinatie", "fascinated",
- "fascinatin", "fascination",
- "fascistisk", "fascists",
- "fatalaties", "fatalities",
- "favoruites", "favourites",
- "favourates", "favourites",
- "favouritsm", "favourites",
- "favourties", "favourites",
- "federacion", "federation",
- "federativo", "federation",
- "fellowhsip", "fellowship",
- "fellowshop", "fellowship",
- "feminimity", "femininity",
- "feministas", "feminists",
- "feminitity", "femininity",
- "fermentato", "fermentation",
- "fertalizer", "fertilizer",
- "fertelizer", "fertilizer",
- "fertilizar", "fertilizer",
- "fertilzier", "fertilizer",
- "fertiziler", "fertilizer",
- "festivales", "festivals",
- "fetishiste", "fetishes",
- "ficticious", "fictitious",
- "filessytem", "filesystem",
- "filesytems", "filesystem",
- "filmamkers", "filmmakers",
- "filmmakare", "filmmakers",
- "finallizes", "finalizes",
- "financialy", "financially",
- "fingernals", "fingernails",
- "fingerpies", "fingertips",
- "fingerpint", "fingerprint",
- "fingertaps", "fingertips",
- "fingertits", "fingertips",
- "fingertops", "fingertips",
- "fireballls", "fireballs",
- "firefigher", "firefighter",
- "firefigter", "firefighter",
- "firendlies", "friendlies",
- "firghtened", "frightened",
- "fisionable", "fissionable",
- "flashligth", "flashlight",
- "flaskbacks", "flashbacks",
- "flawleslly", "flawlessly",
- "flexibiliy", "flexibility",
- "flexibilty", "flexibility",
- "flimmakers", "filmmakers",
- "fluctuatie", "fluctuate",
- "fluctuatin", "fluctuations",
- "flutterhsy", "fluttershy",
- "fluttersky", "fluttershy",
- "flutterspy", "fluttershy",
- "forcifully", "forcefully",
- "forecfully", "forcefully",
- "foreginers", "foreigners",
- "foregorund", "foreground",
- "foreignese", "foreigners",
- "foreigness", "foreigners",
- "foreignors", "foreigners",
- "foreingers", "foreigners",
- "forensisch", "forensic",
- "foreseeble", "foreseeable",
- "forgeiners", "foreigners",
- "forgieners", "foreigners",
- "forgivance", "forgiven",
- "forgivenss", "forgiveness",
- "forgotting", "forgetting",
- "foriegners", "foreigners",
- "formadible", "formidable",
- "formalhaut", "fomalhaut",
- "formallity", "formally",
- "formallize", "formalize",
- "formatiing", "formatting",
- "formatings", "formations",
- "formativos", "formations",
- "formidabel", "formidable",
- "formidabil", "formidable",
- "formidible", "formidable",
- "forminable", "formidable",
- "formitable", "formidable",
- "formuladas", "formulas",
- "formulados", "formulas",
- "forseeable", "foreseeable",
- "fortelling", "foretelling",
- "fortunatly", "fortunately",
- "fortunetly", "fortunately",
- "foundaiton", "foundations",
- "foundaries", "foundries",
- "foundatoin", "foundations",
- "fractalers", "fractals",
- "fractalius", "fractals",
- "fractalpus", "fractals",
- "fracturare", "fracture",
- "fragmanted", "fragment",
- "francaises", "franchises",
- "franchices", "franchises",
- "franchines", "franchises",
- "franchizes", "franchises",
- "franchsies", "franchises",
- "fransiscan", "franciscan",
- "franticaly", "frantically",
- "franticlly", "frantically",
- "fraternaty", "fraternity",
- "fraternety", "fraternity",
- "fraterntiy", "fraternity",
- "fraturnity", "fraternity",
- "fraudalent", "fraudulent",
- "fraudelant", "fraudulent",
- "fraudelent", "fraudulent",
- "fraudolent", "fraudulent",
- "fraudulant", "fraudulent",
- "freedomers", "freedoms",
- "freedomest", "freedoms",
- "freindlies", "friendlies",
- "freindship", "friendship",
- "frequencey", "frequency",
- "friednship", "friendships",
- "friednzone", "friendzoned",
- "friendhsip", "friendship",
- "friendsies", "friendlies",
- "friendzies", "friendlies",
- "friendzond", "friendzoned",
- "frientship", "friendship",
- "frigthened", "frightened",
- "fromatting", "formatting",
- "fromidable", "formidable",
- "frontlinie", "frontline",
- "fruadulent", "fraudulent",
- "frustraded", "frustrated",
- "frustradet", "frustrates",
- "frustraits", "frustrates",
- "frustrants", "frustrates",
- "frustratin", "frustration",
- "frustrsted", "frustrates",
- "fucntional", "functional",
- "fulfulling", "fulfilling",
- "fullfiling", "fulfilling",
- "fullfilled", "fulfilled",
- "fullscrean", "fullscreen",
- "fulttershy", "fluttershy",
- "funcitonal", "functional",
- "fundametal", "fundamental",
- "furstrated", "frustrated",
- "furstrates", "frustrates",
- "furutistic", "futuristic",
- "futhermore", "furthermore",
- "futurestic", "futuristic",
- "futurisitc", "futuristic",
- "futurustic", "futuristic",
- "galvinized", "galvanized",
- "garuanteed", "guaranteed",
- "garuantees", "guarantees",
- "gauntanamo", "guantanamo",
- "gauntlents", "gauntlet",
- "gauranteed", "guaranteed",
- "gaurantees", "guarantees",
- "gaurenteed", "guaranteed",
- "gaurentees", "guarantees",
- "generalice", "generalize",
- "generalife", "generalize",
- "generalnie", "generalize",
- "generaters", "generates",
- "generaties", "generate",
- "generatios", "generators",
- "generatons", "generators",
- "generatore", "generate",
- "generelize", "generalize",
- "generocity", "generosity",
- "generoisty", "generosity",
- "generostiy", "generosity",
- "geneticaly", "genetically",
- "geneticlly", "genetically",
- "genitalias", "genitals",
- "genuinelly", "genuinely",
- "geographia", "geographical",
- "geogrpahic", "geographic",
- "germanisch", "germanic",
- "gigantisch", "gigantic",
- "gimmickers", "gimmicks",
- "girlfirend", "girlfriend",
- "girlfreind", "girlfriend",
- "girlfriens", "girlfriends",
- "girlfrinds", "girlfriends",
- "girlfrined", "girlfriends",
- "goalkeaper", "goalkeeper",
- "goalkeeprs", "goalkeeper",
- "goalkepeer", "goalkeeper",
- "goegraphic", "geographic",
- "golakeeper", "goalkeeper",
- "goldburger", "goldberg",
- "goosebumbs", "goosebumps",
- "goosegumps", "goosebumps",
- "goosepumps", "goosebumps",
- "gothenberg", "gothenburg",
- "govenrment", "government",
- "govermenet", "goverment",
- "govermnent", "governments",
- "governemnt", "government",
- "governened", "governed",
- "governered", "governed",
- "governmant", "governmental",
- "governmetn", "governments",
- "governmnet", "government",
- "govnerment", "government",
- "govornment", "government",
- "gradiating", "graduating",
- "gradiation", "graduation",
- "graduacion", "graduation",
- "grapefriut", "grapefruit",
- "grapefrukt", "grapefruit",
- "graphicaly", "graphically",
- "graphiclly", "graphically",
- "gratituous", "gratuitous",
- "gratiutous", "gratuitous",
- "gratuidous", "gratuitous",
- "gratuituos", "gratuitous",
- "gratutious", "gratuitous",
- "graudating", "graduating",
- "graudation", "graduation",
- "gravitatie", "gravitate",
- "greatfully", "gratefully",
- "greenhosue", "greenhouse",
- "greviances", "grievances",
- "grievences", "grievances",
- "grilfriend", "girlfriend",
- "guaduloupe", "guadalupe",
- "guanatanmo", "guantanamo",
- "guantamamo", "guantanamo",
- "guantamano", "guantanamo",
- "guantanano", "guantanamo",
- "guantanemo", "guantanamo",
- "guantanoma", "guantanamo",
- "guantanomo", "guantanamo",
- "guantonamo", "guantanamo",
- "guarantess", "guarantees",
- "guardiands", "guardians",
- "guardianes", "guardians",
- "guardianis", "guardians",
- "guarenteed", "guaranteed",
- "guarentees", "guarantees",
- "guarnateed", "guaranteed",
- "guarnatees", "guarantees",
- "guarunteed", "guaranteed",
- "guaruntees", "guarantees",
- "guatamalan", "guatemalan",
- "gunatanamo", "guantanamo",
- "gunlsinger", "gunslinger",
- "gunsiinger", "gunslinger",
- "gunslanger", "gunslinger",
- "gunsligner", "gunslinger",
- "gunstinger", "gunslinger",
- "gymanstics", "gymnastics",
- "gymnasitcs", "gymnastics",
- "gynmastics", "gymnastics",
- "haemorrage", "haemorrhage",
- "halloweeen", "halloween",
- "hambergers", "hamburgers",
- "hamburgare", "hamburger",
- "hamburgesa", "hamburgers",
- "hamburgles", "hamburgers",
- "hamburgurs", "hamburgers",
- "handcuffes", "handcuffs",
- "handelbars", "handlebars",
- "handicaped", "handicapped",
- "handwritng", "handwriting",
- "harasments", "harassments",
- "hardlinked", "hardline",
- "harmoniacs", "harmonic",
- "harmonisch", "harmonic",
- "harrasment", "harassment",
- "harrassing", "harassing",
- "harvasting", "harvesting",
- "haversting", "harvesting",
- "headhpones", "headphones",
- "headphoens", "headphones",
- "headquarer", "headquarter",
- "headquater", "headquarter",
- "headshoots", "headshot",
- "healtchare", "healthcare",
- "healtheast", "healthiest",
- "healthyest", "healthiest",
- "heapdhones", "headphones",
- "heartbeart", "heartbeat",
- "heartbeast", "heartbeat",
- "heartborne", "heartbroken",
- "heartbrake", "heartbreak",
- "hearthsone", "hearthstone",
- "heatlhcare", "healthcare",
- "heavyweght", "heavyweight",
- "heavyweigt", "heavyweight",
- "hedgehodge", "hedgehog",
- "heidelburg", "heidelberg",
- "heigthened", "heightened",
- "heistation", "hesitation",
- "helathcare", "healthcare",
- "helicopers", "helicopters",
- "helicoptor", "helicopter",
- "helicotper", "helicopters",
- "helicpoter", "helicopter",
- "helictoper", "helicopters",
- "helikopter", "helicopter",
- "hemingwary", "hemingway",
- "hemingwavy", "hemingway",
- "hemipshere", "hemisphere",
- "hemishpere", "hemisphere",
- "hemmorhage", "hemorrhage",
- "hempishere", "hemisphere",
- "herculeans", "hercules",
- "herculeasy", "hercules",
- "herculeees", "hercules",
- "hesitstion", "hesitation",
- "hestiation", "hesitation",
- "hieghtened", "heightened",
- "hierachies", "hierarchies",
- "hieroglphs", "hieroglyphs",
- "highalnder", "highlander",
- "highlighed", "highlighted",
- "highligted", "highlighted",
- "highloader", "highlander",
- "highpander", "highlander",
- "highscholl", "highschool",
- "highshcool", "highschool",
- "hillarious", "hilarious",
- "hinderance", "hindrance",
- "hinderence", "hindrance",
- "hipsterest", "hipsters",
- "hispanicos", "hispanics",
- "hispanicus", "hispanics",
- "histarical", "historical",
- "histerical", "historical",
- "historiaan", "historians",
- "historicas", "historians",
- "historicly", "historical",
- "historiens", "histories",
- "historisch", "historic",
- "hoemopathy", "homeopathy",
- "hollywoood", "hollywood",
- "homecuming", "homecoming",
- "homeoapthy", "homeopathy",
- "homeonwers", "homeowners",
- "homeopahty", "homeopathy",
- "homeophaty", "homeopathy",
- "homeopothy", "homeopathy",
- "homeothapy", "homeopathy",
- "homepoathy", "homeopathy",
- "homewoners", "homeowners",
- "homoepathy", "homeopathy",
- "homogeneos", "homogeneous",
- "homogeneus", "homogeneous",
- "homophibia", "homophobia",
- "homophibic", "homophobic",
- "homophobie", "homophobe",
- "homophonia", "homophobia",
- "homophopia", "homophobia",
- "homophopic", "homophobic",
- "homosexaul", "homosexual",
- "homosexuel", "homosexual",
- "honeymooon", "honeymoon",
- "hopefullly", "hopefully",
- "hopeleslly", "hopelessly",
- "horisontal", "horizontal",
- "horizantal", "horizontal",
- "horizontes", "horizons",
- "horiztonal", "horizontal",
- "horrendeus", "horrendous",
- "horriblely", "horribly",
- "hospitales", "hospitals",
- "hospitalty", "hospitality",
- "hospitible", "hospitable",
- "hsitorians", "historians",
- "humanaties", "humanities",
- "humanitary", "humanity",
- "humiliatin", "humiliation",
- "humiliaton", "humiliation",
- "humilitied", "humiliated",
- "humillated", "humiliated",
- "hurricance", "hurricane",
- "hurriganes", "hurricanes",
- "hurrikanes", "hurricanes",
- "hurrycanes", "hurricanes",
- "hydropilic", "hydrophilic",
- "hydropobic", "hydrophobic",
- "hyperbolie", "hyperbole",
- "hyperlobic", "hyperbolic",
- "hyperlogic", "hyperbolic",
- "hypertrohy", "hypertrophy",
- "hypertropy", "hypertrophy",
- "hyphotesis", "hypothesis",
- "hypocrates", "hypocrites",
- "hypocriscy", "hypocrisy",
- "hypocrises", "hypocrites",
- "hypocritus", "hypocrites",
- "hypocrties", "hypocrites",
- "hypocrytes", "hypocrites",
- "hypokrites", "hypocrites",
- "hypothecis", "hypothesis",
- "hypotheiss", "hypotheses",
- "hypothesus", "hypotheses",
- "hypothises", "hypotheses",
- "hypothisis", "hypothesis",
- "hypothosis", "hypothesis",
- "hyprocites", "hypocrites",
- "hystarical", "hysterical",
- "hystericly", "hysterical",
- "hysteriska", "hysteria",
- "ibuprofein", "ibuprofen",
- "ibuprofine", "ibuprofen",
- "icelandinc", "icelandic",
- "idealisitc", "idealistic",
- "idealogies", "ideologies",
- "identicial", "identical",
- "identifyed", "identified",
- "identitets", "identities",
- "ideolagies", "ideologies",
- "ideoligies", "ideologies",
- "ideologias", "ideologies",
- "ideologice", "ideologies",
- "ideologije", "ideologies",
- "ideologins", "ideologies",
- "ideologisk", "ideologies",
- "ideolouges", "ideologies",
- "illegalest", "illegals",
- "illegallly", "illegally",
- "illegimacy", "illegitimacy",
- "illegitime", "illegitimate",
- "illegitimt", "illegitimate",
- "illimunati", "illuminati",
- "illinoians", "illinois",
- "illistrate", "illiterate",
- "illitarate", "illiterate",
- "illitirate", "illiterate",
- "illumanati", "illuminati",
- "illumaniti", "illuminati",
- "illumianti", "illuminati",
- "illumimati", "illuminati",
- "illuminaci", "illuminati",
- "illuminadi", "illuminati",
- "illuminami", "illuminati",
- "illuminazi", "illuminati",
- "illuminite", "illuminati",
- "illuminiti", "illuminati",
- "illuminoti", "illuminati",
- "illuminuti", "illuminati",
- "illumniati", "illuminati",
- "illumunati", "illuminati",
- "illuninati", "illuminati",
- "illusiones", "illusions",
- "illustrant", "illustrate",
- "illustrare", "illustrate",
- "illustrato", "illustration",
- "imablanced", "imbalanced",
- "imablances", "imbalances",
- "imaginatie", "imaginative",
- "imaginaton", "imagination",
- "imaginitve", "imaginative",
- "imbalenced", "imbalanced",
- "imbalences", "imbalances",
- "imcomplete", "incomplete",
- "imediately", "immediately",
- "imigration", "emigration",
- "immaturaty", "immaturity",
- "immaturety", "immaturity",
- "immedeatly", "immediately",
- "immediatly", "immediately",
- "immedietly", "immediately",
- "immenseley", "immensely",
- "immidately", "immediately",
- "immigranti", "immigration",
- "immigrents", "immigrants",
- "immitating", "imitating",
- "immobilien", "immobile",
- "immobilier", "immobile",
- "immobilzed", "immobile",
- "immobilzer", "immobile",
- "immobilzes", "immobile",
- "immortales", "immortals",
- "immortalis", "immortals",
- "immortaliy", "immortality",
- "immortalls", "immortals",
- "immortalty", "immortality",
- "impartirla", "impartial",
- "impecabbly", "impeccably",
- "impeccible", "impeccable",
- "impeckable", "impeccable",
- "impelments", "implements",
- "imperetive", "imperative",
- "imperialsm", "imperialism",
- "imperialst", "imperialist",
- "imperitave", "imperative",
- "imperitive", "imperative",
- "implaments", "implements",
- "implantase", "implants",
- "implausble", "implausible",
- "implausibe", "implausible",
- "implemenet", "implements",
- "implicatia", "implicit",
- "implicatie", "implicit",
- "implicatii", "implicit",
- "implicetly", "implicitly",
- "impliciete", "implicit",
- "implicilty", "implicitly",
- "impliments", "implements",
- "imporbable", "improbable",
- "importanly", "importantly",
- "importanty", "importantly",
- "importence", "importance",
- "importerad", "imported",
- "imporvised", "improvised",
- "impossable", "impossible",
- "impossbily", "impossibly",
- "impossibal", "impossibly",
- "impossibel", "impossibly",
- "impossibry", "impossibly",
- "impossibul", "impossibly",
- "impractial", "impractical",
- "impreative", "imperative",
- "impresison", "impressions",
- "impressoin", "impressions",
- "impressons", "impressions",
- "improbabil", "improbable",
- "improbible", "improbable",
- "impropable", "improbable",
- "improsined", "imprisoned",
- "improsoned", "imprisoned",
- "improvemnt", "improvement",
- "improvents", "improves",
- "improvized", "improvised",
- "imprsioned", "imprisoned",
- "impulsemos", "impulses",
- "imrpovised", "improvised",
- "inablility", "inability",
- "inaccruate", "inaccurate",
- "inadaquate", "inadequate",
- "inadaquete", "inadequate",
- "inadecuate", "inadequate",
- "inadeguate", "inadequate",
- "inadeqaute", "inadequate",
- "inadequete", "inadequate",
- "inadequite", "inadequate",
- "inadiquate", "inadequate",
- "inagurated", "inaugurated",
- "inbalanced", "imbalanced",
- "inbetweeen", "inbetween",
- "incarnaton", "incarnation",
- "incentivos", "incentives",
- "inchoerent", "incoherent",
- "incidentes", "incidents",
- "incidently", "incidentally",
- "incidentul", "incidental",
- "inclreased", "increased",
- "incognitio", "incognito",
- "incoherant", "incoherent",
- "incohorent", "incoherent",
- "incorectly", "incorrectly",
- "incorrecly", "incorrectly",
- "incorrecty", "incorrectly",
- "incorretly", "incorrectly",
- "incraments", "increments",
- "incredable", "incredible",
- "incredably", "incredibly",
- "incremetal", "incremental",
- "incriments", "increments",
- "inctroduce", "introduce",
- "indefenite", "indefinite",
- "indefinate", "indefinite",
- "indefinete", "indefinite",
- "indefinity", "indefinitely",
- "indeginous", "indigenous",
- "indentical", "identical",
- "independet", "independent",
- "indepenent", "independent",
- "inderictly", "indirectly",
- "indicaters", "indicates",
- "indicativo", "indication",
- "indicatore", "indicate",
- "indicitave", "indicative",
- "indicitive", "indicative",
- "indiffernt", "indifferent",
- "indigenius", "indigenous",
- "indiginous", "indigenous",
- "indigneous", "indigenous",
- "indikation", "indication",
- "indireclty", "indirectly",
- "indirektly", "indirectly",
- "individuel", "individual",
- "indiviudal", "individuals",
- "indivudual", "individual",
- "indoensian", "indonesian",
- "indonasian", "indonesian",
- "indoneisan", "indonesian",
- "indonesean", "indonesian",
- "indonesien", "indonesian",
- "indonesion", "indonesian",
- "indonisian", "indonesian",
- "indonistan", "indonesian",
- "indpendent", "independent",
- "industiral", "industrial",
- "industires", "industries",
- "industrail", "industrial",
- "industrees", "industries",
- "industrias", "industries",
- "industriel", "industrial",
- "industrija", "industrial",
- "industrije", "industries",
- "indviduals", "individuals",
- "inefficent", "inefficient",
- "ineqaulity", "inequality",
- "inequailty", "inequality",
- "inevatible", "inevitable",
- "inevetable", "inevitable",
- "inevetably", "inevitably",
- "inevetible", "inevitable",
- "inevidable", "inevitable",
- "inevidably", "inevitably",
- "inevitible", "inevitable",
- "inevitibly", "inevitably",
- "inevtiable", "inevitable",
- "inevtiably", "inevitably",
- "infallable", "infallible",
- "infaltable", "inflatable",
- "infeccious", "infectious",
- "infecteous", "infectious",
- "infectuous", "infectious",
- "infedility", "infidelity",
- "infektious", "infectious",
- "inferioara", "inferior",
- "inferioare", "inferior",
- "inferiorty", "inferiority",
- "inferrence", "inference",
- "infestaion", "infestation",
- "infestaton", "infestation",
- "infestions", "infections",
- "infideltiy", "infidelity",
- "infidility", "infidelity",
- "infiltrade", "infiltrate",
- "infiltrait", "infiltrate",
- "infiltrare", "infiltrate",
- "infiltrase", "infiltrate",
- "infinately", "infinitely",
- "infinetely", "infinitely",
- "infiniment", "infinite",
- "infinitley", "infinitely",
- "infintiely", "infinitely",
- "inflamable", "inflatable",
- "inflateble", "inflatable",
- "inflatible", "inflatable",
- "infleunced", "influenced",
- "inflitrate", "infiltrate",
- "influanced", "influenced",
- "influances", "influences",
- "influencie", "influences",
- "influening", "influencing",
- "influensed", "influences",
- "influenser", "influences",
- "influenses", "influences",
- "influental", "influential",
- "influented", "influenced",
- "influentes", "influences",
- "influneced", "influenced",
- "infograhic", "infographic",
- "infograpic", "infographic",
- "infomation", "information",
- "informable", "informal",
- "informarla", "informal",
- "informarle", "informal",
- "informarlo", "informal",
- "informatie", "informative",
- "informella", "informal",
- "informerad", "informed",
- "informtion", "information",
- "infridging", "infringing",
- "infrigning", "infringing",
- "infulenced", "influenced",
- "infulences", "influences",
- "ingenuitiy", "ingenuity",
- "ingrediant", "ingredient",
- "ingrediens", "ingredients",
- "ingrediets", "ingredient",
- "inhabitans", "inhabitants",
- "inhabitats", "inhabitants",
- "inherantly", "inherently",
- "inherintly", "inherently",
- "inheritage", "heritage",
- "inhernetly", "inherently",
- "inifnitely", "infinitely",
- "initaition", "initiation",
- "initalised", "initialised",
- "initaliser", "initialiser",
- "initalises", "initialises",
- "initalisms", "initialisms",
- "initalized", "initialized",
- "initalizer", "initializer",
- "initalizes", "initializes",
- "initalling", "initialling",
- "initalness", "initialness",
- "initiaitve", "initiatives",
- "initiaties", "initiatives",
- "initiativs", "initiatives",
- "initiatves", "initiatives",
- "initiavite", "initiatives",
- "inititaive", "initiatives",
- "inititiave", "initiatives",
- "initmately", "intimately",
- "initmidate", "intimidate",
- "inituition", "initiation",
- "injustaces", "injustices",
- "injusticas", "injustices",
- "inmigrants", "immigrants",
- "innoavtion", "innovations",
- "innocentes", "innocents",
- "innotation", "innovation",
- "innovacion", "innovation",
- "innovaiton", "innovations",
- "innovatief", "innovate",
- "innovaties", "innovate",
- "innovativo", "innovation",
- "innvoation", "innovation",
- "inofficial", "unofficial",
- "inpsection", "inspection",
- "inquisator", "inquisitor",
- "inquisidor", "inquisitor",
- "inquisiter", "inquisitor",
- "inquisitio", "inquisitor",
- "inquisitir", "inquisitor",
- "inquisiton", "inquisition",
- "inquistior", "inquisitor",
- "inquizitor", "inquisitor",
- "inqusitior", "inquisitor",
- "insensitve", "insensitive",
- "insepction", "inspection",
- "insistance", "insistence",
- "insistente", "insistence",
- "insistenze", "insistence",
- "insistince", "insistence",
- "insitution", "institution",
- "inspeccion", "inspection",
- "inspeciton", "inspections",
- "inspectons", "inspections",
- "inspectres", "inspectors",
- "inspektion", "inspection",
- "inspektors", "inspectors",
- "inspiraste", "inspires",
- "inspiraton", "inspiration",
- "inspirerad", "inspired",
- "inspireras", "inspires",
- "insrugency", "insurgency",
- "instabiliy", "instability",
- "instabilty", "instability",
- "installeer", "installer",
- "installent", "installment",
- "installesd", "installs",
- "installion", "installing",
- "instatance", "instance",
- "instelling", "installing",
- "instituded", "instituted",
- "instituion", "institution",
- "institutie", "institute",
- "institutue", "instituted",
- "instrament", "instrument",
- "instrcutor", "instructors",
- "instrucion", "instruction",
- "instructer", "instructor",
- "instructie", "instructed",
- "instruktor", "instructor",
- "instuction", "instruction",
- "instuments", "instruments",
- "insturcted", "instructed",
- "insturctor", "instructor",
- "insturment", "instrument",
- "instutions", "intuitions",
- "instututed", "instituted",
- "insurgance", "insurgency",
- "insurgancy", "insurgency",
- "intangable", "intangible",
- "intangeble", "intangible",
- "intangibil", "intangible",
- "intanjible", "intangible",
- "integraded", "integrated",
- "integrarla", "integral",
- "integrarlo", "integral",
- "integratie", "integrated",
- "integreres", "interferes",
- "integreted", "integrated",
- "inteligent", "intelligent",
- "intenseley", "intensely",
- "intensitiy", "intensity",
- "intentinal", "intentional",
- "intentines", "intestines",
- "interacive", "interactive",
- "interactes", "interacts",
- "interactie", "interactive",
- "interactue", "interacted",
- "interasted", "interacted",
- "interbread", "interbreed",
- "intercepto", "interception",
- "intercorse", "intercourse",
- "intercouse", "intercourse",
- "intereacts", "interfaces",
- "interected", "interacted",
- "interefers", "interferes",
- "interesant", "interest",
- "interesing", "interesting",
- "interestes", "interests",
- "interfacce", "interfaces",
- "interfears", "interferes",
- "interfeers", "interferes",
- "interferce", "interferes",
- "interferre", "interfere",
- "intergated", "integrated",
- "interioara", "interior",
- "interioare", "interior",
- "intermedie", "intermediate",
- "internetbs", "internets",
- "internetes", "internets",
- "internetis", "internets",
- "internetts", "internets",
- "internetus", "internets",
- "interprate", "interpret",
- "interrugum", "interregnum",
- "interruped", "interrupted",
- "interstela", "interstellar",
- "intervalls", "intervals",
- "intervalos", "intervals",
- "interveign", "intervening",
- "interveing", "intervening",
- "interveiws", "interviews",
- "intervento", "intervention",
- "intervenue", "intervene",
- "interveres", "interferes",
- "intervieni", "interviewing",
- "intervieuw", "interviews",
- "interviewd", "interviewed",
- "interviewr", "interviewer",
- "intervines", "intervenes",
- "interviwed", "interviewed",
- "interviwer", "interviewer",
- "interwebbs", "interwebs",
- "intestents", "intestines",
- "intestinas", "intestines",
- "intestinos", "intestines",
- "intestions", "intestines",
- "intidimate", "intimidate",
- "intimadate", "intimidate",
- "intimatley", "intimately",
- "intimiated", "intimidate",
- "intimidade", "intimidated",
- "intimidant", "intimidate",
- "intimidare", "intimidate",
- "intimitade", "intimidated",
- "intimitaly", "intimately",
- "intimitate", "intimidate",
- "intimitely", "intimately",
- "intolarant", "intolerant",
- "intolerace", "intolerance",
- "intolerate", "intolerant",
- "intolerent", "intolerant",
- "intolorant", "intolerant",
- "intolorent", "intolerant",
- "intorduced", "introduced",
- "intorduces", "introduces",
- "intorverts", "introverts",
- "intoxicted", "intoxicated",
- "intraverts", "introverts",
- "intreguing", "intriguing",
- "intricaces", "intricacies",
- "intriguied", "intrigue",
- "intrigured", "intrigue",
- "intrinseci", "intrinsic",
- "intrinsinc", "intrinsic",
- "intriquing", "intriguing",
- "intriuging", "intriguing",
- "introdecks", "introduces",
- "introdused", "introduces",
- "introvents", "introverts",
- "introvered", "introverted",
- "introversa", "introverts",
- "introverse", "introverts",
- "introversi", "introverts",
- "introverso", "introverts",
- "introversy", "introverts",
- "introveted", "introverted",
- "intruduced", "introduced",
- "intruduces", "introduces",
- "intruiging", "intriguing",
- "intruments", "instruments",
- "intuitevly", "intuitively",
- "intuitivly", "intuitively",
- "intuitivno", "intuition",
- "intutively", "intuitively",
- "inumerable", "enumerable",
- "inusrgency", "insurgency",
- "invaderats", "invaders",
- "invaildate", "invalidates",
- "invairably", "invariably",
- "invaldiate", "invalidates",
- "invalidade", "invalidate",
- "invalidare", "invalidate",
- "invalubale", "invaluable",
- "invalueble", "invaluable",
- "invaraibly", "invariably",
- "invariabil", "invariably",
- "invaribaly", "invariably",
- "invaulable", "invaluable",
- "inveitable", "inevitable",
- "inveitably", "inevitably",
- "invensions", "inventions",
- "inventario", "inventor",
- "inventarlo", "inventor",
- "inventaron", "inventor",
- "inventings", "inventions",
- "inventivos", "inventions",
- "invertendo", "inverted",
- "inverterad", "inverted",
- "invertions", "inventions",
- "investemnt", "investments",
- "investiage", "investigate",
- "investions", "inventions",
- "investirat", "investigator",
- "investmens", "investments",
- "invicinble", "invincible",
- "invididual", "individual",
- "invincable", "invincible",
- "invinceble", "invincible",
- "invinicble", "invincible",
- "invinsible", "invincible",
- "invinvible", "invincible",
- "invisibily", "invisibility",
- "invitacion", "invitation",
- "invitating", "invitation",
- "involunary", "involuntary",
- "involvment", "involvement",
- "ironcially", "ironically",
- "irracional", "irrational",
- "irrationel", "irrational",
- "irrelavant", "irrelevant",
- "irrelavent", "irrelevant",
- "irrelevent", "irrelevant",
- "irrelivant", "irrelevant",
- "irrelivent", "irrelevant",
- "irrevelant", "irrelevant",
- "irreverant", "irrelevant",
- "irridation", "irritation",
- "irriration", "irritation",
- "irritacion", "irritation",
- "irritaties", "irritate",
- "islamisist", "islamist",
- "islamistas", "islamists",
- "isntalling", "installing",
- "isntructed", "instructed",
- "isntrument", "instrument",
- "israeliens", "israelis",
- "israelitas", "israelis",
- "italianess", "italians",
- "itnroduced", "introduced",
- "jailborken", "jailbroken",
- "jalibroken", "jailbroken",
- "jamaicains", "jamaican",
- "jamaicaman", "jamaican",
- "jerusaleum", "jerusalem",
- "jounralism", "journalism",
- "jounralist", "journalist",
- "jouranlism", "journalism",
- "jouranlist", "journalist",
- "journalims", "journals",
- "journalits", "journals",
- "journalizm", "journalism",
- "journalsim", "journalism",
- "journolist", "journalist",
- "judegments", "judgements",
- "judgemenal", "judgemental",
- "judgemetal", "judgemental",
- "jugdements", "judgements",
- "juggarnaut", "juggernaut",
- "juggeranut", "juggernaut",
- "juggernath", "juggernaut",
- "juggernout", "juggernaut",
- "juggernuat", "juggernaut",
- "juggetnaut", "juggernaut",
- "jugglenaut", "juggernaut",
- "juggurnaut", "juggernaut",
- "justifible", "justifiable",
- "juvenilles", "juvenile",
- "kickstarer", "kickstarter",
- "kickstartr", "kickstarter",
- "kickstater", "kickstarter",
- "kidnapning", "kidnapping",
- "kidnappade", "kidnapped",
- "killingest", "killings",
- "kilometros", "kilometers",
- "kilomiters", "kilometers",
- "kilomoters", "kilometers",
- "kilomteres", "kilometers",
- "kindapping", "kidnapping",
- "kingdomers", "kingdoms",
- "krpytonite", "kryptonite",
- "krypotnite", "kryptonite",
- "krypronite", "kryptonite",
- "kryptinite", "kryptonite",
- "kryptolite", "kryptonite",
- "kryptonyte", "kryptonite",
- "krypyonite", "kryptonite",
- "krytponite", "kryptonite",
- "kyrptonite", "kryptonite",
- "labarotory", "laboratory",
- "laboratroy", "laboratory",
- "laborerers", "laborers",
- "laboritory", "laboratory",
- "laborotory", "laboratory",
- "lackbuster", "lackluster",
- "lacklaster", "lackluster",
- "landacapes", "landscapes",
- "landingers", "landings",
- "landshapes", "landscapes",
- "landspaces", "landscapes",
- "lannasters", "lannisters",
- "lannesters", "lannisters",
- "lannistars", "lannisters",
- "lannsiters", "lannisters",
- "lateration", "alteration",
- "latitudine", "latitude",
- "laughabley", "laughably",
- "laughablly", "laughably",
- "launchered", "launched",
- "leaglizing", "legalizing",
- "lectureres", "lectures",
- "legalazing", "legalizing",
- "legalizare", "legalize",
- "legalizate", "legalize",
- "legendaies", "legendaries",
- "legendaris", "legendaries",
- "legimitacy", "legitimacy",
- "legimitate", "legitimate",
- "legislatie", "legislative",
- "legitamacy", "legitimacy",
- "legitamate", "legitimate",
- "legitamicy", "legitimacy",
- "legitamite", "legitimate",
- "legitemacy", "legitimacy",
- "legitemate", "legitimate",
- "legitimaly", "legitimacy",
- "legitimicy", "legitimacy",
- "legitimite", "legitimate",
- "leiutenant", "lieutenant",
- "lesbianese", "lesbians",
- "lesbianest", "lesbians",
- "leuitenant", "lieutenant",
- "levetating", "levitating",
- "liberacion", "liberation",
- "liberalest", "liberate",
- "liberalizm", "liberalism",
- "liberalnim", "liberalism",
- "liberalsim", "liberalism",
- "liberarion", "liberation",
- "liberaties", "liberate",
- "liberatore", "liberate",
- "libertania", "libertarians",
- "libguistic", "linguistic",
- "lietuenant", "lieutenant",
- "lieutanant", "lieutenant",
- "lieutanent", "lieutenant",
- "lieutenent", "lieutenant",
- "lifestiles", "lifestyles",
- "lifestlyes", "lifestyles",
- "lifesystem", "filesystem",
- "lifesytles", "lifestyles",
- "lifetimers", "lifetimes",
- "lifetsyles", "lifestyles",
- "lighhtning", "lightening",
- "lightergas", "lighters",
- "lighthning", "lightening",
- "lighthorse", "lighthouse",
- "lighthosue", "lighthouse",
- "lighthours", "lighthouse",
- "lightining", "lighting",
- "lightneing", "lightening",
- "lightnting", "lightening",
- "lightrooom", "lightroom",
- "lightweigt", "lightweight",
- "ligitation", "litigation",
- "ligthening", "lightening",
- "ligthhouse", "lighthouse",
- "likelyhood", "likelihood",
- "limination", "limitation",
- "limitacion", "limitation",
- "limitaiton", "limitation",
- "limitating", "limitation",
- "limitativo", "limitation",
- "linguisics", "linguistics",
- "linguisitc", "linguistics",
- "linguistcs", "linguistics",
- "linguistis", "linguistics",
- "linguitics", "linguistic",
- "lingusitic", "linguistics",
- "lingvistic", "linguistic",
- "liousville", "louisville",
- "listeneres", "listeners",
- "literallly", "literally",
- "literarely", "literary",
- "literarlly", "literary",
- "literatire", "literate",
- "literative", "literate",
- "literatute", "literate",
- "lithuanina", "lithuania",
- "litterally", "literally",
- "liuetenant", "lieutenant",
- "liveatream", "livestream",
- "livelehood", "livelihood",
- "liverpoool", "liverpool",
- "livescream", "livestream",
- "livestreem", "livestream",
- "livestrems", "livestream",
- "livilehood", "livelihood",
- "livliehood", "livelihood",
- "lobbyistes", "lobbyists",
- "lockacreen", "lockscreen",
- "logictical", "logistical",
- "logisitcal", "logistical",
- "logisticas", "logistics",
- "logisticly", "logistical",
- "loiusville", "louisville",
- "lollipoopy", "lollipop",
- "lonelyness", "loneliness",
- "longevitiy", "longevity",
- "lonileness", "loneliness",
- "lonlieness", "loneliness",
- "louieville", "louisville",
- "louisiania", "louisiana",
- "louisianna", "louisiana",
- "louisivlle", "louisville",
- "louisviile", "louisville",
- "lousiville", "louisville",
- "luietenant", "lieutenant",
- "mabyelline", "maybelline",
- "magnifient", "magnificent",
- "mainpulate", "manipulate",
- "mainstreem", "mainstream",
- "maintaince", "maintained",
- "maintaines", "maintains",
- "maintainig", "maintaining",
- "maintenace", "maintenance",
- "maintianed", "maintained",
- "maintioned", "mentioned",
- "malfuncion", "malfunction",
- "malpractce", "malpractice",
- "managebale", "manageable",
- "maneagable", "manageable",
- "maneouvred", "manoeuvred",
- "maneouvres", "manoeuvres",
- "maneuveres", "maneuvers",
- "maneuveurs", "maneuver",
- "manifestas", "manifests",
- "manifestes", "manifests",
- "manifestus", "manifests",
- "manipluate", "manipulate",
- "manipualte", "manipulate",
- "manipulant", "manipulate",
- "manipulare", "manipulate",
- "manipulted", "manipulated",
- "maniuplate", "manipulate",
- "mannarisms", "mannerisms",
- "mannersims", "mannerisms",
- "mannorisms", "mannerisms",
- "manufacter", "manufacture",
- "manufacure", "manufacture",
- "manufature", "manufacture",
- "maraudeurs", "marauder",
- "margaritte", "margaret",
- "margianlly", "marginally",
- "marginaali", "marginal",
- "marginable", "marginal",
- "marignally", "marginally",
- "marijuanna", "marijuana",
- "marketting", "marketing",
- "marshmalow", "marshmallow",
- "masculinty", "masculinity",
- "massacrare", "massacre",
- "massivelly", "massively",
- "masteriers", "masteries",
- "masternind", "mastermind",
- "masterpice", "masterpiece",
- "mastrubate", "masturbate",
- "mastubrate", "masturbated",
- "masturabte", "masturbate",
- "masturbait", "masturbate",
- "masturbare", "masturbate",
- "masturbeta", "masturbated",
- "masturdate", "masturbate",
- "materiales", "materials",
- "materialsm", "materialism",
- "maximazing", "maximizing",
- "maximixing", "maximizing",
- "mayballine", "maybelline",
- "maybellene", "maybelline",
- "maybellibe", "maybelline",
- "maybilline", "maybelline",
- "mccarthyst", "mccarthyist",
- "mdifielder", "midfielder",
- "meagthread", "megathread",
- "meaningess", "meanings",
- "meaningles", "meanings",
- "meatballls", "meatballs",
- "mecahnical", "mechanical",
- "mecahnisms", "mechanisms",
- "mechancial", "mechanical",
- "mechandise", "merchandise",
- "mechanichs", "mechanics",
- "mechanicle", "mechanical",
- "mechanicly", "mechanical",
- "mechanicus", "mechanics",
- "mechanincs", "mechanic",
- "mechanisim", "mechanism",
- "mechansims", "mechanisms",
- "mechinical", "mechanical",
- "mechinisms", "mechanisms",
- "mediaction", "medications",
- "medicacion", "medication",
- "medicaiton", "medication",
- "medicalert", "medicare",
- "medicallly", "medically",
- "medicatons", "medications",
- "medicinens", "medicines",
- "medicinske", "medicine",
- "medicority", "mediocrity",
- "medidating", "meditating",
- "mediocirty", "mediocrity",
- "mediocraty", "mediocrity",
- "mediocrety", "mediocrity",
- "mediocricy", "mediocrity",
- "mediocrily", "mediocrity",
- "mediocrisy", "mediocrity",
- "meditacion", "medications",
- "meditaiton", "meditation",
- "melatonian", "melatonin",
- "melatonion", "melatonin",
- "mellinnium", "millennium",
- "melodieuse", "melodies",
- "membrances", "membrane",
- "mentallity", "mentally",
- "mentionnes", "mentions",
- "mercenaire", "mercenaries",
- "mercenares", "mercenaries",
- "mercentile", "mercantile",
- "merchanise", "merchandise",
- "merchantos", "merchants",
- "messagease", "messages",
- "messagepad", "messaged",
- "messenging", "messaging",
- "metabalism", "metabolism",
- "metabilism", "metabolism",
- "metabloism", "metabolism",
- "metablosim", "metabolism",
- "metabolics", "metabolism",
- "metabolizm", "metabolism",
- "metabolsim", "metabolism",
- "metalurgic", "metallurgic",
- "metaphoras", "metaphors",
- "metaphores", "metaphors",
- "metaphyics", "metaphysics",
- "meterology", "meteorology",
- "methaphors", "metaphors",
- "methodolgy", "methodology",
- "methodoloy", "methodology",
- "metrapolis", "metropolis",
- "metrolopis", "metropolis",
- "metropilis", "metropolis",
- "metroplois", "metropolis",
- "metropolin", "metropolitan",
- "metropolos", "metropolis",
- "metropolys", "metropolis",
- "mexicanese", "mexicans",
- "mexicaness", "mexicans",
- "michelline", "michelle",
- "micorwaves", "microwaves",
- "microhpone", "microphone",
- "microscoop", "microscope",
- "microvaves", "microwaves",
- "microvaxes", "microwaves",
- "micrpohone", "microphones",
- "midfeilder", "midfielder",
- "midfiedler", "midfielder",
- "midfieldes", "midfielders",
- "midfielers", "midfielders",
- "midfileder", "midfielder",
- "midifelder", "midfielder",
- "midnlessly", "mindlessly",
- "migitation", "mitigation",
- "migrainers", "migraines",
- "miletsones", "milestones",
- "milisecond", "millisecond",
- "militiades", "militias",
- "militiants", "militias",
- "millinnium", "millennium",
- "miminalist", "minimalist",
- "minamilist", "minimalist",
- "mindleslly", "mindlessly",
- "minimazing", "minimizing",
- "minimilast", "minimalist",
- "minimilist", "minimalist",
- "mininalist", "minimalist",
- "ministeres", "ministers",
- "ministerns", "ministers",
- "minneaplis", "minneapolis",
- "minneapols", "minneapolis",
- "minnesotta", "minnesota",
- "minoritets", "minorities",
- "minoroties", "minorities",
- "miracalous", "miraculous",
- "miracluous", "miraculous",
- "miracoulus", "miraculous",
- "mircophone", "microphone",
- "mircoscope", "microscope",
- "mircowaves", "microwaves",
- "misandrony", "misandry",
- "miscarrage", "miscarriage",
- "miscarrige", "miscarriage",
- "misdemenor", "misdemeanor",
- "miserabley", "miserably",
- "miserablly", "miserably",
- "misforture", "misfortune",
- "misgoynist", "misogynist",
- "misinfomed", "misinformed",
- "misinterpt", "misinterpret",
- "misisonary", "missionary",
- "misoganist", "misogynist",
- "misogenist", "misogynist",
- "misoginist", "misogynist",
- "misoginyst", "misogynist",
- "misognyist", "misogynist",
- "misogonist", "misogynist",
- "misogonyst", "misogynist",
- "misogyinst", "misogynist",
- "misogynyst", "misogynist",
- "misoygnist", "misogynist",
- "mispelling", "misspelling",
- "missionare", "missionaries",
- "missionera", "missionary",
- "missisippi", "mississippi",
- "mississipi", "mississippi",
- "mississppi", "mississippi",
- "misspeling", "misspelling",
- "misspellng", "misspelling",
- "mistakedly", "mistakenly",
- "mistakinly", "mistakenly",
- "mistankely", "mistakenly",
- "misterious", "mysterious",
- "misteryous", "mysterious",
- "mistreaded", "mistreated",
- "misygonist", "misogynist",
- "mitigaiton", "mitigation",
- "moderacion", "moderation",
- "moderaters", "moderates",
- "moderatley", "moderately",
- "moderatore", "moderate",
- "moderatorn", "moderation",
- "modificato", "modification",
- "modifieras", "modifiers",
- "modifieres", "modifiers",
- "moisturier", "moisturizer",
- "moleculair", "molecular",
- "molestaion", "molestation",
- "molestarle", "molester",
- "molestarme", "molester",
- "molestarse", "molester",
- "molestarte", "molester",
- "molestered", "molested",
- "momentarly", "momentarily",
- "monagomous", "monogamous",
- "monetizare", "monetize",
- "monitering", "monitoring",
- "monogymous", "monogamous",
- "monolistic", "monolithic",
- "monolitich", "monolithic",
- "monolopies", "monopolies",
- "monolothic", "monolithic",
- "monolythic", "monolithic",
- "monopilies", "monopolies",
- "monoploies", "monopolies",
- "monopolets", "monopolies",
- "monopolice", "monopolies",
- "monopolios", "monopolies",
- "monothilic", "monolithic",
- "monsterous", "monsters",
- "montioring", "monitoring",
- "monumentos", "monuments",
- "monumentul", "monumental",
- "monumentus", "monuments",
- "mormonisim", "mormonism",
- "morphinate", "morphine",
- "morrisette", "morissette",
- "morrisound", "morrison",
- "mosquitero", "mosquito",
- "mosquiters", "mosquitoes",
- "motherbard", "motherboard",
- "motherboad", "motherboard",
- "motherbord", "motherboard",
- "motivaiton", "motivations",
- "motiviated", "motivated",
- "motorcicle", "motorcycle",
- "motorcylce", "motorcycle",
- "motorcyles", "motorcycles",
- "motorollas", "motorola",
- "mouthpeace", "mouthpiece",
- "mouthpeice", "mouthpiece",
- "movespeeed", "movespeed",
- "mozzaralla", "mozzarella",
- "mozzeralla", "mozzarella",
- "mozzorella", "mozzarella",
- "mulitation", "mutilation",
- "mulitplied", "multiplied",
- "mulitplier", "multiplier",
- "mulitverse", "multiverse",
- "multilpier", "multiplier",
- "multiplaer", "multiplier",
- "multiplaye", "multiply",
- "multiplayr", "multiply",
- "multiplays", "multiply",
- "multipleye", "multiply",
- "multipling", "multiplying",
- "multiplyed", "multiplied",
- "multiplyer", "multiple",
- "multiplyng", "multiplying",
- "murderered", "murdered",
- "murdereres", "murderers",
- "muscicians", "musicians",
- "musculaire", "muscular",
- "mushroooms", "mushroom",
- "mutialtion", "mutilation",
- "mutiliated", "mutilated",
- "mutliation", "mutilation",
- "mutliplied", "multiplied",
- "mutliplier", "multiplier",
- "mutliverse", "multiverse",
- "mysogynist", "misogynist",
- "mysterieus", "mysteries",
- "nagivating", "navigating",
- "nagivation", "navigation",
- "narcassism", "narcissism",
- "narcassist", "narcissist",
- "narcessist", "narcissist",
- "narciscism", "narcissism",
- "narciscist", "narcissist",
- "narcisissm", "narcissism",
- "narcisisst", "narcissist",
- "narcisists", "narcissist",
- "narcissicm", "narcissism",
- "narcissict", "narcissist",
- "narcissitc", "narcissist",
- "narcissits", "narcissist",
- "narcoticos", "narcotics",
- "narrativas", "narratives",
- "narrativos", "narratives",
- "narritives", "narratives",
- "nashvillle", "nashville",
- "nationales", "nationals",
- "nationalis", "nationals",
- "nationalit", "nationalist",
- "nationaliy", "nationality",
- "nationalty", "nationality",
- "nationella", "national",
- "naturually", "naturally",
- "naviagting", "navigating",
- "naviagtion", "navigation",
- "navigatore", "navigate",
- "neccessary", "necessary",
- "necesarily", "necessarily",
- "necessairy", "necessarily",
- "necessarly", "necessary",
- "necessarry", "necessary",
- "necessiate", "necessitate",
- "necessites", "necessities",
- "neckbeared", "neckbeard",
- "neckboards", "neckbeards",
- "neckbreads", "neckbeards",
- "neckneards", "neckbeards",
- "necromacer", "necromancer",
- "necromaner", "necromancer",
- "needleslly", "needlessly",
- "negativaty", "negativity",
- "negativley", "negatively",
- "negelcting", "neglecting",
- "negilgence", "negligence",
- "negiotated", "negotiated",
- "neglacting", "neglecting",
- "neglagence", "negligence",
- "neglegance", "negligence",
- "neglegible", "negligible",
- "neglegting", "neglecting",
- "neglibible", "negligible",
- "neglicence", "negligence",
- "neglicible", "negligible",
- "neglicting", "neglecting",
- "negligable", "negligible",
- "negligance", "negligence",
- "negligeble", "negligible",
- "negligente", "negligence",
- "negociated", "negotiated",
- "negogiated", "negotiated",
- "negoitated", "negotiated",
- "negotaited", "negotiated",
- "negotation", "negotiation",
- "negotiaion", "negotiation",
- "negotiatie", "negotiated",
- "negotiatin", "negotiations",
- "negotiaton", "negotiation",
- "neigbhours", "neighbours",
- "neighbhors", "neighbours",
- "neighbords", "neighbours",
- "neighbores", "neighbours",
- "netowrking", "networking",
- "netruality", "neutrality",
- "neturality", "neutrality",
- "netwroking", "networking",
- "neurologia", "neurological",
- "neutrailty", "neutrality",
- "newletters", "newsletters",
- "newlsetter", "newsletter",
- "newsettler", "newsletter",
- "newslatter", "newsletter",
- "nieghbours", "neighbours",
- "nightmates", "nightmares",
- "nightmears", "nightmares",
- "nightmeres", "nightmares",
- "nigthmares", "nightmares",
- "nipticking", "nitpicking",
- "nitpciking", "nitpicking",
- "nominacion", "nomination",
- "nominatino", "nominations",
- "nominativo", "nomination",
- "nominatons", "nominations",
- "nonsencial", "nonsensical",
- "nontheless", "nonetheless",
- "northerend", "northern",
- "nostalgica", "nostalgia",
- "nostalgija", "nostalgia",
- "noteworhty", "noteworthy",
- "nothingess", "nothingness",
- "noticabely", "noticeably",
- "noticabley", "noticeably",
- "noticiably", "noticeably",
- "notoriosly", "notoriously",
- "novembeard", "november",
- "nuetrality", "neutrality",
- "nutricious", "nutritious",
- "nutrientes", "nutrients",
- "nutritents", "nutrients",
- "nutritinal", "nutritional",
- "nutritiuos", "nutritious",
- "nutritivos", "nutritious",
- "nutrituous", "nutritious",
- "nutrutious", "nutritious",
- "obatinable", "obtainable",
- "obejctives", "objectives",
- "obilgatory", "obligatory",
- "objecitves", "objectives",
- "objectivas", "objectives",
- "objectivly", "objectively",
- "objectivst", "objectives",
- "objectivty", "objectivity",
- "objektives", "objectives",
- "obligitary", "obligatory",
- "obligitory", "obligatory",
- "observabil", "observable",
- "observarse", "observers",
- "observaton", "observation",
- "observeras", "observers",
- "observered", "observed",
- "observeres", "observers",
- "observible", "observable",
- "obstancles", "obstacles",
- "obstrucion", "obstruction",
- "obstructin", "obstruction",
- "obtainabie", "obtainable",
- "obtaineble", "obtainable",
- "obtainible", "obtainable",
- "obtianable", "obtainable",
- "ocasionaly", "occasionally",
- "ocassional", "occasional",
- "ocassioned", "occasioned",
- "occaisonal", "occasional",
- "occasionly", "occasional",
- "occassions", "occasions",
- "occational", "occasional",
- "occulation", "occupation",
- "occupaiton", "occupation",
- "occurances", "occurrences",
- "occurences", "occurrences",
- "occurrance", "occurrence",
- "octohedral", "octahedral",
- "octohedron", "octahedron",
- "offensivly", "offensively",
- "offereings", "offerings",
- "officailly", "officially",
- "olbigatory", "obligatory",
- "ominpotent", "omnipotent",
- "ominscient", "omniscient",
- "omnipetent", "omnipotent",
- "omnipitent", "omnipotent",
- "omnipotant", "omnipotent",
- "omnisicent", "omniscient",
- "omniverous", "omnivorous",
- "omnsicient", "omniscient",
- "on-premise", "on-premises",
- "onmipotent", "omnipotent",
- "onmiscient", "omniscient",
- "operatings", "operations",
- "operativne", "operative",
- "operativos", "operations",
- "oportunity", "opportunity",
- "opponenets", "opponent",
- "oppononent", "opponent",
- "oppressiun", "oppressing",
- "optimisitc", "optimistic",
- "optimizare", "optimize",
- "optimizate", "optimize",
- "optimizied", "optimize",
- "organicaly", "organically",
- "organiclly", "organically",
- "organisate", "organise",
- "organische", "organise",
- "organisera", "organizers",
- "organisere", "organizers",
- "organisert", "organizers",
- "organisier", "organise",
- "organisims", "organism",
- "organismed", "organise",
- "organismen", "organise",
- "organismer", "organise",
- "organismes", "organisms",
- "organismus", "organisms",
- "organisten", "organise",
- "organiszed", "organise",
- "organizaed", "organize",
- "organizare", "organizer",
- "organizate", "organize",
- "organizors", "organizers",
- "organizuje", "organize",
- "organziers", "organizers",
- "orientaion", "orientation",
- "orientarla", "oriental",
- "orientarlo", "oriental",
- "origianlly", "originally",
- "originales", "originals",
- "originalet", "originated",
- "originalis", "originals",
- "originalty", "originality",
- "orignially", "originally",
- "origniated", "originated",
- "origonally", "originally",
- "origonated", "originated",
- "ostencibly", "ostensibly",
- "ostenisbly", "ostensibly",
- "ostensably", "ostensibly",
- "ostentibly", "ostensibly",
- "ostrasiced", "ostracized",
- "ostrasized", "ostracized",
- "ostraziced", "ostracized",
- "ostrazised", "ostracized",
- "ostrecized", "ostracized",
- "ostricized", "ostracized",
- "ostrocized", "ostracized",
- "oustanding", "outstanding",
- "outcalssed", "outclassed",
- "outlcassed", "outclassed",
- "outnumberd", "outnumbered",
- "outnumbred", "outnumbered",
- "outperfoms", "outperform",
- "outperfrom", "outperform",
- "outpreform", "outperform",
- "outrageuos", "outrageous",
- "outragious", "outrageous",
- "outragoues", "outrageous",
- "outreagous", "outrageous",
- "outsourcad", "outsourced",
- "outsouring", "outsourcing",
- "outsoursed", "outsourced",
- "outweighes", "outweighs",
- "overarcing", "overarching",
- "overclockd", "overclocked",
- "overcloked", "overclocked",
- "overcoding", "overcoming",
- "overheards", "overhead",
- "overheared", "overhead",
- "overhooked", "overlooked",
- "overlanded", "overloaded",
- "overlaoded", "overloaded",
- "overlaping", "overlapping",
- "overlauded", "overloaded",
- "overloards", "overload",
- "overlorded", "overloaded",
- "overlordes", "overlords",
- "overnurfed", "overturned",
- "overpirced", "overpriced",
- "overpowerd", "overpowered",
- "overpowred", "overpowered",
- "overprised", "overpriced",
- "overtunned", "overturned",
- "overtunred", "overturned",
- "overturing", "overturn",
- "overweigth", "overweight",
- "overwhemed", "overwhelmed",
- "overwieght", "overweight",
- "overwritte", "overwrite",
- "pahtfinder", "pathfinder",
- "painfullly", "painfully",
- "painkilers", "painkillers",
- "pairlament", "parliament",
- "pakistanti", "pakistani",
- "paladinlst", "paladins",
- "palcements", "placements",
- "paleolitic", "paleolithic",
- "palestinan", "palestinian",
- "paltformer", "platformer",
- "palyerbase", "playerbase",
- "parachutte", "parachute",
- "parademics", "paramedics",
- "paradiggum", "paradigm",
- "paragraghs", "paragraphs",
- "paragrahps", "paragraphs",
- "paragrapgh", "paragraphs",
- "paragrpahs", "paragraphs",
- "parahprase", "paraphrase",
- "paralleles", "parallels",
- "parallells", "parallels",
- "paramadics", "paramedics",
- "paramaters", "parameters",
- "paramecias", "paramedics",
- "parametics", "paramedics",
- "parametros", "parameters",
- "paramiters", "parameters",
- "paramormal", "paranormal",
- "paranoicas", "paranoia",
- "paranomral", "paranormal",
- "paranornal", "paranormal",
- "parapharse", "paraphrase",
- "paraphraze", "paraphrase",
- "paraprhase", "paraphrase",
- "parasitter", "parasite",
- "parilament", "parliament",
- "parituclar", "particular",
- "parlaiment", "parliament",
- "parliamant", "parliament",
- "parliamone", "parliament",
- "parliement", "parliament",
- "parrallell", "parallel",
- "parrallely", "parallelly",
- "partiarchy", "patriarchy",
- "participas", "participants",
- "participat", "participants",
- "participte", "participate",
- "particualr", "particular",
- "partiotism", "patriotism",
- "passionais", "passions",
- "passionale", "passionately",
- "passionant", "passionate",
- "passionite", "passionate",
- "passivedns", "passives",
- "passivelly", "passively",
- "patenterad", "patented",
- "pathfidner", "pathfinder",
- "pathfindir", "pathfinder",
- "pathifnder", "pathfinder",
- "patientens", "patients",
- "patrairchy", "patriarchy",
- "patriachry", "patriarchy",
- "patriarcal", "patriarchal",
- "patriarhal", "patriarchal",
- "patriatchy", "patriarchy",
- "patriatism", "patriotism",
- "patrionism", "patriotism",
- "patriotics", "patriotism",
- "patriotisk", "patriots",
- "patroitism", "patriotism",
- "patryarchy", "patriarchy",
- "pedantisch", "pedantic",
- "pedestiran", "pedestrian",
- "pedestrain", "pedestrian",
- "pedictions", "depictions",
- "pedohpiles", "pedophiles",
- "pedohpilia", "pedophilia",
- "pedophilac", "pedophilia",
- "pedophilea", "pedophilia",
- "pedophilie", "pedophile",
- "pedophilla", "pedophilia",
- "pedophille", "pedophile",
- "pedopholia", "pedophilia",
- "penetraion", "penetration",
- "penetratin", "penetration",
- "penetraton", "penetration",
- "penguinese", "penguins",
- "penguiness", "penguins",
- "peninsulla", "peninsula",
- "penninsula", "peninsula",
- "peodphiles", "pedophiles",
- "peodphilia", "pedophilia",
- "pepperment", "peppermint",
- "pepperonni", "pepperoni",
- "percantage", "percentage",
- "percantile", "percentile",
- "percaution", "precaution",
- "percenatge", "percentages",
- "percential", "percentile",
- "percentige", "percentile",
- "perceptoin", "perceptions",
- "percession", "percussion",
- "percetange", "percentages",
- "percetnage", "percentages",
- "percintile", "percentile",
- "percission", "percussion",
- "percpetion", "perceptions",
- "percusions", "percussion",
- "perdicting", "predicting",
- "perdiction", "prediction",
- "perdictive", "predictive",
- "perenially", "perennially",
- "perfeccion", "perfection",
- "perfecxion", "perfection",
- "perfektion", "perfection",
- "perferable", "preferable",
- "perferably", "preferably",
- "perference", "preference",
- "perferring", "preferring",
- "perfexcion", "perfection",
- "perfomance", "performance",
- "performace", "performance",
- "performane", "performances",
- "performans", "performances",
- "performens", "performers",
- "performous", "performs",
- "perfromers", "performers",
- "perhiperal", "peripheral",
- "peridinkle", "periwinkle",
- "perihperal", "peripheral",
- "periodisch", "periodic",
- "periperhal", "peripheral",
- "peripheals", "peripherals",
- "peripheria", "peripheral",
- "periphiral", "peripheral",
- "periphreal", "peripheral",
- "periphrial", "peripheral",
- "peritinkle", "periwinkle",
- "periwankle", "periwinkle",
- "periwinkel", "periwinkle",
- "periwinkie", "periwinkle",
- "periwinlke", "periwinkle",
- "permanenty", "permanently",
- "permanetly", "permanently",
- "permisions", "permission",
- "permisison", "permissions",
- "permissble", "permissible",
- "permissibe", "permissible",
- "permissons", "permissions",
- "perogative", "prerogative",
- "perordered", "preordered",
- "perpatuate", "perpetuate",
- "perpetualy", "perpetually",
- "perpetuare", "perpetuate",
- "persausion", "persuasion",
- "persausive", "persuasive",
- "persective", "respective",
- "persectued", "persecuted",
- "persecutie", "persecuted",
- "persecutin", "persecution",
- "perserving", "preserving",
- "persicuted", "persecuted",
- "persistant", "persistent",
- "persistens", "persists",
- "persoanlly", "personally",
- "persocuted", "persecuted",
- "personalie", "personalized",
- "personalis", "personas",
- "personarse", "personas",
- "personatus", "personas",
- "personnell", "personnel",
- "perspecive", "perspective",
- "perspectie", "perspectives",
- "persuasian", "persuasion",
- "persuasing", "persuasion",
- "persuasivo", "persuasion",
- "persuation", "persuasion",
- "persucuted", "persecuted",
- "persumably", "presumably",
- "persussion", "persuasion",
- "persvasive", "persuasive",
- "perswasion", "persuasion",
- "pertinante", "pertinent",
- "pervailing", "prevailing",
- "pervalence", "prevalence",
- "pervention", "prevention",
- "perversley", "perverse",
- "pesitcides", "pesticides",
- "pessimistc", "pessimistic",
- "pessimitic", "pessimistic",
- "pestacides", "pesticides",
- "pestecides", "pesticides",
- "pesticedes", "pesticides",
- "pesticidas", "pesticides",
- "pestisides", "pesticides",
- "pestizides", "pesticides",
- "pharamcist", "pharmacist",
- "pharmacias", "pharmacist",
- "pharmacyst", "pharmacist",
- "pharmasist", "pharmacist",
- "pharmicist", "pharmacist",
- "phemonenon", "phenomenon",
- "phenemenon", "phenomenon",
- "phenemonal", "phenomenal",
- "phenomanal", "phenomenal",
- "phenomanon", "phenomenon",
- "phenomemon", "phenomenon",
- "phenomenen", "phenomenon",
- "phenomenol", "phenomenal",
- "phenomenom", "phenomenon",
- "phenominon", "phenomenon",
- "phenomonal", "phenomenal",
- "phenomonen", "phenomenon",
- "phenomonon", "phenomenon",
- "phenonemal", "phenomenal",
- "phenonemon", "phenomenon",
- "phenonmena", "phenomena",
- "philipines", "philippines",
- "philippins", "philippines",
- "philisophy", "philosophy",
- "phillipine", "philippine",
- "phillipses", "phillies",
- "philosiphy", "philosophy",
- "philosohpy", "philosophy",
- "philosoper", "philosopher",
- "philospher", "philosopher",
- "philospohy", "philosophy",
- "photogragh", "photograph",
- "photograhs", "photographs",
- "photograhy", "photography",
- "photograps", "photographs",
- "photograpy", "photography",
- "photogrpah", "photographs",
- "photoshopd", "photoshopped",
- "photoshope", "photoshopped",
- "phramacist", "pharmacist",
- "phsyically", "physically",
- "phsyicians", "physicians",
- "phsyicists", "physicists",
- "phsyiology", "physiology",
- "phycisians", "physicians",
- "phycisists", "physicists",
- "phyiscally", "physically",
- "phyisology", "physiology",
- "physcially", "physically",
- "physcology", "psychology",
- "physcopath", "psychopath",
- "physicials", "physicians",
- "physiciens", "physicians",
- "physioligy", "physiology",
- "picthforks", "pitchforks",
- "pinoneered", "pioneered",
- "pitchferks", "pitchforks",
- "pitchfolks", "pitchforks",
- "pitchfords", "pitchforks",
- "pitchworks", "pitchforks",
- "pitckforks", "pitchforks",
- "pittaburgh", "pittsburgh",
- "pittsbrugh", "pittsburgh",
- "placehoder", "placeholder",
- "placeholdr", "placeholder",
- "placeholer", "placeholder",
- "placemenet", "placements",
- "plagairism", "plagiarism",
- "plagarisim", "plagiarism",
- "plagiariam", "plagiarism",
- "plagiarios", "plagiarism",
- "plagiarius", "plagiarism",
- "plagiarizm", "plagiarism",
- "plagierism", "plagiarism",
- "plaguarism", "plagiarism",
- "plaigarism", "plagiarism",
- "plasticosa", "plastics",
- "platfarmer", "platformer",
- "platformar", "platformer",
- "platformie", "platformer",
- "platfotmer", "platformer",
- "platfromer", "platformer",
- "platofrmer", "platformer",
- "playaround", "playground",
- "playersare", "playerbase",
- "playgorund", "playground",
- "playthrogh", "playthrough",
- "playthrouh", "playthrough",
- "playwrites", "playwrights",
- "plethorian", "plethora",
- "policitian", "politician",
- "polinators", "pollinators",
- "polishuset", "polishes",
- "politessen", "politeness",
- "politicain", "politician",
- "politicaly", "politically",
- "politicien", "politician",
- "politicing", "politician",
- "politicion", "politician",
- "politickin", "politician",
- "politiikan", "politician",
- "politiness", "politeness",
- "polititian", "politician",
- "popualtion", "populations",
- "populairty", "popularity",
- "populaiton", "populations",
- "popularaty", "popularity",
- "popularest", "populate",
- "popularily", "popularity",
- "populaties", "populate",
- "populatiry", "popularity",
- "populative", "populate",
- "populatoin", "populations",
- "popultaion", "populations",
- "pormetheus", "prometheus",
- "pornograhy", "pornography",
- "pornograpy", "pornography",
- "pornogrphy", "pornography",
- "porportion", "proportion",
- "portabilty", "portability",
- "portarying", "portraying",
- "portoguese", "portuguese",
- "portraiing", "portraying",
- "portrating", "portraying",
- "portrayels", "portrays",
- "portugeuse", "portuguese",
- "portuguise", "portuguese",
- "posessions", "possessions",
- "posicional", "positional",
- "positevely", "positively",
- "positioing", "positioning",
- "positionly", "positional",
- "positionne", "positioned",
- "positivley", "positively",
- "possesives", "possessive",
- "possessers", "possesses",
- "possessess", "possesses",
- "possibiliy", "possibility",
- "possibilty", "possibility",
- "possissive", "possessive",
- "posthomous", "posthumous",
- "potentialy", "potentially",
- "poulations", "populations",
- "powerhorse", "powerhouse",
- "powerhosue", "powerhouse",
- "powerhours", "powerhouse",
- "powerhsell", "powershell",
- "powerprint", "powerpoint",
- "powersehll", "powershell",
- "ppublisher", "publisher",
- "practially", "practically",
- "practicaly", "practically",
- "practicess", "practise",
- "practiclly", "practically",
- "practioner", "practitioner",
- "precaucion", "precaution",
- "precausion", "precaution",
- "precautios", "precautions",
- "precedance", "precedence",
- "precedense", "precedence",
- "preceeding", "preceding",
- "precendece", "precedence",
- "precentage", "percentage",
- "precentile", "percentile",
- "preciselly", "precisely",
- "precuation", "precautions",
- "precussion", "percussion",
- "predecated", "predicated",
- "predecence", "precedence",
- "predecesor", "predecessor",
- "predection", "prediction",
- "predective", "predictive",
- "prediccion", "prediction",
- "prediceted", "predicated",
- "predicited", "predicated",
- "predicitng", "predicting",
- "prediciton", "prediction",
- "predicitve", "predictive",
- "predickted", "predicated",
- "predictave", "predictive",
- "predictivo", "prediction",
- "predictons", "predictions",
- "predjuiced", "prejudiced",
- "predjuices", "prejudices",
- "preduction", "prediction",
- "preductive", "predictive",
- "predujiced", "prejudiced",
- "predujices", "prejudices",
- "prefarable", "preferable",
- "prefarably", "preferably",
- "prefection", "perfection",
- "preferance", "preference",
- "prefereble", "preferable",
- "preferente", "preference",
- "preferenze", "preference",
- "preferible", "preferable",
- "preferibly", "preferably",
- "prefernece", "preferences",
- "preformers", "performers",
- "pregancies", "pregnancies",
- "pregnanies", "pregnancies",
- "preipheral", "peripheral",
- "preisdents", "presidents",
- "preisthood", "priesthood",
- "prejeduced", "prejudiced",
- "prejeduces", "prejudices",
- "prejiduced", "prejudiced",
- "prejiduces", "prejudices",
- "prejucided", "prejudiced",
- "prejucides", "prejudices",
- "prejuduced", "prejudiced",
- "prejuduces", "prejudices",
- "prelimiary", "preliminary",
- "prematurly", "prematurely",
- "preminence", "preeminence",
- "premission", "permission",
- "preorderes", "preorders",
- "prepartion", "preparation",
- "prepetuate", "perpetuate",
- "preposters", "preposterous",
- "prescients", "presidents",
- "prescirbed", "prescribed",
- "prescriped", "prescribed",
- "presearing", "preserving",
- "presecuted", "persecuted",
- "presedency", "presidency",
- "presedents", "presidents",
- "presenning", "presenting",
- "presentase", "presents",
- "presentato", "presentation",
- "presention", "presenting",
- "presentors", "presents",
- "preservare", "preserve",
- "preservato", "preservation",
- "preserverd", "preserved",
- "presidancy", "presidency",
- "presidante", "presidents",
- "presidenta", "presidential",
- "presidenty", "presidency",
- "presidunce", "presidency",
- "presistent", "persistent",
- "presonally", "personally",
- "presonhood", "personhood",
- "pressuming", "pressuring",
- "prestigios", "prestigious",
- "prestigous", "prestigious",
- "presuambly", "presumably",
- "presuasion", "persuasion",
- "presuasive", "persuasive",
- "presumebly", "presumably",
- "presumendo", "presumed",
- "presumibly", "presumably",
- "presumpton", "presumption",
- "pretaining", "pertaining",
- "pretection", "protection",
- "pretendias", "pretends",
- "pretensive", "pretense",
- "pretentios", "pretentious",
- "pretentous", "pretentious",
- "prevalecen", "prevalence",
- "prevalente", "prevalence",
- "prevencion", "prevention",
- "preventivo", "prevention",
- "preventors", "prevents",
- "previaling", "prevailing",
- "previosuly", "previously",
- "previoulsy", "previously",
- "prevolence", "prevalence",
- "pricinpals", "principals",
- "primarilly", "primarily",
- "primatives", "primitives",
- "princepals", "principals",
- "princesess", "princesses",
- "princibles", "principles",
- "principaly", "principality",
- "principels", "principals",
- "principial", "principal",
- "principias", "principals",
- "principlas", "principals",
- "prinicipal", "principal",
- "prinicpals", "principals",
- "prinicples", "principles",
- "printerest", "printers",
- "prioratize", "prioritize",
- "prioretize", "prioritize",
- "prioritice", "prioritize",
- "prioritied", "prioritize",
- "prioroties", "priorities",
- "priorotize", "prioritize",
- "priotities", "priorities",
- "priotitize", "prioritize",
- "privaleged", "privileged",
- "privaleges", "privileges",
- "privaticed", "privatized",
- "privelaged", "privileged",
- "privelages", "privileges",
- "priveldges", "privileges",
- "priveleged", "privileged",
- "priveleges", "privileges",
- "privelidge", "privileged",
- "priveliged", "privileged",
- "priveliges", "privileges",
- "privetized", "privatized",
- "privilaged", "privileged",
- "privilages", "privileges",
- "priviledge", "privilege",
- "privilegde", "privileges",
- "privilegie", "privilege",
- "priviliged", "privileged",
- "priviliges", "privileges",
- "privitazed", "privatized",
- "privitized", "privatized",
- "probabiliy", "probability",
- "probabilty", "probability",
- "probablies", "probable",
- "probablybe", "probable",
- "problemita", "problematic",
- "procalimed", "proclaimed",
- "procceding", "proceeding",
- "procedding", "proceeding",
- "procederal", "procedural",
- "procedings", "proceedings",
- "procedrual", "procedural",
- "proceededs", "proceeds",
- "proceedure", "procedure",
- "proceesing", "proceeding",
- "processsor", "processors",
- "proclamied", "proclaimed",
- "proclaming", "proclaiming",
- "procliamed", "proclaimed",
- "procreatin", "procreation",
- "procudures", "procedures",
- "prodcution", "production",
- "prodecural", "procedural",
- "prodecures", "procedures",
- "produccion", "production",
- "produceras", "produces",
- "produceres", "produces",
- "producirse", "producers",
- "produciton", "production",
- "producting", "production",
- "productino", "productions",
- "productivo", "production",
- "productivy", "productivity",
- "productoin", "productions",
- "produktion", "production",
- "produktive", "productive",
- "produtcion", "productions",
- "profesions", "profession",
- "professers", "professors",
- "professorn", "profession",
- "professsor", "professors",
- "proffesion", "profession",
- "proficeint", "proficient",
- "proficiant", "proficient",
- "proficieny", "proficiency",
- "proficincy", "proficiency",
- "profitabel", "profitable",
- "profitabil", "profitable",
- "profitible", "profitable",
- "proftiable", "profitable",
- "programmar", "programmer",
- "programmme", "programme",
- "progresing", "progressing",
- "progresion", "progression",
- "progresive", "progressive",
- "progressie", "progressives",
- "progressin", "progression",
- "progresson", "progression",
- "progressos", "progresses",
- "progressus", "progresses",
- "prohibirte", "prohibit",
- "prohibites", "prohibits",
- "prohibitng", "prohibiting",
- "prohibiton", "prohibition",
- "prohibitus", "prohibits",
- "prohibitve", "prohibited",
- "prohobited", "prohibited",
- "prohpecies", "prophecies",
- "projecitle", "projectiles",
- "projectiel", "projectiles",
- "projecties", "projectiles",
- "projectils", "projectiles",
- "projectles", "projectiles",
- "projectlie", "projectiles",
- "projectyle", "projectile",
- "projektile", "projectile",
- "projektion", "projection",
- "prometheas", "prometheus",
- "promethese", "prometheus",
- "promethius", "prometheus",
- "promethous", "prometheus",
- "promethues", "prometheus",
- "prominance", "prominence",
- "prominenty", "prominently",
- "prominetly", "prominently",
- "promiscous", "promiscuous",
- "promiscuos", "promiscuous",
- "promoteurs", "promotes",
- "promotheus", "prometheus",
- "promotinal", "promotional",
- "pronoucned", "pronounced",
- "pronouning", "pronouncing",
- "propechies", "prophecies",
- "propencity", "propensity",
- "propenents", "proponents",
- "properites", "properties",
- "propersity", "propensity",
- "propertion", "proportion",
- "propertius", "properties",
- "prophacies", "prophecies",
- "prophocies", "prophecies",
- "propietary", "proprietary",
- "proplusion", "propulsion",
- "propoganda", "propaganda",
- "propogates", "propagates",
- "propolsion", "propulsion",
- "proponants", "proponents",
- "proponenet", "proponent",
- "proporcion", "proportion",
- "proporties", "properties",
- "proporting", "proportion",
- "propositon", "proposition",
- "propotions", "proportions",
- "proprietry", "proprietary",
- "proprotion", "proportion",
- "propserity", "prosperity",
- "propserous", "prosperous",
- "propulaios", "propulsion",
- "propulsing", "propulsion",
- "propultion", "propulsion",
- "propuslion", "propulsion",
- "prosectued", "prosecuted",
- "prosectuor", "prosecutor",
- "prosecuter", "prosecutor",
- "prosecutie", "prosecuted",
- "prosicuted", "prosecuted",
- "prosicutor", "prosecutor",
- "prosocuted", "prosecuted",
- "prosparity", "prosperity",
- "prospectos", "prospects",
- "prosperety", "prosperity",
- "prospertiy", "prosperity",
- "prosphetic", "prosthetic",
- "prosporous", "prosperous",
- "prostehtic", "prosthetic",
- "prosterity", "prosperity",
- "prostethic", "prosthetic",
- "prostitite", "prostitute",
- "prostitude", "prostitute",
- "prostituee", "prostitute",
- "prostituer", "prostitute",
- "prostitues", "prostitutes",
- "prostiture", "prostitute",
- "prostituto", "prostitution",
- "prostituye", "prostitute",
- "protaginst", "protagonist",
- "protastant", "protestant",
- "proteccion", "protection",
- "proteciton", "protections",
- "protectice", "protective",
- "protectiei", "protective",
- "protectoin", "protections",
- "protectons", "protectors",
- "protectron", "protection",
- "protestans", "protests",
- "protestare", "protesters",
- "protestato", "protestant",
- "protestent", "protestant",
- "protestina", "protestant",
- "prothsetic", "prosthetic",
- "protistant", "protestant",
- "protocoles", "protocols",
- "protocolls", "protocols",
- "protocolos", "protocols",
- "protohypes", "prototypes",
- "protostant", "protestant",
- "prototipes", "prototypes",
- "prototpyes", "prototypes",
- "protraying", "portraying",
- "protuguese", "portuguese",
- "provencial", "provincial",
- "proveribal", "proverbial",
- "provervial", "proverbial",
- "providance", "providence",
- "providince", "providence",
- "provinciae", "province",
- "provincies", "province",
- "provincija", "provincial",
- "provinence", "providence",
- "provinical", "provincial",
- "provintial", "provincial",
- "provinvial", "provincial",
- "provisiosn", "provision",
- "provisonal", "provisional",
- "provocatie", "provocative",
- "pscyhology", "psychology",
- "pscyhopath", "psychopath",
- "pshycology", "psychology",
- "pshycopath", "psychopath",
- "psychedlic", "psychedelic",
- "psychiatic", "psychiatric",
- "psycholoog", "psychology",
- "psychopaat", "psychopath",
- "psychopats", "psychopaths",
- "ptichforks", "pitchforks",
- "publicitan", "publication",
- "publisheed", "published",
- "publisherr", "publisher",
- "publishher", "publisher",
- "publissher", "publisher",
- "publlisher", "publisher",
- "punihsment", "punishments",
- "punishemnt", "punishments",
- "punishible", "punishable",
- "punishmnet", "punishments",
- "punissable", "punishable",
- "punsihable", "punishable",
- "purchacing", "purchasing",
- "purpolsion", "propulsion",
- "purposedly", "purposely",
- "purposelly", "purposely",
- "purpotedly", "purportedly",
- "pususading", "persuading",
- "pyschology", "psychology",
- "pyschopath", "psychopath",
- "qaulifiers", "qualifiers",
- "quailfiers", "qualifiers",
- "qualfiiers", "qualifiers",
- "qualifieds", "qualifies",
- "qualifiies", "qualifiers",
- "qualifiing", "qualifying",
- "qualifires", "qualifiers",
- "qualifyers", "qualifiers",
- "qualitying", "qualifying",
- "quanitites", "quantities",
- "quantaties", "quantities",
- "quantitize", "quantities",
- "quarantena", "quarantine",
- "quarantene", "quarantine",
- "quarantied", "quarantine",
- "quarintine", "quarantine",
- "quaruntine", "quarantine",
- "quesitoned", "questioned",
- "questional", "questionable",
- "questionne", "questioned",
- "rabinnical", "rabbinical",
- "radiactive", "radioactive",
- "radioacive", "radioactive",
- "rainbowers", "rainbows",
- "randmoness", "randomness",
- "randomzied", "randomized",
- "randonmess", "randomness",
- "randumness", "randomness",
- "raspberrry", "raspberry",
- "rationalle", "rationale",
- "readmition", "readmission",
- "realitvely", "relatively",
- "realtively", "relatively",
- "realtivity", "relativity",
- "reaserched", "researched",
- "reasercher", "researcher",
- "rebiulding", "rebuilding",
- "reboudning", "rebounding",
- "rebouncing", "rebounding",
- "rebuidling", "rebuilding",
- "rebuliding", "rebuilding",
- "rebuplican", "republican",
- "reccommend", "recommend",
- "recepients", "recipients",
- "receptoras", "receptors",
- "receptores", "receptors",
- "recgonised", "recognised",
- "recgonized", "recognized",
- "recgonizes", "recognizes",
- "reciepents", "recipients",
- "recipeints", "recipients",
- "recipiants", "recipients",
- "recocnised", "recognised",
- "recoginsed", "recognised",
- "recoginzed", "recognized",
- "recognices", "recognizes",
- "recogniton", "recognition",
- "recognzied", "recognised",
- "recomended", "recommended",
- "recommande", "recommend",
- "recommands", "recommends",
- "recommeded", "recommended",
- "recommened", "recommend",
- "recommennd", "recommends",
- "recomments", "recommends",
- "recompence", "recompense",
- "reconcider", "reconsider",
- "reconcille", "reconcile",
- "recongised", "recognised",
- "recongized", "recognized",
- "recongizes", "recognizes",
- "reconisder", "reconsider",
- "reconsiled", "reconsider",
- "recordarle", "recorder",
- "recordarme", "recorder",
- "recordarse", "recorder",
- "recordarte", "recorder",
- "recreacion", "recreation",
- "recreatief", "recreate",
- "recreativo", "recreation",
- "recrutiers", "recruiters",
- "rectanglar", "rectangular",
- "rectangual", "rectangular",
- "rectanguar", "rectangular",
- "recuriters", "recruiters",
- "recurrance", "recurrence",
- "recursivly", "recursively",
- "redefinied", "redefine",
- "redefinine", "redefine",
- "redemtpion", "redemption",
- "redepmtion", "redemption",
- "redesiging", "redesign",
- "rediculous", "ridiculous",
- "redmeption", "redemption",
- "redneckers", "rednecks",
- "redneckese", "rednecks",
- "redneckest", "rednecks",
- "reduncancy", "redundancy",
- "redundency", "redundancy",
- "redundnacy", "redundancy",
- "redunduncy", "redundancy",
- "reenforced", "reinforced",
- "reevaulate", "reevaluate",
- "refedendum", "referendum",
- "refelcting", "reflecting",
- "refelction", "reflection",
- "refelctive", "reflective",
- "referances", "references",
- "referandum", "referendum",
- "referemces", "references",
- "referemdum", "referendum",
- "referendim", "referendum",
- "referendom", "referendum",
- "referenece", "reference",
- "referening", "referencing",
- "referenses", "referees",
- "referentes", "references",
- "referneces", "references",
- "referrence", "reference",
- "referundum", "referendum",
- "refference", "reference",
- "refleciton", "reflections",
- "reflecters", "reflects",
- "reflektion", "reflection",
- "reflextion", "reflection",
- "reformerad", "reformed",
- "refrigerar", "refrigerator",
- "refurbised", "refurbished",
- "regenarate", "regenerate",
- "registeres", "registers",
- "registrato", "registration",
- "regresives", "regressive",
- "regressivo", "regression",
- "regualting", "regulating",
- "regualtion", "regulations",
- "regualtors", "regulators",
- "regulacion", "regulation",
- "regulament", "regulate",
- "regulaotrs", "regulators",
- "regularily", "regularly",
- "regularing", "regulating",
- "regularlas", "regulars",
- "regularlos", "regulars",
- "regulaters", "regulators",
- "regulatios", "regulators",
- "regulatons", "regulations",
- "rehtorical", "rhetorical",
- "reinstaled", "reinstalled",
- "reitrement", "retirement",
- "relagation", "relaxation",
- "relatation", "relaxation",
- "relativety", "relativity",
- "relativily", "relativity",
- "relativley", "relatively",
- "relavation", "relaxation",
- "relaxating", "relaxation",
- "relazation", "relaxation",
- "releagtion", "relegation",
- "relegetion", "relegation",
- "relentness", "relentless",
- "reletnless", "relentless",
- "relevation", "revelation",
- "relexation", "relegation",
- "relfecting", "reflecting",
- "relfection", "reflection",
- "relfective", "reflective",
- "reliabilty", "reliability",
- "reliablely", "reliably",
- "religiones", "religions",
- "religiosly", "religiously",
- "religiousy", "religiously",
- "religously", "religiously",
- "relitavely", "relatively",
- "reluctanct", "reluctant",
- "reluctanly", "reluctantly",
- "reluctanty", "reluctantly",
- "remarcably", "remarkably",
- "remarkibly", "remarkably",
- "rememberes", "remembers",
- "remenicent", "reminiscent",
- "reminisent", "reminiscent",
- "reminscent", "reminiscent",
- "remmebered", "remembered",
- "renaissace", "renaissance",
- "renderered", "rendered",
- "renegerate", "regenerate",
- "renewabels", "renewables",
- "renewebles", "renewables",
- "rennovated", "renovated",
- "renweables", "renewables",
- "repatition", "repetition",
- "repblicans", "republicans",
- "repbulican", "republican",
- "repeadedly", "repeatedly",
- "repeadetly", "repeatedly",
- "repearable", "repeatable",
- "repearedly", "repealed",
- "repeatadly", "repeatedly",
- "repeatedlt", "repealed",
- "repeatetly", "repeatedly",
- "repeatible", "repeatable",
- "repeatidly", "repeatedly",
- "repectable", "repeatable",
- "repentable", "repeatable",
- "repentence", "repentance",
- "repersents", "represents",
- "repetation", "repetition",
- "repeteadly", "repeatedly",
- "repetetion", "repetition",
- "repeticion", "repetition",
- "repetitivo", "repetition",
- "replacated", "replicated",
- "replaceble", "replaceable",
- "replacemet", "replacements",
- "replacemnt", "replacement",
- "replacemtn", "replacements",
- "replecated", "replicated",
- "repoistory", "repository",
- "reponsible", "responsible",
- "reportadly", "reportedly",
- "reporteros", "reporters",
- "reportidly", "reportedly",
- "repositary", "repository",
- "reposotory", "repository",
- "repostiory", "repository",
- "representn", "representing",
- "repressent", "represents",
- "repressivo", "repression",
- "repsectful", "respectful",
- "repsecting", "respecting",
- "repsective", "respective",
- "repsonding", "responding",
- "repsonsive", "responsive",
- "reptuation", "reputation",
- "repubicans", "republicans",
- "republcian", "republican",
- "republians", "republicans",
- "republicon", "republican",
- "repuglican", "republican",
- "repulicans", "republicans",
- "reputacion", "reputation",
- "requirment", "requirement",
- "requrement", "requirement",
- "resemblace", "resemble",
- "reserached", "researched",
- "reseracher", "researchers",
- "reserverad", "reserved",
- "reservered", "reserved",
- "residental", "residential",
- "resistable", "resistible",
- "resistanes", "resistances",
- "resistanse", "resistances",
- "resistence", "resistance",
- "resistendo", "resisted",
- "resistered", "resisted",
- "resistnace", "resistances",
- "resitsance", "resistances",
- "resoltuion", "resolutions",
- "resolucion", "resolution",
- "resolutino", "resolutions",
- "resolutoin", "resolutions",
- "resolutons", "resolutions",
- "resolvemos", "resolves",
- "resolvendo", "resolved",
- "resolveres", "resolves",
- "resolverse", "resolves",
- "resolviste", "resolves",
- "resonabelt", "resonate",
- "resoultion", "resolution",
- "respecitve", "respective",
- "respectifs", "respects",
- "respection", "respecting",
- "respectons", "respects",
- "respectuos", "respects",
- "respektive", "respective",
- "respiratoy", "respiratory",
- "responcive", "responsive",
- "responisve", "responsive",
- "responsibe", "responsive",
- "responsiby", "responsibly",
- "responsile", "responsive",
- "responsing", "responding",
- "ressembled", "resembled",
- "restarants", "restaurants",
- "restaraunt", "restaurant",
- "restaruant", "restaurant",
- "restatting", "restarting",
- "restaurent", "restaurant",
- "restauring", "restarting",
- "resteraunt", "restaurant",
- "restircted", "restricted",
- "restorting", "restarting",
- "restrainig", "restraining",
- "restrcited", "restricted",
- "restrcting", "restarting",
- "restricing", "restricting",
- "restricion", "restriction",
- "restricive", "restrictive",
- "restrictes", "restricts",
- "restrictie", "restrictive",
- "restricton", "restriction",
- "restructed", "restricted",
- "restuarant", "restaurant",
- "resturants", "restaurants",
- "resturaunt", "restaurant",
- "retaliaton", "retaliation",
- "rethorical", "rhetorical",
- "retierment", "retirement",
- "retribuito", "retribution",
- "retrosepct", "retrospect",
- "retrospekt", "retrospect",
- "revaluated", "reevaluated",
- "revealtion", "revelations",
- "revelaiton", "revelations",
- "revelatons", "revelations",
- "revelution", "revelation",
- "reversable", "reversible",
- "reversably", "reversal",
- "reviewtrue", "reviewer",
- "revisiones", "revisions",
- "revisionis", "revisions",
- "revoltuion", "revolution",
- "revoluiton", "revolutions",
- "revolutoin", "revolutions",
- "revoultion", "revolution",
- "rewarching", "rewatching",
- "rewatchibg", "rewatching",
- "rewatchign", "rewatching",
- "rewatchimg", "rewatching",
- "rhapsodomy", "rhapsody",
- "rhetorisch", "rhetoric",
- "ridicilous", "ridiculous",
- "ridicoulus", "ridiculous",
- "ridiculise", "ridicule",
- "ridiculize", "ridicule",
- "ridiculled", "ridicule",
- "ridiculose", "ridicule",
- "ridiculued", "ridicule",
- "rienforced", "reinforced",
- "rigthfully", "rightfully",
- "roleplaing", "roleplaying",
- "romanmania", "romanian",
- "roundaboot", "roundabout",
- "rucuperate", "recuperate",
- "rudimentry", "rudimentary",
- "sacarmento", "sacramento",
- "sacntioned", "sanctioned",
- "sacraficed", "sacrificed",
- "sacrafices", "sacrifices",
- "sacramenno", "sacramento",
- "sacreficed", "sacrificed",
- "sacrefices", "sacrifices",
- "sacremento", "sacramento",
- "sacrifaced", "sacrificed",
- "sacrifaces", "sacrifices",
- "sacrifical", "sacrificial",
- "sacrificas", "sacrifices",
- "sacrificie", "sacrificed",
- "sacrificng", "sacrificing",
- "sacrifises", "sacrifices",
- "sacrifized", "sacrificed",
- "sacrifizes", "sacrifices",
- "sacromento", "sacramento",
- "sadistisch", "sadistic",
- "sanctionne", "sanctioned",
- "sandiwches", "sandwiches",
- "sandviches", "sandwiches",
- "sandwishes", "sandwiches",
- "sanitazion", "sanitation",
- "santiation", "sanitation",
- "sastifying", "satisfying",
- "satellitte", "satellites",
- "satifsying", "satisfying",
- "satrically", "satirically",
- "satsifying", "satisfying",
- "sattelites", "satellites",
- "saturacion", "saturation",
- "scandalosa", "scandals",
- "scandalose", "scandals",
- "scandalosi", "scandals",
- "scandaloso", "scandals",
- "scandaniva", "scandinavia",
- "scandinava", "scandinavian",
- "scandinvia", "scandinavia",
- "scaramento", "sacramento",
- "scarificed", "sacrificed",
- "scarifices", "sacrifices",
- "scarmbling", "scrambling",
- "scartching", "scratching",
- "sceintific", "scientific",
- "sceintists", "scientists",
- "scenarioes", "scenarios",
- "scenarions", "scenarios",
- "scenarious", "scenarios",
- "scheudling", "scheduling",
- "scholarhip", "scholarship",
- "scholarley", "scholarly",
- "sciencists", "scientists",
- "scientests", "scientists",
- "scirptures", "scriptures",
- "scooterers", "scooters",
- "scorebaord", "scoreboard",
- "scoreborad", "scoreboard",
- "scorebored", "scoreboard",
- "scorpiomon", "scorpion",
- "scracthing", "scratching",
- "scramblies", "scramble",
- "screenshat", "screenshot",
- "screenshit", "screenshot",
- "scriptores", "scriptures",
- "scripturae", "scriptures",
- "scriputres", "scriptures",
- "scritpures", "scriptures",
- "scrutinity", "scrutiny",
- "seahawkers", "seahawks",
- "sebastiaan", "sebastian",
- "segegrated", "segregated",
- "segragated", "segregated",
- "segregaded", "segregated",
- "segregatie", "segregated",
- "segretated", "segregated",
- "segrigated", "segregated",
- "selectiose", "selections",
- "selectivly", "selectively",
- "selectivos", "selections",
- "selfishess", "selfishness",
- "senitments", "sentiments",
- "sensitiviy", "sensitivity",
- "sensitivty", "sensitivity",
- "sentaments", "sentiments",
- "sentancing", "sentencing",
- "sentements", "sentiments",
- "sentencian", "sentencing",
- "sentensing", "sentencing",
- "sentimenal", "sentimental",
- "sentimetal", "sentimental",
- "sentincing", "sentencing",
- "sentinents", "sentiments",
- "separacion", "separation",
- "separaters", "separates",
- "separatley", "separately",
- "separatron", "separation",
- "separetely", "separately",
- "seperately", "separately",
- "seperating", "separating",
- "seperation", "separation",
- "seperatism", "separatism",
- "seperatist", "separatist",
- "seperatley", "seperate",
- "sepulchure", "sepulchre",
- "serenitary", "serenity",
- "serviceble", "serviceable",
- "settelment", "settlement",
- "settlemens", "settlements",
- "settlemets", "settlements",
- "settlemnts", "settlements",
- "seuxalized", "sexualized",
- "seventeeen", "seventeen",
- "sexaulized", "sexualized",
- "sexualixed", "sexualized",
- "sexuallity", "sexually",
- "sexualzied", "sexualized",
- "sexulaized", "sexualized",
- "shakespare", "shakespeare",
- "shakespeer", "shakespeare",
- "shakespere", "shakespeare",
- "shamelesly", "shamelessly",
- "shamelessy", "shamelessly",
- "shaprening", "sharpening",
- "shareholds", "shareholders",
- "sharkening", "sharpening",
- "sharpining", "sharpening",
- "shartening", "sharpening",
- "shatnering", "shattering",
- "shattening", "shattering",
- "shepharded", "shepherd",
- "shilouette", "silhouette",
- "shitlasses", "shitless",
- "shortenend", "shortened",
- "shortining", "shortening",
- "sidelinien", "sideline",
- "sidelinjen", "sideline",
- "sidelinked", "sideline",
- "sigantures", "signatures",
- "sightstine", "sightstone",
- "signficant", "significant",
- "signifiant", "significant",
- "significat", "significant",
- "signitures", "signatures",
- "sigthstone", "sightstone",
- "sihlouette", "silhouette",
- "silohuette", "silhouette",
- "silouhette", "silhouette",
- "similairty", "similarity",
- "similarily", "similarly",
- "similarlly", "similarly",
- "similiarly", "similarly",
- "similiarty", "similarity",
- "simliarity", "similarity",
- "simluation", "simulation",
- "simplictic", "simplistic",
- "simplifing", "simplifying",
- "simplifyed", "simplified",
- "simplifyng", "simplifying",
- "simplisitc", "simplistic",
- "simplisity", "simplicity",
- "simplistes", "simplest",
- "simplivity", "simplicity",
- "simplyfied", "simplified",
- "simualtion", "simulation",
- "simulacion", "simulation",
- "simulaiton", "simulations",
- "simulaties", "simulate",
- "simulative", "simulate",
- "simulatons", "simulations",
- "simulatore", "simulate",
- "sincereley", "sincerely",
- "sincerelly", "sincerely",
- "singatures", "signatures",
- "singulaire", "singular",
- "singulariy", "singularity",
- "singularty", "singularity",
- "singulator", "singular",
- "sitautions", "situations",
- "situatinal", "situational",
- "skatebaord", "skateboard",
- "skateborad", "skateboard",
- "skatebored", "skateboard",
- "skatebrand", "skateboard",
- "skeletones", "skeletons",
- "skeptecism", "skepticism",
- "skepticals", "skeptics",
- "skepticles", "skeptics",
- "skepticons", "skeptics",
- "skeptisicm", "skepticism",
- "skeptisism", "skepticism",
- "sketchysex", "sketches",
- "sketpicism", "skepticism",
- "skillhosts", "skillshots",
- "skillshits", "skillshots",
- "skillshoot", "skillshots",
- "skillslots", "skillshots",
- "skillsofts", "skillshots",
- "skillsshot", "skillshots",
- "skirmiches", "skirmish",
- "skpeticism", "skepticism",
- "slaughterd", "slaughtered",
- "slipperies", "slippers",
- "smarpthone", "smartphones",
- "smarthpone", "smartphone",
- "snadwiches", "sandwiches",
- "snowbaling", "snowballing",
- "snowballes", "snowballs",
- "snowballls", "snowballs",
- "socailists", "socialists",
- "socailized", "socialized",
- "socialisim", "socialism",
- "socializng", "socializing",
- "socialsits", "socialists",
- "sociapaths", "sociopaths",
- "socilaists", "socialists",
- "socilaized", "socialized",
- "sociologia", "sociological",
- "sociopatas", "sociopaths",
- "sociopatch", "sociopaths",
- "sociopatic", "sociopathic",
- "socratease", "socrates",
- "socreboard", "scoreboard",
- "soemthings", "somethings",
- "soldiarity", "solidarity",
- "solidairty", "solidarity",
- "soliditary", "solidarity",
- "solitudine", "solitude",
- "somehtings", "somethings",
- "someonelse", "someones",
- "somethibng", "somethin",
- "somethigng", "somethin",
- "somethigns", "somethings",
- "somethihng", "somethin",
- "somethiing", "somethin",
- "somethijng", "somethin",
- "somethikng", "somethin",
- "somethimng", "somethin",
- "somethinbg", "somethings",
- "somethines", "somethings",
- "somethinfg", "somethings",
- "somethinhg", "somethings",
- "somethinig", "somethings",
- "somethinkg", "somethings",
- "somethinks", "somethings",
- "somethinmg", "somethings",
- "somethinng", "somethings",
- "somethintg", "somethings",
- "somethiong", "somethin",
- "somethiung", "somethin",
- "sophicated", "sophisticated",
- "sotrmfront", "stormfront",
- "sotrylines", "storylines",
- "soudntrack", "soundtrack",
- "soundrtack", "soundtracks",
- "soundtracs", "soundtracks",
- "soundtrakc", "soundtracks",
- "soundtrakk", "soundtrack",
- "soundtraks", "soundtracks",
- "southampon", "southampton",
- "southamton", "southampton",
- "southerers", "southerners",
- "southernes", "southerners",
- "southerton", "southern",
- "souveniers", "souvenirs",
- "sovereigny", "sovereignty",
- "sovereinty", "sovereignty",
- "soverignty", "sovereignty",
- "spartaniis", "spartans",
- "spartanops", "spartans",
- "specailist", "specialist",
- "specailize", "specializes",
- "specialice", "specialize",
- "specialied", "specialized",
- "specialies", "specializes",
- "specialits", "specials",
- "speciallly", "specially",
- "speciallty", "specially",
- "specialops", "specials",
- "specialsts", "specialists",
- "specialtys", "specials",
- "specialzed", "specialized",
- "specialzes", "specializes",
- "specifices", "specifics",
- "specifiing", "specifying",
- "specifiyng", "specifying",
- "speciliast", "specialists",
- "specimines", "specimen",
- "spectarors", "spectators",
- "spectaters", "spectators",
- "spectracal", "spectral",
- "spectraply", "spectral",
- "spectrolab", "spectral",
- "speculatie", "speculative",
- "speculatin", "speculation",
- "speecheasy", "speeches",
- "speicalist", "specialist",
- "spiritualy", "spiritually",
- "sponsorees", "sponsors",
- "sponsorhip", "sponsorship",
- "sponsorise", "sponsors",
- "spontaneos", "spontaneous",
- "spontaneus", "spontaneous",
- "spontanous", "spontaneous",
- "spoonfulls", "spoonfuls",
- "spreadshet", "spreadsheet",
- "springfeld", "springfield",
- "springfied", "springfield",
- "spriritual", "spiritual",
- "squirrells", "squirrels",
- "squirrelus", "squirrels",
- "stabelized", "stabilized",
- "stabilzied", "stabilized",
- "stablility", "stability",
- "stablizied", "stabilized",
- "staggaring", "staggering",
- "stakeboard", "skateboard",
- "starighten", "straighten",
- "starnation", "starvation",
- "startegies", "strategies",
- "startupbus", "startups",
- "starwberry", "strawberry",
- "statememts", "statements",
- "statictics", "statistics",
- "stationair", "stationary",
- "statisitcs", "statistics",
- "statistcal", "statistical",
- "statistisk", "statistics",
- "stauration", "saturation",
- "stealthboy", "stealthy",
- "stealthely", "stealthy",
- "stealthify", "stealthy",
- "stealthray", "stealthy",
- "steeleries", "steelers",
- "stereotipe", "stereotype",
- "stereotpye", "stereotypes",
- "steriotype", "stereotype",
- "steroetype", "stereotype",
- "sterotypes", "stereotypes",
- "steryotype", "stereotype",
- "stimilants", "stimulants",
- "stimilated", "stimulated",
- "stimualted", "stimulated",
- "stimulatie", "stimulated",
- "stimulatin", "stimulation",
- "stimulaton", "stimulation",
- "stimulents", "stimulants",
- "stomrfront", "stormfront",
- "storelines", "storylines",
- "stormfornt", "stormfront",
- "stormfromt", "stormfront",
- "stornfront", "stormfront",
- "stornghold", "stronghold",
- "stradegies", "strategies",
- "strageties", "strategies",
- "straighted", "straightened",
- "straightie", "straighten",
- "straightin", "straighten",
- "straigthen", "straighten",
- "stranglove", "strangle",
- "strangreal", "strangle",
- "stratagies", "strategies",
- "strategems", "strategies",
- "strategice", "strategies",
- "strategisk", "strategies",
- "stravation", "starvation",
- "strawbarry", "strawberry",
- "strawbeary", "strawberry",
- "strawbeery", "strawberry",
- "strawbrary", "strawberry",
- "strawburry", "strawberry",
- "streaching", "stretching",
- "streamtrue", "streamer",
- "strechting", "stretching",
- "strecthing", "stretching",
- "stregnthen", "strengthen",
- "streichung", "stretching",
- "strenghten", "strengthen",
- "strengsten", "strengthen",
- "strengthes", "strengths",
- "strengthin", "strengthen",
- "stressende", "stressed",
- "striaghten", "straighten",
- "stromfront", "stormfront",
- "stronkhold", "stronghold",
- "stroylines", "storylines",
- "structered", "structured",
- "structrual", "structural",
- "structurel", "structural",
- "strucutral", "structural",
- "strucutred", "structured",
- "strucutres", "structures",
- "strugglign", "struggling",
- "strwaberry", "strawberry",
- "sttutering", "stuttering",
- "stupidfree", "stupider",
- "stupiditiy", "stupidity",
- "sturctural", "structural",
- "sturctures", "structures",
- "sturggling", "struggling",
- "subarmines", "submarines",
- "subcultuur", "subculture",
- "subesquent", "subsequent",
- "subisdized", "subsidized",
- "subjectief", "subjective",
- "subjectifs", "subjects",
- "subjectivy", "subjectively",
- "subjektive", "subjective",
- "submariens", "submarines",
- "submarinas", "submarines",
- "submergerd", "submerged",
- "submerines", "submarines",
- "submisison", "submissions",
- "submissies", "submissive",
- "submissons", "submissions",
- "submittion", "submitting",
- "subsadized", "subsidized",
- "subscirbed", "subscribed",
- "subscirber", "subscribers",
- "subscribar", "subscriber",
- "subscribir", "subscriber",
- "subscrible", "subscriber",
- "subscriped", "subscribed",
- "subscrubed", "subscribed",
- "subscryber", "subscriber",
- "subsedized", "subsidized",
- "subsequant", "subsequent",
- "subsidezed", "subsidized",
- "subsidiced", "subsidized",
- "subsidizng", "subsidizing",
- "subsiduary", "subsidiary",
- "subsiquent", "subsequent",
- "subsittute", "substitutes",
- "subsizided", "subsidized",
- "subsrcibed", "subscribed",
- "substanial", "substantial",
- "substansen", "substances",
- "substanser", "substances",
- "substanses", "substances",
- "substantie", "substantive",
- "substatial", "substantial",
- "substences", "substances",
- "substitite", "substitute",
- "substittue", "substitutes",
- "substitude", "substitute",
- "substitued", "substitute",
- "substituer", "substitute",
- "substitues", "substitutes",
- "substiture", "substitute",
- "substituto", "substitution",
- "substituts", "substitutes",
- "substracts", "subtracts",
- "substutite", "substitutes",
- "subsudized", "subsidized",
- "subtitltes", "subtitle",
- "succceeded", "succeeded",
- "succcesses", "successes",
- "succesfuly", "successfully",
- "succesions", "succession",
- "successing", "succession",
- "successivo", "succession",
- "sucesfully", "successfully",
- "sucessfull", "successful",
- "sucessfuly", "successfully",
- "sudnerland", "sunderland",
- "sufferered", "suffered",
- "sufferring", "suffering",
- "sufficiant", "sufficient",
- "suggestied", "suggestive",
- "suggestief", "suggestive",
- "suggestons", "suggests",
- "sumbarines", "submarines",
- "sumbissive", "submissive",
- "sumbitting", "submitting",
- "summerized", "summarized",
- "summorized", "summarized",
- "summurized", "summarized",
- "sunderlona", "sunderland",
- "sunderlund", "sunderland",
- "sungalsses", "sunglasses",
- "sunglesses", "sunglasses",
- "sunglinger", "gunslinger",
- "sunscreeen", "sunscreen",
- "superfical", "superficial",
- "superfluos", "superfluous",
- "superioara", "superior",
- "superioare", "superior",
- "superioris", "superiors",
- "superivsor", "supervisors",
- "supermaket", "supermarket",
- "supermarkt", "supermarket",
- "superouman", "superhuman",
- "superposer", "superpowers",
- "superviors", "supervisors",
- "superviosr", "supervisors",
- "supervisar", "supervisor",
- "superviser", "supervisor",
- "supervisin", "supervision",
- "supervison", "supervision",
- "supervsior", "supervisors",
- "supperssor", "suppressor",
- "supplament", "supplement",
- "supplemant", "supplemental",
- "supplemets", "supplements",
- "supportare", "supporters",
- "supporteur", "supporter",
- "supportied", "supported",
- "supportors", "supporters",
- "supposdely", "supposedly",
- "supposebly", "supposedly",
- "supposidly", "supposedly",
- "suppresion", "suppression",
- "suppresors", "suppressor",
- "suppressin", "suppression",
- "suppressio", "suppressor",
- "suppresson", "suppression",
- "suprassing", "surpassing",
- "supressing", "suppressing",
- "supression", "suppression",
- "supsension", "suspension",
- "supsicions", "suspicions",
- "supsicious", "suspicious",
- "surounding", "surrounding",
- "surplanted", "supplanted",
- "surpressed", "suppressed",
- "surprizing", "surprising",
- "surrenderd", "surrendered",
- "surrouding", "surrounding",
- "surroundes", "surrounds",
- "surroundig", "surroundings",
- "survivours", "survivor",
- "suseptable", "susceptible",
- "suseptible", "susceptible",
- "suspecions", "suspicions",
- "suspecious", "suspicious",
- "suspencion", "suspension",
- "suspendeds", "suspense",
- "suspention", "suspension",
- "suspicians", "suspicions",
- "suspiciois", "suspicions",
- "suspicioso", "suspicions",
- "suspicioun", "suspicion",
- "suspicison", "suspicions",
- "suspiciuos", "suspicions",
- "suspicsion", "suspicions",
- "suspisions", "suspicions",
- "suspisious", "suspicious",
- "suspitions", "suspicions",
- "sustainble", "sustainable",
- "swaetshirt", "sweatshirt",
- "swearengin", "swearing",
- "swearshirt", "sweatshirt",
- "sweathsirt", "sweatshirt",
- "sweatshits", "sweatshirt",
- "sweatshort", "sweatshirt",
- "sweatshrit", "sweatshirt",
- "sweerheart", "sweetheart",
- "sweetshart", "sweetheart",
- "switcheasy", "switches",
- "switzerand", "switzerland",
- "symapthize", "sympathize",
- "symbolisch", "symbolic",
- "symbolisim", "symbolism",
- "symetrical", "symmetrical",
- "sympatheic", "sympathetic",
- "sympathiek", "sympathize",
- "sympathien", "sympathize",
- "sympathtic", "sympathetic",
- "sympathyze", "sympathize",
- "sympethize", "sympathize",
- "symphatize", "sympathize",
- "symphonity", "symphony",
- "sympothize", "sympathize",
- "syncronous", "synchronous",
- "synomymous", "synonymous",
- "synomynous", "synonymous",
- "synonamous", "synonymous",
- "synonimous", "synonymous",
- "synonmyous", "synonymous",
- "synonomous", "synonymous",
- "synonumous", "synonymous",
- "synonynous", "synonymous",
- "sypmathize", "sympathize",
- "systamatic", "systematic",
- "systemetic", "systematic",
- "systemisch", "systemic",
- "systimatic", "systematic",
- "tabelspoon", "tablespoon",
- "tablespons", "tablespoons",
- "tablesppon", "tablespoon",
- "tacitcally", "tactically",
- "taiwanesse", "taiwanese",
- "taligating", "tailgating",
- "tantrumers", "tantrums",
- "targetting", "targeting",
- "teamfigths", "teamfights",
- "teamifghts", "teamfights",
- "teamspeack", "teamspeak",
- "techicians", "technicians",
- "techincian", "technician",
- "techinican", "technician",
- "techinques", "techniques",
- "technicain", "technician",
- "technicaly", "technically",
- "technicans", "technicians",
- "technichan", "technician",
- "technicien", "technician",
- "technicion", "technician",
- "technitian", "technician",
- "technqiues", "techniques",
- "techtician", "technician",
- "tehnically", "ethnically",
- "telegrapgh", "telegraph",
- "teleporing", "teleporting",
- "televesion", "television",
- "televisivo", "television",
- "temafights", "teamfights",
- "temerature", "temperature",
- "temperatue", "temperature",
- "temperment", "temperament",
- "temperture", "temperature",
- "templarios", "templars",
- "templarius", "templars",
- "temporaily", "temporarily",
- "temporarly", "temporary",
- "temptating", "temptation",
- "temptetion", "temptation",
- "tendancies", "tendencies",
- "tendencias", "tendencies",
- "tendencije", "tendencies",
- "tendensies", "tendencies",
- "tendincies", "tendencies",
- "tensionors", "tensions",
- "tentacreul", "tentacle",
- "termanator", "terminator",
- "termendous", "tremendous",
- "termiantor", "terminator",
- "termigator", "terminator",
- "terminales", "terminals",
- "terminalis", "terminals",
- "terminarla", "terminal",
- "terminarlo", "terminal",
- "terminaron", "terminator",
- "terminater", "terminator",
- "terminolgy", "terminology",
- "terorrists", "terrorists",
- "terrerists", "terrorists",
- "terrestial", "terrestrial",
- "terriblely", "terribly",
- "terriories", "territories",
- "territoral", "territorial",
- "territores", "territories",
- "territoris", "territories",
- "territorry", "territory",
- "terrorisim", "terrorism",
- "terrorsits", "terrorists",
- "terrurists", "terrorists",
- "testiclees", "testicles",
- "testiclies", "testicle",
- "testimoney", "testimony",
- "thankyooou", "thankyou",
- "themselfes", "themselves",
- "themsevles", "themselves",
- "themsleves", "themselves",
- "theocracry", "theocracy",
- "theologial", "theological",
- "therapetic", "therapeutic",
- "therepists", "therapists",
- "theripists", "therapists",
- "thermastat", "thermostat",
- "thermistat", "thermostat",
- "thermomter", "thermometer",
- "theromstat", "thermostat",
- "thorttling", "throttling",
- "thorughout", "throughout",
- "thouroghly", "thoroughly",
- "threadened", "threaded",
- "threatenes", "threatens",
- "threatning", "threatening",
- "threshhold", "threshold",
- "throthling", "throttling",
- "throtlling", "throttling",
- "throughiut", "throughput",
- "thubmnails", "thumbnails",
- "thumbmails", "thumbnails",
- "thunderbot", "thunderbolt",
- "thunderolt", "thunderbolt",
- "tighetning", "tightening",
- "tightining", "tightening",
- "tigthening", "tightening",
- "tjpanishad", "upanishad",
- "toothbruch", "toothbrush",
- "toothbruth", "toothbrush",
- "toothbursh", "toothbrush",
- "toothrbush", "toothbrush",
- "toppingest", "toppings",
- "torchilght", "torchlight",
- "torchlgiht", "torchlight",
- "torchligth", "torchlight",
- "torhclight", "torchlight",
- "torrentbig", "torrenting",
- "torrenters", "torrents",
- "torrentors", "torrents",
- "tortillera", "tortilla",
- "tortillias", "tortilla",
- "tortillita", "tortilla",
- "tortilllas", "tortilla",
- "torunament", "tournament",
- "totalitara", "totalitarian",
- "touchsceen", "touchscreen",
- "touchscren", "touchscreen",
- "touranment", "tournaments",
- "tourmanent", "tournaments",
- "tournamets", "tournaments",
- "tournamnet", "tournament",
- "tournemant", "tournament",
- "tournement", "tournament",
- "toxicitity", "toxicity",
- "trafficing", "trafficking",
- "trainwreak", "trainwreck",
- "traitorise", "traitors",
- "tramboline", "trampoline",
- "tramploine", "trampoline",
- "trampolene", "trampoline",
- "tranformed", "transformed",
- "tranistion", "transition",
- "tranlsated", "translated",
- "transalted", "translated",
- "transaltes", "translates",
- "transaltor", "translator",
- "transation", "transition",
- "transciprt", "transcripts",
- "transcirpt", "transcripts",
- "transcrips", "transcripts",
- "transcrito", "transcript",
- "transcrits", "transcripts",
- "transcrpit", "transcript",
- "transfered", "transferred",
- "transferer", "transferred",
- "transferes", "transfers",
- "transferrs", "transfers",
- "transferts", "transfers",
- "transfomed", "transformed",
- "transfored", "transformed",
- "transforme", "transfer",
- "transfroms", "transforms",
- "transgeder", "transgender",
- "transgener", "transgender",
- "transicion", "transition",
- "transision", "transition",
- "transister", "transistor",
- "transitons", "transitions",
- "transitors", "transistor",
- "transkript", "transcript",
- "translater", "translator",
- "translatin", "translations",
- "translatio", "translator",
- "translpant", "transplants",
- "transluent", "translucent",
- "transmited", "transmitted",
- "transmiter", "transmitter",
- "transmitor", "transistor",
- "transmorgs", "transforms",
- "transpalnt", "transplants",
- "transphoic", "transphobic",
- "transplain", "transplant",
- "transplate", "transplant",
- "transplats", "transplants",
- "transpoder", "transported",
- "transportr", "transporter",
- "transsexal", "transsexual",
- "transtator", "translator",
- "tranzistor", "transistor",
- "trasncript", "transcript",
- "trasnforms", "transforms",
- "trasnlated", "translated",
- "trasnlator", "translator",
- "trasnplant", "transplant",
- "traveleres", "travelers",
- "travelodge", "traveled",
- "traverlers", "traverse",
- "traversare", "traverse",
- "traversier", "traverse",
- "treasurery", "treasury",
- "trememdous", "tremendous",
- "tremondous", "tremendous",
- "trespasing", "trespassing",
- "trianwreck", "trainwreck",
- "trochlight", "torchlight",
- "trustworhy", "trustworthy",
- "trustworty", "trustworthy",
- "trustwothy", "trustworthy",
- "tryannical", "tyrannical",
- "tunraround", "turnaround",
- "tupparware", "tupperware",
- "turnapound", "turnaround",
- "turthfully", "truthfully",
- "tutoriales", "tutorials",
- "tyrantical", "tyrannical",
- "ubiqituous", "ubiquitous",
- "ubiquotous", "ubiquitous",
- "ubiqutious", "ubiquitous",
- "ukrainains", "ukrainians",
- "ukraineans", "ukrainians",
- "ukrainiens", "ukrainians",
- "ukraininas", "ukrainians",
- "ukrianians", "ukrainians",
- "ulitmately", "ultimately",
- "ulterioara", "ulterior",
- "ulterioare", "ulterior",
- "ultimative", "ultimate",
- "ultimatley", "ultimately",
- "ultimatuum", "ultimatum",
- "unanwsered", "unanswered",
- "unasnwered", "unanswered",
- "unattanded", "unattended",
- "unattented", "unattended",
- "unavailabe", "unavailable",
- "unavailble", "unavailable",
- "unavoidble", "unavoidable",
- "unawnsered", "unanswered",
- "unbalenced", "unbalanced",
- "unballance", "unbalance",
- "unbalnaced", "unbalanced",
- "unbareable", "unbearable",
- "unbeakable", "unbeatable",
- "unbeareble", "unbearable",
- "unbeatbale", "unbeatable",
- "unbeateble", "unbeatable",
- "unbeerable", "unbearable",
- "unbeetable", "unbeatable",
- "unbeknowst", "unbeknownst",
- "unbreakble", "unbreakable",
- "uncencored", "uncensored",
- "uncensered", "uncensored",
- "uncersored", "uncensored",
- "uncertainy", "uncertainty",
- "uncertanty", "uncertainty",
- "uncesnored", "uncensored",
- "uncomitted", "uncommitted",
- "uncommited", "uncommitted",
- "unconcious", "unconscious",
- "unconscous", "unconscious",
- "undebiably", "undeniably",
- "undeinable", "undeniable",
- "undeinably", "undeniably",
- "undenaible", "undeniable",
- "undenaibly", "undeniably",
- "undenyable", "undeniable",
- "undenyably", "undeniably",
- "underbaker", "undertaker",
- "undercling", "underlying",
- "underfaker", "undertaker",
- "undergated", "underrated",
- "undergrand", "undergrad",
- "undergroud", "underground",
- "undergrund", "underground",
- "undermimes", "undermines",
- "underminde", "undermines",
- "underminig", "undermining",
- "underneeth", "underneath",
- "underneith", "underneath",
- "undernieth", "underneath",
- "underpowed", "underpowered",
- "underraged", "underrated",
- "underraker", "undertaker",
- "underrater", "undertaker",
- "undersatnd", "understands",
- "understadn", "understands",
- "understans", "understands",
- "understnad", "understands",
- "understoon", "understood",
- "understsnd", "understands",
- "undertoker", "undertaker",
- "undertsand", "understands",
- "undertunes", "undertones",
- "underwager", "underwater",
- "underwares", "underwater",
- "underwolrd", "underworld",
- "underwoord", "underworld",
- "underwrold", "underworld",
- "underyling", "underlying",
- "undesrtand", "understands",
- "undoubtedy", "undoubtedly",
- "undoubtely", "undoubtedly",
- "undoubtley", "undoubtedly",
- "uneccesary", "unnecessary",
- "unecessary", "unnecessary",
- "unedcuated", "uneducated",
- "unedicated", "uneducated",
- "unempolyed", "unemployed",
- "unexplaind", "unexplained",
- "unexplaned", "unexplained",
- "unfamilair", "unfamiliar",
- "unfamilier", "unfamiliar",
- "unfinsihed", "unfinished",
- "unfirendly", "unfriendly",
- "unfortuate", "unfortunate",
- "unfreindly", "unfriendly",
- "unfriednly", "unfriendly",
- "unfriently", "unfriendly",
- "ungrapeful", "ungrateful",
- "ungreatful", "ungrateful",
- "unhealthly", "unhealthy",
- "unicornios", "unicorns",
- "unifnished", "unfinished",
- "unihabited", "uninhabited",
- "unilatreal", "unilateral",
- "unimporant", "unimportant",
- "unimpresed", "unimpressed",
- "unimpressd", "unimpressed",
- "uninsipred", "uninspired",
- "uninspried", "uninspired",
- "uninstaled", "uninstalled",
- "uniquiness", "uniqueness",
- "univercity", "university",
- "univeristy", "university",
- "universale", "universe",
- "universaly", "universally",
- "universels", "universes",
- "universets", "universes",
- "universite", "universities",
- "universtiy", "university",
- "unjustifed", "unjustified",
- "unknowingy", "unknowingly",
- "unknowinly", "unknowingly",
- "unnecesary", "unnecessary",
- "unofficail", "unofficial",
- "unoffocial", "unofficial",
- "unorginial", "unoriginal",
- "unorignial", "unoriginal",
- "unorigonal", "unoriginal",
- "unplacable", "unplayable",
- "unplaybale", "unplayable",
- "unplayeble", "unplayable",
- "unpleasent", "unpleasant",
- "unpopulair", "unpopular",
- "unproteced", "unprotected",
- "unqiueness", "uniqueness",
- "unqualifed", "unqualified",
- "unrealesed", "unreleased",
- "unrealible", "unreliable",
- "unrealistc", "unrealistic",
- "unrealitic", "unrealistic",
- "unreasonal", "unreasonably",
- "unrelaible", "unreliable",
- "unreleated", "unreleased",
- "unrelyable", "unreliable",
- "unrepetant", "unrepentant",
- "unrepetent", "unrepentant",
- "unresponse", "unresponsive",
- "unsencored", "uncensored",
- "unsetlling", "unsettling",
- "unsolicted", "unsolicited",
- "unsubscibe", "unsubscribe",
- "unsubscrbe", "unsubscribe",
- "unsucesful", "unsuccessful",
- "unsuprised", "unsurprised",
- "unsuprized", "unsurprised",
- "unviersity", "university",
- "unwrittern", "unwritten",
- "urkainians", "ukrainians",
- "utlimately", "ultimately",
- "utlrasound", "ultrasound",
- "vaccinatie", "vaccinated",
- "vaccineras", "vaccines",
- "valentians", "valentines",
- "valentiens", "valentines",
- "valentimes", "valentines",
- "valentinas", "valentines",
- "valentinos", "valentines",
- "valentones", "valentines",
- "validitity", "validity",
- "valnetines", "valentines",
- "vandalisim", "vandalism",
- "vasectomey", "vasectomy",
- "vegatarian", "vegetarian",
- "vegaterian", "vegetarian",
- "vegeratian", "vegetarians",
- "vegetairan", "vegetarians",
- "vegetarain", "vegetarians",
- "vegetarien", "vegetarian",
- "vegetarion", "vegetarian",
- "vegetatian", "vegetarian",
- "vegeterian", "vegetarian",
- "vegitables", "vegetables",
- "vehemantly", "vehemently",
- "vehemontly", "vehemently",
- "veitnamese", "vietnamese",
- "veiwership", "viewership",
- "veiwpoints", "viewpoints",
- "venezuella", "venezuela",
- "verificato", "verification",
- "verifyable", "verifiable",
- "veritcally", "vertically",
- "veritiable", "verifiable",
- "vernecular", "vernacular",
- "vernicular", "vernacular",
- "versatiliy", "versatility",
- "versatille", "versatile",
- "versatilty", "versatility",
- "versitlity", "versatility",
- "vewiership", "viewership",
- "vibratoare", "vibrator",
- "vicitmized", "victimized",
- "vicotrious", "victorious",
- "victemized", "victimized",
- "victomized", "victimized",
- "victorinos", "victorious",
- "victorinus", "victorious",
- "victoriosa", "victorious",
- "victorioso", "victorious",
- "victoriuos", "victorious",
- "victumized", "victimized",
- "videogaems", "videogames",
- "videojames", "videogames",
- "vidoegames", "videogames",
- "vientamese", "vietnamese",
- "vietmanese", "vietnamese",
- "vietnamees", "vietnamese",
- "vietnamise", "vietnamese",
- "viewpionts", "viewpoints",
- "vigilantie", "vigilante",
- "vigoruosly", "vigorously",
- "vigourosly", "vigorously",
- "villageois", "villages",
- "vindicitve", "vindictive",
- "vindictave", "vindictive",
- "visibiltiy", "visibility",
- "vitenamese", "vietnamese",
- "vocabluary", "vocabulary",
- "volatiltiy", "volatility",
- "volativity", "volatility",
- "volitality", "volatility",
- "volleyboll", "volleyball",
- "vollyeball", "volleyball",
- "volonteers", "volunteers",
- "volounteer", "volunteer",
- "voluntairy", "voluntarily",
- "voluntarly", "voluntary",
- "voluntears", "volunteers",
- "volunteeer", "volunteers",
- "volunteerd", "volunteered",
- "voluntered", "volunteered",
- "vulernable", "vulnerable",
- "vulnarable", "vulnerable",
- "vulnerabil", "vulnerable",
- "vulnurable", "vulnerable",
- "vunlerable", "vulnerable",
- "warrandyte", "warranty",
- "warrantles", "warranties",
- "warrenties", "warranties",
- "washignton", "washington",
- "waterlemon", "watermelon",
- "watermalon", "watermelon",
- "waterproff", "waterproof",
- "wavelegnth", "wavelength",
- "wavelenghs", "wavelength",
- "wavelenght", "wavelength",
- "weakensses", "weaknesses",
- "weaknesess", "weaknesses",
- "weathliest", "wealthiest",
- "wedensdays", "wednesdays",
- "wednesdsay", "wednesdays",
- "wednessday", "wednesdays",
- "wednsedays", "wednesdays",
- "weightened", "weighted",
- "welathiest", "wealthiest",
- "wellignton", "wellington",
- "wellingotn", "wellington",
- "wendesdays", "wednesdays",
- "wereabouts", "whereabouts",
- "westbroook", "westbrook",
- "westernese", "westerners",
- "westerness", "westerners",
- "westminser", "westminster",
- "westminter", "westminster",
- "whatosever", "whatsoever",
- "whatseover", "whatsoever",
- "whipsering", "whispering",
- "whsipering", "whispering",
- "widepsread", "widespread",
- "wikileakes", "wikileaks",
- "wilderniss", "wilderness",
- "wildreness", "wilderness",
- "willfullly", "willfully",
- "winchestor", "winchester",
- "windhsield", "windshield",
- "windsheild", "windshield",
- "windshiled", "windshield",
- "wisconsion", "wisconsin",
- "wishpering", "whispering",
- "withdrawan", "withdrawn",
- "withdrawel", "withdrawal",
- "withdrawin", "withdrawn",
- "withholdng", "withholding",
- "withrdawal", "withdrawals",
- "witnissing", "witnessing",
- "wonderfull", "wonderful",
- "wonderfuly", "wonderfully",
- "wonderwand", "wonderland",
- "worhsiping", "worshiping",
- "workingest", "workings",
- "workstaion", "workstation",
- "workstaton", "workstation",
- "worshippig", "worshipping",
- "worshoping", "worshiping",
- "wrestlewar", "wrestler",
- "xenohpobic", "xenophobic",
- "xenophibia", "xenophobia",
- "xenophibic", "xenophobic",
- "xenophonic", "xenophobic",
- "xenophopia", "xenophobia",
- "xenophopic", "xenophobic",
- "xeonphobia", "xenophobia",
- "xeonphobic", "xenophobic",
- "yourselfes", "yourselves",
- "yoursleves", "yourselves",
- "zimbabwaen", "zimbabwe",
- "zionistisk", "zionists",
- "abandonig", "abandoning",
- "abandonne", "abandonment",
- "abanonded", "abandoned",
- "abdomnial", "abdominal",
- "abdonimal", "abdominal",
- "aberation", "aberration",
- "abnormaly", "abnormally",
- "abodminal", "abdominal",
- "abondoned", "abandoned",
- "aborigene", "aborigine",
- "aboslutes", "absolutes",
- "abosrbing", "absorbing",
- "abreviate", "abbreviate",
- "abritrary", "arbitrary",
- "abruptley", "abruptly",
- "absailing", "abseiling",
- "absloutes", "absolutes",
- "absolutey", "absolutely",
- "absolutly", "absolutely",
- "absoultes", "absolutes",
- "abstracto", "abstraction",
- "absurdley", "absurdly",
- "absuridty", "absurdity",
- "abusrdity", "absurdity",
- "academica", "academia",
- "accademic", "academic",
- "accalimed", "acclaimed",
- "accelerar", "accelerator",
- "accending", "ascending",
- "accension", "accession",
- "accidenty", "accidently",
- "acclamied", "acclaimed",
- "accliamed", "acclaimed",
- "accomdate", "accommodate",
- "accordeon", "accordion",
- "accordian", "accordion",
- "accoridng", "according",
- "accountas", "accountants",
- "accountat", "accountants",
- "accoustic", "acoustic",
- "accroding", "according",
- "accuraccy", "accuracy",
- "acftually", "factually",
- "acheiving", "achieving",
- "achieveds", "achieves",
- "achillees", "achilles",
- "achilleos", "achilles",
- "achilleus", "achilles",
- "achiveing", "achieving",
- "acitvates", "activates",
- "aclhemist", "alchemist",
- "acomplish", "accomplish",
- "acquisito", "acquisition",
- "acronymes", "acronyms",
- "acronymns", "acronyms",
- "acsending", "ascending",
- "acsension", "ascension",
- "activaste", "activates",
- "activatin", "activation",
- "activelly", "actively",
- "activisim", "activism",
- "activisit", "activist",
- "activites", "activities",
- "actresess", "actresses",
- "acusation", "causation",
- "acutality", "actuality",
- "adavanced", "advanced",
- "adbominal", "abdominal",
- "additonal", "additional",
- "addoptive", "adoptive",
- "addresing", "addressing",
- "addtional", "additional",
- "adhearing", "adhering",
- "adherance", "adherence",
- "adjectivs", "adjectives",
- "adjustabe", "adjustable",
- "administr", "administer",
- "admitedly", "admittedly",
- "adolecent", "adolescent",
- "adovcated", "advocated",
- "adovcates", "advocates",
- "adquiring", "acquiring",
- "adresable", "addressable",
- "adressing", "addressing",
- "aduiobook", "audiobook",
- "advatange", "advantage",
- "adventurs", "adventures",
- "adveristy", "adversity",
- "advertisy", "adversity",
- "advisorys", "advisors",
- "aeorspace", "aerospace",
- "aeropsace", "aerospace",
- "aerosapce", "aerospace",
- "aersopace", "aerospace",
- "aestethic", "aesthetic",
- "aethistic", "atheistic",
- "affiliato", "affiliation",
- "affinitiy", "affinity",
- "affirmate", "affirmative",
- "affliated", "affiliated",
- "africanas", "africans",
- "africanos", "africans",
- "aggegrate", "aggregate",
- "aggresive", "aggressive",
- "agnosticm", "agnosticism",
- "agregates", "aggregates",
- "agreggate", "aggregate",
- "agrentina", "argentina",
- "agression", "aggression",
- "agressive", "aggressive",
- "agressvie", "agressive",
- "agruement", "arguement",
- "agruments", "arguments",
- "agurement", "arguement",
- "ailenated", "alienated",
- "airbourne", "airborne",
- "aircrafts", "aircraft",
- "airplance", "airplane",
- "airrcraft", "aircraft",
- "aksreddit", "askreddit",
- "alcehmist", "alchemist",
- "alchemsit", "alchemist",
- "alchimest", "alchemist",
- "alchmeist", "alchemist",
- "alchoolic", "alcoholic",
- "alcoholis", "alcoholics",
- "alechmist", "alchemist",
- "alegience", "allegiance",
- "aleinated", "alienated",
- "algoriths", "algorithms",
- "algoritms", "algorithms",
- "algorthim", "algorithm",
- "algortihm", "algorithm",
- "alignemnt", "alignment",
- "alimunium", "aluminium",
- "alingment", "alignment",
- "allainces", "alliances",
- "alledgely", "allegedly",
- "allegence", "allegiance",
- "alleivate", "alleviate",
- "allievate", "alleviate",
- "alliviate", "alleviate",
- "allopones", "allophones",
- "allthough", "although",
- "almightly", "almighty",
- "alocholic", "alcoholic",
- "alogrithm", "algorithm",
- "alphabeat", "alphabet",
- "alrightey", "alrighty",
- "alrightly", "alrighty",
- "alrightty", "alrighty",
- "alrington", "arlington",
- "alrorythm", "algorithm",
- "alterante", "alternate",
- "alternatr", "alternator",
- "althetics", "athletics",
- "althought", "although",
- "altruisim", "altruism",
- "amateures", "amateurs",
- "ambluance", "ambulance",
- "ambuigity", "ambiguity",
- "amendmant", "amendment",
- "amercians", "americans",
- "americain", "american",
- "americams", "americas",
- "americaps", "americas",
- "americats", "americas",
- "amibguity", "ambiguity",
- "aminosity", "animosity",
- "amrstrong", "armstrong",
- "amublance", "ambulance",
- "amunition", "ammunition",
- "anachrist", "anarchist",
- "analagous", "analogous",
- "analitycs", "analytics",
- "analtyics", "analytics",
- "analyitcs", "analytics",
- "analyseas", "analyses",
- "analysees", "analyses",
- "analysens", "analyses",
- "analysise", "analyses",
- "analystes", "analysts",
- "analzying", "analyzing",
- "anarchsim", "anarchism",
- "anayltics", "analytics",
- "anaylzing", "analyzing",
- "ancedotal", "anecdotal",
- "ancedotes", "anecdotes",
- "ancestory", "ancestry",
- "androgeny", "androgyny",
- "androides", "androids",
- "androidos", "androids",
- "anecdotle", "anecdote",
- "anecodtal", "anecdotal",
- "anecodtes", "anecdotes",
- "anectodal", "anecdotal",
- "anectodes", "anecdotes",
- "anedoctal", "anecdotal",
- "anedoctes", "anecdotes",
- "animostiy", "animosity",
- "anitvirus", "antivirus",
- "anlaytics", "analytics",
- "anniversy", "anniversary",
- "annointed", "anointed",
- "annoucnes", "announces",
- "annoyingy", "annoyingly",
- "annoymous", "anonymous",
- "annoynace", "annoyance",
- "annyoance", "annoyance",
- "anomisity", "animosity",
- "anomolies", "anomalies",
- "anomolous", "anomalous",
- "anomynity", "anonymity",
- "anomynous", "anonymous",
- "anonimity", "anonymity",
- "anonmyous", "anonymous",
- "anonymoys", "anonymously",
- "anorexiac", "anorexic",
- "anorexica", "anorexia",
- "anrachist", "anarchist",
- "ansestors", "ancestors",
- "antarctia", "antarctica",
- "antennaes", "antennas",
- "antiviurs", "antivirus",
- "antivrius", "antivirus",
- "antivuris", "antivirus",
- "anwsering", "answering",
- "anynomity", "anonymity",
- "anynomous", "anonymous",
- "aparthide", "apartheid",
- "aparthied", "apartheid",
- "apartmens", "apartments",
- "apocalype", "apocalypse",
- "apostrope", "apostrophe",
- "apparenty", "apparently",
- "appearane", "appearances",
- "appenines", "apennines",
- "apperance", "appearance",
- "appetitie", "appetite",
- "applaudes", "applause",
- "applicato", "application",
- "appreciae", "appreciates",
- "apprentie", "apprentice",
- "approachs", "approaches",
- "apratheid", "apartheid",
- "apsaragus", "asparagus",
- "apsergers", "aspergers",
- "aquainted", "acquainted",
- "arbirtary", "arbitrary",
- "arbritary", "arbitrary",
- "arcehtype", "archetype",
- "archetect", "architect",
- "archetpye", "archetype",
- "archetyps", "archetypes",
- "architecs", "architects",
- "archtypes", "archetypes",
- "aregument", "arguement",
- "areospace", "aerospace",
- "argessive", "agressive",
- "argeument", "arguement",
- "arguabley", "arguably",
- "arguablly", "arguably",
- "arguement", "argument",
- "arguemnet", "arguement",
- "arguemnts", "arguments",
- "argumeent", "arguement",
- "arhtritis", "arthritis",
- "aribtrary", "arbitrary",
- "ariplanes", "airplanes",
- "aristolte", "aristotle",
- "aristotel", "aristotle",
- "aritfacts", "artifacts",
- "arlignton", "arlington",
- "arlingotn", "arlington",
- "armistace", "armistice",
- "armstorng", "armstrong",
- "arpatheid", "apartheid",
- "arthirtis", "arthritis",
- "artifcats", "artifacts",
- "artifical", "artificial",
- "artillary", "artillery",
- "arugement", "arguement",
- "arugments", "arguments",
- "asapragus", "asparagus",
- "asbestoes", "asbestos",
- "asborbing", "absorbing",
- "asburdity", "absurdity",
- "ascendend", "ascended",
- "ascneding", "ascending",
- "ascnesion", "ascension",
- "asethetic", "aesthetic",
- "asnwering", "answering",
- "asociated", "associated",
- "assasined", "assassinated",
- "assassian", "assassin",
- "assassine", "assassinate",
- "assasssin", "assassins",
- "assaultes", "assaults",
- "assembeld", "assembled",
- "assembley", "assembly",
- "assemblie", "assemble",
- "assisnate", "assassinate",
- "assistans", "assistants",
- "assistsnt", "assistants",
- "assmebled", "assembled",
- "associato", "association",
- "assoicate", "associate",
- "asssasins", "assassins",
- "assualted", "assaulted",
- "assulated", "assaulted",
- "asteorids", "asteroids",
- "astericks", "asterisk",
- "asteriods", "asteroids",
- "astroanut", "astronaut",
- "astronuat", "astronaut",
- "astrounat", "astronaut",
- "asuterity", "austerity",
- "atempting", "attempting",
- "atheltics", "athletics",
- "atheneans", "athenians",
- "athesitic", "atheistic",
- "athetlics", "athletics",
- "athiestic", "atheistic",
- "athleticm", "athleticism",
- "atmosphir", "atmospheric",
- "atributed", "attributed",
- "atributes", "attributes",
- "atrifacts", "artifacts",
- "atrillery", "artillery",
- "atrittion", "attrition",
- "attachmet", "attachments",
- "attaindre", "attainder",
- "attemting", "attempting",
- "attemtped", "attempted",
- "attendent", "attendant",
- "attension", "attention",
- "attirbute", "attribute",
- "attirtion", "attrition",
- "attmepted", "attempted",
- "attractes", "attracts",
- "attractin", "attraction",
- "attributo", "attribution",
- "attributs", "attributes",
- "attritube", "attribute",
- "auctionrs", "auctions",
- "auidobook", "audiobook",
- "auromated", "automated",
- "australin", "australians",
- "authroity", "authority",
- "autoattak", "autoattack",
- "autogrpah", "autograph",
- "autonomos", "autonomous",
- "auxillary", "auxiliary",
- "avaialble", "available",
- "availible", "available",
- "avalaible", "available",
- "avaliable", "available",
- "averageed", "averaged",
- "avialable", "available",
- "awakenend", "awakened",
- "awesomley", "awesomely",
- "awkawrdly", "awkwardly",
- "awnsering", "answering",
- "bacehlors", "bachelors",
- "bachelour", "bachelor",
- "bachleors", "bachelors",
- "bacholers", "bachelors",
- "backdooor", "backdoor",
- "backfeild", "backfield",
- "backfiled", "backfield",
- "backgroud", "background",
- "backpakcs", "backpacks",
- "badnwagon", "bandwagon",
- "badnwidth", "bandwidth",
- "balckjack", "blackjack",
- "balcklist", "blacklist",
- "balitmore", "baltimore",
- "ballisitc", "ballistic",
- "ballsitic", "ballistic",
- "balsphemy", "blasphemy",
- "bandiwdth", "bandwidth",
- "bandwdith", "bandwidth",
- "bandwidht", "bandwidth",
- "bandwitdh", "bandwidth",
- "bankrupcy", "bankruptcy",
- "bankrupty", "bankruptcy",
- "banruptcy", "bankruptcy",
- "baordwalk", "boardwalk",
- "barabrian", "barbarian",
- "barbarain", "barbarian",
- "barbarina", "barbarian",
- "barcelets", "bracelets",
- "barcleona", "barcelona",
- "bareclona", "barcelona",
- "barrackus", "barracks",
- "bascially", "basically",
- "bastardes", "bastards",
- "bastardos", "bastards",
- "bastardus", "bastards",
- "bathrooom", "bathroom",
- "batlimore", "baltimore",
- "battailon", "battalion",
- "battlaion", "battalion",
- "beahviour", "behaviour",
- "beauitful", "beautiful",
- "beautifyl", "beautifully",
- "becnhmark", "benchmark",
- "becomeing", "becoming",
- "becomming", "becoming",
- "beehtoven", "beethoven",
- "begginers", "beginners",
- "beggining", "beginning",
- "begininng", "beginning",
- "beginnins", "beginnings",
- "behaivors", "behaviors",
- "behaivour", "behaviour",
- "behavoirs", "behaviors",
- "behavoiur", "behaviour",
- "behvaiour", "behaviour",
- "beleiving", "believing",
- "beliveing", "believing",
- "belssings", "blessings",
- "bemusemnt", "bemusement",
- "benchamrk", "benchmark",
- "benchmars", "benchmarks",
- "benedicat", "benedict",
- "benedickt", "benedict",
- "benghazhi", "benghazi",
- "benghazzi", "benghazi",
- "bergamont", "bergamot",
- "berkelely", "berkeley",
- "bersekrer", "berserker",
- "berskerer", "berserker",
- "beseiging", "besieging",
- "bestialiy", "bestiality",
- "beuatiful", "beautiful",
- "biginning", "beginning",
- "bigrading", "brigading",
- "billbaord", "billboard",
- "billboars", "billboards",
- "binominal", "binomial",
- "birgading", "brigading",
- "birghtest", "brightest",
- "birhtdays", "birthdays",
- "bitcoints", "bitcoins",
- "blackbery", "blackberry",
- "blackhaws", "blackhawks",
- "blackshit", "blacksmith",
- "blanketts", "blankets",
- "blapshemy", "blasphemy",
- "blashpemy", "blasphemy",
- "blaspehmy", "blasphemy",
- "blasphmey", "blasphemy",
- "blatanlty", "blatantly",
- "blatimore", "baltimore",
- "bleuberry", "blueberry",
- "bleutooth", "bluetooth",
- "blisteres", "blisters",
- "blizzcoin", "blizzcon",
- "blockchan", "blockchain",
- "blockeras", "blockers",
- "bloodbore", "bloodborne",
- "boardband", "broadband",
- "boardcast", "broadcast",
- "bodyweigt", "bodyweight",
- "bookamrks", "bookmarks",
- "bookmakrs", "bookmarks",
- "bookmarkd", "bookmarked",
- "boradband", "broadband",
- "boradcast", "broadcast",
- "boradwalk", "boardwalk",
- "bouregois", "bourgeois",
- "bourgeios", "bourgeois",
- "bourgoeis", "bourgeois",
- "boyfirend", "boyfriend",
- "boyfreind", "boyfriend",
- "boyfriens", "boyfriends",
- "brabarian", "barbarian",
- "bracelona", "barcelona",
- "braodband", "broadband",
- "braodcast", "broadcast",
- "brazilias", "brazilians",
- "breakdows", "breakdowns",
- "breserker", "berserker",
- "bretheren", "brethren",
- "bridaging", "brigading",
- "brightern", "brighten",
- "brigthest", "brightest",
- "brilliany", "brilliantly",
- "brithdays", "birthdays",
- "broadwalk", "boardwalk",
- "bruiseres", "bruisers",
- "brunettte", "brunette",
- "brusseles", "brussels",
- "brussells", "brussels",
- "brutailty", "brutality",
- "brutallly", "brutally",
- "buddhisim", "buddhism",
- "buddihsts", "buddhists",
- "buddishts", "buddhists",
- "buhddists", "buddhists",
- "buidlings", "buildings",
- "bulidings", "buildings",
- "burgunday", "burgundy",
- "burgundry", "burgundy",
- "burritoes", "burritos",
- "burtality", "brutality",
- "busineses", "business",
- "businessa", "businessman",
- "businesse", "businessmen",
- "businesss", "businesses",
- "bussiness", "business",
- "buthcered", "butchered",
- "butterlfy", "butterfly",
- "cacausian", "caucasian",
- "caclulate", "calculate",
- "cacuasian", "caucasian",
- "caculater", "calculator",
- "cafeteira", "cafeteria",
- "cafetiera", "cafeteria",
- "caffeinne", "caffeine",
- "calcualte", "calculate",
- "californa", "california",
- "caluclate", "calculate",
- "calulated", "calculated",
- "calulater", "calculator",
- "cambirdge", "cambridge",
- "cambrdige", "cambridge",
- "cambrigde", "cambridge",
- "camoflage", "camouflage",
- "campagins", "campaigns",
- "campaings", "campaigns",
- "campiagns", "campaigns",
- "campusers", "campuses",
- "camrbidge", "cambridge",
- "canadains", "canadians",
- "candadate", "candidate",
- "candidats", "candidates",
- "cannister", "canister",
- "cannoical", "canonical",
- "canoncial", "canonical",
- "capactior", "capacitor",
- "capicator", "capacitor",
- "capitalis", "capitals",
- "caprenter", "carpenter",
- "capsulers", "capsules",
- "capsulets", "capsules",
- "carachter", "character",
- "cardbaord", "cardboard",
- "cardborad", "cardboard",
- "cardianls", "cardinals",
- "cardnials", "cardinals",
- "caridnals", "cardinals",
- "carmalite", "carmelite",
- "carnberry", "cranberry",
- "carolinia", "carolina",
- "carpetner", "carpenter",
- "carptener", "carpenter",
- "carribean", "caribbean",
- "cartdrige", "cartridge",
- "cartilege", "cartilage",
- "cartirdge", "cartridge",
- "cartrdige", "cartridge",
- "cartrigde", "cartridge",
- "casaulity", "causality",
- "cashieres", "cashiers",
- "cassawory", "cassowary",
- "cassettte", "cassette",
- "casuation", "causation",
- "cataclsym", "cataclysm",
- "cataclyms", "cataclysm",
- "catacylsm", "cataclysm",
- "catacyslm", "cataclysm",
- "catalcysm", "cataclysm",
- "catalgoue", "catalogue",
- "cathderal", "cathedral",
- "catherdal", "cathedral",
- "cathloics", "catholics",
- "cathredal", "cathedral",
- "caucaisan", "caucasian",
- "caucasain", "caucasian",
- "causacian", "caucasian",
- "causailty", "causality",
- "celebirty", "celebrity",
- "celebrato", "celebration",
- "celebrite", "celebrities",
- "celesital", "celestial",
- "celestail", "celestial",
- "cementary", "cemetery",
- "cemetarey", "cemetery",
- "cenitpede", "centipede",
- "centepide", "centipede",
- "centipeed", "centipede",
- "centruies", "centuries",
- "centuties", "centuries",
- "cerebrawl", "cerebral",
- "certanity", "certainty",
- "certianty", "certainty",
- "cesspoool", "cesspool",
- "chairmain", "chairman",
- "challange", "challenge",
- "challengr", "challenger",
- "challengs", "challenges",
- "chameloen", "chameleon",
- "champagen", "champagne",
- "champange", "champagne",
- "chandlure", "chandler",
- "changable", "changeable",
- "charactor", "character",
- "chatedral", "cathedral",
- "chatolics", "catholics",
- "checkmeat", "checkmate",
- "checkpoit", "checkpoints",
- "chekcmate", "checkmate",
- "chemestry", "chemistry",
- "chemicaly", "chemically",
- "chemsitry", "chemistry",
- "chernboyl", "chernobyl",
- "chernobly", "chernobyl",
- "chernoybl", "chernobyl",
- "chernyobl", "chernobyl",
- "cheronbyl", "chernobyl",
- "chidlfree", "childfree",
- "chidlrens", "childrens",
- "chihauhua", "chihuahua",
- "chihuahau", "chihuahua",
- "childbird", "childbirth",
- "childerns", "childrens",
- "childisch", "childish",
- "childresn", "childrens",
- "chirstian", "christian",
- "chirstmas", "christmas",
- "chiuhahua", "chihuahua",
- "chlidfree", "childfree",
- "chlidrens", "childrens",
- "chocloate", "chocolate",
- "chocoalte", "chocolate",
- "chocolats", "chocolates",
- "chocolste", "chocolates",
- "cholocate", "chocolate",
- "chrenobyl", "chernobyl",
- "chrisitan", "christian",
- "christain", "christian",
- "christams", "christmas",
- "chrsitian", "christian",
- "chrsitmas", "christmas",
- "churchers", "churches",
- "cigaretts", "cigarettes",
- "cigeratte", "cigarette",
- "cilivians", "civilians",
- "cilpboard", "clipboard",
- "cilynders", "cylinders",
- "circuitos", "circuits",
- "ciriculum", "curriculum",
- "cirticise", "criticise",
- "civilains", "civilians",
- "civillian", "civilian",
- "classicos", "classics",
- "classicus", "classics",
- "classifiy", "classify",
- "cleanisng", "cleansing",
- "cleasning", "cleansing",
- "clikcbait", "clickbait",
- "clinicaly", "clinically",
- "clipbaord", "clipboard",
- "clitories", "clitoris",
- "clitorios", "clitoris",
- "clitorius", "clitoris",
- "clucthing", "clutching",
- "clutchign", "clutching",
- "cluthcing", "clutching",
- "coca cola", "coca-cola",
- "cockatils", "cocktails",
- "cocktials", "cocktails",
- "cognizent", "cognizant",
- "colateral", "collateral",
- "collabore", "collaborate",
- "collasped", "collapsed",
- "collaspes", "collapses",
- "colleauge", "colleague",
- "collectes", "collects",
- "collectie", "collective",
- "collecton", "collection",
- "collectos", "collectors",
- "collegaue", "colleague",
- "collegues", "colleagues",
- "collisson", "collisions",
- "collonade", "colonnade",
- "collonies", "colonies",
- "collpased", "collapsed",
- "collpases", "collapses",
- "colombina", "colombia",
- "columbina", "columbia",
- "comapnies", "companies",
- "combatans", "combatants",
- "combinato", "combination",
- "combusion", "combustion",
- "comestics", "cosmetics",
- "comisions", "commissions",
- "comission", "commission",
- "comitting", "committing",
- "commandes", "commands",
- "commentar", "commentator",
- "commentes", "commenters",
- "commercie", "commerce",
- "commision", "commission",
- "commiteed", "commited",
- "commiting", "committing",
- "commitmet", "commitments",
- "commments", "comments",
- "commongly", "commonly",
- "communiss", "communists",
- "communite", "communities",
- "communits", "communist",
- "communsim", "communism",
- "compaines", "companies",
- "compalins", "complains",
- "compalint", "compliant",
- "comparisn", "comparisons",
- "compeltes", "completes",
- "competant", "competent",
- "competend", "competed",
- "competion", "competition",
- "competive", "competitive",
- "compilant", "compliant",
- "compilare", "compiler",
- "compilato", "compilation",
- "compitent", "competent",
- "complaind", "complained",
- "complaing", "complaining",
- "completen", "complement",
- "completey", "completely",
- "completin", "completion",
- "complians", "complains",
- "componant", "component",
- "comprable", "comparable",
- "compresas", "compress",
- "compreses", "compress",
- "compteurs", "computers",
- "comptuers", "computers",
- "computato", "computation",
- "comradets", "comrades",
- "comsetics", "cosmetics",
- "conanical", "canonical",
- "conatiner", "container",
- "concelaed", "concealed",
- "concelaer", "concealer",
- "concelear", "concealer",
- "concensus", "consensus",
- "conceptos", "concepts",
- "conceptul", "conceptual",
- "concernig", "concerning",
- "concertas", "concerts",
- "concevied", "conceived",
- "conciders", "considers",
- "concieted", "conceited",
- "concieved", "conceived",
- "conclusie", "conclusive",
- "concsious", "conscious",
- "concurret", "concurrent",
- "condamned", "condemned",
- "condemend", "condemned",
- "condemmed", "condemned",
- "condemnig", "condemning",
- "condenmed", "condemned",
- "condesend", "condensed",
- "condesned", "condensed",
- "condmened", "condemned",
- "conection", "connection",
- "conenctor", "connector",
- "conferene", "conferences",
- "confessin", "confession",
- "confideny", "confidently",
- "confilcts", "conflicts",
- "confimred", "confirmed",
- "confirmas", "confirms",
- "conflcits", "conflicts",
- "confrimed", "confirmed",
- "congitive", "cognitive",
- "conlcuded", "concluded",
- "connectes", "connects",
- "connectit", "connecticut",
- "connectos", "connectors",
- "conquerer", "conqueror",
- "consdider", "consider",
- "consensul", "consensual",
- "conserned", "concerned",
- "consicous", "conscious",
- "considerd", "considered",
- "considert", "considerate",
- "consisent", "consistent",
- "consistes", "consists",
- "consolato", "consolation",
- "consolide", "consolidate",
- "consonent", "consonant",
- "constanly", "constantly",
- "constanst", "constants",
- "constanty", "constantly",
- "constasnt", "constants",
- "constitue", "constitutes",
- "constrait", "constraints",
- "construcs", "constructs",
- "construde", "construed",
- "construst", "constructs",
- "constucts", "constructs",
- "constured", "construed",
- "consulant", "consultant",
- "consultat", "consultant",
- "consumate", "consummate",
- "contactes", "contacts",
- "contactos", "contacts",
- "contagios", "contagious",
- "containes", "contains",
- "containig", "containing",
- "containts", "contains",
- "contemple", "contemplate",
- "contendor", "contender",
- "contentas", "contents",
- "contentes", "contents",
- "contentos", "contents",
- "contestas", "contests",
- "contestat", "contestants",
- "contestes", "contests",
- "contextes", "contexts",
- "contextos", "contexts",
- "contianer", "container",
- "contibute", "contribute",
- "contigent", "contingent",
- "continant", "continental",
- "continens", "continents",
- "continous", "continuous",
- "continuos", "continuous",
- "continute", "continue",
- "contiunal", "continual",
- "contracto", "contraction",
- "contribue", "contribute",
- "contribuo", "contributor",
- "controlas", "controls",
- "controled", "controlled",
- "controles", "controls",
- "controlls", "controls",
- "convenant", "covenant",
- "convencen", "convenience",
- "conveniet", "convenient",
- "conversie", "converse",
- "conversin", "conversions",
- "convertie", "convertible",
- "convertis", "converts",
- "cooldwons", "cooldowns",
- "coordinar", "coordinator",
- "copenhagn", "copenhagen",
- "coprorate", "corporate",
- "copywrite", "copyright",
- "corcodile", "crocodile",
- "corparate", "corporate",
- "corproate", "corporate",
- "correclty", "correctly",
- "correctin", "correction",
- "correlato", "correlation",
- "corridoor", "corridor",
- "corruptin", "corruption",
- "corssfire", "crossfire",
- "corsshair", "crosshair",
- "corsspost", "crosspost",
- "coruching", "crouching",
- "cosemtics", "cosmetics",
- "costumise", "costumes",
- "counciles", "councils",
- "councills", "councils",
- "councilos", "councils",
- "countains", "contains",
- "counteres", "counters",
- "countires", "countries",
- "courching", "crouching",
- "courtesey", "courtesy",
- "courtesty", "courtesy",
- "coururier", "courier",
- "coutnered", "countered",
- "crapenter", "carpenter",
- "creativey", "creatively",
- "creedence", "credence",
- "crhistmas", "christmas",
- "cricketts", "crickets",
- "criminaly", "criminally",
- "critereon", "criterion",
- "criterias", "criteria",
- "criticaly", "critically",
- "criticies", "criticise",
- "criticisn", "criticising",
- "critisice", "criticise",
- "critisicm", "criticism",
- "critising", "criticising",
- "critisism", "criticism",
- "critisize", "criticise",
- "critizing", "criticizing",
- "crosshiar", "crosshair",
- "crossifre", "crossfire",
- "crticised", "criticised",
- "crusdaers", "crusaders",
- "crutchers", "crutches",
- "crystalls", "crystals",
- "crystalus", "crystals",
- "crystalys", "crystals",
- "cuacasian", "caucasian",
- "cuasality", "causality",
- "culitvate", "cultivate",
- "culturaly", "culturally",
- "culturels", "cultures",
- "curiostiy", "curiosity",
- "curisoity", "curiosity",
- "currenlty", "currently",
- "curriculm", "curriculum",
- "cursaders", "crusaders",
- "custcenes", "cutscenes",
- "cutsceens", "cutscenes",
- "cutscence", "cutscene",
- "cutsences", "cutscenes",
- "cyclinder", "cylinder",
- "cyclistes", "cyclists",
- "cylindres", "cylinders",
- "cynicisim", "cynicism",
- "dahsboard", "dashboard",
- "dalmation", "dalmatian",
- "dangeroys", "dangerously",
- "dashbaord", "dashboard",
- "daugthers", "daughters",
- "davantage", "advantage",
- "deadlfits", "deadlifts",
- "deadpoool", "deadpool",
- "dealershp", "dealerships",
- "deathmath", "deathmatch",
- "decalring", "declaring",
- "decendant", "descendant",
- "decendent", "descendant",
- "decipting", "depicting",
- "deciption", "depiction",
- "decisivie", "decisive",
- "declarase", "declares",
- "declarees", "declares",
- "decoratie", "decorative",
- "decoratin", "decorations",
- "decpetion", "deception",
- "decpetive", "deceptive",
- "decribing", "describing",
- "decsended", "descended",
- "deductibe", "deductible",
- "defaintly", "defiantly",
- "defaltion", "deflation",
- "defanitly", "defiantly",
- "defeintly", "definetly",
- "defendent", "defendant",
- "defensese", "defenseless",
- "defianlty", "defiantly",
- "deficeint", "deficient",
- "deficieny", "deficiency",
- "deficites", "deficits",
- "definance", "defiance",
- "definatey", "definately",
- "definatly", "definitely",
- "definetly", "definitely",
- "definetyl", "definetly",
- "definilty", "definitly",
- "definitie", "definitive",
- "definitin", "definitions",
- "definitly", "definitely",
- "definiton", "definition",
- "definitve", "definite",
- "definityl", "definitly",
- "definltey", "definetly",
- "defintaly", "defiantly",
- "defintily", "definitly",
- "defintion", "definition",
- "defintley", "definetly",
- "defitenly", "definetly",
- "defitinly", "definitly",
- "defitnaly", "defiantly",
- "defitnely", "definetly",
- "deflectin", "deflection",
- "defnietly", "definetly",
- "degeneret", "degenerate",
- "degradato", "degradation",
- "degradead", "degraded",
- "degrassie", "degrasse",
- "degrassse", "degrasse",
- "deifnetly", "definetly",
- "deifnitly", "definitly",
- "deisgners", "designers",
- "delagates", "delegates",
- "delcaring", "declaring",
- "delcining", "declining",
- "delegatie", "delegate",
- "delerious", "delirious",
- "deleteing", "deleting",
- "delfation", "deflation",
- "deliveres", "delivers",
- "deliverys", "delivers",
- "delpoying", "deploying",
- "demcorats", "democrats",
- "deminsion", "dimension",
- "democarcy", "democracy",
- "democract", "democrat",
- "demonstre", "demonstrate",
- "denominar", "denominator",
- "dentistas", "dentists",
- "dentistes", "dentists",
- "deomcrats", "democrats",
- "deopsited", "deposited",
- "deparment", "department",
- "departmet", "departments",
- "depciting", "depicting",
- "depcition", "depiction",
- "depection", "deception",
- "depedency", "dependency",
- "depicitng", "depicting",
- "depiciton", "depiction",
- "deplyoing", "deploying",
- "depoisted", "deposited",
- "depolying", "deploying",
- "depositas", "deposits",
- "deposites", "deposits",
- "depositis", "deposits",
- "depositos", "deposits",
- "depostied", "deposited",
- "depressie", "depressive",
- "depressin", "depression",
- "depserate", "desperate",
- "depsoited", "deposited",
- "descirbes", "describes",
- "descision", "decision",
- "desginers", "designers",
- "desgining", "designing",
- "desicions", "decisions",
- "designade", "designated",
- "designato", "designation",
- "desingage", "disengage",
- "desingers", "designers",
- "desinging", "designing",
- "desktopos", "desktops",
- "desparate", "desperate",
- "desperato", "desperation",
- "despoited", "deposited",
- "desriable", "desirable",
- "dessigned", "designed",
- "destinato", "destination",
- "destoryed", "destroyed",
- "destoryer", "destroyer",
- "destroyes", "destroys",
- "destructo", "destruction",
- "destryoed", "destroyed",
- "destryoer", "destroyer",
- "desuction", "seduction",
- "detailled", "detailed",
- "detatched", "detached",
- "detectivs", "detectives",
- "deteriate", "deteriorate",
- "determing", "determining",
- "determins", "determines",
- "developrs", "develops",
- "diabetees", "diabetes",
- "diablical", "diabolical",
- "diagonaal", "diagonal",
- "diagonsed", "diagnosed",
- "diagonsis", "diagnosis",
- "diagramas", "diagrams",
- "diagramms", "diagrams",
- "dialectes", "dialects",
- "dialectos", "dialects",
- "diarrheoa", "diarrhea",
- "diasbling", "disabling",
- "dichomoty", "dichotomy",
- "dicovered", "discovered",
- "dictaters", "dictates",
- "dictionay", "dictionary",
- "difenitly", "definitly",
- "diferrent", "different",
- "differene", "differences",
- "differens", "differences",
- "differeny", "differently",
- "difficuly", "difficulty",
- "diffucult", "difficult",
- "dificulty", "difficulty",
- "diganosed", "diagnosed",
- "diganosis", "diagnosis",
- "dimenions", "dimensions",
- "dimention", "dimension",
- "dimesnion", "dimension",
- "diminishs", "diminishes",
- "dinasours", "dinosaurs",
- "dinosuars", "dinosaurs",
- "dinsoaurs", "dinosaurs",
- "dionsaurs", "dinosaurs",
- "diphtongs", "diphthongs",
- "dipthongs", "diphthongs",
- "direcotry", "directory",
- "directoty", "directory",
- "directroy", "directory",
- "disapears", "disappears",
- "disaprity", "disparity",
- "disastros", "disastrous",
- "disatrous", "disastrous",
- "disbaling", "disabling",
- "disbeleif", "disbelief",
- "disbelife", "disbelief",
- "disciplen", "disciplines",
- "disclamer", "disclaimer",
- "disclosue", "disclosure",
- "disconnet", "disconnect",
- "discosure", "discourse",
- "discoverd", "discovered",
- "discovere", "discoveries",
- "discredid", "discredited",
- "discribed", "described",
- "discribes", "describes",
- "discussin", "discussion",
- "diserable", "desirable",
- "disgarees", "disagrees",
- "disgiused", "disguised",
- "disgusied", "disguised",
- "disgustes", "disgusts",
- "disgustos", "disgusts",
- "disgustus", "disgusts",
- "dishonesy", "dishonesty",
- "dishonord", "dishonored",
- "disicples", "disciples",
- "dismantel", "dismantle",
- "dismisals", "dismissal",
- "disnegage", "disengage",
- "dispairty", "disparity",
- "dispalyed", "displayed",
- "dispartiy", "disparity",
- "dispenced", "dispensed",
- "dispeners", "dispenser",
- "displayes", "displays",
- "disruptin", "disruption",
- "dissapear", "disappear",
- "dissarray", "disarray",
- "dissmisal", "dismissal",
- "disspiate", "dissipate",
- "distincte", "distinctive",
- "distrcits", "districts",
- "distribue", "distributed",
- "distrubed", "disturbed",
- "distrupts", "distrust",
- "disturben", "disturbance",
- "diverisfy", "diversify",
- "diveristy", "diversity",
- "diverstiy", "diversity",
- "dividened", "dividend",
- "divinitiy", "divinity",
- "doccument", "document",
- "docrtines", "doctrines",
- "docuhebag", "douchebag",
- "dogdammit", "goddammit",
- "dogfather", "godfather",
- "dolphines", "dolphins",
- "domecracy", "democracy",
- "domecrats", "democrats",
- "domiantes", "dominates",
- "dominatin", "domination",
- "dominaton", "domination",
- "dominiant", "dominant",
- "donwgrade", "downgrade",
- "donwloads", "downloads",
- "donwsides", "downsides",
- "donwvoted", "downvoted",
- "donwvotes", "downvotes",
- "doublelit", "doublelift",
- "doucehbag", "douchebag",
- "downgarde", "downgrade",
- "downlaods", "downloads",
- "downloaad", "download",
- "downovted", "downvoted",
- "dravadian", "dravidian",
- "drummless", "drumless",
- "dsyphoria", "dysphoria",
- "dsytopian", "dystopian",
- "duaghters", "daughters",
- "duplicats", "duplicates",
- "durabiliy", "durability",
- "dynamicus", "dynamics",
- "dypshoria", "dysphoria",
- "dyshporia", "dysphoria",
- "dysoptian", "dystopian",
- "dysphoira", "dysphoria",
- "dysphroia", "dysphoria",
- "dyspohria", "dysphoria",
- "dyspotian", "dystopian",
- "dystopain", "dystopian",
- "dystpoian", "dystopian",
- "eachohter", "eachother",
- "eachotehr", "eachother",
- "eachtoher", "eachother",
- "earpluggs", "earplugs",
- "earthboud", "earthbound",
- "eastwoood", "eastwood",
- "eastwoord", "eastwood",
- "ecclectic", "eclectic",
- "ecomonics", "economics",
- "edficient", "deficient",
- "effecient", "efficient",
- "efficeint", "efficient",
- "efficency", "efficiency",
- "efficieny", "efficiency",
- "effulence", "effluence",
- "egalitara", "egalitarian",
- "egpytians", "egyptians",
- "egyptains", "egyptians",
- "egytpians", "egyptians",
- "ehtically", "ethically",
- "ehtnicity", "ethnicity",
- "eighteeen", "eighteen",
- "eitquette", "etiquette",
- "ejacualte", "ejaculate",
- "electivre", "elective",
- "electorns", "electrons",
- "electrial", "electrical",
- "electricy", "electricity",
- "electroal", "electoral",
- "elementay", "elementary",
- "elepahnts", "elephants",
- "eliminase", "eliminates",
- "eliminato", "elimination",
- "ellignton", "ellington",
- "ellingotn", "ellington",
- "eloquenty", "eloquently",
- "elsehwere", "elsewhere",
- "emapthize", "empathize",
- "embarress", "embarrassed",
- "emmisarry", "emissary",
- "emmisions", "emissions",
- "emmitting", "emitting",
- "empahsize", "emphasize",
- "emperical", "empirical",
- "emphaised", "emphasised",
- "emphatize", "empathize",
- "emphazise", "emphasize",
- "emphysyma", "emphysema",
- "empitness", "emptiness",
- "employeer", "employer",
- "employeur", "employer",
- "empolyees", "employees",
- "emtpiness", "emptiness",
- "emualtion", "emulation",
- "enahncing", "enhancing",
- "enchantig", "enchanting",
- "enclousre", "enclosure",
- "enclsoure", "enclosure",
- "encolsure", "enclosure",
- "encompase", "encompass",
- "enconding", "encoding",
- "encounted", "encountered",
- "encrpyted", "encrypted",
- "encrytped", "encrypted",
- "encyrpted", "encrypted",
- "endangerd", "endangered",
- "enevlopes", "envelopes",
- "enforcees", "enforces",
- "engagemet", "engagements",
- "engagment", "engagement",
- "engieneer", "engineer",
- "engineeer", "engineer",
- "engineerd", "engineered",
- "enhacning", "enhancing",
- "enhanceds", "enhances",
- "enligthen", "enlighten",
- "enourmous", "enormous",
- "ensconsed", "ensconced",
- "enthicity", "ethnicity",
- "enthusiam", "enthusiasm",
- "enthusiat", "enthusiast",
- "entirelly", "entirely",
- "entitlied", "entitled",
- "enveloppe", "envelope",
- "epidsodes", "episodes",
- "epilepsey", "epilepsy",
- "epiphanny", "epiphany",
- "episonage", "espionage",
- "epscially", "specially",
- "epsionage", "espionage",
- "eqautions", "equations",
- "equialent", "equivalent",
- "equivalet", "equivalents",
- "ermington", "remington",
- "erroenous", "erroneous",
- "escalatie", "escalate",
- "escalatin", "escalation",
- "esitmated", "estimated",
- "esitmates", "estimates",
- "eslewhere", "elsewhere",
- "especialy", "especially",
- "espianoge", "espionage",
- "espinoage", "espionage",
- "espoinage", "espionage",
- "esponiage", "espionage",
- "espressso", "espresso",
- "essencial", "essential",
- "essentail", "essential",
- "essentias", "essentials",
- "essentual", "essential",
- "essesital", "essential",
- "estiamted", "estimated",
- "estiamtes", "estimates",
- "estimatin", "estimation",
- "ethcially", "ethically",
- "ethincity", "ethnicity",
- "ethnicaly", "ethnically",
- "ethniticy", "ethnicity",
- "etmyology", "etymology",
- "euclidian", "euclidean",
- "euorpeans", "europeans",
- "euphoriac", "euphoric",
- "euphorica", "euphoria",
- "europenas", "europeans",
- "europians", "europeans",
- "eurpoeans", "europeans",
- "evangelia", "evangelical",
- "evelation", "elevation",
- "evenlopes", "envelopes",
- "eventally", "eventually",
- "eventualy", "eventually",
- "everthing", "everything",
- "evertyime", "everytime",
- "everwhere", "everywhere",
- "everyoens", "everyones",
- "everyteim", "everytime",
- "everytiem", "everytime",
- "everyting", "everything",
- "eveyrones", "everyones",
- "evreyones", "everyones",
- "evreytime", "everytime",
- "exagerate", "exaggerate",
- "exahusted", "exhausted",
- "exapnsive", "expansive",
- "exauhsted", "exhausted",
- "excahnges", "exchanges",
- "excecuted", "executed",
- "excecutes", "executes",
- "excellant", "excellent",
- "excercise", "exercise",
- "excerised", "exercised",
- "excerises", "exercises",
- "exceuting", "executing",
- "exchnages", "exchanges",
- "exclsuive", "exclusive",
- "excludeds", "excludes",
- "exclusivs", "exclusives",
- "exclusivy", "exclusivity",
- "excpetion", "exception",
- "exculding", "excluding",
- "exculsion", "exclusion",
- "exculsive", "exclusive",
- "execising", "exercising",
- "execption", "exception",
- "exectuing", "executing",
- "exectuion", "execution",
- "exectuive", "executive",
- "executabe", "executable",
- "exepmtion", "exemption",
- "exerbated", "exacerbated",
- "exercices", "exercise",
- "exerciese", "exercises",
- "exercizes", "exercise",
- "exersices", "exercises",
- "exhasuted", "exhausted",
- "exhaustin", "exhaustion",
- "exhibites", "exhibits",
- "exhibitin", "exhibition",
- "exhibtion", "exhibition",
- "exhuasted", "exhausted",
- "exibition", "exhibition",
- "existance", "existence",
- "existenta", "existential",
- "existince", "existence",
- "existnace", "existance",
- "exlcuding", "excluding",
- "exlcusion", "exclusion",
- "exlcusive", "exclusive",
- "exlpoding", "exploding",
- "exlporers", "explorers",
- "exlposion", "explosion",
- "exonorate", "exonerate",
- "expalined", "explained",
- "expanisve", "expansive",
- "expatriot", "expatriate",
- "expectany", "expectancy",
- "expection", "exception",
- "expemtion", "exemption",
- "experimet", "experiments",
- "explaines", "explains",
- "explainig", "explaining",
- "explaning", "explaining",
- "expliciet", "explicit",
- "explicity", "explicitly",
- "explictly", "explicitly",
- "explioted", "exploited",
- "explodeds", "explodes",
- "exploites", "exploits",
- "explorare", "explorer",
- "explotied", "exploited",
- "expolding", "exploding",
- "expolited", "exploited",
- "expolsion", "explosion",
- "expolsive", "explosive",
- "expressie", "expressive",
- "expressin", "expression",
- "exsitance", "existance",
- "extention", "extension",
- "exteriour", "exterior",
- "extermely", "extremely",
- "extermism", "extremism",
- "extermist", "extremist",
- "externaly", "externally",
- "extractin", "extraction",
- "extrapole", "extrapolate",
- "extreemly", "extremely",
- "extremers", "extremes",
- "extremley", "extremely",
- "extrotion", "extortion",
- "eyeballls", "eyeballs",
- "eyebrowes", "eyebrows",
- "eyebrowns", "eyebrows",
- "eyesahdow", "eyeshadow",
- "eyeshdaow", "eyeshadow",
- "eygptians", "egyptians",
- "eytmology", "etymology",
- "faceboook", "facebook",
- "faciliate", "facilitate",
- "facilites", "facilities",
- "facilitiy", "facility",
- "facinated", "fascinated",
- "facutally", "factually",
- "familiair", "familiar",
- "familiare", "familiarize",
- "familiary", "familiarity",
- "familliar", "familiar",
- "fanaticas", "fanatics",
- "fanaticos", "fanatics",
- "fanaticus", "fanatics",
- "fanatsies", "fantasies",
- "fanatsize", "fantasize",
- "fandation", "foundation",
- "fanservie", "fanservice",
- "fantazise", "fantasize",
- "farenheit", "fahrenheit",
- "fascistes", "fascists",
- "fashoined", "fashioned",
- "favorties", "favorites",
- "favoruite", "favourite",
- "favourits", "favourites",
- "favourtie", "favourite",
- "fedreally", "federally",
- "feminisim", "feminism",
- "feminsits", "feminists",
- "femminist", "feminist",
- "fesitvals", "festivals",
- "fetishers", "fetishes",
- "fightings", "fighting",
- "filetimes", "lifetimes",
- "filiament", "filament",
- "filmmakes", "filmmakers",
- "fingernal", "fingernails",
- "flashligt", "flashlight",
- "flavorade", "flavored",
- "flavoures", "flavours",
- "flavourus", "flavours",
- "flawlessy", "flawlessly",
- "flexibily", "flexibility",
- "fluctaute", "fluctuate",
- "flucutate", "fluctuate",
- "fluttersy", "fluttershy",
- "follwoing", "following",
- "foootball", "football",
- "forcefuly", "forcefully",
- "forcibley", "forcibly",
- "forciblly", "forcibly",
- "forearmes", "forearms",
- "foreginer", "foreigner",
- "foregroud", "foreground",
- "foreinger", "foreigner",
- "forgeiner", "foreigner",
- "forgiener", "foreigner",
- "forgivens", "forgiveness",
- "foriegner", "foreigner",
- "forigener", "foreigner",
- "formerlly", "formerly",
- "formualte", "formulate",
- "formulaes", "formulas",
- "formulars", "formulas",
- "forntline", "frontline",
- "forntpage", "frontpage",
- "fortuante", "fortunate",
- "forumlate", "formulate",
- "foundatin", "foundations",
- "fourteeen", "fourteen",
- "fractales", "fractals",
- "fractalis", "fractals",
- "fractalus", "fractals",
- "fragement", "fragment",
- "fragmenot", "fragment",
- "franchies", "franchise",
- "francsico", "francisco",
- "franscico", "francisco",
- "frecklers", "freckles",
- "freedomes", "freedoms",
- "freestlye", "freestyle",
- "freesytle", "freestyle",
- "fremented", "fermented",
- "freqeuncy", "frequency",
- "frequence", "frequencies",
- "friendlis", "friendlies",
- "frightend", "frightened",
- "fromation", "formation",
- "frontapge", "frontpage",
- "frontilne", "frontline",
- "frustrato", "frustration",
- "frustrats", "frustrates",
- "fucntions", "functions",
- "fullscren", "fullscreen",
- "funcitons", "functions",
- "functiong", "functioning",
- "functtion", "function",
- "furiosuly", "furiously",
- "furiuosly", "furiously",
- "futuristc", "futuristic",
- "gagnsters", "gangsters",
- "galations", "galatians",
- "galdiator", "gladiator",
- "gallaxies", "galaxies",
- "garanteed", "guaranteed",
- "garantees", "guarantees",
- "garuantee", "guarantee",
- "gatherins", "gatherings",
- "gauntelts", "gauntlets",
- "gauntlent", "gauntlet",
- "gaurantee", "guarantee",
- "gaurentee", "guarantee",
- "genatilia", "genitalia",
- "geneology", "genealogy",
- "generalbs", "generals",
- "generalis", "generals",
- "generaste", "generates",
- "generatie", "generate",
- "generatin", "generations",
- "generatos", "generators",
- "genitaila", "genitalia",
- "genitales", "genitals",
- "genitalis", "genitals",
- "geniunely", "genuinely",
- "gentailia", "genitalia",
- "gentelmen", "gentlemen",
- "gentialia", "genitalia",
- "genuienly", "genuinely",
- "genuinley", "genuinely",
- "geogrpahy", "geography",
- "germaniac", "germanic",
- "geurrilla", "guerrilla",
- "gimmickey", "gimmicky",
- "gimmickly", "gimmicky",
- "girlfried", "girlfriend",
- "goalkeepr", "goalkeeper",
- "godafther", "godfather",
- "godspeeed", "godspeed",
- "goegraphy", "geography",
- "goldfisch", "goldfish",
- "goosebums", "goosebumps",
- "gorvement", "goverment",
- "govemrent", "goverment",
- "govenment", "government",
- "goverance", "governance",
- "goveremnt", "goverment",
- "goverment", "government",
- "govermetn", "goverment",
- "govermnet", "goverment",
- "governmet", "governments",
- "govorment", "government",
- "govrement", "goverment",
- "gracefull", "graceful",
- "gracefuly", "gracefully",
- "graduaste", "graduates",
- "graduatin", "graduation",
- "grahpical", "graphical",
- "grativate", "gravitate",
- "graudally", "gradually",
- "graudates", "graduates",
- "greenalnd", "greenland",
- "grenaders", "grenades",
- "grpahical", "graphical",
- "guadulupe", "guadalupe",
- "guaranted", "guaranteed",
- "guarantes", "guarantees",
- "guardains", "guardians",
- "guarentee", "guarantee",
- "guaridans", "guardians",
- "guatamala", "guatemala",
- "guerrilas", "guerrillas",
- "guradians", "guardians",
- "guranteed", "guaranteed",
- "gurantees", "guarantees",
- "gutiarist", "guitarist",
- "habsbourg", "habsburg",
- "hairstlye", "hairstyle",
- "hairsytle", "hairstyle",
- "halarious", "hilarious",
- "hambruger", "hamburger",
- "hamburges", "hamburgers",
- "hamphsire", "hampshire",
- "hamsphire", "hampshire",
- "handboook", "handbook",
- "handedley", "handedly",
- "handedlly", "handedly",
- "handicape", "handicapped",
- "hapmshire", "hampshire",
- "happended", "happened",
- "happenend", "happened",
- "happenned", "happened",
- "harasment", "harassment",
- "hardenend", "hardened",
- "hardwoord", "hardwood",
- "haristyle", "hairstyle",
- "harrasing", "harassing",
- "harrassed", "harassed",
- "harrasses", "harassed",
- "hdinsight", "hindsight",
- "headahces", "headaches",
- "headhpone", "headphone",
- "headshoot", "headshot",
- "healither", "healthier",
- "healtheir", "healthier",
- "healthiet", "healthiest",
- "healthire", "healthier",
- "heapdhone", "headphone",
- "hedgehoog", "hedgehog",
- "hedgehorg", "hedgehog",
- "heightend", "heightened",
- "heirarchy", "hierarchy",
- "herculase", "hercules",
- "herculeas", "hercules",
- "herculees", "hercules",
- "herculeus", "hercules",
- "heriarchy", "hierarchy",
- "hesistant", "hesitant",
- "hesistate", "hesitate",
- "hesitatin", "hesitation",
- "hieroglph", "hieroglyph",
- "highschol", "highschool",
- "hindisght", "hindsight",
- "hindrence", "hindrance",
- "hinduisim", "hinduism",
- "hinduisum", "hinduism",
- "hipsanics", "hispanics",
- "hirearchy", "hierarchy",
- "hirsohima", "hiroshima",
- "hispancis", "hispanics",
- "hitboxers", "hitboxes",
- "hoepfully", "hopefully",
- "holocasut", "holocaust",
- "holocuast", "holocaust",
- "homeonwer", "homeowner",
- "homeopaty", "homeopathy",
- "homewolrd", "homeworld",
- "homewoner", "homeowner",
- "homewrold", "homeworld",
- "homogenes", "homogeneous",
- "homosexul", "homosexuals",
- "hopelessy", "hopelessly",
- "hopsitals", "hospitals",
- "horishima", "hiroshima",
- "horizones", "horizons",
- "horizonts", "horizons",
- "horrendos", "horrendous",
- "horribley", "horribly",
- "horriblly", "horribly",
- "horrifing", "horrifying",
- "hositlity", "hostility",
- "hospitaly", "hospitality",
- "hosptials", "hospitals",
- "hourgalss", "hourglass",
- "hourlgass", "hourglass",
- "househols", "households",
- "humanitis", "humanities",
- "humanoind", "humanoid",
- "humiditiy", "humidity",
- "hunagrian", "hungarian",
- "hurriance", "hurricane",
- "hurricans", "hurricanes",
- "husbandos", "husbands",
- "hydraluic", "hydraulic",
- "hydropile", "hydrophile",
- "hydropobe", "hydrophobe",
- "hydrualic", "hydraulic",
- "hyopcrite", "hypocrite",
- "hypcorite", "hypocrite",
- "hyperoble", "hyperbole",
- "hypocracy", "hypocrisy",
- "hypocrasy", "hypocrisy",
- "hypocricy", "hypocrisy",
- "hypocriet", "hypocrite",
- "hypocrits", "hypocrites",
- "hyporcite", "hypocrite",
- "hypothess", "hypotheses",
- "hyprocisy", "hypocrisy",
- "hyprocite", "hypocrite",
- "hyrdation", "hydration",
- "hyrdaulic", "hydraulic",
- "hysterica", "hysteria",
- "hysteriia", "hysteria",
- "iburpofen", "ibuprofen",
- "icleandic", "icelandic",
- "icongnito", "incognito",
- "idealisim", "idealism",
- "idealistc", "idealistic",
- "identifer", "identifier",
- "identifiy", "identify",
- "ideologis", "ideologies",
- "ignornace", "ignorance",
- "illegales", "illegals",
- "illegalis", "illegals",
- "illegalls", "illegals",
- "illnesess", "illnesses",
- "illsuions", "illusions",
- "illuminai", "illuminati",
- "imagenary", "imaginary",
- "imaginery", "imaginary",
- "imaptient", "impatient",
- "imigrated", "emigrated",
- "immensley", "immensely",
- "immerisve", "immersive",
- "immesnely", "immensely",
- "immidiate", "immediate",
- "immigrato", "immigration",
- "immitated", "imitated",
- "immitator", "imitator",
- "immobilie", "immobile",
- "immobille", "immobile",
- "immobilze", "immobile",
- "immortaly", "immortality",
- "immserive", "immersive",
- "impaitent", "impatient",
- "imparital", "impartial",
- "impedence", "impedance",
- "implantes", "implants",
- "implicati", "implicit",
- "impliciet", "implicit",
- "implicity", "implicitly",
- "impliment", "implement",
- "implusive", "impulsive",
- "importamt", "important",
- "importend", "imported",
- "imporving", "improving",
- "impossibe", "impossible",
- "imprefect", "imperfect",
- "impressin", "impressions",
- "imprioned", "imprisoned",
- "improbabe", "improbable",
- "impulisve", "impulsive",
- "impuslive", "impulsive",
- "imrpoving", "improving",
- "inadequet", "inadequate",
- "inadquate", "inadequate",
- "inaugures", "inaugurates",
- "inbalance", "imbalance",
- "inbeetwen", "inbetween",
- "inbetween", "between",
- "inbewteen", "inbetween",
- "incarnato", "incarnation",
- "incgonito", "incognito",
- "inclinato", "inclination",
- "includeds", "includes",
- "incoginto", "incognito",
- "incongito", "incognito",
- "incorpore", "incorporate",
- "incpetion", "inception",
- "incredibe", "incredible",
- "incrediby", "incredibly",
- "inculding", "including",
- "incunabla", "incunabula",
- "indicaste", "indicates",
- "indicatie", "indicative",
- "indicence", "incidence",
- "indicents", "incidents",
- "indigenos", "indigenous",
- "indirecty", "indirectly",
- "indisious", "insidious",
- "individul", "individual",
- "individus", "individuals",
- "indoensia", "indonesia",
- "indoneisa", "indonesia",
- "indutrial", "industrial",
- "inersting", "inserting",
- "inexpense", "inexpensive",
- "infallibe", "infallible",
- "inferioir", "inferior",
- "inferiour", "inferior",
- "infestato", "infestation",
- "infiltrar", "infiltrator",
- "infinitey", "infinity",
- "infinitie", "infinite",
- "infinitiy", "infinity",
- "infinitly", "infinity",
- "inflatabe", "inflatable",
- "influense", "influences",
- "influenta", "influential",
- "informate", "informative",
- "infraread", "infrared",
- "ingeniuty", "ingenuity",
- "ingeunity", "ingenuity",
- "ingocnito", "incognito",
- "ingorance", "ignorance",
- "inguenity", "ingenuity",
- "inhabitat", "inhabitants",
- "inheirted", "inherited",
- "inhertied", "inherited",
- "initailly", "initially",
- "initalese", "initialese",
- "initaling", "initialing",
- "initalise", "initialise",
- "initalism", "initialism",
- "initalize", "initialize",
- "initalled", "initialled",
- "initation", "initiation",
- "initiales", "initials",
- "initiatie", "initiatives",
- "initiatin", "initiation",
- "initiatve", "initiate",
- "injustics", "injustices",
- "inlcuding", "including",
- "inmigrant", "immigrant",
- "innoucous", "innocuous",
- "innovatin", "innovations",
- "innovatve", "innovate",
- "inpection", "inception",
- "inpending", "impending",
- "inproving", "improving",
- "inpsector", "inspector",
- "inpsiring", "inspiring",
- "inquisito", "inquisition",
- "inquisitr", "inquisitor",
- "inresting", "inserting",
- "insanelly", "insanely",
- "insepctor", "inspector",
- "insidiuos", "insidious",
- "insipring", "inspiring",
- "insluated", "insulated",
- "inspectin", "inspection",
- "instabilt", "instability",
- "installes", "installs",
- "installus", "installs",
- "instering", "inserting",
- "insticnts", "instincts",
- "institude", "instituted",
- "instituto", "institution",
- "insualted", "insulated",
- "insurence", "insurance",
- "insurgeny", "insurgency",
- "integirty", "integrity",
- "integraal", "integral",
- "integrade", "integrated",
- "integrato", "integration",
- "intenisty", "intensity",
- "intensley", "intensely",
- "interacte", "interactive",
- "interents", "internets",
- "interesat", "interest",
- "interesst", "interests",
- "interewbs", "interwebs",
- "interfase", "interfaces",
- "interfeer", "interfere",
- "interfers", "interferes",
- "intergate", "integrate",
- "intergity", "integrity",
- "interiour", "interior",
- "internest", "internets",
- "interpert", "interpret",
- "interprut", "interrupt",
- "interrups", "interrupts",
- "interstae", "interstate",
- "interveen", "intervene",
- "intervied", "interviewed",
- "intervier", "interviewer",
- "intervies", "interviews",
- "intesnely", "intensely",
- "intesnity", "intensity",
- "intestins", "intestines",
- "intialize", "initialize",
- "inticrate", "intricate",
- "intimidad", "intimidated",
- "intircate", "intricate",
- "intiution", "intuition",
- "intiutive", "intuitive",
- "intorduce", "introduce",
- "intorvert", "introvert",
- "intracite", "intricate",
- "intrduced", "introduced",
- "intregity", "integrity",
- "intrenets", "internets",
- "intrepret", "interpret",
- "intrerupt", "interrupt",
- "intrewebs", "interwebs",
- "intrinisc", "intrinsic",
- "intrisinc", "intrinsic",
- "intrisnic", "intrinsic",
- "intriuged", "intrigued",
- "introdued", "introduced",
- "introduse", "introduces",
- "introvers", "introverts",
- "intruiged", "intrigued",
- "intrument", "instrument",
- "inutition", "intuition",
- "inutitive", "intuitive",
- "invaderas", "invaders",
- "invalidas", "invalidates",
- "inventios", "inventions",
- "investige", "investigate",
- "investmet", "investments",
- "invincibe", "invincible",
- "invloving", "involving",
- "invovling", "involving",
- "ipubrofen", "ibuprofen",
- "iranianos", "iranians",
- "irelevent", "irrelevant",
- "ironicaly", "ironically",
- "irritatie", "irritate",
- "irritatin", "irritation",
- "isalmists", "islamists",
- "isalnders", "islanders",
- "islamiskt", "islamist",
- "islamsits", "islamists",
- "islmaists", "islamists",
- "isntaller", "installer",
- "isntances", "instances",
- "isntantly", "instantly",
- "israelies", "israelis",
- "israelits", "israelis",
- "italianas", "italians",
- "italianos", "italians",
- "jailbrake", "jailbreak",
- "jalibreak", "jailbreak",
- "jamaicain", "jamaican",
- "jersualem", "jerusalem",
- "jeruselam", "jerusalem",
- "jeruslaem", "jerusalem",
- "journalis", "journals",
- "judegment", "judgement",
- "judgemant", "judgemental",
- "judisuary", "judiciary",
- "jugdement", "judgement",
- "juggernat", "juggernaut",
- "juvenille", "juvenile",
- "keneysian", "keynesian",
- "kentuckey", "kentucky",
- "kenyesian", "keynesian",
- "keybaords", "keyboards",
- "keyensian", "keynesian",
- "keyesnian", "keynesian",
- "keynseian", "keynesian",
- "keysenian", "keynesian",
- "kilometes", "kilometers",
- "kindapped", "kidnapped",
- "kncokback", "knockback",
- "knoweldge", "knowledge",
- "knowlegde", "knowledge",
- "konckback", "knockback",
- "kryptonie", "kryptonite",
- "labirynth", "labyrinth",
- "laboratoy", "laboratory",
- "laboreres", "laborers",
- "labratory", "laboratory",
- "labriynth", "labyrinth",
- "labryinth", "labyrinth",
- "labyrnith", "labyrinth",
- "landscaps", "landscapes",
- "landscspe", "landscapes",
- "langauges", "languages",
- "languague", "language",
- "lanuchers", "launchers",
- "lanugages", "languages",
- "larington", "arlington",
- "latitudie", "latitude",
- "lattitude", "latitude",
- "laucnhers", "launchers",
- "laucnhing", "launching",
- "launchign", "launching",
- "laybrinth", "labyrinth",
- "lebanesse", "lebanese",
- "leceister", "leicester",
- "leciester", "leicester",
- "legitmate", "legitimate",
- "legnedary", "legendary",
- "lesbianas", "lesbians",
- "lesbianus", "lesbians",
- "letivicus", "leviticus",
- "leutenant", "lieutenant",
- "levaithan", "leviathan",
- "levellign", "levelling",
- "levetated", "levitated",
- "levetates", "levitates",
- "levicitus", "leviticus",
- "levleling", "levelling",
- "lfiesteal", "lifesteal",
- "liberales", "liberals",
- "liberalim", "liberalism",
- "liberalis", "liberals",
- "liberatin", "liberation",
- "libraires", "libraries",
- "liecester", "leicester",
- "lieuenant", "lieutenant",
- "lieutenat", "lieutenant",
- "lifespawn", "lifespan",
- "lifestlye", "lifestyle",
- "lighnting", "lightning",
- "lightnign", "lightning",
- "ligthning", "lightning",
- "ligthroom", "lightroom",
- "lingerine", "lingerie",
- "lispticks", "lipsticks",
- "listenend", "listened",
- "literarly", "literary",
- "literarry", "literary",
- "literatre", "literate",
- "literatue", "literate",
- "literture", "literature",
- "lithaunia", "lithuania",
- "lithuaina", "lithuania",
- "lithuiana", "lithuania",
- "lithunaia", "lithuania",
- "litigatin", "litigation",
- "lituhania", "lithuania",
- "liveprool", "liverpool",
- "livestrem", "livestream",
- "lobbysits", "lobbyists",
- "lockscren", "lockscreen",
- "logisitcs", "logistics",
- "logsitics", "logistics",
- "loiusiana", "louisiana",
- "lollipoop", "lollipop",
- "louisvile", "louisville",
- "luanchers", "launchers",
- "luanching", "launching",
- "lubicrant", "lubricant",
- "lubircant", "lubricant",
- "ludcrious", "ludicrous",
- "ludricous", "ludicrous",
- "lunaticos", "lunatics",
- "lunaticus", "lunatics",
- "macaronni", "macaroni",
- "maestries", "masteries",
- "magainzes", "magazines",
- "magensium", "magnesium",
- "magincian", "magician",
- "magintude", "magnitude",
- "magneisum", "magnesium",
- "magnesuim", "magnesium",
- "magnifine", "magnificent",
- "mainfesto", "manifesto",
- "mainfests", "manifests",
- "mainstrem", "mainstream",
- "maintaing", "maintaining",
- "maintance", "maintenance",
- "maintians", "maintains",
- "mairjuana", "marijuana",
- "malasyian", "malaysian",
- "malayisan", "malaysian",
- "malaysain", "malaysian",
- "maletonin", "melatonin",
- "maltesian", "maltese",
- "malyasian", "malaysian",
- "managable", "manageable",
- "managment", "management",
- "mandarian", "mandarin",
- "mandarijn", "mandarin",
- "mandarion", "mandarin",
- "maneouvre", "manoeuvre",
- "maneuveur", "maneuver",
- "maneveurs", "maneuvers",
- "manfiesto", "manifesto",
- "manfiests", "manifests",
- "mangesium", "magnesium",
- "mangitude", "magnitude",
- "manouvers", "maneuvers",
- "mantained", "maintained",
- "manuevers", "maneuvers",
- "maraudeur", "marauder",
- "marevlous", "marvelous",
- "margarent", "margaret",
- "margarite", "margaret",
- "marginaal", "marginal",
- "marginaly", "marginally",
- "marijauna", "marijuana",
- "marineras", "mariners",
- "marineris", "mariners",
- "marineros", "mariners",
- "marjiuana", "marijuana",
- "marjority", "majority",
- "marmelade", "marmalade",
- "marrtyred", "martyred",
- "massagens", "massages",
- "massivley", "massively",
- "masteires", "masteries",
- "mastereis", "masteries",
- "masterise", "masteries",
- "mastermid", "mastermind",
- "mastieres", "masteries",
- "masturbae", "masturbated",
- "materiaal", "material",
- "matierals", "materials",
- "mattreses", "mattress",
- "mayalsian", "malaysian",
- "maylasian", "malaysian",
- "mccarthey", "mccarthy",
- "mecahnics", "mechanics",
- "mecernary", "mercenary",
- "mechancis", "mechanics",
- "mechanims", "mechanism",
- "mechaninc", "mechanic",
- "mechansim", "mechanism",
- "medicince", "medicine",
- "mediciney", "mediciny",
- "meditatie", "meditate",
- "meditatin", "meditation",
- "megathred", "megathread",
- "melanotin", "melatonin",
- "melborune", "melbourne",
- "melbounre", "melbourne",
- "membrance", "membrane",
- "menstraul", "menstrual",
- "menstural", "menstrual",
- "mensutral", "menstrual",
- "mentiones", "mentions",
- "mercanery", "mercenary",
- "merhcants", "merchants",
- "messagers", "messages",
- "messanger", "messenger",
- "metabloic", "metabolic",
- "metalurgy", "metallurgy",
- "methaphor", "metaphor",
- "methapors", "metaphors",
- "methodoly", "methodology",
- "metropols", "metropolis",
- "mexicanas", "mexicans",
- "mexicants", "mexicans",
- "mexicanus", "mexicans",
- "michellle", "michelle",
- "micorwave", "microwave",
- "micoscopy", "microscopy",
- "microphen", "microphone",
- "migrantes", "migrants",
- "migrianes", "migraines",
- "milawukee", "milwaukee",
- "milennium", "millennium",
- "milestons", "milestones",
- "militians", "militias",
- "millenial", "millennial",
- "millenian", "millennia",
- "millenium", "millennium",
- "millionar", "millionaire",
- "millitary", "military",
- "miluwakee", "milwaukee",
- "milwakuee", "milwaukee",
- "milwuakee", "milwaukee",
- "mindcarck", "mindcrack",
- "mindlessy", "mindlessly",
- "minerales", "minerals",
- "minisclue", "miniscule",
- "miniscuel", "miniscule",
- "ministery", "ministry",
- "minisucle", "miniscule",
- "minitaure", "miniature",
- "minituare", "miniature",
- "minneosta", "minnesota",
- "minnestoa", "minnesota",
- "minsicule", "miniscule",
- "minsiters", "ministers",
- "minstries", "ministries",
- "miraculos", "miraculous",
- "mircowave", "microwave",
- "mirrorred", "mirrored",
- "miserabel", "miserable",
- "mispelled", "misspelled",
- "misreable", "miserable",
- "misreably", "miserably",
- "missisipi", "mississippi",
- "missonary", "missionary",
- "missourri", "missouri",
- "misspelld", "misspelled",
- "mobilitiy", "mobility",
- "moderatey", "moderately",
- "moderatin", "moderation",
- "modifires", "modifiers",
- "moelcules", "molecules",
- "moleclues", "molecules",
- "molestare", "molester",
- "molestato", "molestation",
- "molesterd", "molested",
- "monestary", "monastery",
- "monitores", "monitors",
- "monolgoue", "monologue",
- "monolight", "moonlight",
- "monolouge", "monologue",
- "monopolis", "monopolies",
- "monopolly", "monopoly",
- "monopoloy", "monopoly",
- "monserrat", "montserrat",
- "monstorus", "monstrous",
- "monstruos", "monstrous",
- "montanous", "mountainous",
- "montoring", "monitoring",
- "monumnets", "monuments",
- "moratlity", "mortality",
- "morbidley", "morbidly",
- "morgatges", "mortgages",
- "morgtages", "mortgages",
- "morisette", "morissette",
- "mormonsim", "mormonism",
- "morroccan", "moroccan",
- "mortailty", "mortality",
- "mosquitto", "mosquito",
- "motivatie", "motivate",
- "motivatin", "motivations",
- "motorcyce", "motorcycles",
- "motorolja", "motorola",
- "motoroloa", "motorola",
- "moustahce", "moustache",
- "movepseed", "movespeed",
- "mozzarela", "mozzarella",
- "mucisians", "musicians",
- "mulitated", "mutilated",
- "mulitples", "multiples",
- "multipled", "multiplied",
- "multplies", "multiples",
- "murdererd", "murdered",
- "muscially", "musically",
- "muscician", "musician",
- "musculair", "muscular",
- "mushrooom", "mushroom",
- "musicains", "musicians",
- "mutatiohn", "mutation",
- "mutialted", "mutilated",
- "mutilatin", "mutilation",
- "mutliated", "mutilated",
- "mutliples", "multiples",
- "mutlitude", "multitude",
- "mysterise", "mysteries",
- "mysterous", "mysterious",
- "nacrotics", "narcotics",
- "naferious", "nefarious",
- "nahsville", "nashville",
- "narcissim", "narcissism",
- "narcissit", "narcissist",
- "narcissts", "narcissist",
- "narctoics", "narcotics",
- "nasvhille", "nashville",
- "nationaal", "national",
- "nationaly", "nationally",
- "nativelly", "natively",
- "natrually", "naturally",
- "navigatie", "navigate",
- "navigatin", "navigation",
- "neccesary", "necessary",
- "necessite", "necessities",
- "neckbears", "neckbeards",
- "neckbread", "neckbeard",
- "nedlessly", "endlessly",
- "needlessy", "needlessly",
- "negiotate", "negotiate",
- "negociate", "negotiate",
- "negoitate", "negotiate",
- "neigbhour", "neighbour",
- "neigbours", "neighbours",
- "neighboor", "neighbor",
- "nessecary", "necessary",
- "newcaslte", "newcastle",
- "newcastel", "newcastle",
- "nieghbour", "neighbour",
- "nightfa;;", "nightfall",
- "nightlcub", "nightclub",
- "nigthclub", "nightclub",
- "nigthlife", "nightlife",
- "nigthmare", "nightmare",
- "nihilisim", "nihilism",
- "ninteenth", "nineteenth",
- "nominatie", "nominate",
- "nominatin", "nomination",
- "noninital", "noninitial",
- "norhteast", "northeast",
- "norhtwest", "northwest",
- "normanday", "normandy",
- "northeren", "northern",
- "norwegain", "norwegian",
- "norwiegan", "norwegian",
- "nostaglia", "nostalgia",
- "nostaglic", "nostalgic",
- "nostaliga", "nostalgia",
- "nostaligc", "nostalgic",
- "nostlagia", "nostalgia",
- "nostlagic", "nostalgic",
- "nostriles", "nostrils",
- "nostrills", "nostrils",
- "notacible", "noticable",
- "notciable", "noticable",
- "noteboook", "notebook",
- "noteriety", "notoriety",
- "noteworty", "noteworthy",
- "noticable", "noticeable",
- "noticably", "noticeably",
- "noticalbe", "noticable",
- "noticeing", "noticing",
- "noticible", "noticeable",
- "notoroius", "notorious",
- "novermber", "november",
- "nullabour", "nullarbor",
- "numberous", "numerous",
- "numercial", "numerical",
- "numerious", "numerous",
- "nuremburg", "nuremberg",
- "nurtients", "nutrients",
- "nutirents", "nutrients",
- "nutreints", "nutrients",
- "nutritent", "nutrient",
- "nutritian", "nutritional",
- "nutritios", "nutritious",
- "obediance", "obedience",
- "obeidence", "obedience",
- "obersvant", "observant",
- "obersvers", "observers",
- "obesssion", "obsession",
- "obiedence", "obedience",
- "obivously", "obviously",
- "objectivs", "objectives",
- "objectivy", "objectivity",
- "obscruity", "obscurity",
- "obscuirty", "obscurity",
- "observare", "observer",
- "observerd", "observed",
- "obssesion", "obsession",
- "obssesive", "obsessive",
- "obssessed", "obsessed",
- "obstruced", "obstructed",
- "obsucrity", "obscurity",
- "obtainabe", "obtainable",
- "obviosuly", "obviously",
- "obvioulsy", "obviously",
- "obvisouly", "obviously",
- "obvoiusly", "obviously",
- "ocasional", "occasional",
- "ocasioned", "occasioned",
- "ocassions", "occasions",
- "occaisons", "occasions",
- "occassion", "occasion",
- "occurance", "occurrence",
- "occurence", "occurrence",
- "octohedra", "octahedra",
- "ocuntries", "countries",
- "ocurrance", "occurrence",
- "ocurrence", "occurrence",
- "offcially", "officially",
- "offically", "officially",
- "officialy", "officially",
- "offpsring", "offspring",
- "offspirng", "offspring",
- "offsrping", "offspring",
- "ogliarchy", "oligarchy",
- "oilgarchy", "oligarchy",
- "oligrachy", "oligarchy",
- "ommitting", "omitting",
- "onlsaught", "onslaught",
- "onsalught", "onslaught",
- "onslaugth", "onslaught",
- "onsluaght", "onslaught",
- "onwership", "ownership",
- "opiniones", "opinions",
- "oposition", "opposition",
- "opponenet", "opponent",
- "opposiste", "opposites",
- "opposties", "opposites",
- "oppressin", "oppression",
- "opression", "oppression",
- "opressive", "oppressive",
- "opthalmic", "ophthalmic",
- "optimisim", "optimism",
- "optimistc", "optimistic",
- "optinally", "optimally",
- "oragnered", "orangered",
- "oragnised", "organised",
- "oragnizer", "organizer",
- "orcehstra", "orchestra",
- "ordinarly", "ordinary",
- "orgainsed", "organised",
- "orgainzer", "organizer",
- "organered", "orangered",
- "organices", "organise",
- "organisim", "organism",
- "organiske", "organise",
- "organiste", "organise",
- "organites", "organise",
- "organizms", "organism",
- "organsied", "organised",
- "organsims", "organisms",
- "organzier", "organizer",
- "orginally", "originally",
- "orgnaised", "organised",
- "orhcestra", "orchestra",
- "orientato", "orientation",
- "origanaly", "originally",
- "originall", "original",
- "originalt", "originality",
- "originaly", "originally",
- "origintea", "originate",
- "origional", "original",
- "orignally", "originally",
- "orignials", "originals",
- "oublisher", "publisher",
- "oursleves", "ourselves",
- "oustiders", "outsiders",
- "oustpoken", "outspoken",
- "outisders", "outsiders",
- "outnumbed", "outnumbered",
- "outpalyed", "outplayed",
- "outperfom", "outperform",
- "outpsoken", "outspoken",
- "outrageos", "outrageous",
- "outskirst", "outskirts",
- "outskrits", "outskirts",
- "outwieghs", "outweighs",
- "overbaord", "overboard",
- "overclcok", "overclock",
- "overdirve", "overdrive",
- "overhpyed", "overhyped",
- "overhwelm", "overwhelm",
- "overlcock", "overclock",
- "overloard", "overload",
- "overpaied", "overpaid",
- "overpowed", "overpowered",
- "overriden", "overridden",
- "overwhlem", "overwhelm",
- "overwirte", "overwrite",
- "overwtach", "overwatch",
- "overyhped", "overhyped",
- "owernship", "ownership",
- "pacificts", "pacifist",
- "packageid", "packaged",
- "pactivity", "captivity",
- "painkills", "painkillers",
- "paitently", "patiently",
- "paitience", "patience",
- "pakistain", "pakistani",
- "pakistian", "pakistani",
- "pakistnai", "pakistani",
- "paksitani", "pakistani",
- "paladines", "paladins",
- "paladinos", "paladins",
- "palestein", "palestine",
- "palestina", "palestinian",
- "palistian", "palestinian",
- "paltforms", "platforms",
- "palystyle", "playstyle",
- "pancakers", "pancakes",
- "pantomine", "pantomime",
- "paradimes", "paradise",
- "paragraps", "paragraphs",
- "paragrpah", "paragraph",
- "paralells", "parallels",
- "paralelly", "parallelly",
- "paralisys", "paralysis",
- "parallely", "parallelly",
- "paralzyed", "paralyzed",
- "paramedis", "paramedics",
- "paramters", "parameters",
- "paranoica", "paranoia",
- "paranoida", "paranoia",
- "parasties", "parasites",
- "paraylsis", "paralysis",
- "paraylzed", "paralyzed",
- "parellels", "parallels",
- "paricular", "particular",
- "parisitic", "parasitic",
- "paritally", "partially",
- "parliment", "parliament",
- "parmesaen", "parmesan",
- "parntered", "partnered",
- "parrallel", "parallel",
- "partchett", "pratchett",
- "parterned", "partnered",
- "participe", "participate",
- "partiotic", "patriotic",
- "partisain", "partisan",
- "pasengers", "passengers",
- "passagens", "passages",
- "passagers", "passages",
- "passerbys", "passersby",
- "passiones", "passions",
- "passivley", "passively",
- "passowrds", "passwords",
- "pateintly", "patiently",
- "paticular", "particular",
- "patinetly", "patiently",
- "patriarca", "patriarchal",
- "patriarcy", "patriarchy",
- "patriotas", "patriots",
- "patriotes", "patriots",
- "patroitic", "patriotic",
- "pattented", "patented",
- "pavillion", "pavilion",
- "pbulisher", "publisher",
- "peacefuly", "peacefully",
- "pedohpile", "pedophile",
- "pedophila", "pedophilia",
- "pedophils", "pedophiles",
- "peircings", "piercings",
- "penalites", "penalties",
- "penatlies", "penalties",
- "penduluum", "pendulum",
- "penerator", "penetrator",
- "penguines", "penguins",
- "penguings", "penguins",
- "penguinos", "penguins",
- "peninsual", "peninsula",
- "peninusla", "peninsula",
- "penisnula", "peninsula",
- "penisular", "peninsular",
- "pennisula", "peninsula",
- "pensinula", "peninsula",
- "pentagoon", "pentagon",
- "peodphile", "pedophile",
- "pepperino", "pepperoni",
- "peppermit", "peppermint",
- "percepted", "perceived",
- "percevied", "perceived",
- "percieved", "perceived",
- "percisely", "precisely",
- "percision", "precision",
- "percursor", "precursor",
- "perdators", "predators",
- "peremiter", "perimeter",
- "perfeclty", "perfectly",
- "perfomers", "performers",
- "performas", "performs",
- "perfromer", "performer",
- "pericings", "piercings",
- "perimetre", "perimeter",
- "peristent", "persistent",
- "periwinke", "periwinkle",
- "permanant", "permanent",
- "permature", "premature",
- "permenant", "permanent",
- "permieter", "perimeter",
- "permissie", "permissible",
- "permissin", "permissions",
- "permisson", "permission",
- "pernament", "permanent",
- "perorders", "preorders",
- "perpetrar", "perpetrator",
- "perpetuae", "perpetuate",
- "perpetuas", "perpetuates",
- "persauded", "persuaded",
- "perscribe", "prescribe",
- "perserved", "preserved",
- "persistes", "persists",
- "personaes", "personas",
- "personaly", "personally",
- "personell", "personnel",
- "personhod", "personhood",
- "persuated", "persuade",
- "pertended", "pretended",
- "pertoleum", "petroleum",
- "perusaded", "persuaded",
- "pervertes", "perverse",
- "pesticids", "pesticides",
- "petroluem", "petroleum",
- "phemonena", "phenomena",
- "phenemona", "phenomena",
- "phenonema", "phenomena",
- "phillipse", "phillies",
- "philosopy", "philosophy",
- "philosphy", "philosophy",
- "phonecian", "phoenecian",
- "phonemena", "phenomena",
- "phongraph", "phonograph",
- "photograh", "photograph",
- "phsyician", "physician",
- "phsyicist", "physicist",
- "phycisian", "physician",
- "phycisist", "physicist",
- "physicaly", "physically",
- "physicits", "physicist",
- "physisict", "physicist",
- "piblisher", "publisher",
- "picthfork", "pitchfork",
- "pinetrest", "pinterest",
- "placeheld", "placeholder",
- "placemens", "placements",
- "plaestine", "palestine",
- "plagarism", "plagiarism",
- "planatery", "planetary",
- "planation", "plantation",
- "planteary", "planetary",
- "plasticas", "plastics",
- "plasticos", "plastics",
- "plasticus", "plastics",
- "platfroms", "platforms",
- "platofrms", "platforms",
- "plausable", "plausible",
- "plausbile", "plausible",
- "plausibel", "plausible",
- "playgroud", "playground",
- "playright", "playwright",
- "playstlye", "playstyle",
- "playwrite", "playwright",
- "plebicite", "plebiscite",
- "plethoria", "plethora",
- "ploarized", "polarized",
- "pointeres", "pointers",
- "polinator", "pollinator",
- "polishees", "polishes",
- "politelly", "politely",
- "politican", "politician",
- "politicas", "politics",
- "politicin", "politician",
- "politicus", "politics",
- "polygammy", "polygamy",
- "populatin", "populations",
- "poralized", "polarized",
- "porcelian", "porcelain",
- "porcelina", "porcelain",
- "poreclain", "porcelain",
- "porftolio", "portfolio",
- "porgramme", "programme",
- "portfoilo", "portfolio",
- "portoflio", "portfolio",
- "portraing", "portraying",
- "portrayes", "portrays",
- "portrayls", "portrays",
- "portriats", "portraits",
- "portugese", "portuguese",
- "portugues", "portuguese",
- "posessing", "possessing",
- "posession", "possession",
- "positiond", "positioned",
- "positiong", "positioning",
- "positionl", "positional",
- "positiviy", "positivity",
- "possesess", "possesses",
- "possesing", "possessing",
- "possesion", "possession",
- "possessin", "possessions",
- "possibile", "possible",
- "possibily", "possibility",
- "possibley", "possibly",
- "possiblly", "possibly",
- "possition", "position",
- "powderade", "powdered",
- "powerfull", "powerful",
- "pracitcal", "practical",
- "practhett", "pratchett",
- "practicly", "practically",
- "practives", "practise",
- "pragamtic", "pragmatic",
- "preadtors", "predators",
- "precedeed", "preceded",
- "preceeded", "preceded",
- "preceived", "perceived",
- "preciesly", "precisely",
- "precisley", "precisely",
- "precurors", "precursor",
- "precurosr", "precursor",
- "precurser", "precursor",
- "predatobr", "predator",
- "predictie", "predictive",
- "predictin", "prediction",
- "predjuice", "prejudice",
- "predujice", "prejudice",
- "prefectly", "perfectly",
- "preferens", "preferences",
- "prefering", "preferring",
- "preformer", "performer",
- "pregnance", "pregnancies",
- "preimeter", "perimeter",
- "prejiduce", "prejudice",
- "prejucide", "prejudice",
- "premanent", "permanent",
- "premeired", "premiered",
- "preorderd", "preordered",
- "preparato", "preparation",
- "prepatory", "preparatory",
- "presentas", "presents",
- "presentes", "presents",
- "presicely", "precisely",
- "presicion", "precision",
- "presideny", "presidency",
- "prestigiu", "prestigious",
- "prestigue", "prestige",
- "presuaded", "persuaded",
- "pretendas", "pretends",
- "pretensje", "pretense",
- "pretinent", "pertinent",
- "prevelant", "prevalent",
- "preventin", "prevention",
- "previvous", "previous",
- "priesthod", "priesthood",
- "priestood", "priesthood",
- "primaires", "primaries",
- "primairly", "primarily",
- "primarliy", "primarily",
- "primative", "primitive",
- "primordal", "primordial",
- "princesas", "princess",
- "princeses", "princess",
- "princesss", "princesses",
- "principas", "principals",
- "principly", "principally",
- "prinicple", "principle",
- "prioritie", "prioritize",
- "prioritse", "priorities",
- "privalege", "privilege",
- "privelege", "privilege",
- "privelige", "privilege",
- "privilage", "privilege",
- "privilegs", "privileges",
- "privledge", "privilege",
- "probabily", "probability",
- "probablly", "probably",
- "problemas", "problems",
- "procative", "proactive",
- "procedger", "procedure",
- "proceding", "proceeding",
- "proceedes", "proceeds",
- "procelain", "porcelain",
- "procesess", "processes",
- "processer", "processor",
- "processos", "processors",
- "proclamed", "proclaimed",
- "procotols", "protocols",
- "prodecure", "procedure",
- "productie", "productive",
- "productin", "productions",
- "productos", "products",
- "profesion", "profusion",
- "professer", "professor",
- "professin", "professions",
- "proffesed", "professed",
- "proffesor", "professor",
- "progessed", "progressed",
- "programas", "programs",
- "programem", "programme",
- "programes", "programs",
- "programms", "programs",
- "progresso", "progression",
- "progresss", "progresses",
- "projectie", "projectile",
- "projectin", "projection",
- "prominant", "prominent",
- "promiscus", "promiscuous",
- "promotted", "promoted",
- "pronomial", "pronominal",
- "pronouced", "pronounced",
- "pronounds", "pronouns",
- "pronounes", "pronouns",
- "propagana", "propaganda",
- "properies", "properties",
- "propertly", "property",
- "propeties", "properties",
- "prophesie", "prophecies",
- "prophetes", "prophets",
- "propogate", "propagate",
- "proposels", "proposes",
- "proposito", "proposition",
- "propperly", "properly",
- "propsects", "prospects",
- "prosperos", "prosperous",
- "prostitue", "prostitute",
- "protectes", "protects",
- "protectie", "protective",
- "protectos", "protectors",
- "proteinas", "proteins",
- "proteines", "proteins",
- "protestas", "protests",
- "protestat", "protestant",
- "protestes", "protests",
- "protestos", "protests",
- "protfolio", "portfolio",
- "protocool", "protocol",
- "prototpye", "prototype",
- "prototyps", "prototypes",
- "protraits", "portraits",
- "protrayal", "portrayal",
- "protrayed", "portrayed",
- "provicial", "provincial",
- "provincie", "province",
- "provisios", "provisions",
- "pruchased", "purchased",
- "pruchases", "purchases",
- "prugatory", "purgatory",
- "pruposely", "purposely",
- "pscyhotic", "psychotic",
- "pseudonyn", "pseudonym",
- "pshycosis", "psychosis",
- "pshycotic", "psychotic",
- "psycology", "psychology",
- "psycothic", "psychotic",
- "ptichfork", "pitchfork",
- "pubilsher", "publisher",
- "publiaher", "publisher",
- "publicaly", "publicly",
- "publicani", "publication",
- "publicher", "publisher",
- "publiclly", "publicly",
- "publihser", "publisher",
- "publisehr", "publisher",
- "publisger", "publisher",
- "publishor", "publisher",
- "publishre", "publisher",
- "publsiher", "publisher",
- "publusher", "publisher",
- "puchasing", "purchasing",
- "punishmet", "punishments",
- "puplisher", "publisher",
- "puragtory", "purgatory",
- "purcahsed", "purchased",
- "purcahses", "purchases",
- "purhcased", "purchased",
- "purposley", "purposely",
- "pursuaded", "persuaded",
- "pursuades", "persuades",
- "pyramidas", "pyramids",
- "pyramides", "pyramids",
- "pyschosis", "psychosis",
- "pyschotic", "psychotic",
- "qaulifies", "qualifies",
- "quantifiy", "quantify",
- "quantitiy", "quantity",
- "quantitty", "quantity",
- "quartlery", "quarterly",
- "queations", "equations",
- "queenland", "queensland",
- "questiond", "questioned",
- "questiong", "questioning",
- "questionn", "questioning",
- "radicalis", "radicals",
- "rapsberry", "raspberry",
- "rasbperry", "raspberry",
- "rationaly", "rationally",
- "reactiony", "reactionary",
- "realisitc", "realistic",
- "realoding", "reloading",
- "realsitic", "realistic",
- "realtable", "relatable",
- "realtions", "relations",
- "realtives", "relatives",
- "reamining", "remaining",
- "reaplying", "replaying",
- "reasearch", "research",
- "reaveling", "revealing",
- "rebellios", "rebellious",
- "rebllions", "rebellions",
- "recations", "creations",
- "reccomend", "recommend",
- "reccuring", "recurring",
- "receeding", "receding",
- "recepient", "recipient",
- "recgonise", "recognise",
- "recgonize", "recognize",
- "recidents", "residents",
- "recievers", "receivers",
- "recieving", "receiving",
- "recipiant", "recipient",
- "reciproce", "reciprocate",
- "reclutant", "reluctant",
- "recoginse", "recognise",
- "recoginze", "recognize",
- "recomends", "recommends",
- "recommens", "recommends",
- "reconenct", "reconnect",
- "recongise", "recognise",
- "recongize", "recognize",
- "reconicle", "reconcile",
- "reconized", "recognized",
- "recordare", "recorder",
- "recoveres", "recovers",
- "recoverys", "recovers",
- "recpetive", "receptive",
- "recpetors", "receptors",
- "recquired", "required",
- "recreatie", "recreate",
- "recruitcs", "recruits",
- "recruites", "recruits",
- "recrusion", "recursion",
- "recrutied", "recruited",
- "recrutier", "recruiter",
- "rectangel", "rectangle",
- "rectanlge", "rectangle",
- "recuiting", "recruiting",
- "recurison", "recursion",
- "recurited", "recruited",
- "recuriter", "recruiter",
- "recusrion", "recursion",
- "redeemeed", "redeemed",
- "redundany", "redundancy",
- "redundent", "redundant",
- "reedeming", "redeeming",
- "refelcted", "reflected",
- "refereces", "references",
- "refereees", "referees",
- "refereers", "referees",
- "referemce", "reference",
- "referencs", "references",
- "referense", "references",
- "referiang", "referring",
- "referinng", "refering",
- "refernces", "references",
- "refernece", "reference",
- "refershed", "refreshed",
- "refersher", "refresher",
- "reffering", "referring",
- "reflectie", "reflective",
- "refrehser", "refresher",
- "refrences", "references",
- "refromist", "reformist",
- "regionaal", "regional",
- "registerd", "registered",
- "registery", "registry",
- "regualrly", "regularly",
- "regualtor", "regulator",
- "regulaion", "regulation",
- "regulalry", "regularly",
- "regulares", "regulars",
- "regularis", "regulars",
- "regulatin", "regulations",
- "regurally", "regularly",
- "reigining", "reigning",
- "reinstale", "reinstalled",
- "reisntall", "reinstall",
- "reknowned", "renowned",
- "relaoding", "reloading",
- "relatiate", "retaliate",
- "relativiy", "relativity",
- "relativly", "relatively",
- "relativno", "relation",
- "relavence", "relevance",
- "relcutant", "reluctant",
- "relevence", "relevance",
- "relfected", "reflected",
- "reliabily", "reliability",
- "reliabley", "reliably",
- "religeous", "religious",
- "remasterd", "remastered",
- "rememberd", "remembered",
- "rememebrs", "remembers",
- "remianing", "remaining",
- "remignton", "remington",
- "remingotn", "remington",
- "remmebers", "remembers",
- "remotelly", "remotely",
- "rendevous", "rendezvous",
- "rendezous", "rendezvous",
- "renedered", "rende",
- "renegated", "renegade",
- "rennovate", "renovate",
- "repalying", "replaying",
- "repblican", "republican",
- "repeatedy", "repeatedly",
- "repective", "receptive",
- "repeition", "repetition",
- "repentent", "repentant",
- "rephrasse", "rephrase",
- "replusive", "repulsive",
- "reportedy", "reportedly",
- "represend", "represented",
- "repressin", "repression",
- "reprtoire", "repertoire",
- "repsonded", "responded",
- "reptition", "repetition",
- "reptuable", "reputable",
- "repubican", "republican",
- "republian", "republican",
- "repulican", "republican",
- "repulisve", "repulsive",
- "repuslive", "repulsive",
- "resaurant", "restaurant",
- "researchs", "researchers",
- "resembels", "resembles",
- "reserverd", "reserved",
- "resintall", "reinstall",
- "resistane", "resistances",
- "resistans", "resistances",
- "resistend", "resisted",
- "resistent", "resistant",
- "resmebles", "resembles",
- "resolutin", "resolutions",
- "resoruces", "resources",
- "respectes", "respects",
- "respectos", "respects",
- "responces", "response",
- "respondas", "responds",
- "respondis", "responds",
- "respondus", "responds",
- "respoting", "reposting",
- "ressemble", "resemble",
- "ressurect", "resurrect",
- "restarant", "restaurant",
- "resticted", "restricted",
- "restircts", "restricts",
- "restorani", "restoration",
- "restraind", "restrained",
- "restraing", "restraining",
- "restraunt", "restraint",
- "restriant", "restraint",
- "restricte", "restrictive",
- "resturant", "restaurant",
- "retailate", "retaliate",
- "retalaite", "retaliate",
- "retaliers", "retailers",
- "reteriver", "retriever",
- "retirever", "retriever",
- "retrevier", "retriever",
- "retriving", "retrieving",
- "reuptable", "reputable",
- "reveiwers", "reviewers",
- "revelaing", "revealing",
- "revelance", "relevance",
- "revolutin", "revolutions",
- "rewachted", "rewatched",
- "rewatchig", "rewatching",
- "rferences", "references",
- "ridiculos", "ridiculous",
- "ridiculue", "ridicule",
- "ridiculus", "ridiculous",
- "righetous", "righteous",
- "rightfuly", "rightfully",
- "rightoues", "righteous",
- "rigourous", "rigorous",
- "rigtheous", "righteous",
- "rilvaries", "rivalries",
- "rininging", "ringing",
- "rivarlies", "rivalries",
- "rivlaries", "rivalries",
- "roaylties", "royalties",
- "roboticus", "robotics",
- "roganisms", "organisms",
- "royalites", "royalties",
- "roylaties", "royalties",
- "ruleboook", "rulebook",
- "sacarstic", "sarcastic",
- "sacntuary", "sanctuary",
- "sacrafice", "sacrifice",
- "sacrastic", "sarcastic",
- "sacrifise", "sacrifices",
- "salughter", "slaughter",
- "samckdown", "smackdown",
- "sanctiond", "sanctioned",
- "sancturay", "sanctuary",
- "sancutary", "sanctuary",
- "sandstrom", "sandstorm",
- "sandwhich", "sandwich",
- "sanhedrim", "sanhedrin",
- "santcuary", "sanctuary",
- "santioned", "sanctioned",
- "sapphirre", "sapphire",
- "sastified", "satisfied",
- "sastifies", "satisfies",
- "satelites", "satellites",
- "saterdays", "saturdays",
- "satisifed", "satisfied",
- "satisifes", "satisfies",
- "satrudays", "saturdays",
- "satsified", "satisfied",
- "satsifies", "satisfies",
- "sattelite", "satellite",
- "saxaphone", "saxophone",
- "scaepgoat", "scapegoat",
- "scaleable", "scalable",
- "scandales", "scandals",
- "scandalos", "scandals",
- "scantuary", "sanctuary",
- "scaricity", "scarcity",
- "scarifice", "sacrifice",
- "scarmbled", "scrambled",
- "scartched", "scratched",
- "scartches", "scratches",
- "scavanged", "scavenged",
- "sceintist", "scientist",
- "scholalry", "scholarly",
- "sciencers", "sciences",
- "scientfic", "scientific",
- "scientifc", "scientific",
- "scientits", "scientist",
- "sclupture", "sculpture",
- "scnearios", "scenarios",
- "scoreboad", "scoreboard",
- "scottisch", "scottish",
- "scracthed", "scratched",
- "scracthes", "scratches",
- "scrambeld", "scrambled",
- "scrathces", "scratches",
- "scrollade", "scrolled",
- "scrutiney", "scrutiny",
- "scrutinty", "scrutiny",
- "sculpteur", "sculpture",
- "sculputre", "sculpture",
- "scultpure", "sculpture",
- "scuplture", "sculpture",
- "scuptures", "sculptures",
- "seamlessy", "seamlessly",
- "searchign", "searching",
- "sebasitan", "sebastian",
- "sebastain", "sebastian",
- "sebsatian", "sebastian",
- "secceeded", "seceded",
- "secertary", "secretary",
- "secratary", "secretary",
- "secratery", "secretary",
- "secretery", "secretary",
- "secretley", "secretly",
- "sednetary", "sedentary",
- "seduciton", "seduction",
- "semanitcs", "semantics",
- "semestres", "semesters",
- "semnatics", "semantics",
- "semseters", "semesters",
- "senatores", "senators",
- "sendetary", "sedentary",
- "sensitivy", "sensitivity",
- "sentimant", "sentimental",
- "sepcially", "specially",
- "seperated", "separated",
- "seperates", "separates",
- "seperator", "separator",
- "septmeber", "september",
- "seraching", "searching",
- "seriosuly", "seriously",
- "serioulsy", "seriously",
- "seriuosly", "seriously",
- "servantes", "servants",
- "settlment", "settlement",
- "sexualizd", "sexualized",
- "sexuallly", "sexually",
- "shadasloo", "shadaloo",
- "shaprness", "sharpness",
- "sharpenss", "sharpness",
- "shawhsank", "shawshank",
- "sheilding", "shielding",
- "shephered", "shepherd",
- "shileding", "shielding",
- "shitstrom", "shitstorm",
- "shletered", "sheltered",
- "shoudlers", "shoulders",
- "shouldnot", "shouldnt",
- "shperical", "spherical",
- "shwashank", "shawshank",
- "sidebaord", "sideboard",
- "siganture", "signature",
- "signapore", "singapore",
- "signitory", "signatory",
- "silhouete", "silhouette",
- "similiair", "similiar",
- "simliarly", "similarly",
- "simluated", "simulated",
- "simluator", "simulator",
- "simplifiy", "simplify",
- "simualted", "simulated",
- "simualtor", "simulator",
- "simulatie", "simulate",
- "simulatin", "simulation",
- "sinagpore", "singapore",
- "sincerley", "sincerely",
- "singature", "signature",
- "singpaore", "singapore",
- "singulair", "singular",
- "singulary", "singularity",
- "skateboad", "skateboard",
- "skeletaal", "skeletal",
- "skepitcal", "skeptical",
- "skepticim", "skepticism",
- "sketpical", "skeptical",
- "slaughted", "slaughtered",
- "slaugther", "slaughter",
- "slipperly", "slippery",
- "sluaghter", "slaughter",
- "smackdwon", "smackdown",
- "smealting", "smelting",
- "smeesters", "semesters",
- "snadstorm", "sandstorm",
- "snippetts", "snippets",
- "snowfalke", "snowflake",
- "snowflaek", "snowflake",
- "snowlfake", "snowflake",
- "snwoballs", "snowballs",
- "snythesis", "synthesis",
- "snythetic", "synthetic",
- "socailism", "socialism",
- "socailist", "socialist",
- "socailize", "socialize",
- "soceities", "societies",
- "socialini", "socializing",
- "socialiss", "socialists",
- "socialsim", "socialism",
- "socieites", "societies",
- "socilaism", "socialism",
- "socilaist", "socialist",
- "sociopati", "sociopathic",
- "sociopats", "sociopaths",
- "socratees", "socrates",
- "socrateks", "socrates",
- "soemthing", "something",
- "sohpomore", "sophomore",
- "soliliquy", "soliloquy",
- "somehting", "something",
- "someoneis", "someones",
- "somethign", "something",
- "somethins", "somethings",
- "sopohmore", "sophomore",
- "sotryline", "storyline",
- "soundtrak", "soundtrack",
- "sountrack", "soundtrack",
- "sourthern", "southern",
- "souvenier", "souvenir",
- "soveregin", "sovereign",
- "sovereing", "sovereign",
- "soveriegn", "sovereign",
- "spacegoat", "scapegoat",
- "spagehtti", "spaghetti",
- "spahgetti", "spaghetti",
- "sparlking", "sparkling",
- "spartants", "spartans",
- "specailly", "specially",
- "specailty", "specialty",
- "specality", "specialty",
- "speciales", "specials",
- "specialis", "specials",
- "speciatly", "specialty",
- "specifing", "specifying",
- "specimine", "specimen",
- "spectrail", "spectral",
- "specualte", "speculate",
- "speechers", "speeches",
- "spehrical", "spherical",
- "speically", "specially",
- "spetember", "september",
- "sphagetti", "spaghetti",
- "splatooon", "splatoon",
- "sponosred", "sponsored",
- "sponsered", "sponsored",
- "sponsores", "sponsors",
- "spontanes", "spontaneous",
- "sponzored", "sponsored",
- "sprakling", "sparkling",
- "sprinkeld", "sprinkled",
- "squadroon", "squadron",
- "squirrles", "squirrels",
- "squirrtle", "squirrel",
- "squrriels", "squirrels",
- "srirachia", "sriracha",
- "srirachra", "sriracha",
- "stabliize", "stabilize",
- "stainlees", "stainless",
- "startegic", "strategic",
- "startlxde", "startled",
- "statisitc", "statistic",
- "staurdays", "saturdays",
- "steadilly", "steadily",
- "stealthly", "stealthy",
- "stichting", "stitching",
- "sticthing", "stitching",
- "stimulans", "stimulants",
- "stockplie", "stockpile",
- "stornegst", "strongest",
- "stragetic", "strategic",
- "straightn", "straighten",
- "strangets", "strangest",
- "strategis", "strategies",
- "strawbery", "strawberry",
- "streamade", "streamed",
- "streamare", "streamer",
- "streamear", "streamer",
- "strechted", "stretched",
- "strechtes", "stretches",
- "strecthed", "stretched",
- "strecthes", "stretches",
- "stregnths", "strengths",
- "strenghen", "strengthen",
- "strengthn", "strengthen",
- "strentghs", "strengths",
- "stressade", "stressed",
- "stressers", "stresses",
- "strictist", "strictest",
- "stringnet", "stringent",
- "stroyline", "storyline",
- "structual", "structural",
- "structurs", "structures",
- "strucutre", "structure",
- "struggeld", "struggled",
- "struggels", "struggles",
- "stryofoam", "styrofoam",
- "stuctured", "structured",
- "stuggling", "struggling",
- "stupitidy", "stupidity",
- "sturcture", "structure",
- "sturggled", "struggled",
- "sturggles", "struggles",
- "styrofaom", "styrofoam",
- "subarmine", "submarine",
- "subculter", "subculture",
- "submachne", "submachine",
- "subpecies", "subspecies",
- "subscirbe", "subscribe",
- "subsidary", "subsidiary",
- "subsizide", "subsidize",
- "subsquent", "subsequent",
- "subsrcibe", "subscribe",
- "substanse", "substances",
- "substanta", "substantial",
- "substante", "substantive",
- "substarte", "substrate",
- "substitue", "substitute",
- "substract", "subtract",
- "subtances", "substances",
- "subtiltes", "subtitles",
- "subtitels", "subtitles",
- "subtletly", "subtlety",
- "subtlties", "subtitles",
- "succedded", "succeeded",
- "succeedes", "succeeds",
- "succesful", "successful",
- "succesion", "succession",
- "succesive", "successive",
- "suceeding", "succeeding",
- "sucesfuly", "successfully",
- "sucessful", "successful",
- "sucession", "succession",
- "sucessive", "successive",
- "sufferage", "suffrage",
- "sufferred", "suffered",
- "sufficent", "sufficient",
- "suggestes", "suggests",
- "suggestie", "suggestive",
- "sumbarine", "submarine",
- "sumberged", "submerged",
- "summenors", "summoners",
- "summoenrs", "summoners",
- "sunderlad", "sunderland",
- "sunglases", "sunglasses",
- "superfluu", "superfluous",
- "superiour", "superior",
- "superisor", "superiors",
- "supermare", "supermarket",
- "superviso", "supervision",
- "suposedly", "supposedly",
- "supportes", "supports",
- "suppreses", "suppress",
- "supressed", "suppressed",
- "supresses", "suppresses",
- "suprising", "surprising",
- "suprizing", "surprising",
- "supsicion", "suspicion",
- "surounded", "surrounded",
- "surprized", "surprised",
- "surronded", "surrounded",
- "surrouded", "surrounded",
- "surrouned", "surround",
- "survivers", "survivors",
- "survivied", "survived",
- "survivour", "survivor",
- "susbcribe", "subscribe",
- "susbtrate", "substrate",
- "susncreen", "sunscreen",
- "suspectes", "suspects",
- "suspendes", "suspense",
- "suspensie", "suspense",
- "swastikka", "swastika",
- "sweatshit", "sweatshirt",
- "sweetheat", "sweetheart",
- "switchign", "switching",
- "swithcing", "switching",
- "swtiching", "switching",
- "sydnicate", "syndicate",
- "sykwalker", "skywalker",
- "sylablles", "syllables",
- "syllabels", "syllables",
- "symbolsim", "symbolism",
- "symettric", "symmetric",
- "symmetral", "symmetric",
- "symmetria", "symmetrical",
- "symoblism", "symbolism",
- "sympathie", "sympathize",
- "symphoney", "symphony",
- "symptomes", "symptoms",
- "symptomps", "symptoms",
- "synagouge", "synagogue",
- "syndacite", "syndicate",
- "syndiacte", "syndicate",
- "synidcate", "syndicate",
- "synonymes", "synonyms",
- "synonymis", "synonyms",
- "synonymns", "synonyms",
- "synonymos", "synonymous",
- "synonymus", "synonyms",
- "synopsies", "synopsis",
- "syntehsis", "synthesis",
- "syntehtic", "synthetic",
- "syntethic", "synthetic",
- "syphyllis", "syphilis",
- "syracusae", "syracuse",
- "sytrofoam", "styrofoam",
- "tablespon", "tablespoon",
- "tacticaly", "tactically",
- "tanenhill", "tannehill",
- "tannheill", "tannehill",
- "targetted", "targeted",
- "tawainese", "taiwanese",
- "tawianese", "taiwanese",
- "taxanomic", "taxonomic",
- "teamfighs", "teamfights",
- "teamfigth", "teamfight",
- "teamifght", "teamfight",
- "teampseak", "teamspeak",
- "teaspooon", "teaspoon",
- "techician", "technician",
- "techinque", "technique",
- "technolgy", "technology",
- "teeangers", "teenagers",
- "tehtering", "tethering",
- "telegrpah", "telegraph",
- "televsion", "television",
- "temafight", "teamfight",
- "tempaltes", "templates",
- "temparate", "temperate",
- "templaras", "templars",
- "templares", "templars",
- "temporali", "temporarily",
- "tenacitiy", "tenacity",
- "tensiones", "tensions",
- "tentacels", "tentacles",
- "tentacuel", "tentacle",
- "tentalces", "tentacles",
- "termianls", "terminals",
- "terminato", "termination",
- "terorrism", "terrorism",
- "terorrist", "terrorist",
- "terrabyte", "terabyte",
- "terribley", "terribly",
- "terriblly", "terribly",
- "terriroty", "territory",
- "terrorits", "terrorist",
- "terrorsim", "terrorism",
- "tesitcles", "testicles",
- "tesitmony", "testimony",
- "testicels", "testicles",
- "testomony", "testimony",
- "texturers", "textures",
- "thankfuly", "thankfully",
- "thankyoou", "thankyou",
- "themselfs", "themselves",
- "themselvs", "themselves",
- "themslves", "themselves",
- "theologia", "theological",
- "therafter", "thereafter",
- "therefoer", "therefor",
- "therefour", "therefor",
- "theroists", "theorists",
- "thetering", "tethering",
- "thirlling", "thrilling",
- "thirteeen", "thirteen",
- "thoecracy", "theocracy",
- "thoerists", "theorists",
- "thoroughy", "thoroughly",
- "thoughout", "throughout",
- "threatend", "threatened",
- "throrough", "thorough",
- "throughly", "thoroughly",
- "througout", "throughout",
- "thrusdays", "thursdays",
- "thurdsays", "thursdays",
- "thursdsay", "thursdays",
- "thursters", "thrusters",
- "tiawanese", "taiwanese",
- "timestmap", "timestamp",
- "tirangles", "triangles",
- "tocuhdown", "touchdown",
- "toghether", "together",
- "tolerence", "tolerance",
- "tommorrow", "tomorrow",
- "torandoes", "tornadoes",
- "torchligt", "torchlight",
- "torelable", "tolerable",
- "toritllas", "tortillas",
- "tornaodes", "tornadoes",
- "torpeados", "torpedoes",
- "torrentas", "torrents",
- "torrentes", "torrents",
- "tortialls", "tortillas",
- "tortillia", "tortilla",
- "tortillla", "tortilla",
- "tottehnam", "tottenham",
- "tottenahm", "tottenham",
- "tottneham", "tottenham",
- "toturials", "tutorials",
- "touchdwon", "touchdown",
- "touristas", "tourists",
- "touristes", "tourists",
- "touristey", "touristy",
- "touristly", "touristy",
- "touristsy", "touristy",
- "tournamet", "tournament",
- "toxicitiy", "toxicity",
- "trafficed", "trafficked",
- "tragicaly", "tragically",
- "traileras", "trailers",
- "traingles", "triangles",
- "trainwrek", "trainwreck",
- "traitoris", "traitors",
- "traitorus", "traitors",
- "tramautic", "traumatic",
- "tranlsate", "translate",
- "transalte", "translate",
- "transcris", "transcripts",
- "transcrit", "transcript",
- "transferd", "transferred",
- "transfere", "transferred",
- "transfors", "transforms",
- "transfrom", "transform",
- "transiten", "transient",
- "transitin", "transitions",
- "transofrm", "transform",
- "transplat", "transplant",
- "trasnfers", "transfers",
- "trasnform", "transform",
- "trasnport", "transport",
- "traversie", "traverse",
- "travestry", "travesty",
- "treasuers", "treasures",
- "treasurey", "treasury",
- "treatmens", "treatments",
- "treausres", "treasures",
- "tremendos", "tremendous",
- "trhilling", "thrilling",
- "trhusters", "thrusters",
- "triangels", "triangles",
- "trianlges", "triangles",
- "tribunaal", "tribunal",
- "triguered", "triggered",
- "trinagles", "triangles",
- "truamatic", "traumatic",
- "truthfuly", "truthfully",
- "tunrtable", "turntable",
- "turnaroud", "turnaround",
- "turntabel", "turntable",
- "typcially", "typically",
- "tyrranies", "tyrannies",
- "ubiquitos", "ubiquitous",
- "ugprading", "upgrading",
- "ukrainain", "ukrainian",
- "ukrainias", "ukrainians",
- "ukrainina", "ukrainian",
- "ukrainisn", "ukrainians",
- "ukrianian", "ukrainian",
- "ulitmatum", "ultimatum",
- "ulteriour", "ulterior",
- "umbrellla", "umbrella",
- "unaminous", "unanimous",
- "unanmious", "unanimous",
- "unanswerd", "unanswered",
- "unanymous", "unanimous",
- "unbannend", "unbanned",
- "uncensord", "uncensored",
- "uncomited", "uncommitted",
- "undercunt", "undercut",
- "underdong", "underdog",
- "undergard", "undergrad",
- "underming", "undermining",
- "understad", "understands",
- "underwaer", "underwear",
- "underware", "underwear",
- "undescore", "underscore",
- "unforseen", "unforeseen",
- "unfortune", "unfortunate",
- "unfriendy", "unfriendly",
- "unhealhty", "unhealthy",
- "unheathly", "unhealthy",
- "unhelathy", "unhealthy",
- "unicornis", "unicorns",
- "unicornus", "unicorns",
- "uniformes", "uniforms",
- "uninamous", "unanimous",
- "unintuive", "unintuitive",
- "uniquelly", "uniquely",
- "unisntall", "uninstall",
- "univerity", "university",
- "universse", "universes",
- "univesity", "university",
- "unnistall", "uninstall",
- "unoffical", "unofficial",
- "unopenend", "unopened",
- "unplayabe", "unplayable",
- "unplesant", "unpleasant",
- "unpopluar", "unpopular",
- "unrankend", "unranked",
- "unreliabe", "unreliable",
- "unrwitten", "unwritten",
- "untrianed", "untrained",
- "unusaully", "unusually",
- "unuseable", "unusable",
- "unusuable", "unusable",
- "unvierses", "universes",
- "unweildly", "unwieldy",
- "unwieldly", "unwieldy",
- "unwirtten", "unwritten",
- "unworthly", "unworthy",
- "upcomming", "upcoming",
- "upgarding", "upgrading",
- "upgradded", "upgraded",
- "uplfiting", "uplifting",
- "uplifitng", "uplifting",
- "urkainian", "ukrainian",
- "utlimatum", "ultimatum",
- "vacciante", "vaccinate",
- "vaccinato", "vaccination",
- "vacciners", "vaccines",
- "vacestomy", "vasectomy",
- "vaguaries", "vagaries",
- "vaibility", "viability",
- "vaildated", "validated",
- "vairables", "variables",
- "valdiated", "validated",
- "valentein", "valentine",
- "valentien", "valentine",
- "valentins", "valentines",
- "validitiy", "validity",
- "valueable", "valuable",
- "vanadlism", "vandalism",
- "vandalsim", "vandalism",
- "varaibles", "variables",
- "varations", "variations",
- "variantes", "variants",
- "vascetomy", "vasectomy",
- "vastecomy", "vasectomy",
- "veganisim", "veganism",
- "vegetarin", "vegetarians",
- "vegitable", "vegetable",
- "vehementy", "vehemently",
- "veiwpoint", "viewpoint",
- "velantine", "valentine",
- "vendettta", "vendetta",
- "venegance", "vengeance",
- "veneuzela", "venezuela",
- "venezeula", "venezuela",
- "venezulea", "venezuela",
- "vengaence", "vengeance",
- "vengenace", "vengeance",
- "ventilato", "ventilation",
- "verbatium", "verbatim",
- "verfiying", "verifying",
- "verifiyng", "verifying",
- "verisions", "revisions",
- "versalite", "versatile",
- "versatily", "versatility",
- "versiones", "versions",
- "versitale", "versatile",
- "verstaile", "versatile",
- "verticaly", "vertically",
- "veryifing", "verifying",
- "vicotrian", "victorian",
- "vicotries", "victories",
- "victoires", "victories",
- "victorain", "victorian",
- "victorina", "victorian",
- "victorios", "victorious",
- "videogaem", "videogame",
- "videogams", "videogames",
- "vidoegame", "videogame",
- "viewpiont", "viewpoint",
- "vigilence", "vigilance",
- "vigliante", "vigilante",
- "vigourous", "vigorous",
- "viligante", "vigilante",
- "viloently", "violently",
- "vincinity", "vicinity",
- "vioalting", "violating",
- "violentce", "violence",
- "virbation", "vibration",
- "virgintiy", "virginity",
- "virignity", "virginity",
- "virutally", "virtually",
- "visibiliy", "visibility",
- "vitaminas", "vitamins",
- "vitamines", "vitamins",
- "vitrually", "virtually",
- "vociemail", "voicemail",
- "voilating", "violating",
- "voilation", "violation",
- "voilently", "violently",
- "volatiliy", "volatility",
- "voleyball", "volleyball",
- "volontary", "voluntary",
- "volonteer", "volunteer",
- "volunatry", "voluntary",
- "volunteed", "volunteered",
- "vriginity", "virginity",
- "wallpapes", "wallpapers",
- "warrantly", "warranty",
- "warrriors", "warriors",
- "wavelengh", "wavelength",
- "weakenend", "weakened",
- "weakneses", "weakness",
- "weaknesss", "weaknesses",
- "wealtheir", "wealthier",
- "weaponary", "weaponry",
- "wedensday", "wednesday",
- "wednesdsy", "wednesdays",
- "wednessay", "wednesdays",
- "wednseday", "wednesday",
- "welathier", "wealthier",
- "wendesday", "wednesday",
- "wesbtrook", "westbrook",
- "westernes", "westerners",
- "westrbook", "westbrook",
- "whereever", "wherever",
- "whietlist", "whitelist",
- "whilrwind", "whirlwind",
- "whilsting", "whistling",
- "whipsered", "whispered",
- "whislting", "whistling",
- "whisperes", "whispers",
- "whitelsit", "whitelist",
- "whitleist", "whitelist",
- "whitsling", "whistling",
- "whrilwind", "whirlwind",
- "whsipered", "whispered",
- "whtielist", "whitelist",
- "widespred", "widespread",
- "widesread", "widespread",
- "windshied", "windshield",
- "wintesses", "witnesses",
- "wisconisn", "wisconsin",
- "wishlisht", "wishlist",
- "wishpered", "whispered",
- "withdrawl", "withdrawal",
- "withelist", "whitelist",
- "witnesess", "witnesses",
- "wolrdview", "worldview",
- "wolrdwide", "worldwide",
- "wonderlad", "wonderland",
- "wordlview", "worldview",
- "wordlwide", "worldwide",
- "worhtless", "worthless",
- "workfroce", "workforce",
- "worldivew", "worldview",
- "worldveiw", "worldview",
- "worstened", "worsened",
- "worthelss", "worthless",
- "xenbolade", "xenoblade",
- "xenobalde", "xenoblade",
- "xenophoby", "xenophobia",
- "xeonblade", "xenoblade",
- "yementite", "yemenite",
- "yorkshrie", "yorkshire",
- "yorskhire", "yorkshire",
- "yosemitie", "yosemite",
- "youngents", "youngest",
- "yourselvs", "yourselves",
- "zimbabwae", "zimbabwe",
- "zionistas", "zionists",
- "zionistes", "zionists",
- "abandond", "abandoned",
- "abdomine", "abdomen",
- "abilitiy", "ability",
- "abilties", "abilities",
- "abondons", "abandons",
- "aboslute", "absolute",
- "abosrbed", "absorbed",
- "abruplty", "abruptly",
- "abrutply", "abruptly",
- "abscence", "absence",
- "absestos", "asbestos",
- "absoluts", "absolutes",
- "absolvte", "absolve",
- "absorbes", "absorbs",
- "absoulte", "absolute",
- "abstante", "bastante",
- "abudance", "abundance",
- "abudcted", "abducted",
- "abundunt", "abundant",
- "aburptly", "abruptly",
- "abuseres", "abusers",
- "abusrdly", "absurdly",
- "academis", "academics",
- "accademy", "academy",
- "acccused", "accused",
- "acceptes", "accepts",
- "accidens", "accidents",
- "accideny", "accidently",
- "accoring", "according",
- "accountt", "accountant",
- "accpeted", "accepted",
- "accuarcy", "accuracy",
- "accumule", "accumulate",
- "accusato", "accusation",
- "accussed", "accused",
- "acedamia", "academia",
- "acedemic", "academic",
- "acheived", "achieved",
- "acheives", "achieves",
- "achieval", "achievable",
- "acnedote", "anecdote",
- "acording", "according",
- "acornyms", "acronyms",
- "acousitc", "acoustic",
- "acoutsic", "acoustic",
- "acovados", "avocados",
- "acquifer", "acquire",
- "acquited", "acquitted",
- "acquried", "acquired",
- "acronmys", "acronyms",
- "acronysm", "acronyms",
- "acroynms", "acronyms",
- "acrynoms", "acronyms",
- "acsended", "ascended",
- "actaully", "actually",
- "activite", "activities",
- "activits", "activities",
- "activley", "actively",
- "actresss", "actresses",
- "actualey", "actualy",
- "actualiy", "actuality",
- "actualky", "actualy",
- "actualmy", "actualy",
- "actualoy", "actualy",
- "actualpy", "actualy",
- "actualty", "actualy",
- "acutally", "actually",
- "acutions", "auctions",
- "adaptare", "adapter",
- "adbandon", "abandon",
- "adbucted", "abducted",
- "addictes", "addicts",
- "addictin", "addictions",
- "addictis", "addictions",
- "addional", "additional",
- "addopted", "adopted",
- "addresed", "addressed",
- "adealide", "adelaide",
- "adecuate", "adequate",
- "adeilade", "adelaide",
- "adeladie", "adelaide",
- "adeliade", "adelaide",
- "adeqaute", "adequate",
- "adheisve", "adhesive",
- "adhevise", "adhesive",
- "adivsors", "advisors",
- "admiraal", "admiral",
- "adolence", "adolescent",
- "adorbale", "adorable",
- "adovcacy", "advocacy",
- "adpaters", "adapters",
- "adquired", "acquired",
- "adquires", "acquires",
- "adresing", "addressing",
- "adressed", "addressed",
- "adroable", "adorable",
- "adultrey", "adultery",
- "adventue", "adventures",
- "adventus", "adventures",
- "advertis", "adverts",
- "advesary", "adversary",
- "adviseer", "adviser",
- "adviseur", "adviser",
- "advocade", "advocated",
- "advocats", "advocates",
- "advsiors", "advisors",
- "aethists", "atheists",
- "affaires", "affairs",
- "affilate", "affiliate",
- "affintiy", "affinity",
- "affleunt", "affluent",
- "affulent", "affluent",
- "afircans", "africans",
- "africain", "african",
- "afternon", "afternoon",
- "againnst", "against",
- "agnositc", "agnostic",
- "agonstic", "agnostic",
- "agravate", "aggravate",
- "agreemnt", "agreement",
- "agregate", "aggregate",
- "agressie", "agressive",
- "agressor", "aggressor",
- "agrieved", "aggrieved",
- "agruable", "arguable",
- "agruably", "arguably",
- "agrument", "argument",
- "ahtletes", "athletes",
- "aincents", "ancients",
- "airboner", "airborne",
- "airbrone", "airborne",
- "aircarft", "aircraft",
- "airplans", "airplanes",
- "airporta", "airports",
- "airpsace", "airspace",
- "airscape", "airspace",
- "akransas", "arkansas",
- "alchemey", "alchemy",
- "alchohol", "alcohol",
- "alcholic", "alcoholic",
- "alcoholc", "alcoholics",
- "aldutery", "adultery",
- "aleniate", "alienate",
- "algoritm", "algorithm",
- "alimoney", "alimony",
- "alirghty", "alrighty",
- "allaince", "alliance",
- "alledged", "alleged",
- "alledges", "alleges",
- "allegedy", "allegedly",
- "allegely", "allegedly",
- "allegric", "allergic",
- "allergey", "allergy",
- "allianse", "alliances",
- "alligned", "aligned",
- "allinace", "alliance",
- "allopone", "allophone",
- "allready", "already",
- "almigthy", "almighty",
- "alpahbet", "alphabet",
- "alrigthy", "alrighty",
- "altantic", "atlantic",
- "alterato", "alteration",
- "alternar", "alternator",
- "althetes", "athletes",
- "althetic", "athletic",
- "altriusm", "altruism",
- "altrusim", "altruism",
- "alturism", "altruism",
- "aluminim", "aluminium",
- "alumnium", "aluminum",
- "alunimum", "aluminum",
- "amatersu", "amateurs",
- "amaterus", "amateurs",
- "amendmet", "amendments",
- "amercian", "american",
- "amercias", "americas",
- "amernian", "armenian",
- "amethsyt", "amethyst",
- "ameythst", "amethyst",
- "ammended", "amended",
- "amnestry", "amnesty",
- "amoungst", "amongst",
- "amplifiy", "amplify",
- "amplifly", "amplify",
- "amrchair", "armchair",
- "amrenian", "armenian",
- "amtheyst", "amethyst",
- "analgoue", "analogue",
- "analisys", "analysis",
- "analitic", "analytic",
- "analouge", "analogue",
- "analysie", "analyse",
- "analysit", "analyst",
- "analyste", "analyse",
- "analysze", "analyse",
- "analzyed", "analyzed",
- "anaolgue", "analogue",
- "anarchim", "anarchism",
- "anaylses", "analyses",
- "anaylsis", "analysis",
- "anaylsts", "analysts",
- "anaylzed", "analyzed",
- "ancedote", "anecdote",
- "anceints", "ancients",
- "ancinets", "ancients",
- "andoirds", "androids",
- "andorids", "androids",
- "andriods", "androids",
- "anecdots", "anecdotes",
- "anectode", "anecdote",
- "anedocte", "anecdote",
- "aneroxia", "anorexia",
- "aneroxic", "anorexic",
- "angostic", "agnostic",
- "angrilly", "angrily",
- "anicents", "ancients",
- "animatie", "animate",
- "animatte", "animate",
- "anlayses", "analyses",
- "annoints", "anoints",
- "annouced", "announced",
- "annoucne", "announce",
- "anntenas", "antennas",
- "anoerxia", "anorexia",
- "anoerxic", "anorexic",
- "anonymos", "anonymous",
- "anoreixa", "anorexia",
- "anounced", "announced",
- "anoxeria", "anorexia",
- "anoxeric", "anorexic",
- "answeres", "answers",
- "antartic", "antarctic",
- "antennea", "antenna",
- "antennna", "antenna",
- "anticipe", "anticipate",
- "antiquae", "antique",
- "antivirs", "antivirus",
- "anwsered", "answered",
- "anyhting", "anything",
- "anyhwere", "anywhere",
- "anyoneis", "anyones",
- "anythign", "anything",
- "anytying", "anything",
- "aparment", "apartment",
- "apartmet", "apartments",
- "apenines", "apennines",
- "aperutre", "aperture",
- "aplhabet", "alphabet",
- "apologes", "apologise",
- "aposltes", "apostles",
- "apostels", "apostles",
- "appaluse", "applause",
- "apparant", "apparent",
- "appareal", "apparel",
- "appareil", "apparel",
- "apperead", "appeared",
- "applaued", "applaud",
- "appluase", "applause",
- "appology", "apology",
- "apporach", "approach",
- "appraoch", "approach",
- "apreture", "aperture",
- "apsotles", "apostles",
- "aqaurium", "aquarium",
- "aqcuired", "acquired",
- "aquaduct", "aqueduct",
- "aquairum", "aquarium",
- "aquaruim", "aquarium",
- "aquiring", "acquiring",
- "aquitted", "acquitted",
- "arbitary", "arbitrary",
- "arbitray", "arbitrary",
- "arbiture", "arbiter",
- "architet", "architect",
- "archtype", "archetype",
- "aremnian", "armenian",
- "argentia", "argentina",
- "argubaly", "arguably",
- "arguemet", "arguement",
- "arguemtn", "arguement",
- "ariborne", "airborne",
- "aricraft", "aircraft",
- "ariplane", "airplane",
- "ariports", "airports",
- "arispace", "airspace",
- "aristote", "aristotle",
- "aritfact", "artifact",
- "arizonia", "arizona",
- "arkasnas", "arkansas",
- "arlighty", "alrighty",
- "armamant", "armament",
- "armenain", "armenian",
- "armenina", "armenian",
- "armpitts", "armpits",
- "armstrog", "armstrong",
- "arpanoid", "paranoid",
- "arpeture", "aperture",
- "arragned", "arranged",
- "arrestes", "arrests",
- "arrestos", "arrests",
- "arsenaal", "arsenal",
- "artemios", "artemis",
- "artemius", "artemis",
- "arthrits", "arthritis",
- "articule", "articulate",
- "artifacs", "artifacts",
- "artifcat", "artifact",
- "artilley", "artillery",
- "artisitc", "artistic",
- "artistas", "artists",
- "arugable", "arguable",
- "arugably", "arguably",
- "arugment", "argument",
- "asborbed", "absorbed",
- "asburdly", "absurdly",
- "ascneded", "ascended",
- "asissted", "assisted",
- "askreddt", "askreddit",
- "asnwered", "answered",
- "aspectos", "aspects",
- "asperges", "aspergers",
- "assasins", "assassins",
- "assemple", "assemble",
- "assertin", "assertions",
- "asshates", "asshats",
- "asshatts", "asshats",
- "assimile", "assimilate",
- "assistat", "assistants",
- "assitant", "assistant",
- "assmeble", "assemble",
- "assmebly", "assembly",
- "asssasin", "assassin",
- "assualts", "assaults",
- "asteorid", "asteroid",
- "asteriks", "asterisk",
- "asteriod", "asteroid",
- "asterois", "asteroids",
- "astersik", "asterisk",
- "asthetic", "aesthetic",
- "astronat", "astronaut",
- "asutrian", "austrian",
- "atheisim", "atheism",
- "atheistc", "atheistic",
- "atheltes", "athletes",
- "atheltic", "athletic",
- "athenean", "athenian",
- "athesits", "atheists",
- "athetlic", "athletic",
- "athients", "athiest",
- "atittude", "attitude",
- "atlantia", "atlanta",
- "atmoizer", "atomizer",
- "atomzier", "atomizer",
- "atribute", "attribute",
- "atrifact", "artifact",
- "attackes", "attackers",
- "attemped", "attempted",
- "attemted", "attempted",
- "attemtps", "attempts",
- "attidute", "attitude",
- "attitide", "attitude",
- "attribue", "attribute",
- "aucitons", "auctions",
- "audactiy", "audacity",
- "audcaity", "audacity",
- "audeince", "audience",
- "audiobok", "audiobook",
- "austeriy", "austerity",
- "austiran", "austrian",
- "austitic", "autistic",
- "austrain", "austrian",
- "australa", "australian",
- "austrija", "austria",
- "austrila", "austria",
- "autisitc", "autistic",
- "autoattk", "autoattack",
- "autograh", "autograph",
- "automato", "automation",
- "automony", "autonomy",
- "autority", "authority",
- "autsitic", "autistic",
- "auxilary", "auxiliary",
- "avacodos", "avocados",
- "avaiable", "available",
- "availabe", "available",
- "availble", "available",
- "avaition", "aviation",
- "avalable", "available",
- "avalance", "avalanche",
- "avataras", "avatars",
- "avatards", "avatars",
- "avatares", "avatars",
- "averadge", "averaged",
- "avergaed", "averaged",
- "avergaes", "averages",
- "aviaiton", "aviation",
- "avilable", "available",
- "avnegers", "avengers",
- "avodacos", "avocados",
- "awekened", "weakened",
- "awesomey", "awesomely",
- "awfullly", "awfully",
- "awkwardy", "awkwardly",
- "awnsered", "answered",
- "babysite", "babysitter",
- "baceause", "because",
- "bacehlor", "bachelor",
- "bachleor", "bachelor",
- "bacholer", "bachelor",
- "backeast", "backseat",
- "backerds", "backers",
- "backfied", "backfield",
- "backpacs", "backpacks",
- "balcanes", "balances",
- "balconey", "balcony",
- "balconny", "balcony",
- "ballistc", "ballistic",
- "balnaced", "balanced",
- "banannas", "bananas",
- "banditas", "bandits",
- "bandwith", "bandwidth",
- "bangkock", "bangkok",
- "baptisim", "baptism",
- "barabric", "barbaric",
- "barbarin", "barbarian",
- "barbaris", "barbarians",
- "bardford", "bradford",
- "bargaing", "bargaining",
- "baristia", "barista",
- "barrakcs", "barracks",
- "barrells", "barrels",
- "basicaly", "basically",
- "basiclay", "basicly",
- "basicley", "basicly",
- "basicliy", "basicly",
- "batistia", "batista",
- "battalin", "battalion",
- "bayonent", "bayonet",
- "beachead", "beachhead",
- "beacuoup", "beaucoup",
- "beardude", "bearded",
- "beastley", "beastly",
- "beatiful", "beautiful",
- "beccause", "because",
- "becuasse", "becuase",
- "befirend", "befriend",
- "befreind", "befriend",
- "begginer", "beginner",
- "begginig", "begging",
- "begginng", "begging",
- "begining", "beginning",
- "beginnig", "beginning",
- "behaivor", "behavior",
- "behavios", "behaviours",
- "behavoir", "behavior",
- "behavour", "behavior",
- "behngazi", "benghazi",
- "behtesda", "bethesda",
- "beleived", "believed",
- "beleiver", "believer",
- "beleives", "believes",
- "beliefes", "beliefs",
- "benefica", "beneficial",
- "bengahzi", "benghazi",
- "bengalas", "bengals",
- "bengalos", "bengals",
- "bengazhi", "benghazi",
- "benghzai", "benghazi",
- "bengzhai", "benghazi",
- "benhgazi", "benghazi",
- "benidect", "benedict",
- "benifits", "benefits",
- "berekley", "berkeley",
- "berserkr", "berserker",
- "beseiged", "besieged",
- "betehsda", "bethesda",
- "beteshda", "bethesda",
- "bethdesa", "bethesda",
- "bethedsa", "bethesda",
- "bethseda", "bethesda",
- "beyoncye", "beyonce",
- "bibilcal", "biblical",
- "bicylces", "bicycles",
- "bigfooot", "bigfoot",
- "bigining", "beginning",
- "bilbical", "biblical",
- "billboad", "billboard",
- "bilsters", "blisters",
- "bilzzard", "blizzard",
- "bilzzcon", "blizzcon",
- "biologia", "biological",
- "birhtday", "birthday",
- "birsbane", "brisbane",
- "birthdsy", "birthdays",
- "biseuxal", "bisexual",
- "bisexaul", "bisexual",
- "bitcions", "bitcoins",
- "bitocins", "bitcoins",
- "blackade", "blacked",
- "blackend", "blacked",
- "blackjak", "blackjack",
- "blacklit", "blacklist",
- "blatanty", "blatantly",
- "blessins", "blessings",
- "blessure", "blessing",
- "bloggare", "blogger",
- "bloggeur", "blogger",
- "bluebery", "blueberry",
- "bluetooh", "bluetooth",
- "blugaria", "bulgaria",
- "boardway", "broadway",
- "bollcoks", "bollocks",
- "bomberos", "bombers",
- "bookmars", "bookmarks",
- "boradway", "broadway",
- "boredoom", "boredom",
- "bouldore", "boulder",
- "bounites", "bounties",
- "boutnies", "bounties",
- "boutqiue", "boutique",
- "bouyancy", "buoyancy",
- "boyfried", "boyfriend",
- "bradcast", "broadcast",
- "bradfrod", "bradford",
- "brakeout", "breakout",
- "braodway", "broadway",
- "braverly", "bravery",
- "breathis", "breaths",
- "breathos", "breaths",
- "brekaout", "breakout",
- "brendamn", "brendan",
- "breweres", "brewers",
- "brewerey", "brewery",
- "brewerks", "brewers",
- "brewerys", "brewers",
- "brigaged", "brigade",
- "brigated", "brigade",
- "brigthen", "brighten",
- "briliant", "brilliant",
- "brillant", "brilliant",
- "bristool", "bristol",
- "brithday", "birthday",
- "brittish", "british",
- "briusers", "bruisers",
- "broadbad", "broadband",
- "broadcat", "broadcasts",
- "broadley", "broadly",
- "brocolli", "broccoli",
- "brodaway", "broadway",
- "broncoes", "broncos",
- "broswing", "browsing",
- "browines", "brownies",
- "browisng", "browsing",
- "brtually", "brutally",
- "brugundy", "burgundy",
- "bruisend", "bruised",
- "brussles", "brussels",
- "brusting", "bursting",
- "bubblews", "bubbles",
- "buddhits", "buddhist",
- "buddhsim", "buddhism",
- "buddishm", "buddhism",
- "buddisht", "buddhist",
- "buglaria", "bulgaria",
- "buhddism", "buddhism",
- "buhddist", "buddhist",
- "buidlers", "builders",
- "buidling", "building",
- "buildins", "buildings",
- "buisness", "business",
- "bulagria", "bulgaria",
- "bulgaira", "bulgaria",
- "buliders", "builders",
- "buliding", "building",
- "bulletts", "bullets",
- "burisers", "bruisers",
- "burriots", "burritos",
- "burritio", "burrito",
- "burritto", "burrito",
- "burrtios", "burritos",
- "burssels", "brussels",
- "burtally", "brutally",
- "burtsing", "bursting",
- "busrting", "bursting",
- "butcherd", "butchered",
- "butterey", "buttery",
- "butterfy", "butterfly",
- "butterry", "buttery",
- "butthoel", "butthole",
- "bycicles", "bicycles",
- "cabbagge", "cabbage",
- "cabients", "cabinets",
- "cabinate", "cabinet",
- "cabinent", "cabinet",
- "cabniets", "cabinets",
- "caclulus", "calculus",
- "cafetera", "cafeteria",
- "caffinee", "caffeine",
- "cahsiers", "cashiers",
- "cainster", "canister",
- "calander", "calendar",
- "calcular", "calculator",
- "calgarry", "calgary",
- "calibler", "calibre",
- "caloires", "calories",
- "calrkson", "clarkson",
- "calroies", "calories",
- "calssify", "classify",
- "calulate", "calculate",
- "calymore", "claymore",
- "camapign", "campaign",
- "cambodai", "cambodia",
- "camboida", "cambodia",
- "cambpell", "campbell",
- "cambride", "cambridge",
- "cambrige", "cambridge",
- "camoufle", "camouflage",
- "campagin", "campaign",
- "campaing", "campaign",
- "campains", "campaigns",
- "camperas", "campers",
- "camperos", "campers",
- "canadias", "canadians",
- "cananbis", "cannabis",
- "cancelas", "cancels",
- "canceles", "cancels",
- "cancells", "cancels",
- "canceres", "cancers",
- "cancerns", "cancers",
- "cancerus", "cancers",
- "candiate", "candidate",
- "candiens", "candies",
- "canistre", "canister",
- "cannabil", "cannibal",
- "cannbial", "cannibal",
- "cannibas", "cannabis",
- "cansiter", "canister",
- "capitans", "captains",
- "capitola", "capital",
- "capitulo", "capitol",
- "capmbell", "campbell",
- "capsuels", "capsules",
- "capsulse", "capsules",
- "capsumel", "capsule",
- "capteurs", "captures",
- "captials", "capitals",
- "captians", "captains",
- "capusles", "capsules",
- "caputres", "captures",
- "cardboad", "cardboard",
- "cardianl", "cardinal",
- "cardnial", "cardinal",
- "careflly", "carefully",
- "carefull", "careful",
- "carefuly", "carefully",
- "caricate", "caricature",
- "caridgan", "cardigan",
- "caridnal", "cardinal",
- "carinval", "carnival",
- "carloina", "carolina",
- "carnagie", "carnegie",
- "carnigie", "carnegie",
- "carnvial", "carnival",
- "carrotts", "carrots",
- "carrotus", "carrots",
- "cartells", "cartels",
- "cartmaan", "cartman",
- "cartride", "cartridge",
- "cartrige", "cartridge",
- "carvinal", "carnival",
- "casaulty", "casualty",
- "casheirs", "cashiers",
- "cashieer", "cashier",
- "cashires", "cashiers",
- "castleos", "castles",
- "castlers", "castles",
- "casulaty", "casualty",
- "cataclym", "cataclysm",
- "catagory", "category",
- "cataline", "catiline",
- "cataloge", "catalogue",
- "catalsyt", "catalyst",
- "cataylst", "catalyst",
- "cathloic", "catholic",
- "catlayst", "catalyst",
- "caucasin", "caucasian",
- "causalty", "casualty",
- "cellural", "cellular",
- "celullar", "cellular",
- "celverly", "cleverly",
- "cemetary", "cemetery",
- "centeres", "centers",
- "centerns", "centers",
- "centrase", "centres",
- "centrers", "centres",
- "ceratine", "creatine",
- "cerberal", "cerebral",
- "cerbreus", "cerberus",
- "cerbures", "cerberus",
- "ceremone", "ceremonies",
- "cerimony", "ceremony",
- "ceromony", "ceremony",
- "certainy", "certainty",
- "challege", "challenge",
- "chambear", "chamber",
- "chambres", "chambers",
- "champage", "champagne",
- "chanisaw", "chainsaw",
- "chanlder", "chandler",
- "charcaol", "charcoal",
- "chargehr", "charger",
- "chargeur", "charger",
- "chariman", "chairman",
- "charimsa", "charisma",
- "charmisa", "charisma",
- "charocal", "charcoal",
- "charsima", "charisma",
- "chasiers", "cashiers",
- "chassids", "chassis",
- "chassies", "chassis",
- "chatolic", "catholic",
- "chcukles", "chuckles",
- "checkare", "checker",
- "checkear", "checker",
- "cheesees", "cheeses",
- "cheeseus", "cheeses",
- "cheetoos", "cheetos",
- "chemcial", "chemical",
- "chemisty", "chemistry",
- "chernobl", "chernobyl",
- "chiansaw", "chainsaw",
- "chidlish", "childish",
- "chihuaha", "chihuahua",
- "childres", "childrens",
- "chillade", "chilled",
- "chillead", "chilled",
- "chillend", "chilled",
- "chilvary", "chivalry",
- "chinesse", "chinese",
- "chivarly", "chivalry",
- "chivlary", "chivalry",
- "chlidish", "childish",
- "chlroine", "chlorine",
- "chmabers", "chambers",
- "chocolae", "chocolates",
- "chocolet", "chocolates",
- "choesive", "cohesive",
- "choicers", "choices",
- "cholrine", "chlorine",
- "chorline", "chlorine",
- "chracter", "character",
- "christin", "christian",
- "chroline", "chlorine",
- "chromose", "chromosome",
- "chronice", "chronicles",
- "chruches", "churches",
- "chuckels", "chuckles",
- "cielings", "ceilings",
- "cigarete", "cigarettes",
- "cigarets", "cigarettes",
- "cilmbers", "climbers",
- "cilnatro", "cilantro",
- "ciltoris", "clitoris",
- "circiuts", "circuits",
- "circkets", "crickets",
- "circlebs", "circles",
- "circluar", "circular",
- "ciricuit", "circuit",
- "cirlcing", "circling",
- "ciruclar", "circular",
- "clannand", "clannad",
- "clarifiy", "clarify",
- "clarskon", "clarkson",
- "clasical", "classical",
- "classrom", "classroom",
- "classsic", "classics",
- "clausens", "clauses",
- "cleanies", "cleanse",
- "cleasner", "cleanser",
- "clenaser", "cleanser",
- "clevelry", "cleverly",
- "clhorine", "chlorine",
- "cliamtes", "climates",
- "cliantro", "cilantro",
- "clickare", "clicker",
- "clickbat", "clickbait",
- "clickear", "clicker",
- "clientes", "clients",
- "clincial", "clinical",
- "clinicas", "clinics",
- "clinicos", "clinics",
- "clipboad", "clipboard",
- "clitiros", "clitoris",
- "closeing", "closing",
- "closeley", "closely",
- "clyamore", "claymore",
- "clyinder", "cylinder",
- "cmoputer", "computer",
- "coindice", "coincide",
- "collapes", "collapse",
- "collares", "collars",
- "collaris", "collars",
- "collaros", "collars",
- "collaspe", "collapse",
- "colleage", "colleagues",
- "collecte", "collective",
- "collegue", "colleague",
- "collisin", "collisions",
- "collosal", "colossal",
- "collpase", "collapse",
- "coloardo", "colorado",
- "colordao", "colorado",
- "colubmia", "columbia",
- "columnas", "columns",
- "comadres", "comrades",
- "comander", "commander",
- "comandos", "commandos",
- "comapany", "company",
- "comapres", "compares",
- "combiens", "combines",
- "combinig", "combining",
- "comediac", "comedic",
- "comedias", "comedians",
- "comestic", "cosmetic",
- "comision", "commission",
- "comiting", "committing",
- "comitted", "committed",
- "comittee", "committee",
- "commandd", "commanded",
- "commecen", "commence",
- "commedic", "comedic",
- "commense", "commenters",
- "commenty", "commentary",
- "commiest", "commits",
- "commited", "committed",
- "commitee", "committee",
- "commites", "commits",
- "committe", "committee",
- "committs", "commits",
- "commitus", "commits",
- "commmand", "command",
- "communit", "communist",
- "companis", "companions",
- "comparse", "compares",
- "comparte", "compare",
- "compasso", "compassion",
- "compelte", "complete",
- "compense", "compensate",
- "complais", "complains",
- "complane", "complacent",
- "complate", "complacent",
- "compleet", "complete",
- "completi", "complexity",
- "complets", "completes",
- "complety", "completely",
- "complexs", "complexes",
- "complext", "complexity",
- "complexy", "complexity",
- "complict", "complicit",
- "complier", "compiler",
- "compones", "compose",
- "componet", "components",
- "componts", "compost",
- "composet", "compost",
- "composit", "compost",
- "composte", "compose",
- "comprese", "compressed",
- "compreso", "compressor",
- "compsers", "compress",
- "comptown", "compton",
- "compunet", "compute",
- "computre", "compute",
- "comradre", "comrade",
- "comsetic", "cosmetic",
- "conatins", "contains",
- "conceald", "concealed",
- "conceide", "conceived",
- "conceled", "concede",
- "concened", "concede",
- "concepta", "conceptual",
- "concered", "concede",
- "concernt", "concert",
- "concerte", "concrete",
- "concesso", "concession",
- "conceted", "concede",
- "conceved", "concede",
- "concibes", "concise",
- "concider", "consider",
- "concides", "concise",
- "concious", "conscious",
- "conclued", "conclude",
- "concluse", "conclusive",
- "concluso", "conclusion",
- "concreet", "concrete",
- "concrets", "concerts",
- "condemnd", "condemned",
- "conditon", "condition",
- "condomes", "condoms",
- "condomns", "condoms",
- "conduict", "conduit",
- "conected", "connected",
- "conencts", "connects",
- "confeses", "confess",
- "confesos", "confess",
- "confesso", "confession",
- "configue", "configure",
- "confilct", "conflict",
- "confirmd", "confirmed",
- "conflcit", "conflict",
- "conflics", "conflicts",
- "confrims", "confirms",
- "conicide", "coincide",
- "conlcude", "conclude",
- "conqueor", "conquer",
- "conquerd", "conquered",
- "conqured", "conquered",
- "conscent", "consent",
- "consious", "conscious",
- "constans", "constants",
- "constast", "constants",
- "constatn", "constant",
- "constrat", "constraint",
- "construt", "constructs",
- "containd", "contained",
- "containg", "containing",
- "contaire", "containers",
- "contanti", "contacting",
- "contense", "contenders",
- "contenst", "contents",
- "contexta", "contextual",
- "contextl", "contextual",
- "contians", "contains",
- "contined", "continued",
- "contines", "continents",
- "continum", "continuum",
- "continus", "continues",
- "continut", "continuity",
- "continuu", "continuous",
- "contracr", "contractor",
- "contracs", "contracts",
- "controll", "control",
- "contruct", "construct",
- "convenit", "convenient",
- "convento", "convention",
- "converst", "converts",
- "convertr", "converter",
- "conviced", "convinced",
- "convicto", "conviction",
- "convingi", "convincing",
- "convinse", "convinces",
- "cooldows", "cooldowns",
- "coordine", "coordinate",
- "coralina", "carolina",
- "corollla", "corolla",
- "corolloa", "corolla",
- "corosion", "corrosion",
- "corpsers", "corpses",
- "corrdior", "corridor",
- "correcty", "correctly",
- "correnti", "correcting",
- "corretly", "correctly",
- "corrupto", "corruption",
- "cosemtic", "cosmetic",
- "cosutmes", "costumes",
- "couldnot", "couldnt",
- "coulored", "coloured",
- "counries", "countries",
- "counseil", "counsel",
- "counsole", "counsel",
- "counterd", "countered",
- "countert", "counteract",
- "countres", "counters",
- "courtrom", "courtroom",
- "courtsey", "courtesy",
- "cousines", "cousins",
- "cousings", "cousins",
- "coutners", "counters",
- "covanent", "covenant",
- "coverted", "converted",
- "coyotees", "coyotes",
- "cpatains", "captains",
- "cranbery", "cranberry",
- "crayones", "crayons",
- "creaeted", "created",
- "createin", "creatine",
- "createur", "creature",
- "creatien", "creatine",
- "creepgin", "creeping",
- "cricling", "circling",
- "cringely", "cringey",
- "cringery", "cringey",
- "criticas", "critics",
- "critices", "critics",
- "criticie", "criticise",
- "criticim", "criticisms",
- "criticis", "critics",
- "criticms", "critics",
- "criticos", "critics",
- "criticts", "critics",
- "criticus", "critics",
- "critiera", "criteria",
- "critized", "criticized",
- "croatioa", "croatia",
- "crossfie", "crossfire",
- "crosshar", "crosshair",
- "crosspot", "crosspost",
- "crowbahr", "crowbar",
- "cruasder", "crusader",
- "cruciaal", "crucial",
- "crucibel", "crucible",
- "cruicble", "crucible",
- "crusdaer", "crusader",
- "crusiers", "cruisers",
- "crusiing", "cruising",
- "cruthces", "crutches",
- "cthulhlu", "cthulhu",
- "cthulluh", "cthulhu",
- "cubpoard", "cupboard",
- "cuddleys", "cuddles",
- "culprint", "culprit",
- "cultrual", "cultural",
- "culutral", "cultural",
- "cupbaord", "cupboard",
- "cupborad", "cupboard",
- "curcible", "crucible",
- "curisers", "cruisers",
- "curising", "cruising",
- "currecny", "currency",
- "currence", "currencies",
- "currenly", "currently",
- "currenty", "currently",
- "cursader", "crusader",
- "custcene", "cutscene",
- "cutsceen", "cutscene",
- "cutscens", "cutscenes",
- "cutsence", "cutscene",
- "cylcists", "cyclists",
- "cylidner", "cylinder",
- "cylindre", "cylinder",
- "cynisicm", "cynicism",
- "cyrstals", "crystals",
- "dacquiri", "daiquiri",
- "daimonds", "diamonds",
- "dangeros", "dangers",
- "dangerus", "dangers",
- "darkenss", "darkness",
- "darnkess", "darkness",
- "dashboad", "dashboard",
- "daugther", "daughter",
- "deadlfit", "deadlift",
- "deadlifs", "deadlifts",
- "deafauts", "defaults",
- "deafeted", "defeated",
- "deafults", "defaults",
- "dealying", "delaying",
- "deamenor", "demeanor",
- "deathcat", "deathmatch",
- "debuffes", "debuffs",
- "debufffs", "debuffs",
- "decalred", "declared",
- "decalres", "declares",
- "decembre", "december",
- "decidely", "decidedly",
- "decieved", "deceived",
- "decifits", "deficits",
- "decipted", "depicted",
- "declears", "declares",
- "declinig", "declining",
- "decmeber", "december",
- "decribed", "described",
- "decribes", "describes",
- "dedicato", "dedication",
- "deductie", "deductible",
- "defautls", "defaults",
- "defectos", "defects",
- "defectus", "defects",
- "defendas", "defends",
- "defendes", "defenders",
- "defendis", "defends",
- "defendre", "defender",
- "defendrs", "defends",
- "defensea", "defenseman",
- "defensen", "defenseman",
- "defensie", "defensive",
- "defetead", "defeated",
- "deffined", "defined",
- "deficiet", "deficient",
- "definate", "definite",
- "definaty", "definately",
- "definety", "definetly",
- "definito", "definition",
- "definitv", "definitive",
- "deflatin", "deflation",
- "deflecto", "deflection",
- "defualts", "defaults",
- "degarded", "degraded",
- "degenere", "degenerate",
- "degraged", "degrade",
- "degrated", "degrade",
- "deisgned", "designed",
- "deisgner", "designer",
- "dekstops", "desktops",
- "delcared", "declared",
- "delcares", "declares",
- "delepted", "depleted",
- "delivere", "deliveries",
- "delpeted", "depleted",
- "delpoyed", "deployed",
- "delyaing", "delaying",
- "demandas", "demands",
- "demandes", "demands",
- "demenaor", "demeanor",
- "democray", "democracy",
- "demolito", "demolition",
- "denseley", "densely",
- "densitiy", "density",
- "deomcrat", "democrat",
- "deovtion", "devotion",
- "departer", "departure",
- "departue", "departure",
- "depcited", "depicted",
- "depelted", "depleted",
- "dependat", "dependant",
- "depictes", "depicts",
- "depictin", "depictions",
- "depolyed", "deployed",
- "depositd", "deposited",
- "depostis", "deposits",
- "depresse", "depressive",
- "depresso", "depression",
- "derivate", "derivative",
- "descened", "descend",
- "descibed", "described",
- "descirbe", "describe",
- "descrise", "describes",
- "desgined", "designed",
- "desginer", "designer",
- "desicive", "decisive",
- "designad", "designated",
- "designes", "designs",
- "designet", "designated",
- "desinged", "designed",
- "desinger", "designer",
- "desitned", "destined",
- "desktiop", "desktop",
- "desorder", "disorder",
- "despides", "despised",
- "despiste", "despise",
- "destiney", "destiny",
- "destinty", "destiny",
- "destkops", "desktops",
- "destorys", "destroys",
- "destrose", "destroyers",
- "destroyd", "destroyed",
- "destroyr", "destroyers",
- "detalied", "detailed",
- "detectas", "detects",
- "detectes", "detects",
- "detectie", "detectives",
- "determen", "determines",
- "devasted", "devastated",
- "develope", "develop",
- "devialet", "deviate",
- "deviatie", "deviate",
- "devilers", "delivers",
- "devloved", "devolved",
- "devovled", "devolved",
- "diaganol", "diagonal",
- "diagnoal", "diagonal",
- "diagnoes", "diagnose",
- "diagnosi", "diagnostic",
- "diagonse", "diagnose",
- "diahrrea", "diarrhea",
- "dialetcs", "dialects",
- "dialgoue", "dialogue",
- "dialouge", "dialogue",
- "diarreah", "diarrhea",
- "diarreha", "diarrhea",
- "dichtomy", "dichotomy",
- "dickisch", "dickish",
- "dicovers", "discovers",
- "dicovery", "discovery",
- "dicussed", "discussed",
- "diferent", "different",
- "differnt", "different",
- "difficut", "difficulty",
- "diffrent", "different",
- "diganose", "diagnose",
- "dignitiy", "dignity",
- "dimaonds", "diamonds",
- "dinasour", "dinosaur",
- "dinosaus", "dinosaurs",
- "dinosuar", "dinosaur",
- "dinsoaur", "dinosaur",
- "dionsaur", "dinosaur",
- "diphtong", "diphthong",
- "diplomma", "diploma",
- "dipthong", "diphthong",
- "direclty", "directly",
- "directin", "directions",
- "directix", "directx",
- "directos", "directors",
- "directoy", "directory",
- "directrx", "directx",
- "dirfting", "drifting",
- "disabeld", "disabled",
- "disabels", "disables",
- "disagred", "disagreed",
- "disagres", "disagrees",
- "disbaled", "disabled",
- "disbales", "disables",
- "disbelif", "disbelief",
- "dischard", "discharged",
- "dischare", "discharged",
- "discound", "discounted",
- "discoure", "discourse",
- "discoved", "discovered",
- "discreto", "discretion",
- "discribe", "describe",
- "disentry", "dysentery",
- "disgiuse", "disguise",
- "dishoner", "dishonored",
- "dishonet", "dishonesty",
- "dislikse", "dislikes",
- "dismante", "dismantle",
- "dismisse", "dismissive",
- "disolved", "dissolved",
- "dispacth", "dispatch",
- "dispalys", "displays",
- "dispence", "dispense",
- "dispersa", "dispensary",
- "displayd", "displayed",
- "disposle", "dispose",
- "disposte", "dispose",
- "dispoves", "dispose",
- "disptach", "dispatch",
- "disricts", "districts",
- "dissovle", "dissolve",
- "distates", "distaste",
- "distatse", "distaste",
- "disticnt", "distinct",
- "distorto", "distortion",
- "distrcit", "district",
- "districs", "districts",
- "disturbd", "disturbed",
- "disupted", "disputed",
- "disuptes", "disputes",
- "diversed", "diverse",
- "diversiy", "diversify",
- "dividens", "dividends",
- "divintiy", "divinity",
- "divisons", "divisions",
- "doapmine", "dopamine",
- "docrines", "doctrines",
- "docrtine", "doctrine",
- "doctines", "doctrines",
- "doctirne", "doctrine",
- "doctrins", "doctrines",
- "dogamtic", "dogmatic",
- "dolhpins", "dolphins",
- "domapine", "dopamine",
- "domecrat", "democrat",
- "domiante", "dominate",
- "dominato", "domination",
- "dominats", "dominates",
- "dominent", "dominant",
- "dominoin", "dominion",
- "donwload", "download",
- "donwvote", "downvote",
- "doomdsay", "doomsday",
- "doosmday", "doomsday",
- "doplhins", "dolphins",
- "dopmaine", "dopamine",
- "dormtund", "dortmund",
- "dortumnd", "dortmund",
- "dotrmund", "dortmund",
- "douchely", "douchey",
- "doucheus", "douches",
- "dowloads", "downloads",
- "downlaod", "download",
- "downloas", "downloads",
- "downstar", "downstairs",
- "downvore", "downvoters",
- "downvotr", "downvoters",
- "downvots", "downvotes",
- "draculea", "dracula",
- "draculla", "dracula",
- "dragones", "dragons",
- "dragonus", "dragons",
- "drfiting", "drifting",
- "driectly", "directly",
- "drifitng", "drifting",
- "driveris", "drivers",
- "drotmund", "dortmund",
- "duaghter", "daughter",
- "dumbbels", "dumbbells",
- "dumptser", "dumpster",
- "dumspter", "dumpster",
- "dunegons", "dungeons",
- "dungeoun", "dungeon",
- "dungoens", "dungeons",
- "dupicate", "duplicate",
- "duplicas", "duplicates",
- "dwarvens", "dwarves",
- "dyanmics", "dynamics",
- "dyanmite", "dynamite",
- "dymanics", "dynamics",
- "dymanite", "dynamite",
- "dynastry", "dynasty",
- "dysentry", "dysentery",
- "dysphora", "dysphoria",
- "earilest", "earliest",
- "eatswood", "eastwood",
- "eceonomy", "economy",
- "ecidious", "deciduous",
- "ecologia", "ecological",
- "ecomonic", "economic",
- "ecstacys", "ecstasy",
- "ecstascy", "ecstasy",
- "ecstasty", "ecstasy",
- "ectastic", "ecstatic",
- "editoras", "editors",
- "editores", "editors",
- "efficent", "efficient",
- "egpytian", "egyptian",
- "egyptain", "egyptian",
- "egytpian", "egyptian",
- "ehtereal", "ethereal",
- "ehternet", "ethernet",
- "eigtheen", "eighteen",
- "electhor", "electro",
- "electorn", "electron",
- "elementy", "elementary",
- "elephans", "elephants",
- "elevatin", "elevation",
- "elicided", "elicited",
- "eligable", "eligible",
- "elimiate", "eliminate",
- "eliminas", "eliminates",
- "elitisim", "elitism",
- "elitistm", "elitism",
- "ellected", "elected",
- "embarass", "embarrass",
- "embargos", "embargoes",
- "embarras", "embarrass",
- "embassay", "embassy",
- "embassey", "embassy",
- "embasssy", "embassy",
- "emergend", "emerged",
- "emergerd", "emerged",
- "eminated", "emanated",
- "emminent", "eminent",
- "emmisary", "emissary",
- "emmision", "emission",
- "emmiting", "emitting",
- "emmitted", "emitted",
- "empathie", "empathize",
- "empirial", "empirical",
- "emulatin", "emulation",
- "enahnces", "enhances",
- "enchanct", "enchant",
- "encolsed", "enclosed",
- "endanged", "endangered",
- "endevors", "endeavors",
- "endevour", "endeavour",
- "endlessy", "endlessly",
- "endorces", "endorse",
- "engeneer", "engineer",
- "engeries", "energies",
- "engineed", "engineered",
- "engrames", "engrams",
- "engramms", "engrams",
- "enigneer", "engineer",
- "enitrely", "entirely",
- "enlcosed", "enclosed",
- "enlsaved", "enslaved",
- "ensalved", "enslaved",
- "enterity", "entirety",
- "entierly", "entirely",
- "entierty", "entirety",
- "entilted", "entitled",
- "entirley", "entirely",
- "entiteld", "entitled",
- "entitity", "entity",
- "entropay", "entropy",
- "entrophy", "entropy",
- "ephipany", "epiphany",
- "epihpany", "epiphany",
- "epilespy", "epilepsy",
- "epilgoue", "epilogue",
- "episdoes", "episodes",
- "epitomie", "epitome",
- "epliepsy", "epilepsy",
- "epliogue", "epilogue",
- "epsiodes", "episodes",
- "epsresso", "espresso",
- "eqaulity", "equality",
- "eqaution", "equation",
- "equailty", "equality",
- "eraticly", "erratically",
- "erroneos", "erroneous",
- "errupted", "erupted",
- "escalato", "escalation",
- "esctatic", "ecstatic",
- "esential", "essential",
- "esitmate", "estimate",
- "esperate", "seperate",
- "esportes", "esports",
- "estiamte", "estimate",
- "estoeric", "esoteric",
- "estonija", "estonia",
- "estoniya", "estonia",
- "etherael", "ethereal",
- "etherent", "ethernet",
- "ethicaly", "ethically",
- "etiquete", "etiquette",
- "etrailer", "retailer",
- "eugencis", "eugenics",
- "eugneics", "eugenics",
- "euhporia", "euphoria",
- "euhporic", "euphoric",
- "euorpean", "european",
- "euphoira", "euphoria",
- "euphroia", "euphoria",
- "euphroic", "euphoric",
- "europian", "european",
- "eurpoean", "european",
- "evangers", "avengers",
- "everyons", "everyones",
- "evidencd", "evidenced",
- "evidende", "evidenced",
- "evloving", "evolving",
- "evolveds", "evolves",
- "evolveos", "evolves",
- "evovling", "evolving",
- "excecute", "execute",
- "excedded", "exceeded",
- "excelent", "excellent",
- "exceptin", "exceptions",
- "excerise", "exercise",
- "excisted", "existed",
- "exclusie", "exclusives",
- "exculded", "excluded",
- "exculdes", "excludes",
- "exection", "execution",
- "exectued", "executed",
- "executie", "executive",
- "executin", "execution",
- "exellent", "excellent",
- "exerbate", "exacerbate",
- "exercide", "exercised",
- "exercies", "exercise",
- "exersice", "exercise",
- "exersize", "exercise",
- "exhalted", "exalted",
- "exhaustn", "exhaustion",
- "exhausto", "exhaustion",
- "exicting", "exciting",
- "exisitng", "existing",
- "existane", "existance",
- "existant", "existent",
- "existend", "existed",
- "exlcuded", "excluded",
- "exlcudes", "excludes",
- "exlporer", "explorer",
- "exoticas", "exotics",
- "exoticos", "exotics",
- "expalins", "explains",
- "expandas", "expands",
- "expandes", "expands",
- "expansie", "expansive",
- "expectes", "expects",
- "expectus", "expects",
- "expedito", "expedition",
- "expences", "expense",
- "expensie", "expense",
- "expensve", "expense",
- "expertas", "experts",
- "expertis", "experts",
- "expertos", "experts",
- "expireds", "expires",
- "explaind", "explained",
- "explaing", "explaining",
- "expliots", "exploits",
- "explodie", "explode",
- "exploint", "exploit",
- "explosie", "explosive",
- "explosin", "explosions",
- "exploted", "explode",
- "expoldes", "explodes",
- "expolits", "exploits",
- "exportas", "exports",
- "exportes", "exports",
- "exportfs", "exports",
- "exposees", "exposes",
- "exposito", "exposition",
- "expresse", "expressive",
- "expresss", "expresses",
- "expressy", "expressly",
- "exressed", "expressed",
- "exsitent", "existent",
- "exsiting", "existing",
- "extactly", "exactly",
- "extemely", "extremely",
- "extendes", "extends",
- "extendos", "extends",
- "extenion", "extension",
- "extensie", "extensive",
- "extensis", "extensions",
- "extortin", "extortion",
- "extracto", "extraction",
- "extreems", "extremes",
- "extremly", "extremely",
- "eygptian", "egyptian",
- "faboulus", "fabulous",
- "fabricas", "fabrics",
- "fabrices", "fabrics",
- "fabricus", "fabrics",
- "faceplam", "facepalm",
- "facilisi", "facilities",
- "faciltiy", "facility",
- "facsists", "fascists",
- "factores", "factors",
- "factorys", "factors",
- "factualy", "factually",
- "faggotts", "faggots",
- "faggotus", "faggots",
- "falcones", "falcons",
- "falgship", "flagship",
- "faliures", "failures",
- "falseley", "falsely",
- "falshing", "flashing",
- "falvored", "flavored",
- "falvours", "flavours",
- "familair", "familiar",
- "famoulsy", "famously",
- "fanatism", "fanaticism",
- "fanatsic", "fanatics",
- "fanserve", "fanservice",
- "fantasty", "fantasy",
- "farcking", "fracking",
- "fascisim", "fascism",
- "fashiond", "fashioned",
- "fasicsts", "fascists",
- "fatigure", "fatigue",
- "favorits", "favorites",
- "favourie", "favourites",
- "feasable", "feasible",
- "feasbile", "feasible",
- "febraury", "february",
- "februray", "february",
- "feburary", "february",
- "fedility", "fidelity",
- "fedorahs", "fedoras",
- "fedorans", "fedoras",
- "feilding", "fielding",
- "feisable", "feasible",
- "feitshes", "fetishes",
- "feltcher", "fletcher",
- "felxible", "flexible",
- "feminint", "femininity",
- "feminsim", "feminism",
- "feromone", "pheromone",
- "fesiable", "feasible",
- "festivas", "festivals",
- "festivle", "festive",
- "fictious", "fictitious",
- "fideling", "fielding",
- "fideltiy", "fidelity",
- "fiedling", "fielding",
- "fiedlity", "fidelity",
- "fighitng", "fighting",
- "figthing", "fighting",
- "fileding", "fielding",
- "fimilies", "families",
- "finacial", "financial",
- "fineshes", "finesse",
- "fingersi", "fingertips",
- "finnisch", "finnish",
- "finsihes", "finishes",
- "firebals", "fireballs",
- "firendly", "friendly",
- "firmwear", "firmware",
- "firwmare", "firmware",
- "flaghsip", "flagship",
- "flamable", "flammable",
- "flasghip", "flagship",
- "flatterd", "flattered",
- "flatteur", "flatter",
- "flattire", "flatter",
- "flavores", "flavors",
- "flechter", "fletcher",
- "flecther", "fletcher",
- "flemmish", "flemish",
- "flethcer", "fletcher",
- "flexbile", "flexible",
- "flexibel", "flexible",
- "flippade", "flipped",
- "flitered", "filtered",
- "florecen", "florence",
- "floridia", "florida",
- "floruide", "fluoride",
- "floruish", "flourish",
- "flourine", "fluorine",
- "floursih", "flourish",
- "fluorish", "flourish",
- "fluroide", "fluoride",
- "folowing", "following",
- "fontrier", "fontier",
- "forasken", "forsaken",
- "forbiden", "forbidden",
- "foreamrs", "forearms",
- "foreksin", "foreskin",
- "forenics", "forensic",
- "forenisc", "forensic",
- "foresnic", "forensic",
- "foreward", "foreword",
- "foricbly", "forcibly",
- "forigven", "forgiven",
- "formatin", "formation",
- "formelly", "formerly",
- "formuals", "formulas",
- "fornesic", "forensic",
- "forresst", "forrest",
- "forsekan", "forsaken",
- "forsekin", "foreskin",
- "forsenic", "forensic",
- "forskaen", "forsaken",
- "forsting", "frosting",
- "fortitue", "fortitude",
- "fortunae", "fortune",
- "fortunte", "fortune",
- "forumlas", "formulas",
- "forunner", "forerunner",
- "fossiles", "fossils",
- "fossilis", "fossils",
- "foundary", "foundry",
- "fountian", "fountain",
- "fourties", "forties",
- "fowrards", "forwards",
- "frackign", "fracking",
- "framgent", "fragment",
- "franches", "franchise",
- "franchie", "franchises",
- "franciso", "francisco",
- "frankiln", "franklin",
- "franlkin", "franklin",
- "freckels", "freckles",
- "freindly", "friendly",
- "frequeny", "frequency",
- "friendle", "friendlies",
- "friendsi", "friendlies",
- "frimware", "firmware",
- "frogiven", "forgiven",
- "frointer", "frontier",
- "fromerly", "formerly",
- "froniter", "frontier",
- "fronteir", "frontier",
- "frosaken", "forsaken",
- "frutcose", "fructose",
- "fucntion", "function",
- "fufilled", "fulfilled",
- "fulfiled", "fulfilled",
- "fullfill", "fulfill",
- "funciton", "function",
- "fundirse", "fundies",
- "funniliy", "funnily",
- "funnilly", "funnily",
- "furctose", "fructose",
- "furition", "fruition",
- "furuther", "further",
- "futurers", "futures",
- "futureus", "futures",
- "gamemdoe", "gamemode",
- "gamepaly", "gameplay",
- "gamergat", "gamertag",
- "gammeode", "gamemode",
- "ganerate", "generate",
- "garantee", "guarantee",
- "gardient", "gradient",
- "garfeild", "garfield",
- "garfiled", "garfield",
- "garflied", "garfield",
- "garnison", "garrison",
- "garrions", "garrison",
- "garriosn", "garrison",
- "garrsion", "garrison",
- "gatherig", "gatherings",
- "gauarana", "guaraná",
- "gauntelt", "gauntlet",
- "gauntles", "gauntlets",
- "gaurdian", "guardian",
- "gaurding", "guarding",
- "gautnlet", "gauntlet",
- "gemoetry", "geometry",
- "generaly", "generally",
- "generase", "generates",
- "generats", "generates",
- "genialia", "genitalia",
- "genisues", "geniuses",
- "genitala", "genitalia",
- "genrates", "generates",
- "gentials", "genitals",
- "gentlemn", "gentlemen",
- "genuises", "geniuses",
- "geograpy", "geography",
- "geomerty", "geometry",
- "geomtery", "geometry",
- "germanos", "germans",
- "germanus", "germans",
- "gernades", "grenades",
- "giagbyte", "gigabyte",
- "gigabtye", "gigabyte",
- "gigaybte", "gigabyte",
- "gigbayte", "gigabyte",
- "gignatic", "gigantic",
- "giltched", "glitched",
- "giltches", "glitches",
- "girafffe", "giraffe",
- "girefing", "griefing",
- "girlling", "grilling",
- "gladiatr", "gladiator",
- "glichted", "glitched",
- "glichtes", "glitches",
- "glicthed", "glitched",
- "glicthes", "glitches",
- "glitchey", "glitchy",
- "glitchly", "glitchy",
- "glitchty", "glitchy",
- "glithced", "glitched",
- "glithces", "glitches",
- "gloablly", "globally",
- "glodberg", "goldberg",
- "glodfish", "goldfish",
- "gloriuos", "glorious",
- "gltiched", "glitched",
- "gltiches", "glitches",
- "gmaertag", "gamertag",
- "goblings", "goblins",
- "goddammn", "goddamn",
- "goddammt", "goddammit",
- "godesses", "goddesses",
- "godlberg", "goldberg",
- "godlfish", "goldfish",
- "godounov", "godunov",
- "godpseed", "godspeed",
- "godspede", "godspeed",
- "goldifsh", "goldfish",
- "gonewidl", "gonewild",
- "goodlcuk", "goodluck",
- "goregous", "gorgeous",
- "gorgoeus", "gorgeous",
- "gorillia", "gorilla",
- "gorillla", "gorilla",
- "gospells", "gospels",
- "gottleib", "gottlieb",
- "gourmelt", "gourmet",
- "gourment", "gourmet",
- "gouvener", "governor",
- "govement", "government",
- "goverend", "governed",
- "govermet", "goverment",
- "governer", "governor",
- "gradualy", "gradually",
- "grafield", "garfield",
- "grafitti", "graffiti",
- "grahpics", "graphics",
- "grahpite", "graphite",
- "graident", "gradient",
- "granolla", "granola",
- "graphcis", "graphics",
- "grapichs", "graphics",
- "grappnel", "grapple",
- "greandes", "grenades",
- "greatful", "grateful",
- "greeneer", "greener",
- "greenhoe", "greenhouse",
- "greenlad", "greenland",
- "greenore", "greener",
- "greusome", "gruesome",
- "grieifng", "griefing",
- "grifeing", "griefing",
- "grizzlay", "grizzly",
- "grizzley", "grizzly",
- "grpahics", "graphics",
- "grpahite", "graphite",
- "gruseome", "gruesome",
- "guantano", "guantanamo",
- "guardain", "guardian",
- "guardias", "guardians",
- "guaridan", "guardian",
- "guerrila", "guerrilla",
- "guidence", "guidance",
- "guiseppe", "giuseppe",
- "guitards", "guitars",
- "guitares", "guitars",
- "guitarit", "guitarist",
- "gullbile", "gullible",
- "gunanine", "guanine",
- "guniness", "guinness",
- "gunniess", "guinness",
- "guradian", "guardian",
- "gurading", "guarding",
- "gurantee", "guarantee",
- "guresome", "gruesome",
- "guttaral", "guttural",
- "gutteral", "guttural",
- "hacthing", "hatching",
- "hafltime", "halftime",
- "haircuit", "haircut",
- "halfitme", "halftime",
- "hallowen", "halloween",
- "hamburgr", "hamburgers",
- "hamitlon", "hamilton",
- "hamliton", "hamilton",
- "handcufs", "handcuffs",
- "handeldy", "handedly",
- "handlade", "handled",
- "handlare", "handler",
- "handledy", "handedly",
- "hannbial", "hannibal",
- "haording", "hoarding",
- "hapening", "happening",
- "happends", "happens",
- "happenes", "happens",
- "happilly", "happily",
- "harldine", "hardline",
- "harrased", "harassed",
- "harrases", "harasses",
- "hatchign", "hatching",
- "hatesink", "heatsink",
- "hathcing", "hatching",
- "headachs", "headaches",
- "headests", "headsets",
- "headhsot", "headshot",
- "headseat", "headset",
- "healthit", "healthiest",
- "heastink", "heatsink",
- "heathern", "heathen",
- "heatskin", "heatsink",
- "heaviliy", "heavily",
- "heavilly", "heavily",
- "heavnely", "heavenly",
- "hedeghog", "hedgehog",
- "hegdehog", "hedgehog",
- "heighest", "heights",
- "heighted", "heightened",
- "heirachy", "hierarchy",
- "heistant", "hesitant",
- "heistate", "hesitate",
- "hellifre", "hellfire",
- "helluvva", "helluva",
- "helpfull", "helpful",
- "heratige", "heritage",
- "herclues", "hercules",
- "heridity", "heredity",
- "heroicas", "heroics",
- "heroices", "heroics",
- "heroicos", "heroics",
- "heroicus", "heroics",
- "hertiage", "heritage",
- "herucles", "hercules",
- "hestiant", "hesitant",
- "hestiate", "hesitate",
- "heveanly", "heavenly",
- "hierachy", "hierarchy",
- "hierarcy", "hierarchy",
- "highlane", "highlander",
- "hindiusm", "hinduism",
- "hindusim", "hinduism",
- "hinudism", "hinduism",
- "hiptsers", "hipsters",
- "hispanis", "hispanics",
- "hispters", "hipsters",
- "histroic", "historic",
- "hodlings", "holdings",
- "hoenstly", "honestly",
- "hoildays", "holidays",
- "holdiays", "holidays",
- "hollywod", "hollywood",
- "homeword", "homeworld",
- "homineim", "hominem",
- "homineum", "hominem",
- "honeslty", "honestly",
- "honeymon", "honeymoon",
- "honsetly", "honestly",
- "hopefuly", "hopefully",
- "hopkings", "hopkins",
- "hopsital", "hospital",
- "horading", "hoarding",
- "horzions", "horizons",
- "hosptial", "hospital",
- "hosteles", "hostels",
- "hostiliy", "hostility",
- "hotshoot", "hotshot",
- "hotsport", "hotspot",
- "hsyteria", "hysteria",
- "htaching", "hatching",
- "htiboxes", "hitboxes",
- "huanting", "haunting",
- "humaniod", "humanoid",
- "humanite", "humanities",
- "humantiy", "humanity",
- "humerous", "humorous",
- "huminoid", "humanoid",
- "humitidy", "humidity",
- "humoural", "humoral",
- "humouros", "humorous",
- "humurous", "humorous",
- "hunderds", "hundreds",
- "hundread", "hundred",
- "hungarin", "hungarian",
- "huntmsan", "huntsman",
- "hutnsman", "huntsman",
- "hybrides", "hybrids",
- "hybridus", "hybrids",
- "hydorgen", "hydrogen",
- "hydratin", "hydration",
- "hydregon", "hydrogen",
- "hygience", "hygiene",
- "hygienne", "hygiene",
- "hyperbel", "hyperbole",
- "hypocrit", "hypocrite",
- "hyponsis", "hypnosis",
- "hyrdogen", "hydrogen",
- "icefrong", "icefrog",
- "icelings", "ceilings",
- "idaeidae", "idea",
- "idealogy", "ideology",
- "idealsim", "idealism",
- "idenfity", "identify",
- "idenitfy", "identify",
- "identite", "identities",
- "ideologe", "ideologies",
- "illiegal", "illegal",
- "illinios", "illinois",
- "illionis", "illinois",
- "illnesss", "illnesses",
- "illumini", "illuminati",
- "illustre", "illustrate",
- "illution", "illusion",
- "ilogical", "illogical",
- "ilterate", "literate",
- "imapired", "impaired",
- "imgrants", "migrants",
- "imigrant", "emigrant",
- "immboile", "immobile",
- "immenint", "imminent",
- "immersie", "immerse",
- "immersve", "immerse",
- "immitate", "imitate",
- "immoblie", "immobile",
- "immortas", "immortals",
- "impactes", "impacts",
- "impactos", "impacts",
- "imparied", "impaired",
- "imperavi", "imperative",
- "imperfet", "imperfect",
- "implemet", "implements",
- "implosed", "implode",
- "impluses", "impulses",
- "imporper", "improper",
- "importas", "imports",
- "importen", "importance",
- "importes", "imports",
- "imporved", "improved",
- "imporves", "improves",
- "impropre", "improper",
- "improted", "imported",
- "improvie", "improvised",
- "impusles", "impulses",
- "imrpoved", "improved",
- "imrpoves", "improves",
- "inbetwen", "inbetween",
- "inclince", "incline",
- "inclinde", "incline",
- "includng", "including",
- "incorect", "incorrect",
- "incuding", "including",
- "inculded", "included",
- "indianas", "indians",
- "indiands", "indians",
- "indiania", "indiana",
- "indianna", "indiana",
- "indianos", "indians",
- "indicato", "indication",
- "indicats", "indicators",
- "indonesa", "indonesia",
- "indulgue", "indulge",
- "infantis", "infants",
- "infantus", "infants",
- "infarred", "infrared",
- "infectin", "infections",
- "infermon", "inferno",
- "infiltre", "infiltrate",
- "infintie", "infinite",
- "infintiy", "infinity",
- "inflatie", "inflate",
- "influens", "influences",
- "informas", "informs",
- "informis", "informs",
- "infromal", "informal",
- "infromed", "informed",
- "ingenius", "ingenious",
- "ingition", "ignition",
- "ingorant", "ignorant",
- "inheriet", "inherit",
- "inherint", "inherit",
- "inhumaan", "inhuman",
- "inhumain", "inhuman",
- "inifnite", "infinite",
- "inifnity", "infinity",
- "inisghts", "insights",
- "initails", "initials",
- "initaite", "initiate",
- "initaled", "initialed",
- "initally", "initially",
- "initialy", "initially",
- "initmacy", "intimacy",
- "initmate", "intimate",
- "injustie", "injustices",
- "inlcuded", "included",
- "inlcudes", "includes",
- "innocens", "innocents",
- "innocuos", "innocuous",
- "innvoate", "innovate",
- "inocence", "innocence",
- "inpolite", "impolite",
- "inpsired", "inspired",
- "inquirey", "inquiry",
- "inquirie", "inquire",
- "inquiriy", "inquiry",
- "inrested", "inserted",
- "insanley", "insanely",
- "insectes", "insects",
- "insectos", "insects",
- "insertas", "inserts",
- "insertes", "inserts",
- "insertos", "inserts",
- "insidios", "insidious",
- "insigths", "insights",
- "insipred", "inspired",
- "insipres", "inspires",
- "insistas", "insists",
- "insistes", "insists",
- "insistis", "insists",
- "insmonia", "insomnia",
- "insomina", "insomnia",
- "insonmia", "insomnia",
- "inspried", "inspired",
- "inspries", "inspires",
- "instanse", "instances",
- "instanty", "instantly",
- "instered", "inserted",
- "insticnt", "instinct",
- "instincs", "instincts",
- "institue", "institute",
- "insultas", "insults",
- "insultes", "insults",
- "insultos", "insults",
- "intamicy", "intimacy",
- "intamite", "intimate",
- "intendes", "intends",
- "intendos", "intends",
- "intentas", "intents",
- "intented", "intended",
- "interace", "interacted",
- "interacs", "interacts",
- "interect", "interacted",
- "interent", "internet",
- "interese", "interested",
- "interfce", "interface",
- "intergal", "integral",
- "internts", "interns",
- "internus", "interns",
- "interpet", "interpret",
- "interrim", "interim",
- "interste", "interstate",
- "interupt", "interrupt",
- "intevene", "intervene",
- "intially", "initially",
- "intiials", "initials",
- "intimaty", "intimately",
- "intimide", "intimidate",
- "intregal", "integral",
- "intriuge", "intrigue",
- "introdue", "introduces",
- "introdus", "introduces",
- "introvet", "introvert",
- "intruige", "intrigue",
- "intutive", "intuitive",
- "inudstry", "industry",
- "inventer", "inventor",
- "invertes", "inverse",
- "invincil", "invincible",
- "invitato", "invitation",
- "invloved", "involved",
- "invloves", "involves",
- "invovled", "involved",
- "invovles", "involves",
- "iranains", "iranians",
- "iraninas", "iranians",
- "iritable", "irritable",
- "iritated", "irritated",
- "ironicly", "ironically",
- "irritato", "irritation",
- "isalmist", "islamist",
- "isarelis", "israelis",
- "islamits", "islamist",
- "islamsit", "islamist",
- "islandes", "islanders",
- "ismalist", "islamist",
- "isntalls", "installs",
- "isolatie", "isolate",
- "israelli", "israeli",
- "israleis", "israelis",
- "isralies", "israelis",
- "isrealis", "israelis",
- "issueing", "issuing",
- "italains", "italians",
- "jaguards", "jaguars",
- "jaguares", "jaguars",
- "jailbrek", "jailbreak",
- "jaimacan", "jamaican",
- "jamacain", "jamaican",
- "jamaicia", "jamaica",
- "jamiacan", "jamaican",
- "januaray", "january",
- "janurary", "january",
- "jeapardy", "jeopardy",
- "jefferry", "jeffery",
- "jefferty", "jeffery",
- "jennigns", "jennings",
- "jeoprady", "jeopardy",
- "jepoardy", "jeopardy",
- "jerusalm", "jerusalem",
- "jewelrey", "jewelry",
- "jewllery", "jewellery",
- "joanthan", "jonathan",
- "joepardy", "jeopardy",
- "johanine", "johannine",
- "jonatahn", "jonathan",
- "journaal", "journal",
- "journied", "journeyed",
- "journies", "journeys",
- "joysitck", "joystick",
- "juadaism", "judaism",
- "judaisim", "judaism",
- "judgemet", "judgements",
- "juducial", "judicial",
- "jugnling", "jungling",
- "junglign", "jungling",
- "junlging", "jungling",
- "justifiy", "justify",
- "juveline", "juvenile",
- "juvenlie", "juvenile",
- "katemine", "ketamine",
- "kennedey", "kennedy",
- "ketmaine", "ketamine",
- "keybaord", "keyboard",
- "keyboars", "keyboards",
- "keyborad", "keyboard",
- "keychian", "keychain",
- "kicthens", "kitchens",
- "kindgoms", "kingdoms",
- "kittiens", "kitties",
- "knockbak", "knockback",
- "knowlege", "knowledge",
- "knuckels", "knuckles",
- "koreanos", "koreans",
- "kunckles", "knuckles",
- "kurdisch", "kurdish",
- "labatory", "lavatory",
- "labenese", "lebanese",
- "laboraty", "laboratory",
- "laguages", "languages",
- "landscae", "landscapes",
- "langauge", "language",
- "lanucher", "launcher",
- "lanuches", "launches",
- "laodouts", "loadouts",
- "larwence", "lawrence",
- "lasagnea", "lasagna",
- "lasagnia", "lasagna",
- "laucnhed", "launched",
- "laucnher", "launcher",
- "laucnhes", "launches",
- "laundrey", "laundry",
- "lawernce", "lawrence",
- "lazyness", "laziness",
- "leaglize", "legalize",
- "lecteurs", "lectures",
- "lecutres", "lectures",
- "lefitsts", "leftists",
- "leftsits", "leftists",
- "legenday", "legendary",
- "legionis", "legions",
- "legitimt", "legitimate",
- "lengthes", "lengths",
- "lengthly", "lengthy",
- "lentiles", "lentils",
- "lentills", "lentils",
- "lesbains", "lesbians",
- "lesibans", "lesbians",
- "levander", "lavender",
- "levelign", "leveling",
- "levetate", "levitate",
- "leviathn", "leviathan",
- "levleing", "leveling",
- "liberato", "liberation",
- "libertae", "liberate",
- "libertea", "liberate",
- "librarse", "libraries",
- "licencie", "licence",
- "licencse", "licence",
- "liebrals", "liberals",
- "liekable", "likeable",
- "lifepsan", "lifespan",
- "lifestel", "lifesteal",
- "lifestye", "lifestyle",
- "lighitng", "lighting",
- "lightnig", "lightning",
- "lightres", "lighters",
- "lightrom", "lightroom",
- "ligthers", "lighters",
- "ligthing", "lighting",
- "likebale", "likeable",
- "limitant", "militant",
- "limitato", "limitation",
- "lincolin", "lincoln",
- "lincolon", "lincoln",
- "lineupes", "lineups",
- "lingeire", "lingerie",
- "lingiere", "lingerie",
- "linnaena", "linnaean",
- "lipstics", "lipsticks",
- "liquidas", "liquids",
- "liquides", "liquids",
- "liquidos", "liquids",
- "liscense", "license",
- "lisenced", "silenced",
- "listenes", "listens",
- "listents", "listens",
- "listners", "listeners",
- "litature", "literature",
- "litecion", "litecoin",
- "liteicon", "litecoin",
- "literaly", "literally",
- "lithuana", "lithuania",
- "litigato", "litigation",
- "liverpol", "liverpool",
- "locagion", "location",
- "logtiech", "logitech",
- "longitme", "longtime",
- "longtiem", "longtime",
- "looseley", "loosely",
- "loreplay", "roleplay",
- "luanched", "launched",
- "luancher", "launcher",
- "luanches", "launches",
- "lubricat", "lubricant",
- "lucifear", "lucifer",
- "luckilly", "luckily",
- "macarino", "macaroni",
- "machiens", "machines",
- "mackeral", "mackerel",
- "macthups", "matchups",
- "magasine", "magazine",
- "magazins", "magazines",
- "magentic", "magnetic",
- "magicain", "magician",
- "magisine", "magazine",
- "magizine", "magazine",
- "magnetis", "magnets",
- "magnited", "magnitude",
- "magnitue", "magnitude",
- "mainfest", "manifest",
- "maintian", "maintain",
- "majoroty", "majority",
- "makrsman", "marksman",
- "malariya", "malaria",
- "malasiya", "malaysia",
- "malasyia", "malaysia",
- "malayisa", "malaysia",
- "malyasia", "malaysia",
- "mamalian", "mammalian",
- "manadrin", "mandarin",
- "manaully", "manually",
- "mandaste", "mandates",
- "mandrain", "mandarin",
- "mandrian", "mandarin",
- "maneveur", "maneuver",
- "manevuer", "maneuver",
- "manfiest", "manifest",
- "mangetic", "magnetic",
- "manglade", "mangled",
- "manifeso", "manifesto",
- "manipule", "manipulate",
- "manouver", "maneuver",
- "manuales", "manuals",
- "manuever", "maneuver",
- "maraconi", "macaroni",
- "maradeur", "marauder",
- "maraduer", "marauder",
- "maragret", "margaret",
- "marbleds", "marbles",
- "margerat", "margaret",
- "margines", "margins",
- "margings", "margins",
- "marginis", "margins",
- "marignal", "marginal",
- "marilyin", "marilyn",
- "marinens", "marines",
- "markedet", "marketed",
- "markeras", "markers",
- "markerts", "markers",
- "marniers", "mariners",
- "marraige", "marriage",
- "marryied", "married",
- "marskman", "marksman",
- "maruader", "marauder",
- "marvelos", "marvelous",
- "marxisim", "marxism",
- "mascarra", "mascara",
- "massacer", "massacre",
- "massarce", "massacre",
- "massasge", "massages",
- "masscare", "massacre",
- "masteris", "masteries",
- "masturbe", "masturbate",
- "materias", "materials",
- "mathcups", "matchups",
- "mathewes", "mathews",
- "matieral", "material",
- "matterss", "mattress",
- "mauarder", "marauder",
- "maximini", "maximizing",
- "mayalsia", "malaysia",
- "maybelle", "maybelline",
- "maylasia", "malaysia",
- "mccarhty", "mccarthy",
- "mcgergor", "mcgregor",
- "mchanics", "mechanics",
- "mclarean", "mclaren",
- "mcreggor", "mcgregor",
- "meagtron", "megatron",
- "meancing", "menacing",
- "meaninng", "meaning",
- "meatbals", "meatballs",
- "mecahnic", "mechanic",
- "mechanim", "mechanism",
- "mechanis", "mechanics",
- "medacine", "medicine",
- "medatite", "meditate",
- "medeival", "medieval",
- "medevial", "medieval",
- "mediavel", "medieval",
- "medicaly", "medically",
- "mediciad", "medicaid",
- "medicins", "medicines",
- "medicore", "mediocre",
- "medievel", "medieval",
- "mediocer", "mediocre",
- "mediocry", "mediocrity",
- "mediorce", "mediocre",
- "meditato", "meditation",
- "mediveal", "medieval",
- "medoicre", "mediocre",
- "meerkrat", "meerkat",
- "megatorn", "megatron",
- "meidcare", "medicare",
- "meixcans", "mexicans",
- "melboure", "melbourne",
- "meltodwn", "meltdown",
- "memoriez", "memorize",
- "mencaing", "menacing",
- "menstrul", "menstrual",
- "mentiong", "mentioning",
- "meoldies", "melodies",
- "merchans", "merchants",
- "mercurcy", "mercury",
- "mercurey", "mercury",
- "merficul", "merciful",
- "merhcant", "merchant",
- "mericful", "merciful",
- "messgaed", "messaged",
- "messiach", "messiah",
- "metagaem", "metagame",
- "metahpor", "metaphor",
- "metamage", "metagame",
- "methapor", "metaphor",
- "metldown", "meltdown",
- "metricas", "metrics",
- "metrices", "metrics",
- "metropos", "metropolis",
- "mexcians", "mexicans",
- "mexicain", "mexican",
- "mhytical", "mythical",
- "michagan", "michigan",
- "michgian", "michigan",
- "microtax", "microatx",
- "microwae", "microwaves",
- "midfeild", "midfield",
- "midfiled", "midfield",
- "midifeld", "midfield",
- "migrains", "migraines",
- "migriane", "migraine",
- "milennia", "millennia",
- "miligram", "milligram",
- "miliitas", "militias",
- "miliraty", "military",
- "militais", "militias",
- "millenia", "millennia",
- "millenna", "millennia",
- "miltiant", "militant",
- "minature", "miniature",
- "mindcrak", "mindcrack",
- "minerial", "mineral",
- "mingiame", "minigame",
- "minimage", "minigame",
- "minimals", "minimalist",
- "minimalt", "minimalist",
- "minimini", "minimizing",
- "minimium", "minimum",
- "miniscue", "miniscule",
- "minsiter", "minister",
- "minsitry", "ministry",
- "miraculu", "miraculous",
- "miralces", "miracles",
- "mircales", "miracles",
- "mircoatx", "microatx",
- "mirgaine", "migraine",
- "mirorred", "mirrored",
- "misnadry", "misandry",
- "misogynt", "misogynist",
- "missigno", "mission",
- "missiony", "missionary",
- "misslies", "missiles",
- "missorui", "missouri",
- "misspeld", "misspelled",
- "mistakey", "mistakenly",
- "mistread", "mistreated",
- "mobiltiy", "mobility",
- "moderats", "moderates",
- "modulair", "modular",
- "moleculs", "molecules",
- "momentos", "moments",
- "momentus", "moments",
- "monagomy", "monogamy",
- "mongoles", "mongols",
- "mongolos", "mongols",
- "monitord", "monitored",
- "monogmay", "monogamy",
- "monolite", "monolithic",
- "monologe", "monologue",
- "monolopy", "monopoly",
- "monoploy", "monopoly",
- "monopols", "monopolies",
- "monrachy", "monarchy",
- "monstros", "monstrous",
- "montaban", "montana",
- "montains", "mountains",
- "montanha", "montana",
- "montania", "montana",
- "montanna", "montana",
- "montanta", "montana",
- "montanya", "montana",
- "montaran", "montana",
- "monteize", "monetize",
- "monteral", "montreal",
- "montiors", "monitors",
- "montnana", "montana",
- "montypic", "monotypic",
- "monumnet", "monument",
- "moonligt", "moonlight",
- "moprhine", "morphine",
- "morbildy", "morbidly",
- "mordibly", "morbidly",
- "morevoer", "moreover",
- "morhpine", "morphine",
- "moribdly", "morbidly",
- "mormones", "mormons",
- "mormonts", "mormons",
- "moroever", "moreover",
- "morotola", "motorola",
- "morphein", "morphine",
- "morriosn", "morrison",
- "morrocco", "morocco",
- "morrsion", "morrison",
- "mortards", "mortars",
- "mortarts", "mortars",
- "moruning", "mourning",
- "mosnters", "monsters",
- "mosqueto", "mosquitoes",
- "mosquite", "mosquitoes",
- "mosqutio", "mosquito",
- "motoroal", "motorola",
- "mounment", "monument",
- "mounring", "mourning",
- "mountian", "mountain",
- "moustace", "moustache",
- "movesped", "movespeed",
- "mozillia", "mozilla",
- "mozillla", "mozilla",
- "msytical", "mystical",
- "mucnhies", "munchies",
- "mudering", "murdering",
- "muffings", "muffins",
- "muffinus", "muffins",
- "mulitple", "multiple",
- "mulitply", "multiply",
- "multiplr", "multiplier",
- "multipls", "multiples",
- "mundance", "mundane",
- "mundande", "mundane",
- "muniches", "munchies",
- "murderes", "murders",
- "murderus", "murders",
- "muscluar", "muscular",
- "muscualr", "muscular",
- "musicaly", "musically",
- "musuclar", "muscular",
- "mutliple", "multiple",
- "mutliply", "multiply",
- "myhtical", "mythical",
- "mysitcal", "mystical",
- "mysogyny", "misogyny",
- "mysteris", "mysteries",
- "mythraic", "mithraic",
- "nagivate", "navigate",
- "naopleon", "napoleon",
- "napcakes", "pancakes",
- "naploeon", "napoleon",
- "napoelon", "napoleon",
- "napolean", "napoleon",
- "napoloen", "napoleon",
- "narcissm", "narcissism",
- "narcisst", "narcissist",
- "narcotis", "narcotics",
- "narwharl", "narwhal",
- "naseuous", "nauseous",
- "nashvile", "nashville",
- "nasueous", "nauseous",
- "natievly", "natively",
- "nationas", "nationals",
- "nationsl", "nationals",
- "nativley", "natively",
- "natuilus", "nautilus",
- "naturaly", "naturally",
- "naturels", "natures",
- "naturely", "naturally",
- "naturens", "natures",
- "naturual", "natural",
- "nauesous", "nauseous",
- "naughtly", "naughty",
- "nauitlus", "nautilus",
- "nauseuos", "nauseous",
- "nautiuls", "nautilus",
- "nautlius", "nautilus",
- "nautulis", "nautilus",
- "naviagte", "navigate",
- "navigato", "navigation",
- "nazereth", "nazareth",
- "necesary", "necessary",
- "neckbead", "neckbeard",
- "needlees", "needles",
- "nefarios", "nefarious",
- "negativy", "negativity",
- "neglectn", "neglecting",
- "neglible", "negligible",
- "neigbour", "neighbour",
- "neolitic", "neolithic",
- "netboook", "netbook",
- "neuronas", "neurons",
- "neutraal", "neutral",
- "neutralt", "neutrality",
- "neutraly", "neutrality",
- "newcaste", "newcastle",
- "nickanme", "nickname",
- "nickmane", "nickname",
- "nieghbor", "neighbor",
- "nightime", "nighttime",
- "nightley", "nightly",
- "nightlie", "nightlife",
- "nihilsim", "nihilism",
- "nilihism", "nihilism",
- "nirtogen", "nitrogen",
- "nirvanna", "nirvana",
- "nitorgen", "nitrogen",
- "niusance", "nuisance",
- "noctrune", "nocturne",
- "noctunre", "nocturne",
- "nocturen", "nocturne",
- "nominato", "nomination",
- "nonsence", "nonsense",
- "nonsesne", "nonsense",
- "noramlly", "normally",
- "norhtern", "northern",
- "normalis", "normals",
- "normalls", "normals",
- "normalos", "normals",
- "northeat", "northeast",
- "northren", "northern",
- "northwet", "northwest",
- "norwegin", "norwegian",
- "nostalga", "nostalgia",
- "nostirls", "nostrils",
- "notabley", "notably",
- "notablly", "notably",
- "noteable", "notable",
- "noteably", "notably",
- "noticabe", "noticable",
- "notorios", "notorious",
- "novmeber", "november",
- "nromandy", "normandy",
- "nuatilus", "nautilus",
- "nuculear", "nuclear",
- "nuetered", "neutered",
- "nuisanse", "nuisance",
- "nullifiy", "nullify",
- "nurtient", "nutrient",
- "nusaince", "nuisance",
- "nusiance", "nuisance",
- "nutirent", "nutrient",
- "nutriens", "nutrients",
- "nuturing", "nurturing",
- "obdisian", "obsidian",
- "obediant", "obedient",
- "obession", "obsession",
- "obilvion", "oblivion",
- "obisdian", "obsidian",
- "obsessie", "obsessive",
- "obsessin", "obsession",
- "obsidain", "obsidian",
- "obstacal", "obstacle",
- "obvilion", "oblivion",
- "ocasions", "occasions",
- "ocassion", "occasion",
- "occaison", "occasion",
- "occupato", "occupation",
- "occuring", "occurring",
- "octobear", "october",
- "octopuns", "octopus",
- "ofcoruse", "ofcourse",
- "ofcoures", "ofcourse",
- "ofcousre", "ofcourse",
- "ofcrouse", "ofcourse",
- "officals", "officials",
- "officaly", "officially",
- "offsited", "offside",
- "ofocurse", "ofcourse",
- "oligarcy", "oligarchy",
- "olmypics", "olympics",
- "olymipcs", "olympics",
- "olypmics", "olympics",
- "ommision", "omission",
- "ommiting", "omitting",
- "ommitted", "omitted",
- "ongewild", "gonewild",
- "onslaugt", "onslaught",
- "operatie", "operative",
- "opinoins", "opinions",
- "oppinion", "opinion",
- "opponant", "opponent",
- "opposits", "opposites",
- "oppossed", "opposed",
- "oppresso", "oppression",
- "optimaal", "optimal",
- "optomism", "optimism",
- "oragnise", "organise",
- "orangerd", "orangered",
- "orangers", "oranges",
- "orangism", "organism",
- "orchesta", "orchestra",
- "ordianry", "ordinary",
- "oreintal", "oriental",
- "orgainse", "organise",
- "orgainze", "organize",
- "organims", "organism",
- "organsie", "organise",
- "organsim", "organism",
- "organzie", "organize",
- "orgasmes", "orgasms",
- "orgasmos", "orgasms",
- "orgasmus", "orgasms",
- "orginize", "organise",
- "orhtodox", "orthodox",
- "oridnary", "ordinary",
- "originas", "origins",
- "origines", "origins",
- "originsl", "originals",
- "orphanes", "orphans",
- "osbidian", "obsidian",
- "othrodox", "orthodox",
- "ourselvs", "ourselves",
- "oustider", "outsider",
- "outfeild", "outfield",
- "outfidel", "outfield",
- "outfiled", "outfield",
- "outisder", "outsider",
- "outplayd", "outplayed",
- "outputed", "outputted",
- "outsoure", "outsourced",
- "overboad", "overboard",
- "overclok", "overclock",
- "overdrev", "overdrive",
- "overhual", "overhaul",
- "overlaod", "overload",
- "overpiad", "overpaid",
- "overules", "overuse",
- "overwath", "overwatch",
- "overwhem", "overwhelm",
- "oximoron", "oxymoron",
- "oylmpics", "olympics",
- "pacakged", "packaged",
- "packadge", "packaged",
- "paficist", "pacifist",
- "painfuly", "painfully",
- "paitence", "patience",
- "paitents", "patients",
- "palidans", "paladins",
- "palstics", "plastics",
- "paltform", "platform",
- "paltinum", "platinum",
- "palyable", "playable",
- "palyoffs", "playoffs",
- "pancaeks", "pancakes",
- "panckaes", "pancakes",
- "pandoria", "pandora",
- "pandorra", "pandora",
- "panedmic", "pandemic",
- "panethon", "pantheon",
- "pankaces", "pancakes",
- "panmedic", "pandemic",
- "pantehon", "pantheon",
- "panthoen", "pantheon",
- "paradies", "paradise",
- "paradyse", "parades",
- "paragrah", "paragraph",
- "paraiste", "parasite",
- "paralell", "parallel",
- "paralely", "parallelly",
- "paralles", "parallels",
- "parameds", "paramedics",
- "paramter", "parameter",
- "paranioa", "paranoia",
- "paraniod", "paranoid",
- "paraside", "paradise",
- "parasits", "parasites",
- "parastie", "parasite",
- "parctise", "practise",
- "paremsan", "parmesan",
- "paristan", "partisan",
- "parmasen", "parmesan",
- "parmenas", "parmesan",
- "parmsean", "parmesan",
- "parnters", "partners",
- "parralel", "parallel",
- "parterns", "partners",
- "partialy", "partially",
- "partians", "partisan",
- "partical", "particular",
- "particel", "particle",
- "partiets", "parties",
- "partiots", "patriots",
- "partnerd", "partnered",
- "partsian", "partisan",
- "passabel", "passable",
- "passione", "passionate",
- "passisve", "passives",
- "passpost", "passports",
- "passvies", "passives",
- "passwors", "passwords",
- "pasttime", "pastime",
- "pastural", "pastoral",
- "pateince", "patience",
- "pateints", "patients",
- "patethic", "pathetic",
- "patheitc", "pathetic",
- "patienty", "patiently",
- "patirots", "patriots",
- "patriarh", "patriarchy",
- "patroits", "patriots",
- "patrolls", "patrols",
- "patronas", "patrons",
- "patrones", "patrons",
- "patronis", "patrons",
- "patronos", "patrons",
- "pattened", "patented",
- "patterno", "patterson",
- "pattersn", "patterson",
- "pblisher", "publisher",
- "peageant", "pageant",
- "pebbleos", "pebbles",
- "pebblers", "pebbles",
- "pebblets", "pebbles",
- "peciluar", "peculiar",
- "pecuilar", "peculiar",
- "peculair", "peculiar",
- "peculure", "peculiar",
- "peformed", "performed",
- "peircing", "piercing",
- "penaltis", "penalties",
- "penatgon", "pentagon",
- "penciles", "pencils",
- "pendatic", "pedantic",
- "pengiuns", "penguins",
- "penisula", "peninsula",
- "pensioen", "pension",
- "pepperin", "pepperoni",
- "perceded", "preceded",
- "percente", "percentile",
- "percieve", "perceive",
- "percious", "precious",
- "perclude", "preclude",
- "perfecty", "perfectly",
- "perfroms", "performs",
- "perheaps", "perhaps",
- "pericing", "piercing",
- "peridoic", "periodic",
- "perimetr", "perimeter",
- "periodes", "periods",
- "periodos", "periods",
- "permanet", "permanent",
- "permiere", "premiere",
- "permises", "premises",
- "permitas", "permits",
- "permites", "permits",
- "permitis", "permits",
- "permitts", "permits",
- "permiums", "premiums",
- "peroidic", "periodic",
- "perosnas", "personas",
- "perpetue", "perpetuate",
- "persaude", "persuade",
- "perserve", "preserve",
- "persisit", "persist",
- "personel", "personnel",
- "persones", "persons",
- "personis", "persons",
- "personsa", "personas",
- "perstige", "prestige",
- "persuaso", "persuasion",
- "persuded", "persuaded",
- "persuing", "pursuing",
- "persuits", "pursuits",
- "persumed", "presumed",
- "pertaing", "pertaining",
- "pertians", "pertains",
- "pertinet", "pertinent",
- "pervents", "prevents",
- "perverst", "pervert",
- "perviews", "previews",
- "pervious", "previous",
- "perxoide", "peroxide",
- "pessiary", "pessary",
- "petetion", "petition",
- "petrolem", "petroleum",
- "phantoom", "phantom",
- "pharamcy", "pharmacy",
- "pharmacs", "pharmacist",
- "pharmsci", "pharmacist",
- "phenomon", "phenomenon",
- "phramacy", "pharmacy",
- "phsyical", "physical",
- "phsyique", "physique",
- "phyiscal", "physical",
- "phyisque", "physique",
- "physcial", "physical",
- "physicis", "physicians",
- "physicks", "physics",
- "physicts", "physicist",
- "physqiue", "physique",
- "picthers", "pitchers",
- "pillards", "pillars",
- "pillaris", "pillars",
- "pinancle", "pinnacle",
- "pinapple", "pineapple",
- "pinnalce", "pinnacle",
- "pinnaple", "pineapple",
- "pinncale", "pinnacle",
- "pinpiont", "pinpoint",
- "pinteret", "pinterest",
- "piolting", "piloting",
- "pioneeer", "pioneer",
- "pithcers", "pitchers",
- "placebro", "placebo",
- "placemet", "placements",
- "planetas", "planets",
- "planetos", "planets",
- "plantiff", "plaintiff",
- "plantium", "platinum",
- "plasitcs", "plastics",
- "platfrom", "platform",
- "platimun", "platinum",
- "platnium", "platinum",
- "platnuim", "platinum",
- "plausibe", "plausible",
- "playbody", "playboy",
- "playstye", "playstyle",
- "pleasent", "pleasant",
- "plehtora", "plethora",
- "pleothra", "plethora",
- "plethroa", "plethora",
- "ploygamy", "polygamy",
- "pnatheon", "pantheon",
- "poeoples", "peoples",
- "poingant", "poignant",
- "pointeur", "pointer",
- "pointure", "pointer",
- "poisones", "poisons",
- "poisonis", "poisons",
- "poisonos", "poisons",
- "poisonus", "poisons",
- "polgyamy", "polygamy",
- "polietly", "politely",
- "politing", "piloting",
- "politley", "politely",
- "poltical", "political",
- "poluting", "polluting",
- "polution", "pollution",
- "polygoon", "polygon",
- "polymore", "polymer",
- "pomotion", "promotion",
- "popoulus", "populous",
- "populair", "popular",
- "populare", "popular",
- "populary", "popularity",
- "porcelan", "porcelain",
- "porposes", "proposes",
- "portabel", "portable",
- "portalis", "portals",
- "portalus", "portals",
- "portayed", "portrayed",
- "portgual", "portugal",
- "portrais", "portraits",
- "portrary", "portray",
- "portrayl", "portrayal",
- "portriat", "portrait",
- "posessed", "possessed",
- "posesses", "possesses",
- "posioned", "poisoned",
- "positivs", "positives",
- "positivy", "positivity",
- "possable", "possible",
- "possably", "possibly",
- "possbily", "possibly",
- "posseses", "possesses",
- "possesse", "possessive",
- "possesss", "possesses",
- "potrayed", "portrayed",
- "poverful", "powerful",
- "powerded", "powdered",
- "powerpot", "powerpoint",
- "pracitse", "practise",
- "practial", "practical",
- "practies", "practise",
- "pratcise", "practise",
- "praticle", "particle",
- "prceeded", "preceded",
- "preadtor", "predator",
- "preample", "preamble",
- "preceeds", "precedes",
- "precisie", "precise",
- "precisly", "precisely",
- "precisou", "precious",
- "preculde", "preclude",
- "predicat", "predict",
- "predicte", "predictive",
- "preferas", "prefers",
- "prefered", "preferred",
- "preferes", "prefers",
- "preferis", "prefers",
- "preferrs", "prefers",
- "preimere", "premiere",
- "preimums", "premiums",
- "preiodic", "periodic",
- "preivews", "previews",
- "prejudis", "prejudices",
- "prelayed", "replayed",
- "premeire", "premiere",
- "premesis", "premises",
- "premiare", "premier",
- "premines", "premise",
- "premuims", "premiums",
- "preorded", "preordered",
- "preordes", "preorders",
- "preoxide", "peroxide",
- "prepaird", "prepaid",
- "preqeuls", "prequels",
- "prequles", "prequels",
- "prescrie", "prescribed",
- "presense", "presence",
- "presenst", "presets",
- "presidet", "presidents",
- "presists", "persists",
- "presitge", "prestige",
- "presonas", "personas",
- "presuade", "persuade",
- "pretador", "predator",
- "pretains", "pertains",
- "preveiws", "previews",
- "preverse", "perverse",
- "previwes", "previews",
- "pricipal", "principal",
- "priciple", "principle",
- "priemere", "premiere",
- "priestes", "priests",
- "primaris", "primaries",
- "primarly", "primarily",
- "princila", "principals",
- "principl", "principals",
- "prisitne", "pristine",
- "probelms", "problems",
- "probleem", "problem",
- "procalim", "proclaim",
- "proccess", "process",
- "proceded", "proceeded",
- "proceder", "procedure",
- "procedes", "proceeds",
- "procedue", "procedure",
- "proceeed", "proceed",
- "procesed", "proceeds",
- "processs", "processes",
- "proclami", "proclaim",
- "procliam", "proclaim",
- "procotol", "protocol",
- "prodcuts", "products",
- "producto", "production",
- "profesor", "professor",
- "proficit", "proficient",
- "profilic", "prolific",
- "progroms", "pogroms",
- "prohibis", "prohibits",
- "prohpecy", "prophecy",
- "prohpets", "prophets",
- "projecte", "projectile",
- "projecto", "projection",
- "prolouge", "prologue",
- "promplty", "promptly",
- "promptes", "prompts",
- "promptus", "prompts",
- "promtply", "promptly",
- "pronoune", "pronounced",
- "propechy", "prophecy",
- "propehcy", "prophecy",
- "propehts", "prophets",
- "prophacy", "prophecy",
- "propmted", "prompted",
- "propmtly", "promptly",
- "proponet", "proponents",
- "proposse", "proposes",
- "proposte", "propose",
- "proprety", "property",
- "propsect", "prospect",
- "prosepct", "prospect",
- "prostite", "prostitute",
- "protable", "portable",
- "protecte", "protective",
- "protiens", "proteins",
- "protines", "proteins",
- "protocal", "protocol",
- "prototye", "prototype",
- "protrait", "portrait",
- "protrays", "portrays",
- "protugal", "portugal",
- "proverai", "proverbial",
- "providee", "providence",
- "proximty", "proximity",
- "pruchase", "purchase",
- "pryamids", "pyramids",
- "ptichers", "pitchers",
- "pubisher", "publisher",
- "publiser", "publisher",
- "puinsher", "punisher",
- "pulisher", "publisher",
- "pumkpins", "pumpkins",
- "pumpinks", "pumpkins",
- "pumpknis", "pumpkins",
- "punshier", "punisher",
- "punsiher", "punisher",
- "punsihes", "punishes",
- "purcahse", "purchase",
- "pyramind", "pyramid",
- "pyrimads", "pyramids",
- "pyrmaids", "pyramids",
- "qauntity", "quantity",
- "qualifiy", "qualify",
- "quanitfy", "quantify",
- "quantaty", "quantity",
- "quantite", "quantities",
- "quantuum", "quantum",
- "quarante", "quarantine",
- "quartery", "quarterly",
- "qucikest", "quickest",
- "queation", "equation",
- "quention", "quentin",
- "quickets", "quickest",
- "quicklyu", "quickly",
- "rabbitos", "rabbits",
- "rabbitts", "rabbits",
- "racistas", "racists",
- "racistes", "racists",
- "radaince", "radiance",
- "rahpsody", "rhapsody",
- "raidance", "radiance",
- "railraod", "railroad",
- "randomes", "randoms",
- "randomez", "randomized",
- "randomns", "randoms",
- "randomrs", "randoms",
- "randomus", "randoms",
- "raosting", "roasting",
- "raphsody", "rhapsody",
- "raptores", "raptors",
- "raspbery", "raspberry",
- "rationel", "rationale",
- "realible", "reliable",
- "realibly", "reliably",
- "realiest", "earliest",
- "realisim", "realism",
- "realisme", "realise",
- "realistc", "realistic",
- "realiste", "realise",
- "realoded", "reloaded",
- "realsied", "realised",
- "realtion", "relation",
- "realtive", "relative",
- "reamined", "remained",
- "reapired", "repaired",
- "reaplugs", "earplugs",
- "reaserch", "research",
- "reasonal", "reasonably",
- "reatiler", "retailer",
- "reaveled", "revealed",
- "rebellis", "rebellious",
- "reboudns", "rebounds",
- "rebounce", "rebound",
- "rebuildt", "rebuilt",
- "rebuplic", "republic",
- "receeded", "receded",
- "recepits", "receipts",
- "receptie", "receptive",
- "receptos", "receptors",
- "receving", "receiving",
- "recident", "resident",
- "reciding", "residing",
- "recieved", "received",
- "reciever", "receiver",
- "recieves", "receives",
- "recipees", "recipes",
- "recipets", "recipes",
- "recogise", "recognise",
- "recogize", "recognize",
- "recognie", "recognizes",
- "recomend", "recommend",
- "recommed", "recommend",
- "reconnet", "reconnect",
- "rectange", "rectangle",
- "rectifiy", "rectify",
- "recuring", "recurring",
- "recurits", "recruits",
- "redeisgn", "redesign",
- "redemeed", "redeemed",
- "redesgin", "redesign",
- "redesing", "redesign",
- "reedemed", "redeemed",
- "refeeres", "referees",
- "refelcts", "reflects",
- "refelxes", "reflexes",
- "referede", "referee",
- "referene", "referee",
- "referens", "references",
- "referere", "referee",
- "referign", "refering",
- "refering", "referring",
- "refernce", "references",
- "reffered", "referred",
- "refilles", "refills",
- "refillls", "refills",
- "reflecte", "reflective",
- "reflecto", "reflection",
- "reformes", "reforms",
- "refreing", "refering",
- "refrence", "reference",
- "refreshd", "refreshed",
- "refreshr", "refresher",
- "refromed", "reformed",
- "regardes", "regards",
- "regenade", "renegade",
- "regenere", "regenerate",
- "regiones", "regions",
- "regisrty", "registry",
- "registed", "registered",
- "regresas", "regress",
- "regreses", "regress",
- "regresos", "regress",
- "regresse", "regressive",
- "regresso", "regression",
- "regrests", "regress",
- "regretts", "regrets",
- "regsitry", "registry",
- "regualrs", "regulars",
- "regualte", "regulate",
- "reguarly", "regularly",
- "regulary", "regularly",
- "regulatr", "regulator",
- "regulats", "regulators",
- "rehersal", "rehearsal",
- "rehtoric", "rhetoric",
- "reiceved", "recieved",
- "reigment", "regiment",
- "reigonal", "regional",
- "rekenton", "renekton",
- "relaible", "reliable",
- "relaibly", "reliably",
- "relaised", "realised",
- "relaoded", "reloaded",
- "relasped", "relapsed",
- "relatabe", "relatable",
- "relateds", "relates",
- "relativy", "relativity",
- "relavent", "relevant",
- "relected", "reelected",
- "relegato", "relegation",
- "releived", "relieved",
- "releiver", "reliever",
- "relevent", "relevant",
- "relfects", "reflects",
- "relfexes", "reflexes",
- "reliased", "realised",
- "religous", "religious",
- "relpased", "relapsed",
- "remainds", "remains",
- "remainig", "remaining",
- "remannts", "remnants",
- "remarkes", "remarks",
- "remembed", "remembered",
- "remembee", "remembered",
- "rememebr", "remember",
- "remenant", "remnant",
- "reminent", "remnant",
- "remmeber", "remember",
- "remotley", "remotely",
- "renderes", "renders",
- "reneagde", "renegade",
- "renetkon", "renekton",
- "renewabe", "renewables",
- "renketon", "renekton",
- "renmants", "remnants",
- "renoylds", "reynolds",
- "renteris", "renters",
- "renyolds", "reynolds",
- "reowrked", "reworked",
- "repaires", "repairs",
- "repalces", "replaces",
- "reparied", "repaired",
- "repblics", "republics",
- "repbulic", "republic",
- "repeatae", "repeatable",
- "repeates", "repeats",
- "repetion", "repetition",
- "repharse", "rephrase",
- "repitles", "reptiles",
- "replased", "relapsed",
- "replayes", "replays",
- "replicae", "replicated",
- "replubic", "republic",
- "reportes", "reporters",
- "reposity", "repository",
- "repostas", "reposts",
- "repostes", "reposts",
- "repostig", "reposting",
- "repostus", "reposts",
- "represet", "represents",
- "represso", "repression",
- "reprhase", "rephrase",
- "repsects", "respects",
- "repsonds", "responds",
- "repsonse", "response",
- "repsoted", "reposted",
- "repubics", "republics",
- "republis", "republics",
- "repulics", "republics",
- "repulsie", "repulsive",
- "requiers", "requires",
- "requieum", "requiem",
- "requilme", "requiem",
- "requried", "required",
- "requries", "requires",
- "rescuecd", "rescued",
- "researce", "researcher",
- "resembes", "resembles",
- "reserach", "research",
- "resevoir", "reservoir",
- "resgined", "resigned",
- "residude", "residue",
- "residule", "residue",
- "resinged", "resigned",
- "resistas", "resists",
- "resisten", "resistance",
- "resistes", "resists",
- "resloved", "resolved",
- "resloves", "resolves",
- "resmeble", "resemble",
- "resotred", "restored",
- "resourse", "resources",
- "resovled", "resolved",
- "resovles", "resolves",
- "respecte", "respective",
- "respesct", "respects",
- "responce", "response",
- "responed", "respond",
- "respones", "response",
- "responsd", "responds",
- "respoted", "reposted",
- "restanti", "restarting",
- "restrait", "restraint",
- "restrics", "restricts",
- "resuable", "reusable",
- "retailes", "retailers",
- "retalier", "retailer",
- "rethoric", "rhetoric",
- "retirase", "retires",
- "retireds", "retires",
- "retireus", "retires",
- "retireve", "retrieve",
- "retreive", "retrieve",
- "retrived", "retrieved",
- "retunred", "returned",
- "reuasble", "reusable",
- "reveales", "reveals",
- "reveiwed", "reviewed",
- "reveiwer", "reviewer",
- "revelaed", "revealed",
- "revelant", "relevant",
- "revelead", "revealed",
- "reverals", "reversal",
- "reviewes", "reviewers",
- "revlover", "revolver",
- "revloves", "revolves",
- "revovler", "revolver",
- "revovles", "revolves",
- "rewatchd", "rewatched",
- "rewitten", "rewritten",
- "rewritte", "rewrite",
- "rewtched", "wretched",
- "reynlods", "reynolds",
- "reyonlds", "reynolds",
- "rhaposdy", "rhapsody",
- "rhaspody", "rhapsody",
- "rheotric", "rhetoric",
- "righteos", "righteous",
- "rigntone", "ringtone",
- "ringotne", "ringtone",
- "ritalian", "ritalin",
- "rivalrly", "rivalry",
- "roachers", "roaches",
- "robberts", "robbers",
- "robberys", "robbers",
- "robocoop", "robocop",
- "robocorp", "robocop",
- "robocoup", "robocop",
- "roelplay", "roleplay",
- "roganism", "organism",
- "rolepaly", "roleplay",
- "romaanin", "romanian",
- "romainan", "romanian",
- "romanain", "romanian",
- "romanica", "romania",
- "rosettta", "rosetta",
- "rostaing", "roasting",
- "routeros", "routers",
- "rutgerus", "rutgers",
- "ryenolds", "reynolds",
- "sacrifie", "sacrifice",
- "saddends", "saddens",
- "saddenes", "saddens",
- "sadisitc", "sadistic",
- "salaires", "salaries",
- "sandales", "sandals",
- "sandalls", "sandals",
- "sandstom", "sandstorm",
- "sanotrum", "santorum",
- "santourm", "santorum",
- "santroum", "santorum",
- "santurom", "santorum",
- "sapcebar", "spacebar",
- "sapphrie", "sapphire",
- "sarcasam", "sarcasm",
- "sarcasim", "sarcasm",
- "sarcastc", "sarcastic",
- "sargeant", "sergeant",
- "sasauges", "sausages",
- "sasuages", "sausages",
- "satelite", "satellite",
- "satellie", "satellites",
- "saterday", "saturday",
- "satifies", "satisfies",
- "satisfiy", "satisfy",
- "satrical", "satirical",
- "satruday", "saturday",
- "saturdsy", "saturdays",
- "sawstika", "swastika",
- "scandlas", "scandals",
- "scannign", "scanning",
- "scarmble", "scramble",
- "scepture", "scepter",
- "schedual", "schedule",
- "schoalrs", "scholars",
- "scholary", "scholarly",
- "schoodle", "schooled",
- "scientic", "scientific",
- "scientis", "scientist",
- "scoprion", "scorpion",
- "scorates", "socrates",
- "scoripon", "scorpion",
- "scorpoin", "scorpion",
- "scostman", "scotsman",
- "scratchs", "scratches",
- "scriptue", "scriptures",
- "scriptus", "scripts",
- "scritped", "scripted",
- "scroates", "socrates",
- "scropion", "scorpion",
- "scrpited", "scripted",
- "scruitny", "scrutiny",
- "scrunity", "scrutiny",
- "sctosman", "scotsman",
- "sculpter", "sculpture",
- "scurtiny", "scrutiny",
- "seahakws", "seahawks",
- "seahwaks", "seahawks",
- "seantors", "senators",
- "sebastin", "sebastian",
- "seceeded", "succeeded",
- "secertly", "secretly",
- "secrelty", "secretly",
- "secretas", "secrets",
- "secretos", "secrets",
- "secruity", "security",
- "secuirty", "security",
- "sedereal", "sidereal",
- "seldomly", "seldom",
- "selectie", "selective",
- "selfiers", "selfies",
- "semestre", "semester",
- "semseter", "semester",
- "senarios", "scenarios",
- "senerity", "serenity",
- "seniores", "seniors",
- "senisble", "sensible",
- "sensibel", "sensible",
- "sensores", "sensors",
- "senstive", "sensitive",
- "sentaors", "senators",
- "sentiers", "sentries",
- "sentinet", "sentient",
- "sentinte", "sentient",
- "sentires", "sentries",
- "sentreis", "sentries",
- "separato", "separation",
- "separete", "seperate",
- "sepearte", "seperate",
- "seperate", "separate",
- "seplling", "spelling",
- "sepreate", "seperate",
- "sepulcre", "sepulchre",
- "serached", "searched",
- "seraches", "searches",
- "serentiy", "serenity",
- "sergaent", "sergeant",
- "settigns", "settings",
- "settting", "setting",
- "seventen", "seventeen",
- "severeal", "several",
- "severeid", "severed",
- "severide", "severed",
- "severley", "severely",
- "sexaully", "sexually",
- "seziures", "seizures",
- "sezuires", "seizures",
- "shadoloo", "shadaloo",
- "shangahi", "shanghai",
- "shanghia", "shanghai",
- "sharplay", "sharply",
- "sharpley", "sharply",
- "shawshak", "shawshank",
- "shcolars", "scholars",
- "shcooled", "schooled",
- "sheilded", "shielded",
- "shelterd", "sheltered",
- "shelvers", "shelves",
- "shelveys", "shelves",
- "sherlcok", "sherlock",
- "shetlers", "shelters",
- "shfiting", "shifting",
- "shifitng", "shifting",
- "shifteer", "shifter",
- "shileded", "shielded",
- "shineing", "shining",
- "shitstom", "shitstorm",
- "shittoon", "shitton",
- "shittown", "shitton",
- "shleters", "shelters",
- "shnaghai", "shanghai",
- "shortend", "shortened",
- "shotuout", "shoutout",
- "shoudlnt", "shouldnt",
- "shouldes", "shoulders",
- "shoulndt", "shouldnt",
- "shrapenl", "shrapnel",
- "shrelock", "sherlock",
- "shrinked", "shrunk",
- "shrpanel", "shrapnel",
- "shtiless", "shitless",
- "shuoldnt", "shouldnt",
- "sideboad", "sideboard",
- "sidleine", "sideline",
- "siezable", "sizeable",
- "siezures", "seizures",
- "signatue", "signatures",
- "signfies", "signifies",
- "signifiy", "signify",
- "signigns", "signings",
- "signular", "singular",
- "silbings", "siblings",
- "silicoln", "silicon",
- "silicoon", "silicon",
- "silimiar", "similiar",
- "simialir", "similiar",
- "simiilar", "similiar",
- "similair", "similar",
- "similari", "similiar",
- "similart", "similarity",
- "similary", "similarly",
- "similiar", "similar",
- "simliiar", "similiar",
- "simluate", "simulate",
- "simmilar", "similar",
- "simpelst", "simplest",
- "simplets", "simplest",
- "simplicy", "simplicity",
- "simplier", "simpler",
- "simulato", "simulation",
- "singlers", "singles",
- "singluar", "singular",
- "sinistre", "sinister",
- "sinsiter", "sinister",
- "sitckers", "stickers",
- "sitrring", "stirring",
- "sizebale", "sizeable",
- "skateing", "skating",
- "skecthes", "sketches",
- "skelatel", "skeletal",
- "skeletos", "skeletons",
- "sketchey", "sketchy",
- "sketpics", "skeptics",
- "skillsto", "skillshots",
- "skimrish", "skirmish",
- "skpetics", "skeptics",
- "skrimish", "skirmish",
- "skteches", "sketches",
- "skywalkr", "skywalker",
- "slaptoon", "splatoon",
- "slaverly", "slavery",
- "slienced", "silenced",
- "sliently", "silently",
- "slighlty", "slightly",
- "sligthly", "slightly",
- "smartare", "smarter",
- "snetries", "sentries",
- "snippent", "snippet",
- "snippert", "snippet",
- "snowbals", "snowballs",
- "snugglie", "snuggle",
- "snydrome", "syndrome",
- "snyopsis", "synopsis",
- "soberity", "sobriety",
- "sobreity", "sobriety",
- "socailly", "socially",
- "socalism", "socialism",
- "socartes", "socrates",
- "socialim", "socialism",
- "socities", "societies",
- "socttish", "scottish",
- "soemthin", "somethin",
- "soilders", "soldiers",
- "solatary", "solitary",
- "soldeirs", "soldiers",
- "soliders", "soldiers",
- "soluable", "soluble",
- "solutide", "solitude",
- "somalija", "somalia",
- "somehtin", "somethin",
- "someoens", "someones",
- "somethis", "somethings",
- "sometihn", "somethin",
- "sometinh", "somethin",
- "somoenes", "someones",
- "somtimes", "sometimes",
- "somwhere", "somewhere",
- "soparnos", "sopranos",
- "sophmore", "sophomore",
- "sorcercy", "sorcery",
- "sorcerey", "sorcery",
- "sorceror", "sorcerer",
- "sorcerry", "sorcery",
- "sorpanos", "sopranos",
- "southren", "southern",
- "soverein", "sovereign",
- "soverign", "sovereign",
- "sovietes", "soviets",
- "spagheti", "spaghetti",
- "spainish", "spanish",
- "spaltoon", "splatoon",
- "spammade", "spammed",
- "spammare", "spammer",
- "spammear", "spammer",
- "spammend", "spammed",
- "spammeur", "spammer",
- "spanisch", "spanish",
- "sparklie", "sparkle",
- "spawnign", "spawning",
- "specemin", "specimen",
- "speciaal", "special",
- "specialt", "specialist",
- "specialy", "specially",
- "specialz", "specialize",
- "specifed", "specified",
- "specifiy", "specify",
- "speciman", "specimen",
- "specrtal", "spectral",
- "speicals", "specials",
- "spellign", "spelling",
- "spendour", "splendour",
- "sphereos", "spheres",
- "spilnter", "splinter",
- "spiltter", "splitter",
- "spindrel", "spindle",
- "spirites", "spirits",
- "spiritis", "spirits",
- "spiritus", "spirits",
- "spirtied", "spirited",
- "spleling", "spelling",
- "splitner", "splinter",
- "spoilerd", "spoiled",
- "spoliers", "spoilers",
- "sponsord", "sponsored",
- "sporanos", "sopranos",
- "spotifiy", "spotify",
- "spotifty", "spotify",
- "sppeches", "speeches",
- "sprayade", "sprayed",
- "spreaded", "spread",
- "springst", "sprints",
- "sprinkel", "sprinkle",
- "sprintas", "sprints",
- "spritual", "spiritual",
- "sproutes", "sprouts",
- "spwaning", "spawning",
- "sqaudron", "squadron",
- "sqaurely", "squarely",
- "sqiurtle", "squirtle",
- "squardon", "squadron",
- "squareds", "squares",
- "squarley", "squarely",
- "squeakey", "squeaky",
- "squeakly", "squeaky",
- "squirlte", "squirtle",
- "squirrle", "squirrel",
- "squirtel", "squirtle",
- "squishey", "squishy",
- "squishly", "squishy",
- "squritle", "squirtle",
- "squrriel", "squirrel",
- "squrtile", "squirtle",
- "sriarcha", "sriracha",
- "srriacha", "sriracha",
- "sryacuse", "syracuse",
- "staduims", "stadiums",
- "staidums", "stadiums",
- "staklers", "stalkers",
- "stalekrs", "stalkers",
- "stalkear", "stalker",
- "staminia", "stamina",
- "stampade", "stamped",
- "stampeed", "stamped",
- "stancels", "stances",
- "stancers", "stances",
- "standars", "standards",
- "standbay", "standby",
- "standbuy", "standby",
- "stangant", "stagnant",
- "staright", "straight",
- "starined", "strained",
- "starlted", "startled",
- "startegy", "strategy",
- "starteld", "startled",
- "startsup", "startups",
- "stateman", "statesman",
- "staticts", "statist",
- "stationd", "stationed",
- "stationy", "stationary",
- "statiskt", "statist",
- "statistc", "statistic",
- "statment", "statement",
- "stattues", "statutes",
- "statuets", "statutes",
- "statuser", "stature",
- "staurday", "saturday",
- "steadliy", "steadily",
- "stealhty", "stealthy",
- "steathly", "stealthy",
- "stelathy", "stealthy",
- "sterilze", "sterile",
- "steriods", "steroids",
- "stichted", "stitched",
- "sticthed", "stitched",
- "sticthes", "stitches",
- "stimulai", "stimuli",
- "stimulas", "stimulants",
- "stimulat", "stimulants",
- "stimulli", "stimuli",
- "stingent", "stringent",
- "stirkers", "strikers",
- "stlakers", "stalkers",
- "stomache", "stomach",
- "stormade", "stormed",
- "stormend", "stormed",
- "stradegy", "strategy",
- "stragety", "strategy",
- "straignt", "straighten",
- "straigth", "straight",
- "straings", "strains",
- "strangel", "strangle",
- "stranget", "strangest",
- "stratgey", "strategy",
- "stratled", "startled",
- "streames", "streams",
- "streamos", "streams",
- "streamus", "streams",
- "streamys", "streams",
- "stregnth", "strength",
- "stremear", "streamer",
- "strenght", "strength",
- "strengts", "strengths",
- "strenous", "strenuous",
- "strentgh", "strength",
- "stretchs", "stretches",
- "striaght", "straight",
- "striclty", "strictly",
- "striekrs", "strikers",
- "strikely", "strikingly",
- "stringet", "stringent",
- "stubbron", "stubborn",
- "stubmled", "stumbled",
- "stucture", "structure",
- "studioes", "studios",
- "stuipder", "stupider",
- "stumbeld", "stumbled",
- "stupdily", "stupidly",
- "stupidiy", "stupidity",
- "stylisch", "stylish",
- "styrofom", "styrofoam",
- "suasages", "sausages",
- "subltety", "subtlety",
- "submarie", "submarines",
- "subruban", "suburban",
- "subscrie", "subscriber",
- "subsidie", "subsidized",
- "subsidiy", "subsidy",
- "substace", "substance",
- "substans", "substances",
- "substite", "substitute",
- "subtelty", "subtlety",
- "subtetly", "subtlety",
- "subtilte", "subtitle",
- "subtitel", "subtitle",
- "subtitls", "subtitles",
- "subtltey", "subtlety",
- "succeded", "succeeded",
- "succedes", "succeeds",
- "succeeed", "succeed",
- "succesed", "succeeds",
- "successs", "successes",
- "succsess", "success",
- "suceeded", "succeeded",
- "sucesful", "successful",
- "sucesion", "succession",
- "sucesses", "successes",
- "sucessor", "successor",
- "sucessot", "successor",
- "sucidial", "suicidal",
- "suddnely", "suddenly",
- "sufficit", "sufficient",
- "suggesst", "suggests",
- "suggeste", "suggestive",
- "summenor", "summoner",
- "summones", "summoners",
- "sunfiber", "sunfire",
- "sunscren", "sunscreen",
- "superham", "superhuman",
- "superheo", "superhero",
- "superios", "superiors",
- "supirsed", "suprised",
- "suposing", "supposing",
- "supporre", "supporters",
- "suppoted", "supported",
- "suprised", "surprised",
- "suprized", "surprised",
- "suprsied", "suprised",
- "supsects", "suspects",
- "supsense", "suspense",
- "surbuban", "suburban",
- "surounds", "surrounds",
- "surpases", "surpass",
- "surpress", "suppress",
- "surprize", "surprise",
- "surrouns", "surrounds",
- "surveill", "surveil",
- "surveyer", "surveyor",
- "surviver", "survivor",
- "suspened", "suspend",
- "suspenso", "suspension",
- "swaering", "swearing",
- "swansoon", "swanson",
- "swasitka", "swastika",
- "swaskita", "swastika",
- "swatiska", "swastika",
- "swatsika", "swastika",
- "swedisch", "swedish",
- "swiftley", "swiftly",
- "swithced", "switched",
- "swithces", "switches",
- "swtiched", "switched",
- "swtiches", "switches",
- "syarcuse", "syracuse",
- "sydnrome", "syndrome",
- "sylablle", "syllable",
- "syllabel", "syllable",
- "symapthy", "sympathy",
- "symboles", "symbols",
- "symhpony", "symphony",
- "symmerty", "symmetry",
- "symmtery", "symmetry",
- "symoblic", "symbolic",
- "symphaty", "sympathy",
- "symptoom", "symptom",
- "symtpoms", "symptoms",
- "synomyns", "synonyms",
- "synonmys", "synonyms",
- "synonomy", "synonym",
- "synoynms", "synonyms",
- "synphony", "symphony",
- "synposis", "synopsis",
- "sypmathy", "sympathy",
- "sypmtoms", "symptoms",
- "sypnosis", "synopsis",
- "syraucse", "syracuse",
- "syrcause", "syracuse",
- "syringae", "syringe",
- "syringue", "syringe",
- "sysamdin", "sysadmin",
- "sysdamin", "sysadmin",
- "tacticas", "tactics",
- "tacticts", "tactics",
- "tacticus", "tactics",
- "tagliate", "tailgate",
- "tahnkyou", "thankyou",
- "tailsman", "talisman",
- "taiwanee", "taiwanese",
- "taligate", "tailgate",
- "taliored", "tailored",
- "tallents", "tallest",
- "talsiman", "talisman",
- "tanturms", "tantrums",
- "tapitude", "aptitude",
- "tasliman", "talisman",
- "tattooes", "tattoos",
- "tattooos", "tattoos",
- "taxanomy", "taxonomy",
- "teamfigt", "teamfight",
- "teamspek", "teamspeak",
- "teancity", "tenacity",
- "teapsoon", "teaspoon",
- "techniqe", "technique",
- "teenages", "teenagers",
- "telegrah", "telegraph",
- "telphony", "telephony",
- "tempalrs", "templars",
- "tempalte", "template",
- "templats", "templates",
- "templeos", "temples",
- "templers", "temples",
- "temporay", "temporary",
- "temprary", "temporary",
- "tenacles", "tentacles",
- "tenactiy", "tenacity",
- "tencaity", "tenacity",
- "tendancy", "tendency",
- "tendence", "tendencies",
- "tentacel", "tentacle",
- "tentacls", "tentacles",
- "tentalce", "tentacle",
- "tequilia", "tequila",
- "terriory", "territory",
- "territoy", "territory",
- "terroist", "terrorist",
- "tesitcle", "testicle",
- "testicel", "testicle",
- "testifiy", "testify",
- "teusdays", "tuesdays",
- "texutres", "textures",
- "thaliand", "thailand",
- "theather", "theater",
- "theathre", "theater",
- "theature", "theater",
- "theisitc", "theistic",
- "themslef", "themself",
- "theorits", "theorist",
- "theraphy", "therapy",
- "thereian", "therein",
- "theroies", "theories",
- "theroist", "theorist",
- "thesitic", "theistic",
- "thialand", "thailand",
- "thiestic", "theistic",
- "thikning", "thinking",
- "thirites", "thirties",
- "thirstay", "thirsty",
- "thnakyou", "thankyou",
- "thoeries", "theories",
- "thoerist", "theorist",
- "thomspon", "thompson",
- "thopmson", "thompson",
- "thougths", "thoughts",
- "thourogh", "thorough",
- "threates", "threatens",
- "threefor", "therefor",
- "thriteen", "thirteen",
- "thrities", "thirties",
- "throaths", "throats",
- "throners", "thrones",
- "throough", "thorough",
- "throught", "thought",
- "thrusday", "thursday",
- "thumbnal", "thumbnails",
- "thurdsay", "thursday",
- "thursdsy", "thursdays",
- "tightare", "tighter",
- "timestap", "timestamp",
- "tirangle", "triangle",
- "tirbunal", "tribunal",
- "titainum", "titanium",
- "titanuim", "titanium",
- "tocuhpad", "touchpad",
- "togehter", "together",
- "togheter", "together",
- "toiletts", "toilets",
- "tolerabe", "tolerable",
- "tommorow", "tomorrow",
- "tonguers", "tongues",
- "toriodal", "toroidal",
- "toritlla", "tortilla",
- "tornadoe", "tornado",
- "torotise", "tortoise",
- "torpedeo", "torpedo",
- "torphies", "trophies",
- "tortiose", "tortoise",
- "toruisty", "touristy",
- "toruneys", "tourneys",
- "touchapd", "touchpad",
- "tounreys", "tourneys",
- "tourisim", "tourism",
- "touritsy", "touristy",
- "tournyes", "tourneys",
- "toursits", "tourists",
- "toursity", "touristy",
- "toxiticy", "toxicity",
- "trabajao", "trabajo",
- "trabajdo", "trabajo",
- "trackres", "trackers",
- "trageted", "targeted",
- "traingle", "triangle",
- "traitour", "traitor",
- "trakcers", "trackers",
- "traliers", "trailers",
- "tranform", "transform",
- "transeat", "translates",
- "transfom", "transform",
- "transfos", "transforms",
- "transiet", "transient",
- "transito", "transition",
- "transpot", "transport",
- "trasnfer", "transfer",
- "tratiors", "traitors",
- "traveles", "travels",
- "traveres", "traverse",
- "treasurs", "treasures",
- "treatmet", "treatments",
- "treatsie", "treaties",
- "treausre", "treasure",
- "tredning", "trending",
- "tremelos", "tremolos",
- "tresuary", "treasury",
- "trialers", "trailers",
- "trianers", "trainers",
- "triangel", "triangle",
- "triangls", "triangles",
- "trianing", "training",
- "trianlge", "triangle",
- "triators", "traitors",
- "tribuanl", "tribunal",
- "trickyer", "trickery",
- "triggern", "triggering",
- "trilogoy", "trilogy",
- "trinagle", "triangle",
- "trinekts", "trinkets",
- "tringale", "triangle",
- "trinitiy", "trinity",
- "triology", "trilogy",
- "triumpth", "triumph",
- "trohpies", "trophies",
- "trollade", "trolled",
- "tropcial", "tropical",
- "trotilla", "tortilla",
- "trpoical", "tropical",
- "trubinal", "tribunal",
- "trubines", "turbines",
- "tsunamai", "tsunami",
- "tuesdsay", "tuesdays",
- "tunnells", "tunnels",
- "turkisch", "turkish",
- "turntabe", "turntable",
- "turretts", "turrets",
- "tusedays", "tuesdays",
- "tutorual", "tutorial",
- "twilgiht", "twilight",
- "tylenool", "tylenol",
- "typicaly", "typically",
- "tyranies", "tyrannies",
- "tyrannia", "tyrannical",
- "ublisher", "publisher",
- "udnercut", "undercut",
- "udnerdog", "underdog",
- "ugpraded", "upgraded",
- "ugprades", "upgrades",
- "ukrainie", "ukraine",
- "ukrainin", "ukrainian",
- "ukranian", "ukrainian",
- "ulitmate", "ultimate",
- "ultamite", "ultimate",
- "ultiamte", "ultimate",
- "ultimely", "ultimately",
- "ultrason", "ultrasound",
- "umberlla", "umbrella",
- "unabnned", "unbanned",
- "unbanend", "unbanned",
- "uncanney", "uncanny",
- "uncannny", "uncanny",
- "underbog", "undergo",
- "underglo", "undergo",
- "undersog", "undergo",
- "undertoe", "undertones",
- "underwar", "underwater",
- "unfailry", "unfairly",
- "unfarily", "unfairly",
- "ungodley", "ungodly",
- "unhapppy", "unhappy",
- "unhealty", "unhealthy",
- "unicrons", "unicorns",
- "unifroms", "uniforms",
- "uniquley", "uniquely",
- "univeral", "universal",
- "unlikley", "unlikely",
- "unlockes", "unlocks",
- "unluckly", "unlucky",
- "unpoened", "unopened",
- "unqiuely", "uniquely",
- "unrakned", "unranked",
- "unrnaked", "unranked",
- "unrpoven", "unproven",
- "unsuable", "unusable",
- "untraind", "untrained",
- "unusualy", "unusually",
- "unvierse", "universe",
- "unworhty", "unworthy",
- "upgarded", "upgraded",
- "upgardes", "upgrades",
- "uploades", "uploads",
- "upstaris", "upstairs",
- "upstiars", "upstairs",
- "urethrea", "urethra",
- "uruguary", "uruguay",
- "ususally", "usually",
- "utilitiy", "utility",
- "utlimate", "ultimate",
- "vaccinae", "vaccinated",
- "vaccinet", "vaccinated",
- "vacinity", "vicinity",
- "vaguelly", "vaguely",
- "vaiation", "aviation",
- "vaieties", "varieties",
- "vailidty", "validity",
- "vairable", "variable",
- "vaklyrie", "valkyrie",
- "valenica", "valencia",
- "valentie", "valentines",
- "valentis", "valentines",
- "validade", "validated",
- "valkirye", "valkyrie",
- "valkiyre", "valkyrie",
- "valkriye", "valkyrie",
- "valkryie", "valkyrie",
- "valkyire", "valkyrie",
- "valnecia", "valencia",
- "valubale", "valuable",
- "valykrie", "valkyrie",
- "vamipres", "vampires",
- "vampiers", "vampires",
- "vampries", "vampires",
- "vangurad", "vanguard",
- "vanillia", "vanilla",
- "vanillla", "vanilla",
- "vanugard", "vanguard",
- "varaible", "variable",
- "varaints", "variants",
- "variabel", "variable",
- "varibale", "variable",
- "varities", "varieties",
- "vassales", "vassals",
- "vassalls", "vassals",
- "vassalos", "vassals",
- "vaticaan", "vatican",
- "vaticina", "vatican",
- "vaulable", "valuable",
- "vaylkrie", "valkyrie",
- "vechiles", "vehicles",
- "vectores", "vectors",
- "vegansim", "veganism",
- "vegtable", "vegetable",
- "vehciles", "vehicles",
- "vehicels", "vehicles",
- "vehicule", "vehicle",
- "veichles", "vehicles",
- "venelope", "envelope",
- "venemous", "venomous",
- "vengance", "vengeance",
- "vengence", "vengeance",
- "verablly", "verbally",
- "verbaitm", "verbatim",
- "verisons", "versions",
- "versatel", "versatile",
- "vertabim", "verbatim",
- "vertigro", "vertigo",
- "vesseles", "vessels",
- "vessells", "vessels",
- "viabiliy", "viability",
- "viatmins", "vitamins",
- "vibratie", "vibrate",
- "vibratin", "vibration",
- "vicintiy", "vicinity",
- "vicseral", "visceral",
- "victimas", "victims",
- "victimes", "victims",
- "victorin", "victorian",
- "victoris", "victories",
- "vieweres", "viewers",
- "viewpoit", "viewpoints",
- "vigilane", "vigilante",
- "vigliant", "vigilant",
- "vikingos", "vikings",
- "viligant", "vigilant",
- "villegas", "villages",
- "vindicte", "vindictive",
- "vinicity", "vicinity",
- "violatin", "violation",
- "violenty", "violently",
- "violetas", "violates",
- "virament", "vraiment",
- "virbator", "vibrator",
- "virginas", "virgins",
- "virgines", "virgins",
- "virgings", "virgins",
- "virginis", "virgins",
- "virginus", "virgins",
- "virtualy", "virtually",
- "virtuels", "virtues",
- "virtuose", "virtues",
- "viscreal", "visceral",
- "visercal", "visceral",
- "visibily", "visibility",
- "visibley", "visibly",
- "visiblly", "visibly",
- "vitailty", "vitality",
- "vitimans", "vitamins",
- "vitmains", "vitamins",
- "vitories", "victories",
- "voicemal", "voicemail",
- "voilates", "violates",
- "volatily", "volatility",
- "volcando", "volcano",
- "volcanoe", "volcano",
- "volcaron", "volcano",
- "vriament", "vraiment",
- "wahtever", "whatever",
- "wallpapr", "wallpapers",
- "warantee", "warranty",
- "warcarft", "warcraft",
- "warrante", "warranties",
- "warriros", "warriors",
- "watchemn", "watchmen",
- "watchign", "watching",
- "wathcing", "watching",
- "wathcmen", "watchmen",
- "wathever", "whatever",
- "watkings", "watkins",
- "wealthly", "wealthy",
- "webistes", "websites",
- "websties", "websites",
- "wednesdy", "wednesdays",
- "weigthed", "weighted",
- "weridest", "weirdest",
- "werstler", "wrestler",
- "wesbites", "websites",
- "westbrok", "westbrook",
- "westerse", "westerners",
- "wherease", "whereas",
- "whipsers", "whispers",
- "whislist", "wishlist",
- "whisltes", "whistles",
- "whisperd", "whispered",
- "whistels", "whistles",
- "whitsles", "whistles",
- "whsipers", "whispers",
- "widgetas", "widgets",
- "wieghted", "weighted",
- "willaims", "williams",
- "willfuly", "willfully",
- "willimas", "williams",
- "windsoar", "windsor",
- "wininpeg", "winnipeg",
- "winnigns", "winnings",
- "winnpieg", "winnipeg",
- "wiredest", "weirdest",
- "wishlsit", "wishlist",
- "wishpers", "whispers",
- "withdral", "withdrawal",
- "witnesss", "witnesses",
- "wonderes", "wonders",
- "wonderus", "wonders",
- "workfore", "workforce",
- "wouldnot", "wouldnt",
- "wranlger", "wrangler",
- "wreckign", "wrecking",
- "wrecthed", "wretched",
- "wrekcing", "wrecking",
- "wreslter", "wrestler",
- "wresters", "wrestlers",
- "writting", "writing",
- "wrnagler", "wrangler",
- "wrteched", "wretched",
- "yeilding", "yielding",
- "yoesmite", "yosemite",
- "yorksher", "yorkshire",
- "yorkshie", "yorkshire",
- "yosemeti", "yosemite",
- "yosimete", "yosemite",
- "zealotes", "zealots",
- "zealoths", "zealots",
- "zealotus", "zealots",
- "zealouts", "zealous",
- "zepplein", "zeppelin",
- "zepplien", "zeppelin",
- "zimbabew", "zimbabwe",
- "zimbawbe", "zimbabwe",
- "zinoists", "zionists",
- "zionisim", "zionism",
- "zionistm", "zionism",
- "zionsits", "zionists",
- "zoinists", "zionists",
- "abiltiy", "ability",
- "abodmen", "abdomen",
- "abondon", "abandon",
- "aboslve", "absolve",
- "abosrbs", "absorbs",
- "abriter", "arbiter",
- "abrupty", "abruptly",
- "absense", "absence",
- "absolue", "absolute",
- "absovle", "absolve",
- "absrobs", "absorbs",
- "absuers", "abusers",
- "absurdy", "absurdly",
- "absymal", "abysmal",
- "abymsal", "abysmal",
- "acadamy", "academy",
- "acadmic", "academic",
- "accesss", "access",
- "accpets", "accepts",
- "accross", "across",
- "accuray", "accuracy",
- "acheive", "achieve",
- "achived", "achieved",
- "acident", "accident",
- "ackward", "awkward",
- "acrlyic", "acrylic",
- "actauly", "actualy",
- "activit", "activist",
- "activly", "actively",
- "actualy", "actually",
- "actulay", "actualy",
- "acuracy", "accuracy",
- "acusing", "causing",
- "acustom", "accustom",
- "acutaly", "actualy",
- "acyrlic", "acrylic",
- "adaptes", "adapters",
- "adatper", "adapter",
- "adbomen", "abdomen",
- "addcits", "addicts",
- "adderss", "address",
- "addtion", "addition",
- "adequet", "adequate",
- "adequit", "adequate",
- "adivser", "adviser",
- "adivsor", "advisor",
- "admited", "admitted",
- "admrial", "admiral",
- "adpater", "adapter",
- "adquire", "acquire",
- "adultey", "adultery",
- "adverst", "adverts",
- "adviced", "advised",
- "advocay", "advocacy",
- "advsior", "advisor",
- "aeriels", "aerials",
- "affaris", "affairs",
- "affiars", "affairs",
- "afircan", "african",
- "africas", "africans",
- "afwully", "awfully",
- "againts", "against",
- "agaisnt", "against",
- "aganist", "against",
- "aggreed", "agreed",
- "agianst", "against",
- "agreing", "agreeing",
- "agruing", "arguing",
- "ahtiest", "athiest",
- "aicraft", "aircraft",
- "ailmony", "alimony",
- "airbore", "airborne",
- "aircaft", "aircraft",
- "airlfow", "airflow",
- "airosft", "airsoft",
- "airpost", "airports",
- "airsfot", "airsoft",
- "airzona", "arizona",
- "alchmey", "alchemy",
- "alchool", "alcohol",
- "alcohal", "alcohol",
- "aledged", "alleged",
- "aledges", "alleges",
- "alegbra", "algebra",
- "algerba", "algebra",
- "alienet", "alienate",
- "alledge", "allege",
- "allegry", "allergy",
- "alltime", "all-time",
- "almighy", "almighty",
- "alochol", "alcohol",
- "alotted", "allotted",
- "alowing", "allowing",
- "alphabt", "alphabet",
- "alreayd", "already",
- "alrighy", "alrighty",
- "altanta", "atlanta",
- "alteast", "atleast",
- "altough", "although",
- "alusion", "allusion",
- "amateus", "amateurs",
- "amatuer", "amateur",
- "amature", "armature",
- "amensia", "amnesia",
- "amensty", "amnesty",
- "amercia", "america",
- "americs", "americas",
- "ammount", "amount",
- "ammused", "amused",
- "amneisa", "amnesia",
- "amnsety", "amnesty",
- "amognst", "amongst",
- "amongts", "amongst",
- "amonsgt", "amongst",
- "ampilfy", "amplify",
- "amrpits", "armpits",
- "analoge", "analogue",
- "analsyt", "analyst",
- "analyes", "analyse",
- "analyts", "analyst",
- "analzye", "analyze",
- "anaylse", "analyse",
- "anaylst", "analyst",
- "anaylze", "analyze",
- "anceint", "ancient",
- "andorid", "android",
- "andriod", "android",
- "androis", "androids",
- "angirly", "angrily",
- "angluar", "angular",
- "angualr", "angular",
- "anicent", "ancient",
- "anitque", "antique",
- "anixety", "anxiety",
- "anmesia", "amnesia",
- "anmesty", "amnesty",
- "annoint", "anoint",
- "annualy", "annually",
- "annuled", "annulled",
- "anohter", "another",
- "anomoly", "anomaly",
- "answerd", "answered",
- "anuglar", "angular",
- "anulled", "annulled",
- "anwsers", "answers",
- "anwyays", "anyways",
- "anxeity", "anxiety",
- "anyoens", "anyones",
- "anyonse", "anyones",
- "anywyas", "anyways",
- "aparent", "apparent",
- "appeard", "appeared",
- "appluad", "applaud",
- "aproval", "approval",
- "apsects", "aspects",
- "apshalt", "asphalt",
- "apsirin", "aspirin",
- "aqcuire", "acquire",
- "aquarim", "aquarium",
- "aquired", "acquired",
- "aranged", "arranged",
- "arbitre", "arbiter",
- "arcahic", "archaic",
- "archiac", "archaic",
- "arcylic", "acrylic",
- "aresnal", "arsenal",
- "aretmis", "artemis",
- "argubly", "arguably",
- "aribter", "arbiter",
- "ariflow", "airflow",
- "arisoft", "airsoft",
- "aritsts", "artists",
- "armchar", "armchair",
- "arogant", "arrogant",
- "arogent", "arrogant",
- "arresst", "arrests",
- "arround", "around",
- "arsneal", "arsenal",
- "artcile", "article",
- "artical", "article",
- "articel", "article",
- "artistc", "artistic",
- "artmeis", "artemis",
- "artsits", "artists",
- "aruging", "arguing",
- "aseuxal", "asexual",
- "asexaul", "asexual",
- "ashpalt", "asphalt",
- "asiprin", "aspirin",
- "asissts", "assists",
- "asnwers", "answers",
- "asorbed", "absorbed",
- "aspahlt", "asphalt",
- "asphlat", "asphalt",
- "aspriin", "aspirin",
- "assagne", "assange",
- "assasin", "assassin",
- "assembe", "assemble",
- "assemby", "assembly",
- "assisst", "assists",
- "assnage", "assange",
- "asssits", "assists",
- "assualt", "assault",
- "asterik", "asterisk",
- "asutria", "austria",
- "atcualy", "actualy",
- "atelast", "atleast",
- "athesim", "atheism",
- "athiesm", "atheism",
- "athiest", "atheist",
- "athiets", "athiest",
- "athlets", "athletes",
- "atlantc", "atlantic",
- "atleats", "atleast",
- "atlesat", "atleast",
- "atorney", "attorney",
- "atremis", "artemis",
- "attemps", "attempts",
- "attemts", "attempts",
- "attened", "attended",
- "attracs", "attracts",
- "audbile", "audible",
- "audibel", "audible",
- "austira", "austria",
- "austrai", "austria",
- "autistc", "autistic",
- "avation", "aviation",
- "avtaars", "avatars",
- "awakend", "awakened",
- "bablyon", "babylon",
- "backdor", "backdoor",
- "backsta", "backseat",
- "baclony", "balcony",
- "badnits", "bandits",
- "baiscly", "basicly",
- "bakcers", "backers",
- "balanse", "balances",
- "balcked", "blacked",
- "banhsee", "banshee",
- "bankgok", "bangkok",
- "baoynet", "bayonet",
- "baptims", "baptism",
- "baptsim", "baptism",
- "baragin", "bargain",
- "bargani", "bargain",
- "bargian", "bargain",
- "bariner", "brainer",
- "barlkey", "barkley",
- "barracs", "barracks",
- "barrles", "barrels",
- "barsita", "barista",
- "barvery", "bravery",
- "bascily", "basicly",
- "basicly", "basically",
- "basilcy", "basicly",
- "basiton", "bastion",
- "basnhee", "banshee",
- "bastane", "bastante",
- "bastars", "bastards",
- "bastino", "bastion",
- "bathrom", "bathroom",
- "batitsa", "batista",
- "batsita", "batista",
- "bayblon", "babylon",
- "baynoet", "bayonet",
- "bayoent", "bayonet",
- "bceuase", "becuase",
- "beacuse", "because",
- "bealtes", "beatles",
- "beaslty", "beastly",
- "beatels", "beatles",
- "beaucop", "beaucoup",
- "becamae", "became",
- "becames", "becomes",
- "becasue", "because",
- "becouse", "because",
- "becuaes", "becuase",
- "becuase", "because",
- "becusae", "becuase",
- "befried", "befriend",
- "beggins", "begins",
- "beglian", "belgian",
- "beglium", "belgium",
- "begnals", "bengals",
- "bejiing", "beijing",
- "beleifs", "beliefs",
- "beleive", "believe",
- "belgain", "belgian",
- "belguim", "belgium",
- "believr", "believer",
- "believs", "believes",
- "belifes", "beliefs",
- "beligan", "belgian",
- "beligum", "belgium",
- "belived", "believed",
- "belives", "believes",
- "benagls", "bengals",
- "benedit", "benedict",
- "benghai", "benghazi",
- "benglas", "bengals",
- "benifit", "benefit",
- "beoynce", "beyonce",
- "beraded", "bearded",
- "bersekr", "berserk",
- "beseige", "besiege",
- "betales", "beatles",
- "bethesa", "bethesda",
- "betrayd", "betrayed",
- "beucase", "becuase",
- "bewteen", "between",
- "bicthes", "bitches",
- "bidrman", "birdman",
- "biejing", "beijing",
- "bifgoot", "bigfoot",
- "bigorty", "bigotry",
- "bigtoed", "bigoted",
- "bigtory", "bigotry",
- "biogted", "bigoted",
- "biogtry", "bigotry",
- "bioplar", "bipolar",
- "biploar", "bipolar",
- "birdamn", "birdman",
- "birdges", "bridges",
- "birgade", "brigade",
- "bitcion", "bitcoin",
- "bithced", "bitched",
- "bithces", "bitches",
- "bitocin", "bitcoin",
- "bizzare", "bizarre",
- "blacony", "balcony",
- "blaimed", "blamed",
- "blankes", "blankets",
- "blegian", "belgian",
- "blegium", "belgium",
- "blizzad", "blizzard",
- "blockes", "blockers",
- "bloster", "bolster",
- "blulets", "bullets",
- "bobmers", "bombers",
- "bollocs", "bollocks",
- "bondary", "boundary",
- "bonnano", "bonanno",
- "bonsues", "bonuses",
- "boraden", "broaden",
- "borader", "broader",
- "boradly", "broadly",
- "bordeom", "boredom",
- "boslter", "bolster",
- "boudler", "boulder",
- "boundry", "boundary",
- "bounses", "bonuses",
- "boutiqe", "boutique",
- "bouyant", "buoyant",
- "braevry", "bravery",
- "braista", "barista",
- "brakley", "barkley",
- "branier", "brainer",
- "braoden", "broaden",
- "braoder", "broader",
- "braodly", "broadly",
- "brednan", "brendan",
- "breifly", "briefly",
- "breserk", "berserk",
- "brethen", "brethren",
- "brewrey", "brewery",
- "briagde", "brigade",
- "brianer", "brainer",
- "bridman", "birdman",
- "brielfy", "briefly",
- "brigdes", "bridges",
- "brightn", "brighten",
- "brisben", "brisbane",
- "britian", "britain",
- "britsol", "bristol",
- "briused", "bruised",
- "briuser", "bruiser",
- "briuses", "bruises",
- "brocoli", "broccoli",
- "bronocs", "broncos",
- "browine", "brownie",
- "brownei", "brownie",
- "brownis", "brownies",
- "bruglar", "burglar",
- "brunete", "brunette",
- "bruning", "burning",
- "brusied", "bruised",
- "brusies", "bruises",
- "brusses", "brussels",
- "brutaly", "brutally",
- "btiched", "bitched",
- "btiches", "bitches",
- "bubbels", "bubbles",
- "buddhim", "buddhism",
- "buddhit", "buddhist",
- "buddist", "buddhist",
- "budgest", "budgets",
- "bugdets", "budgets",
- "buildes", "builders",
- "bulgara", "bulgaria",
- "bullest", "bullets",
- "buoancy", "buoyancy",
- "burguny", "burgundy",
- "buriser", "bruiser",
- "burlgar", "burglar",
- "burnign", "burning",
- "burried", "buried",
- "burrtio", "burrito",
- "busines", "business",
- "busness", "business",
- "butthoe", "butthole",
- "buttrey", "buttery",
- "cababge", "cabbage",
- "cabines", "cabinets",
- "cabniet", "cabinet",
- "caclium", "calcium",
- "cacuses", "caucuses",
- "caffeen", "caffeine",
- "cahched", "cached",
- "cahotic", "chaotic",
- "cahsier", "cashier",
- "cailbre", "calibre",
- "calaber", "caliber",
- "calagry", "calgary",
- "calback", "callback",
- "calbire", "calibre",
- "calcuim", "calcium",
- "calculs", "calculus",
- "calicum", "calcium",
- "calrify", "clarify",
- "calrity", "clarity",
- "caluses", "clauses",
- "camboda", "cambodia",
- "campain", "campaign",
- "campuss", "campuses",
- "cancles", "cancels",
- "cancres", "cancers",
- "cancuks", "canucks",
- "canides", "candies",
- "cannnot", "cannot",
- "canrage", "carnage",
- "capible", "capable",
- "capitas", "capitals",
- "capsuls", "capsules",
- "captais", "captains",
- "captial", "capital",
- "captiol", "capitol",
- "captued", "captured",
- "capturd", "captured",
- "capusle", "capsule",
- "carange", "carnage",
- "carbien", "carbine",
- "cardaic", "cardiac",
- "cardina", "cardigan",
- "careing", "caring",
- "caridac", "cardiac",
- "carmtan", "cartman",
- "carnege", "carnage",
- "carnige", "carnage",
- "carolan", "carolina",
- "carreer", "career",
- "carrers", "careers",
- "cartles", "cartels",
- "caryons", "crayons",
- "casette", "cassette",
- "casheir", "cashier",
- "cashies", "cashiers",
- "cashire", "cashier",
- "casltes", "castles",
- "caspule", "capsule",
- "cassete", "cassette",
- "castels", "castles",
- "casuing", "causing",
- "cathlic", "catholic",
- "cauncks", "canucks",
- "cavarly", "cavalry",
- "cavlary", "cavalry",
- "celcius", "celsius",
- "celisus", "celsius",
- "celitcs", "celtics",
- "celsuis", "celsius",
- "centruy", "century",
- "centuty", "century",
- "ceratin", "certain",
- "cermaic", "ceramic",
- "certian", "certain",
- "cervial", "cervical",
- "cesspol", "cesspool",
- "cetlics", "celtics",
- "chambre", "chamber",
- "charcol", "charcoal",
- "charisa", "charisma",
- "chasiss", "chassis",
- "chatoic", "chaotic",
- "cheeots", "cheetos",
- "cheesse", "cheeses",
- "chekcer", "checker",
- "chelsae", "chelsea",
- "cheslea", "chelsea",
- "chiense", "chinese",
- "childen", "children",
- "chimeny", "chimney",
- "chinees", "chinese",
- "chinmey", "chimney",
- "chipest", "chipset",
- "chispet", "chipset",
- "chivaly", "chivalry",
- "chlesea", "chelsea",
- "chnages", "changes",
- "choatic", "chaotic",
- "chocies", "choices",
- "choosen", "chosen",
- "chtulhu", "cthulhu",
- "churchs", "churches",
- "cilanto", "cilantro",
- "cilents", "clients",
- "circels", "circles",
- "circuis", "circuits",
- "cirlces", "circles",
- "clacium", "calcium",
- "claerer", "clearer",
- "claerly", "clearly",
- "clagary", "calgary",
- "claibre", "calibre",
- "claimes", "claims",
- "clairfy", "clarify",
- "clairty", "clarity",
- "clanand", "clannad",
- "clarfiy", "clarify",
- "classis", "classics",
- "clasues", "clauses",
- "claymer", "claymore",
- "claymoe", "claymore",
- "cleanes", "cleanse",
- "cleasne", "cleanse",
- "cleints", "clients",
- "clenase", "cleanse",
- "clesius", "celsius",
- "cletics", "celtics",
- "clevery", "cleverly",
- "climats", "climates",
- "climbes", "climbers",
- "clincis", "clinics",
- "clitors", "clitoris",
- "cloesly", "closely",
- "closley", "closely",
- "cluases", "clauses",
- "cluprit", "culprit",
- "coalese", "coalesce",
- "coctail", "cocktail",
- "cohesie", "cohesive",
- "colgone", "cologne",
- "collape", "collapse",
- "collest", "collects",
- "collony", "colony",
- "collumn", "column",
- "cologen", "cologne",
- "colomba", "colombia",
- "colonge", "cologne",
- "colorao", "colorado",
- "colourd", "coloured",
- "columsn", "columns",
- "comando", "commando",
- "comapny", "company",
- "comapre", "compare",
- "comarde", "comrade",
- "comback", "comeback",
- "combins", "combines",
- "comdeic", "comedic",
- "comited", "committed",
- "commano", "commando",
- "commans", "commands",
- "commere", "commerce",
- "comming", "coming",
- "commitd", "commited",
- "compase", "compares",
- "compede", "competed",
- "compilr", "compiler",
- "compnay", "company",
- "compots", "compost",
- "comrads", "comrades",
- "comtpon", "compton",
- "conceed", "concede",
- "conceps", "concepts",
- "conclue", "conclude",
- "concret", "concert",
- "condenm", "condemn",
- "condiut", "conduit",
- "condmen", "condemn",
- "confids", "confides",
- "confins", "confines",
- "confise", "confines",
- "conflit", "conflict",
- "conived", "connived",
- "connecs", "connects",
- "conqeur", "conquer",
- "conqure", "conquer",
- "consept", "concept",
- "consern", "concern",
- "consums", "consumes",
- "contacs", "contacts",
- "contais", "contains",
- "contast", "contacts",
- "contemt", "contempt",
- "contens", "contents",
- "contess", "contests",
- "contian", "contain",
- "contine", "continue",
- "convers", "converts",
- "conveyd", "conveyed",
- "convine", "convince",
- "coprses", "corpses",
- "coputer", "computer",
- "corasir", "corsair",
- "coratia", "croatia",
- "coridal", "cordial",
- "corsari", "corsair",
- "corsiar", "corsair",
- "corspes", "corpses",
- "corwbar", "crowbar",
- "costums", "costumes",
- "coudlnt", "couldnt",
- "coulmns", "columns",
- "coulndt", "couldnt",
- "counsle", "counsel",
- "countes", "counters",
- "courtey", "courtesy",
- "covenat", "covenant",
- "coytoes", "coyotes",
- "crabine", "carbine",
- "cralwed", "crawled",
- "craotia", "croatia",
- "craweld", "crawled",
- "creamic", "ceramic",
- "createn", "creatine",
- "creater", "creature",
- "creatie", "creatine",
- "creatue", "creature",
- "creepes", "creepers",
- "creepig", "creeping",
- "creulty", "cruelty",
- "cricles", "circles",
- "critera", "criteria",
- "cropses", "corpses",
- "crosair", "corsair",
- "crpytic", "cryptic",
- "crsytal", "crystal",
- "crtical", "critical",
- "crucibe", "crucible",
- "cruetly", "cruelty",
- "cruical", "crucial",
- "crulety", "cruelty",
- "crusdae", "crusade",
- "crusier", "cruiser",
- "crusies", "cruises",
- "crusive", "cursive",
- "crutchs", "crutches",
- "crypitc", "cryptic",
- "crystas", "crystals",
- "crystsl", "crystals",
- "crytpic", "cryptic",
- "crytsal", "crystal",
- "cthluhu", "cthulhu",
- "cthuhlu", "cthulhu",
- "cthuluh", "cthulhu",
- "ctuhlhu", "cthulhu",
- "cuasing", "causing",
- "cubcile", "cubicle",
- "cubilce", "cubicle",
- "cuddels", "cuddles",
- "culrpit", "culprit",
- "culturs", "cultures",
- "cupboad", "cupboard",
- "cuplrit", "culprit",
- "curatin", "curtain",
- "curcial", "crucial",
- "curcuit", "circuit",
- "curelty", "cruelty",
- "curiser", "cruiser",
- "curisve", "cursive",
- "currate", "curate",
- "currens", "currents",
- "curreny", "currency",
- "currest", "currents",
- "cursade", "crusade",
- "curtian", "curtain",
- "cyandie", "cyanide",
- "cyclits", "cyclist",
- "cycloen", "cyclone",
- "cycolps", "cyclops",
- "cylcist", "cyclist",
- "cylcone", "cyclone",
- "cylcops", "cyclops",
- "cynaide", "cyanide",
- "cyrptic", "cryptic",
- "cyrstal", "crystal",
- "dagners", "dangers",
- "daimond", "diamond",
- "damenor", "demeanor",
- "dammage", "damage",
- "darcula", "dracula",
- "dargons", "dragons",
- "darkets", "darkest",
- "datbase", "database",
- "daulity", "duality",
- "dawrves", "dwarves",
- "ddogers", "dodgers",
- "ddoging", "dodging",
- "deadlit", "deadlift",
- "deadpol", "deadpool",
- "deafult", "default",
- "deahtly", "deathly",
- "deatils", "details",
- "deatlhy", "deathly",
- "decalre", "declare",
- "decison", "decision",
- "declars", "declares",
- "declase", "declares",
- "decress", "decrees",
- "decribe", "describe",
- "decsend", "descend",
- "dectect", "detect",
- "defaint", "defiant",
- "defauls", "defaults",
- "defelct", "deflect",
- "defensd", "defends",
- "deffine", "define",
- "definat", "defiant",
- "definet", "definite",
- "definie", "definite",
- "definig", "defining",
- "definit", "definite",
- "defualt", "default",
- "degarde", "degrade",
- "degrase", "degrasse",
- "degrate", "degrade",
- "deiners", "deniers",
- "deisgns", "designs",
- "deivant", "deviant",
- "dekstop", "desktop",
- "delcare", "declare",
- "delfect", "deflect",
- "demenor", "demeanor",
- "dementa", "dementia",
- "demsond", "desmond",
- "deneirs", "deniers",
- "denisty", "density",
- "densley", "densely",
- "depcits", "depicts",
- "dependd", "depended",
- "depitcs", "depicts",
- "deployd", "deployed",
- "depsise", "despise",
- "descrie", "describe",
- "descuss", "discuss",
- "desgins", "designs",
- "desings", "designs",
- "desitny", "destiny",
- "desnely", "densely",
- "desnity", "density",
- "desomnd", "desmond",
- "despict", "depict",
- "despide", "despised",
- "despies", "despise",
- "destkop", "desktop",
- "destory", "destroy",
- "destros", "destroys",
- "detaild", "detailed",
- "detials", "details",
- "detorit", "detroit",
- "detriot", "detroit",
- "deuling", "dueling",
- "devaint", "deviant",
- "devaite", "deviate",
- "devided", "divided",
- "devlove", "devolve",
- "devotin", "devotion",
- "devovle", "devolve",
- "diabets", "diabetes",
- "dialecs", "dialects",
- "dialoge", "dialogue",
- "diamons", "diamonds",
- "diasble", "disable",
- "dicksih", "dickish",
- "dicover", "discover",
- "dictats", "dictates",
- "dieties", "deities",
- "dilpoma", "diploma",
- "dimaond", "diamond",
- "dingity", "dignity",
- "dinosar", "dinosaur",
- "diosese", "diocese",
- "dipolma", "diploma",
- "dirbble", "dribble",
- "directy", "directly",
- "diretcx", "directx",
- "dirived", "derived",
- "dirvers", "drivers",
- "disbale", "disable",
- "disguss", "disgusts",
- "disliks", "dislikes",
- "disover", "discover",
- "dispair", "despair",
- "dispath", "dispatch",
- "dispite", "despite",
- "dispuse", "disputes",
- "disputs", "disputes",
- "dissole", "dissolve",
- "distase", "distaste",
- "distint", "distinct",
- "divison", "division",
- "docuhes", "douches",
- "docuhey", "douchey",
- "dogders", "dodgers",
- "dogding", "dodging",
- "dolhpin", "dolphin",
- "dolphis", "dolphins",
- "dominae", "dominate",
- "dominno", "dominion",
- "doplhin", "dolphin",
- "dortmud", "dortmund",
- "draclua", "dracula",
- "dracual", "dracula",
- "drakest", "darkest",
- "dramtic", "dramatic",
- "dribbel", "dribble",
- "driectx", "directx",
- "driftig", "drifting",
- "drinkes", "drinkers",
- "druming", "drumming",
- "duailty", "duality",
- "dualtiy", "duality",
- "dubsetp", "dubstep",
- "dulaity", "duality",
- "duleing", "dueling",
- "dunegon", "dungeon",
- "dungeos", "dungeons",
- "dungoen", "dungeon",
- "durring", "during",
- "dusbtep", "dubstep",
- "dyansty", "dynasty",
- "dynamis", "dynamics",
- "dynsaty", "dynasty",
- "earlies", "earliest",
- "earliet", "earliest",
- "earplus", "earplugs",
- "eastwod", "eastwood",
- "ebcuase", "becuase",
- "ecilpse", "eclipse",
- "eclipes", "eclipse",
- "eclispe", "eclipse",
- "eclpise", "eclipse",
- "ectsasy", "ecstasy",
- "edbiles", "edibles",
- "edibels", "edibles",
- "effords", "efforts",
- "ehtanol", "ethanol",
- "eifnach", "einfach",
- "eighten", "eighteen",
- "einfahc", "einfach",
- "elasped", "elapsed",
- "elcipse", "eclipse",
- "elction", "election",
- "elecrto", "electro",
- "electic", "electric",
- "electon", "election",
- "ellitot", "elliott",
- "elloitt", "elliott",
- "elphant", "elephant",
- "emabrgo", "embargo",
- "emabssy", "embassy",
- "emapthy", "empathy",
- "embeded", "embedded",
- "embrago", "embargo",
- "eminate", "emanate",
- "emipres", "empires",
- "emision", "emission",
- "emiting", "emitting",
- "emition", "emission",
- "emmited", "emitted",
- "empahty", "empathy",
- "emphsis", "emphasis",
- "empiers", "empires",
- "empited", "emptied",
- "emplore", "employer",
- "emporer", "emperor",
- "empries", "empires",
- "emtpied", "emptied",
- "enameld", "enameled",
- "encahnt", "enchant",
- "encalve", "enclave",
- "encrpyt", "encrypt",
- "encyrpt", "encrypt",
- "endores", "endorse",
- "endrose", "endorse",
- "energis", "energies",
- "enforse", "enforces",
- "enginer", "engineer",
- "englsih", "english",
- "enhanse", "enhances",
- "enlcave", "enclave",
- "enlgish", "english",
- "enlsave", "enslave",
- "ensalve", "enslave",
- "entbook", "netbook",
- "entirey", "entirety",
- "entorpy", "entropy",
- "epiloge", "epilogue",
- "episdoe", "episode",
- "epsiode", "episode",
- "epsorts", "esports",
- "eptiome", "epitome",
- "equiped", "equipped",
- "erested", "arrested",
- "escapse", "escapes",
- "escpaes", "escapes",
- "esctasy", "ecstasy",
- "esporst", "esports",
- "espreso", "espresso",
- "esprots", "esports",
- "essense", "essence",
- "etherel", "ethereal",
- "ethnaol", "ethanol",
- "euphora", "euphoria",
- "europen", "european",
- "eurpean", "european",
- "everets", "everest",
- "everset", "everest",
- "evloved", "evolved",
- "evloves", "evolves",
- "evovled", "evolved",
- "evovles", "evolves",
- "exaclty", "exactly",
- "exahust", "exhaust",
- "examind", "examined",
- "exapnds", "expands",
- "exatled", "exalted",
- "excange", "exchange",
- "excatly", "exactly",
- "excells", "excels",
- "exceprt", "excerpt",
- "excluse", "excludes",
- "excrept", "excerpt",
- "exculde", "exclude",
- "exelent", "excellent",
- "exemple", "example",
- "exerpts", "excerpts",
- "exhasut", "exhaust",
- "exhuast", "exhaust",
- "exising", "existing",
- "existet", "existent",
- "exlated", "exalted",
- "exlcude", "exclude",
- "exliled", "exiled",
- "exludes", "excludes",
- "exmaple", "example",
- "exoitcs", "exotics",
- "expalin", "explain",
- "expeced", "expected",
- "expells", "expels",
- "expiers", "expires",
- "explict", "explicit",
- "expliot", "exploit",
- "explods", "explodes",
- "explose", "explodes",
- "expolde", "explode",
- "expolit", "exploit",
- "exposse", "exposes",
- "expries", "expires",
- "exracts", "extracts",
- "exsited", "existed",
- "extered", "exerted",
- "exterme", "extreme",
- "extoics", "exotics",
- "extreem", "extreme",
- "extrems", "extremes",
- "eyebals", "eyeballs",
- "eyebros", "eyebrows",
- "fabulos", "fabulous",
- "facebok", "facebook",
- "facepam", "facepalm",
- "faclons", "falcons",
- "facsism", "fascism",
- "facsist", "fascist",
- "failurs", "failures",
- "faincee", "fiancee",
- "falesly", "falsely",
- "falired", "flaired",
- "falshed", "flashed",
- "falshes", "flashes",
- "falsley", "falsely",
- "falvors", "flavors",
- "familes", "families",
- "famoust", "famous",
- "famousy", "famously",
- "fanatsy", "fantasy",
- "fantaic", "fanatic",
- "faoming", "foaming",
- "fascits", "fascist",
- "fasicsm", "fascism",
- "fasicst", "fascist",
- "faslely", "falsely",
- "fatiuge", "fatigue",
- "febuary", "february",
- "fecthed", "fetched",
- "fecthes", "fetches",
- "feminen", "feminine",
- "feminie", "feminine",
- "feminim", "feminism",
- "feodras", "fedoras",
- "fertily", "fertility",
- "fesitve", "festive",
- "fethced", "fetched",
- "fethces", "fetches",
- "fetishs", "fetishes",
- "fianite", "finite",
- "fianlly", "finally",
- "fiercly", "fiercely",
- "filcker", "flicker",
- "filpped", "flipped",
- "filterd", "filtered",
- "finacee", "fiancee",
- "fineses", "finesse",
- "fininsh", "finnish",
- "finishs", "finishes",
- "finisse", "finishes",
- "finnsih", "finnish",
- "firends", "friends",
- "firggin", "friggin",
- "firsbee", "frisbee",
- "firslty", "firstly",
- "firtsly", "firstly",
- "fitlers", "filters",
- "flacons", "falcons",
- "flahsed", "flashed",
- "flahses", "flashes",
- "flaried", "flaired",
- "flasely", "falsely",
- "flashig", "flashing",
- "flavord", "flavored",
- "flavous", "flavours",
- "flawess", "flawless",
- "flciker", "flicker",
- "fliters", "filters",
- "flordia", "florida",
- "florene", "florence",
- "fnaatic", "fanatic",
- "fomaing", "foaming",
- "fonetic", "phonetic",
- "forefit", "forfeit",
- "foregin", "foreign",
- "foreing", "foreign",
- "forfiet", "forfeit",
- "forhead", "forehead",
- "foriegn", "foreign",
- "formaly", "formally",
- "formery", "formerly",
- "formost", "foremost",
- "formual", "formula",
- "formuls", "formulas",
- "forrset", "forrest",
- "forsakn", "forsaken",
- "forsane", "forsaken",
- "forumla", "formula",
- "fountan", "fountain",
- "fourten", "fourteen",
- "fracter", "fracture",
- "fragmet", "fragment",
- "freedos", "freedoms",
- "freinds", "friends",
- "frigign", "friggin",
- "fristly", "firstly",
- "frostig", "frosting",
- "frsibee", "frisbee",
- "fruitin", "fruition",
- "fullets", "fullest",
- "fullset", "fullest",
- "funides", "fundies",
- "funtion", "function",
- "furance", "furnace",
- "furncae", "furnace",
- "futhroc", "futhark",
- "gadgest", "gadgets",
- "gagdets", "gadgets",
- "galatic", "galactic",
- "galcier", "glacier",
- "galsgow", "glasgow",
- "gameply", "gameplay",
- "gamerga", "gamertag",
- "gankign", "ganking",
- "ganster", "gangster",
- "garabge", "garbage",
- "garfied", "garfield",
- "garnola", "granola",
- "generas", "generals",
- "genersl", "generals",
- "geniuss", "geniuses",
- "geogria", "georgia",
- "geomety", "geometry",
- "georiga", "georgia",
- "gernade", "grenade",
- "gerogia", "georgia",
- "gigabye", "gigabyte",
- "giltchy", "glitchy",
- "gimmics", "gimmicks",
- "gimmicy", "gimmicky",
- "girzzly", "grizzly",
- "glagsow", "glasgow",
- "glaicer", "glacier",
- "glicthy", "glitchy",
- "glimpes", "glimpse",
- "glimspe", "glimpse",
- "glipmse", "glimpse",
- "glitchd", "glitched",
- "glitchs", "glitches",
- "glithcy", "glitchy",
- "globaly", "globally",
- "gloiath", "goliath",
- "glorios", "glorious",
- "gltichy", "glitchy",
- "gnaking", "ganking",
- "gnawwed", "gnawed",
- "goddanm", "goddamn",
- "goddman", "goddamn",
- "godliek", "godlike",
- "godlman", "goldman",
- "godsped", "godspeed",
- "goergia", "georgia",
- "goilath", "goliath",
- "golaith", "goliath",
- "golbins", "goblins",
- "goldamn", "goldman",
- "goldbeg", "goldberg",
- "goldike", "godlike",
- "golitah", "goliath",
- "goodluk", "goodluck",
- "gorumet", "gourmet",
- "gosepls", "gospels",
- "gosples", "gospels",
- "gpysies", "gypsies",
- "grabage", "garbage",
- "grahpic", "graphic",
- "grainte", "granite",
- "grammer", "grammar",
- "graniet", "granite",
- "grantie", "granite",
- "graphie", "graphite",
- "graphis", "graphics",
- "grappel", "grapple",
- "greande", "grenade",
- "grenads", "grenades",
- "greneer", "greener",
- "griaffe", "giraffe",
- "gridles", "griddles",
- "grillig", "grilling",
- "grpahic", "graphic",
- "guardin", "guardian",
- "guiness", "guinness",
- "gullibe", "gullible",
- "gutiars", "guitars",
- "gypises", "gypsies",
- "gyspies", "gypsies",
- "habaeus", "habeas",
- "haethen", "heathen",
- "hailfax", "halifax",
- "halfiax", "halifax",
- "handbok", "handbook",
- "handedy", "handedly",
- "handeld", "handled",
- "hanlder", "handler",
- "hannibl", "hannibal",
- "hanuted", "haunted",
- "haorder", "hoarder",
- "hapened", "happened",
- "happend", "happened",
- "happliy", "happily",
- "harased", "harassed",
- "harases", "harasses",
- "hardend", "hardened",
- "hardwod", "hardwood",
- "haricut", "haircut",
- "hatchig", "hatching",
- "hauntig", "haunting",
- "haviest", "heaviest",
- "headest", "headset",
- "headses", "headsets",
- "heaveny", "heavenly",
- "heigher", "higher",
- "heigths", "heights",
- "helemts", "helmets",
- "hellfie", "hellfire",
- "hellvua", "helluva",
- "helment", "helmet",
- "helpped", "helped",
- "hemlets", "helmets",
- "henious", "heinous",
- "heorics", "heroics",
- "heorine", "heroine",
- "heriocs", "heroics",
- "herione", "heroine",
- "herocis", "heroics",
- "heronie", "heroine",
- "hesiman", "heisman",
- "hieghts", "heights",
- "hienous", "heinous",
- "hiesman", "heisman",
- "himselv", "himself",
- "hiptser", "hipster",
- "hismelf", "himself",
- "hispter", "hipster",
- "hitboxs", "hitboxes",
- "hoilday", "holiday",
- "hokpins", "hopkins",
- "holdiay", "holiday",
- "holdins", "holdings",
- "homniem", "hominem",
- "horader", "hoarder",
- "hosited", "hoisted",
- "hosthot", "hotshot",
- "hostles", "hostels",
- "hostpot", "hotspot",
- "hothsot", "hotshot",
- "hotpsot", "hotspot",
- "hotsopt", "hotspot",
- "hounour", "honour",
- "hseldon", "sheldon",
- "huanted", "haunted",
- "humanit", "humanist",
- "humants", "humanist",
- "humidiy", "humidity",
- "humoros", "humorous",
- "hunagry", "hungary",
- "hunderd", "hundred",
- "hundres", "hundreds",
- "hungray", "hungary",
- "hurdels", "hurdles",
- "hurldes", "hurdles",
- "husbans", "husbands",
- "hweaton", "wheaton",
- "hybirds", "hybrids",
- "hydogen", "hydrogen",
- "hygeine", "hygiene",
- "hypnoss", "hypnosis",
- "hyrbids", "hybrids",
- "hystera", "hysteria",
- "iceforg", "icefrog",
- "ierland", "ireland",
- "ignitin", "ignition",
- "ignorat", "ignorant",
- "illegas", "illegals",
- "illegsl", "illegals",
- "illinos", "illinois",
- "imanent", "eminent",
- "imapcts", "impacts",
- "iminent", "eminent",
- "imminet", "imminent",
- "implict", "implicit",
- "imploed", "implode",
- "imploys", "employs",
- "impluse", "impulse",
- "impolde", "implode",
- "importd", "imported",
- "imporve", "improve",
- "impules", "impulse",
- "impusle", "impulse",
- "imrpove", "improve",
- "incldue", "include",
- "incluse", "includes",
- "indains", "indians",
- "indeces", "indices",
- "indiaan", "indiana",
- "indluge", "indulge",
- "indugle", "indulge",
- "infalte", "inflate",
- "infenro", "inferno",
- "infered", "inferred",
- "inferir", "inferior",
- "infinet", "infinite",
- "infinie", "infinite",
- "infinit", "infinite",
- "infornt", "infront",
- "infroms", "informs",
- "infrotn", "infront",
- "inheirt", "inherit",
- "inidans", "indians",
- "initals", "initials",
- "initisl", "initials",
- "inlcine", "incline",
- "inovker", "invoker",
- "inpeach", "impeach",
- "inpsect", "inspect",
- "inpsire", "inspire",
- "inquier", "inquire",
- "inquriy", "inquiry",
- "insaney", "insanely",
- "inscets", "insects",
- "insepct", "inspect",
- "insipre", "inspire",
- "insluts", "insults",
- "instade", "instead",
- "instint", "instinct",
- "intenst", "intents",
- "intered", "interred",
- "interet", "interest",
- "internt", "internet",
- "interro", "interior",
- "intrest", "interest",
- "intrige", "intrigue",
- "invlove", "involve",
- "invoekr", "invoker",
- "invovle", "involve",
- "iornman", "ironman",
- "iranain", "iranian",
- "iranias", "iranians",
- "iranina", "iranian",
- "irleand", "ireland",
- "ironamn", "ironman",
- "isalmic", "islamic",
- "isareli", "israeli",
- "islamit", "islamist",
- "islmaic", "islamic",
- "isloate", "isolate",
- "isralei", "israeli",
- "isreali", "israeli",
- "italias", "italians",
- "jagaurs", "jaguars",
- "jaguras", "jaguars",
- "jamacia", "jamaica",
- "jamaina", "jamaican",
- "jamiaca", "jamaica",
- "jamsine", "jasmine",
- "janaury", "january",
- "januray", "january",
- "japanes", "japanese",
- "jasmien", "jasmine",
- "jaugars", "jaguars",
- "jaunary", "january",
- "jeircho", "jericho",
- "jennins", "jennings",
- "jeopary", "jeopardy",
- "jeresys", "jerseys",
- "jericoh", "jericho",
- "jersyes", "jerseys",
- "jewerly", "jewelry",
- "jorunal", "journal",
- "jounral", "journal",
- "joystik", "joystick",
- "juadism", "judaism",
- "judasim", "judaism",
- "judical", "judicial",
- "juipter", "jupiter",
- "junglig", "jungling",
- "juptier", "jupiter",
- "jusitfy", "justify",
- "justfiy", "justify",
- "karakoe", "karaoke",
- "karoake", "karaoke",
- "kenendy", "kennedy",
- "kenndey", "kennedy",
- "kentucy", "kentucky",
- "keyboad", "keyboard",
- "keychan", "keychain",
- "keynode", "keynote",
- "kicthen", "kitchen",
- "killins", "killings",
- "kineitc", "kinetic",
- "kinghts", "knights",
- "kinteic", "kinetic",
- "kitches", "kitchens",
- "kitites", "kitties",
- "knietic", "kinetic",
- "knigths", "knights",
- "knuckel", "knuckle",
- "kroeans", "koreans",
- "krudish", "kurdish",
- "ktichen", "kitchen",
- "kubirck", "kubrick",
- "kunckle", "knuckle",
- "kurbick", "kubrick",
- "kuridsh", "kurdish",
- "laguage", "language",
- "landins", "landings",
- "lantren", "lantern",
- "laready", "already",
- "laregly", "largely",
- "largley", "largely",
- "lasanga", "lasagna",
- "lasgana", "lasagna",
- "latitue", "latitude",
- "latnern", "lantern",
- "launhed", "launched",
- "lavendr", "lavender",
- "leathal", "lethal",
- "lefitst", "leftist",
- "leftits", "leftist",
- "legnths", "lengths",
- "legnthy", "lengthy",
- "legoins", "legions",
- "leigons", "legions",
- "lenghts", "lengths",
- "lenoard", "leonard",
- "lepoard", "leopard",
- "lesbain", "lesbian",
- "lesiban", "lesbian",
- "lesiure", "leisure",
- "liasion", "liaison",
- "liasons", "liaisons",
- "liberae", "liberate",
- "liberas", "liberals",
- "lienups", "lineups",
- "liesure", "leisure",
- "liftime", "lifetime",
- "lighlty", "lightly",
- "lightes", "lighters",
- "ligthly", "lightly",
- "linclon", "lincoln",
- "linueps", "lineups",
- "liqiuds", "liquids",
- "lisence", "license",
- "lisense", "license",
- "listend", "listened",
- "litecon", "litecoin",
- "literae", "literate",
- "lithuim", "lithium",
- "litihum", "lithium",
- "loadous", "loadouts",
- "loenard", "leonard",
- "loepard", "leopard",
- "logiteh", "logitech",
- "loosley", "loosely",
- "luandry", "laundry",
- "luckliy", "luckily",
- "luicfer", "lucifer",
- "lunatis", "lunatics",
- "maching", "machine",
- "machins", "machines",
- "maclolm", "malcolm",
- "macthup", "matchup",
- "madsion", "madison",
- "magents", "magnets",
- "magicin", "magician",
- "magolia", "magnolia",
- "maidson", "madison",
- "maintan", "maintain",
- "mairlyn", "marilyn",
- "malaira", "malaria",
- "malaysa", "malaysia",
- "malclom", "malcolm",
- "manauls", "manuals",
- "mandase", "mandates",
- "mandats", "mandates",
- "mangeld", "mangled",
- "mangets", "magnets",
- "manualy", "manually",
- "manuver", "maneuver",
- "marbels", "marbles",
- "margart", "margaret",
- "mariage", "marriage",
- "mariens", "marines",
- "maritan", "martian",
- "marixsm", "marxism",
- "mariyln", "marilyn",
- "markede", "marketed",
- "marlbes", "marbles",
- "marliyn", "marilyn",
- "marnies", "marines",
- "marrage", "marriage",
- "martail", "martial",
- "martain", "martian",
- "masacra", "mascara",
- "massace", "massacre",
- "mathcup", "matchup",
- "mathwes", "mathews",
- "matrial", "martial",
- "maunals", "manuals",
- "mcalren", "mclaren",
- "meanins", "meanings",
- "medicad", "medicaid",
- "medicae", "medicare",
- "medioce", "mediocre",
- "meixcan", "mexican",
- "meldoic", "melodic",
- "melieux", "milieux",
- "melodis", "melodies",
- "memeber", "member",
- "memoery", "memory",
- "memorie", "memory",
- "menally", "mentally",
- "mentaly", "mentally",
- "meoldic", "melodic",
- "meranda", "veranda",
- "merchat", "merchant",
- "merucry", "mercury",
- "messagd", "messaged",
- "messaih", "messiah",
- "metagem", "metagame",
- "metalic", "metallic",
- "mexcian", "mexican",
- "michina", "michigan",
- "midfied", "midfield",
- "midotwn", "midtown",
- "midtwon", "midtown",
- "migrans", "migrants",
- "militat", "militant",
- "militis", "militias",
- "miltary", "military",
- "mimimum", "minimum",
- "mineras", "minerals",
- "mininos", "minions",
- "ministr", "minister",
- "ministy", "ministry",
- "minoins", "minions",
- "minstry", "ministry",
- "minumum", "minimum",
- "mirrord", "mirrored",
- "misandy", "misandry",
- "misison", "mission",
- "misouri", "missouri",
- "mispell", "misspell",
- "missils", "missiles",
- "mistery", "mystery",
- "mobiliy", "mobility",
- "modualr", "modular",
- "momento", "memento",
- "momment", "moment",
- "monarcy", "monarchy",
- "monatge", "montage",
- "monglos", "mongols",
- "monitos", "monitors",
- "monstre", "monster",
- "montaeg", "montage",
- "montrel", "montreal",
- "monumet", "monument",
- "morbidy", "morbidly",
- "morgage", "mortgage",
- "morphen", "morphine",
- "morphie", "morphine",
- "morroco", "morocco",
- "mortage", "mortgage",
- "mosnter", "monster",
- "mosture", "moisture",
- "motivet", "motivate",
- "motnage", "montage",
- "motoral", "motorola",
- "mountan", "mountain",
- "movment", "movement",
- "mucuous", "mucous",
- "muesums", "museums",
- "muliple", "multiple",
- "mulsims", "muslims",
- "multipe", "multiple",
- "multipy", "multiply",
- "munbers", "numbers",
- "munchis", "munchies",
- "murderd", "murdered",
- "muscial", "musical",
- "mushrom", "mushroom",
- "musilms", "muslims",
- "muslces", "muscles",
- "musuems", "museums",
- "mutatin", "mutation",
- "mypsace", "myspace",
- "mysapce", "myspace",
- "napolen", "napoleon",
- "narhwal", "narwhal",
- "natique", "antique",
- "nativey", "natively",
- "natrual", "natural",
- "naugthy", "naughty",
- "nauseos", "nauseous",
- "nautils", "nautilus",
- "nautral", "natural",
- "nautres", "natures",
- "nectode", "netcode",
- "needels", "needles",
- "neruons", "neurons",
- "neslave", "enslave",
- "netocde", "netcode",
- "netowrk", "network",
- "netural", "neutral",
- "neturon", "neutron",
- "netwrok", "network",
- "neurton", "neutron",
- "neuterd", "neutered",
- "nighlty", "nightly",
- "nigthly", "nightly",
- "nihilim", "nihilism",
- "ninties", "1990s",
- "niverse", "inverse",
- "nocture", "nocturne",
- "nominae", "nominate",
- "nominet", "nominate",
- "nonsene", "nonsense",
- "noramls", "normals",
- "norhern", "northern",
- "normaly", "normally",
- "normany", "normandy",
- "northen", "northern",
- "nostris", "nostrils",
- "notario", "ontario",
- "notebok", "notebook",
- "nothern", "northern",
- "nowdays", "nowadays",
- "nrivana", "nirvana",
- "nuaghty", "naughty",
- "nubmers", "numbers",
- "nucelar", "nuclear",
- "nucelus", "nucleus",
- "nuclean", "unclean",
- "nuclues", "nucleus",
- "nucular", "nuclear",
- "nuerons", "neurons",
- "nuetral", "neutral",
- "nuetron", "neutron",
- "nulcear", "nuclear",
- "nullfiy", "nullify",
- "nusance", "nuisance",
- "nutriet", "nutrient",
- "oarcles", "oracles",
- "obivous", "obvious",
- "obvoius", "obvious",
- "ocarnia", "ocarina",
- "ocasion", "occasion",
- "occured", "occurred",
- "ocotber", "october",
- "ocotpus", "octopus",
- "ocraina", "ocarina",
- "ocuntry", "country",
- "ocurred", "occurred",
- "ofcoure", "ofcourse",
- "offcers", "officers",
- "offical", "official",
- "offisde", "offside",
- "oftenly", "often",
- "ogrilla", "gorilla",
- "olmypic", "olympic",
- "olreans", "orleans",
- "olympis", "olympics",
- "olypmic", "olympic",
- "omision", "omission",
- "omiting", "omitting",
- "omlette", "omelette",
- "ommited", "omitted",
- "onatrio", "ontario",
- "onbaord", "onboard",
- "onborad", "onboard",
- "ontairo", "ontario",
- "ontraio", "ontario",
- "opartor", "operator",
- "openess", "openness",
- "opitcal", "optical",
- "opitmal", "optimal",
- "oponent", "opponent",
- "oposite", "opposite",
- "oppenly", "openly",
- "opponet", "opponent",
- "oprhans", "orphans",
- "optimim", "optimism",
- "oracels", "oracles",
- "oragnes", "oranges",
- "oragsms", "orgasms",
- "oralces", "oracles",
- "orbtial", "orbital",
- "orcales", "oracles",
- "orelans", "orleans",
- "organes", "organise",
- "organie", "organise",
- "organim", "organism",
- "orginal", "original",
- "orhpans", "orphans",
- "oribtal", "orbital",
- "orlenas", "orleans",
- "orpahns", "orphans",
- "orthodx", "orthodox",
- "outfied", "outfield",
- "outsidr", "outsider",
- "overhal", "overhaul",
- "overpad", "overpaid",
- "oversue", "overuse",
- "overtun", "overturn",
- "ownders", "wonders",
- "owuldve", "wouldve",
- "oylmpic", "olympic",
- "pacakge", "package",
- "pacifit", "pacifist",
- "packade", "packaged",
- "pacthes", "patches",
- "pahntom", "phantom",
- "paitent", "patient",
- "palcebo", "placebo",
- "pallete", "palette",
- "palster", "plaster",
- "palyboy", "playboy",
- "pamflet", "pamphlet",
- "pamplet", "pamphlet",
- "pancaks", "pancakes",
- "pandroa", "pandora",
- "panthen", "pantheon",
- "paradim", "paradigm",
- "paradse", "parades",
- "paralel", "parallel",
- "paranoa", "paranoia",
- "parises", "praises",
- "parites", "parties",
- "partice", "particle",
- "partick", "patrick",
- "partiel", "particle",
- "partiot", "patriot",
- "partols", "patrols",
- "passabe", "passable",
- "passivs", "passives",
- "pasuing", "pausing",
- "pateint", "patient",
- "pathces", "patches",
- "patiens", "patients",
- "patirot", "patriot",
- "patrcik", "patrick",
- "patrios", "patriots",
- "patroit", "patriot",
- "peaples", "peoples",
- "pebbels", "pebbles",
- "peirced", "pierced",
- "penatly", "penalty",
- "pendulm", "pendulum",
- "penguis", "penguins",
- "penicls", "pencils",
- "penison", "pension",
- "penisse", "penises",
- "penitum", "pentium",
- "pensies", "penises",
- "pensino", "pension",
- "pentuim", "pentium",
- "peopels", "peoples",
- "percise", "precise",
- "perdict", "predict",
- "perfers", "prefers",
- "perhasp", "perhaps",
- "perhpas", "perhaps",
- "perisan", "persian",
- "perjery", "perjury",
- "permade", "premade",
- "permier", "premier",
- "permise", "premise",
- "permium", "premium",
- "peroids", "periods",
- "peronal", "personal",
- "perpaid", "prepaid",
- "perphas", "perhaps",
- "persain", "persian",
- "persets", "presets",
- "persits", "persist",
- "persued", "pursued",
- "persuit", "pursuit",
- "pervail", "prevail",
- "perview", "preview",
- "pharoah", "pharaoh",
- "phatnom", "phantom",
- "phsyics", "physics",
- "phyiscs", "physics",
- "physcis", "physics",
- "physiqe", "physique",
- "picthed", "pitched",
- "picther", "pitcher",
- "picthes", "pitches",
- "piegons", "pigeons",
- "piglrim", "pilgrim",
- "pigoens", "pigeons",
- "pilgirm", "pilgrim",
- "pilrgim", "pilgrim",
- "pinoeer", "pioneer",
- "pinpoit", "pinpoint",
- "pionere", "pioneer",
- "pireced", "pierced",
- "pithces", "pitches",
- "plantes", "planets",
- "plastis", "plastics",
- "plastre", "plaster",
- "plataeu", "plateau",
- "plateua", "plateau",
- "playabe", "playable",
- "playofs", "playoffs",
- "plesant", "pleasant",
- "pligrim", "pilgrim",
- "ploygon", "polygon",
- "ploymer", "polymer",
- "podemso", "podemos",
- "podmeos", "podemos",
- "poeples", "peoples",
- "poignat", "poignant",
- "poineer", "pioneer",
- "pointes", "pointers",
- "poisond", "poisoned",
- "polgyon", "polygon",
- "polical", "political",
- "polishs", "polishes",
- "polisse", "polishes",
- "politey", "politely",
- "poluted", "polluted",
- "polutes", "pollutes",
- "popluar", "popular",
- "populer", "popular",
- "populos", "populous",
- "porpose", "propose",
- "porshan", "portion",
- "porshon", "portion",
- "portait", "portrait",
- "portary", "portray",
- "portras", "portrays",
- "portrat", "portrait",
- "posions", "poisons",
- "positon", "position",
- "positve", "positive",
- "possibe", "possible",
- "possiby", "possibly",
- "postdam", "potsdam",
- "postion", "position",
- "postive", "positive",
- "potatos", "potatoes",
- "potical", "optical",
- "potrait", "portrait",
- "powderd", "powdered",
- "poweful", "powerful",
- "poylgon", "polygon",
- "poylmer", "polymer",
- "practie", "practise",
- "praisse", "praises",
- "praries", "prairies",
- "prasied", "praised",
- "prasies", "praises",
- "pratice", "practice",
- "preamde", "premade",
- "preceed", "precede",
- "precice", "precise",
- "preests", "presets",
- "prehaps", "perhaps",
- "preimer", "premier",
- "preimum", "premium",
- "preists", "priests",
- "preivew", "preview",
- "premeir", "premier",
- "premiee", "premiere",
- "premire", "premier",
- "premits", "permits",
- "premius", "premiums",
- "premuim", "premium",
- "prepair", "prepare",
- "preriod", "period",
- "presens", "presents",
- "presest", "presets",
- "presist", "persist",
- "prestes", "presets",
- "presude", "presumed",
- "pretene", "pretense",
- "pretens", "pretends",
- "preveiw", "preview",
- "prevert", "pervert",
- "previal", "prevail",
- "previes", "previews",
- "previos", "previous",
- "priased", "praised",
- "priases", "praises",
- "printes", "printers",
- "pristen", "pristine",
- "probabe", "probable",
- "probaly", "probably",
- "probelm", "problem",
- "procede", "proceed",
- "procees", "proceeds",
- "procesd", "proceeds",
- "proclam", "proclaim",
- "produly", "proudly",
- "produse", "produces",
- "progidy", "prodigy",
- "progrom", "pogrom",
- "prohibt", "prohibit",
- "prohpet", "prophet",
- "prologe", "prologue",
- "promose", "promotes",
- "promots", "promotes",
- "prompty", "promptly",
- "promtps", "prompts",
- "pronous", "pronouns",
- "prooved", "proved",
- "propeht", "prophet",
- "prophey", "prophecy",
- "propper", "proper",
- "protals", "portals",
- "protecs", "protects",
- "protess", "protests",
- "protocl", "protocol",
- "protray", "portray",
- "prouldy", "proudly",
- "provded", "provided",
- "provine", "province",
- "prusuit", "pursuit",
- "pryamid", "pyramid",
- "pscyhed", "psyched",
- "ptiched", "pitched",
- "pticher", "pitcher",
- "puasing", "pausing",
- "publicy", "publicly",
- "publsih", "publish",
- "puhsups", "pushups",
- "punishs", "punishes",
- "punisse", "punishes",
- "pursiut", "pursuit",
- "pursude", "pursued",
- "purused", "pursued",
- "pushpus", "pushups",
- "pyarmid", "pyramid",
- "pyramis", "pyramids",
- "pyrmaid", "pyramid",
- "pysched", "psyched",
- "qaulify", "qualify",
- "qaulity", "quality",
- "qauntum", "quantum",
- "quailfy", "qualify",
- "quailty", "quality",
- "queires", "queries",
- "queitly", "quietly",
- "quereis", "queries",
- "quicket", "quickest",
- "quielty", "quietly",
- "quitely", "quietly",
- "qunatum", "quantum",
- "qunetin", "quentin",
- "racisst", "racists",
- "racthet", "ratchet",
- "radaint", "radiant",
- "radiane", "radiance",
- "radicas", "radicals",
- "radiers", "raiders",
- "raelism", "realism",
- "raidant", "radiant",
- "railrod", "railroad",
- "rainbos", "rainbows",
- "raoches", "roaches",
- "raoming", "roaming",
- "raptros", "raptors",
- "raputre", "rapture",
- "rathcet", "ratchet",
- "ratpure", "rapture",
- "reacing", "reaching",
- "reagrds", "regards",
- "realies", "realise",
- "realsie", "realise",
- "realsim", "realism",
- "realtes", "relates",
- "reamins", "remains",
- "reapirs", "repairs",
- "rebouns", "rebounds",
- "rebulit", "rebuilt",
- "recalim", "reclaim",
- "receips", "receipts",
- "recided", "resided",
- "reciept", "receipt",
- "recievd", "recieved",
- "recieve", "receive",
- "recitfy", "rectify",
- "recived", "received",
- "reclami", "reclaim",
- "recliam", "reclaim",
- "recorre", "recorder",
- "recoves", "recovers",
- "recpies", "recipes",
- "redeemd", "redeemed",
- "redners", "renders",
- "refelct", "reflect",
- "referal", "referral",
- "refered", "referred",
- "referig", "refering",
- "referrs", "refers",
- "reflexs", "reflexes",
- "refrers", "refers",
- "refroms", "reforms",
- "refusla", "refusal",
- "regerts", "regrets",
- "regiems", "regimes",
- "regimet", "regiment",
- "registy", "registry",
- "regluar", "regular",
- "regrest", "regrets",
- "regulae", "regulate",
- "regulas", "regulars",
- "regulsr", "regulars",
- "reigmes", "regimes",
- "reigons", "regions",
- "reitres", "retires",
- "reivews", "reviews",
- "reknown", "renown",
- "relaise", "realise",
- "relapes", "relapse",
- "relaspe", "relapse",
- "relatie", "relative",
- "relatin", "relation",
- "relcaim", "reclaim",
- "releive", "relieve",
- "releses", "releases",
- "relfect", "reflect",
- "reliabe", "reliable",
- "relient", "reliant",
- "relized", "realised",
- "relpase", "relapse",
- "remaind", "remained",
- "remaing", "remaining",
- "remakrs", "remarks",
- "remannt", "remnant",
- "remeber", "remember",
- "remians", "remains",
- "remnans", "remnants",
- "renderd", "rendered",
- "renegae", "renegade",
- "renmant", "remnant",
- "rentors", "renters",
- "rentres", "renters",
- "renuion", "reunion",
- "repaird", "repaired",
- "repalys", "replays",
- "repblic", "republic",
- "repeast", "repeats",
- "repects", "respects",
- "repitle", "reptile",
- "replase", "replaces",
- "replayd", "replayed",
- "reponse", "response",
- "repostd", "reposted",
- "repsawn", "respawn",
- "repsond", "respond",
- "repsots", "reposts",
- "reptiel", "reptile",
- "reptils", "reptiles",
- "repubic", "republic",
- "republi", "republic",
- "repulic", "republic",
- "reqiuem", "requiem",
- "requeim", "requiem",
- "requime", "requiem",
- "requred", "required",
- "resapwn", "respawn",
- "rescuse", "rescues",
- "resembe", "resemble",
- "reslove", "resolve",
- "resolvs", "resolves",
- "resonet", "resonate",
- "resouce", "resource",
- "resovle", "resolve",
- "respest", "respects",
- "respone", "response",
- "respwan", "respawn",
- "ressits", "resists",
- "restord", "restored",
- "resuced", "rescued",
- "resuces", "rescues",
- "retrive", "retrieve",
- "returnd", "returned",
- "reuinon", "reunion",
- "reveald", "revealed",
- "reveiws", "reviews",
- "revelas", "reveals",
- "reveral", "reversal",
- "reviere", "reviewer",
- "reviewd", "reviewed",
- "reviewr", "reviewer",
- "revolvr", "revolver",
- "revolvs", "revolves",
- "rewirte", "rewrite",
- "reworkd", "reworked",
- "rewriet", "rewrite",
- "reynols", "reynolds",
- "rhapsoy", "rhapsody",
- "rhythem", "rhythm",
- "rhythim", "rhythm",
- "rhytmic", "rhythmic",
- "riaders", "raiders",
- "ritlain", "ritalin",
- "ritoers", "rioters",
- "rivarly", "rivalry",
- "rivlary", "rivalry",
- "roahces", "roaches",
- "robotis", "robotics",
- "rococco", "rococo",
- "roestta", "rosetta",
- "roiters", "rioters",
- "roleply", "roleplay",
- "romaina", "romania",
- "romaing", "roaming",
- "romanin", "romanian",
- "romanna", "romanian",
- "roomate", "roommate",
- "rotuers", "routers",
- "rugters", "rutgers",
- "rulebok", "rulebook",
- "rumorus", "rumours",
- "rumuors", "rumours",
- "runnung", "running",
- "ruslted", "rustled",
- "russina", "russian",
- "russion", "russian",
- "rusteld", "rustled",
- "rythmic", "rhythmic",
- "rythyms", "rhythms",
- "sacrasm", "sarcasm",
- "saddnes", "saddens",
- "sadistc", "sadistic",
- "sadning", "sanding",
- "salaris", "salaries",
- "salavge", "salvage",
- "salvery", "slavery",
- "salying", "slaying",
- "sampels", "samples",
- "samruai", "samurai",
- "samuari", "samurai",
- "samuria", "samurai",
- "sandlas", "sandals",
- "sandnig", "sanding",
- "sanlder", "sandler",
- "santorm", "santorum",
- "sapphie", "sapphire",
- "sarcams", "sarcasm",
- "sargant", "sergeant",
- "sasuage", "sausage",
- "satifsy", "satisfy",
- "satsify", "satisfy",
- "satsohi", "satoshi",
- "savanha", "savannah",
- "savannh", "savannah",
- "saveing", "saving",
- "sawnsea", "swansea",
- "sawnson", "swanson",
- "scandas", "scandals",
- "scannig", "scanning",
- "scartch", "scratch",
- "scheems", "schemes",
- "schoold", "schooled",
- "sciense", "sciences",
- "scinece", "science",
- "scootes", "scooters",
- "scorpin", "scorpion",
- "scpeter", "scepter",
- "scracth", "scratch",
- "scrambe", "scramble",
- "scritps", "scripts",
- "scrolld", "scrolled",
- "scrpits", "scripts",
- "scyhter", "scyther",
- "seached", "searched",
- "seaches", "searches",
- "seahaws", "seahawks",
- "seantor", "senator",
- "searchd", "searched",
- "searchs", "searches",
- "sebrian", "serbian",
- "secerts", "secrets",
- "secpter", "scepter",
- "secrest", "secrets",
- "secrety", "secretly",
- "seflies", "selfies",
- "seguoys", "segues",
- "seinors", "seniors",
- "selifes", "selfies",
- "senoirs", "seniors",
- "sensure", "censure",
- "sentaor", "senator",
- "sentris", "sentries",
- "serbain", "serbian",
- "sergeat", "sergeant",
- "sergent", "sergeant",
- "seriban", "serbian",
- "servans", "servants",
- "sesnors", "sensors",
- "settins", "settings",
- "severly", "severely",
- "sexualy", "sexually",
- "seziure", "seizure",
- "shaddow", "shadow",
- "shanghi", "shanghai",
- "shaprie", "sharpie",
- "shaprly", "sharply",
- "sharipe", "sharpie",
- "shcemes", "schemes",
- "sheelpe", "sheeple",
- "sheepel", "sheeple",
- "shephed", "shepherd",
- "sherlok", "sherlock",
- "shetler", "shelter",
- "shevles", "shelves",
- "shfiter", "shifter",
- "shieldd", "shielded",
- "shiping", "shipping",
- "shirely", "shirley",
- "shitfer", "shifter",
- "shledon", "sheldon",
- "shleter", "shelter",
- "shoudln", "should",
- "shouldt", "shouldnt",
- "shoutot", "shoutout",
- "showede", "showered",
- "showerd", "showered",
- "shperes", "spheres",
- "shriley", "shirley",
- "siblins", "siblings",
- "sidelen", "sideline",
- "sideral", "sidereal",
- "siezing", "seizing",
- "siezure", "seizure",
- "signfiy", "signify",
- "signins", "signings",
- "signles", "singles",
- "silders", "sliders",
- "silenty", "silently",
- "similir", "similiar",
- "simliar", "similar",
- "simplet", "simplest",
- "simpley", "simply",
- "simplfy", "simplify",
- "simpliy", "simplify",
- "simposn", "simpson",
- "simspon", "simpson",
- "singals", "signals",
- "singels", "singles",
- "singify", "signify",
- "singsog", "singsong",
- "sitmuli", "stimuli",
- "skecthy", "sketchy",
- "skeletl", "skeletal",
- "skeptis", "skeptics",
- "sketchs", "sketches",
- "sketpic", "skeptic",
- "skpetic", "skeptic",
- "sktechy", "sketchy",
- "skwyard", "skyward",
- "slavage", "salvage",
- "slayign", "slaying",
- "sldiers", "sliders",
- "slefies", "selfies",
- "slighly", "slightly",
- "slighty", "slightly",
- "slippes", "slippers",
- "slippey", "slippery",
- "smaples", "samples",
- "smartre", "smarter",
- "smaurai", "samurai",
- "snadler", "sandler",
- "snigles", "singles",
- "snippes", "snippets",
- "snodwen", "snowden",
- "snwoden", "snowden",
- "snycing", "syncing",
- "snyergy", "synergy",
- "socialy", "socially",
- "sofware", "software",
- "soildly", "solidly",
- "soldies", "soldiers",
- "soldily", "solidly",
- "somaila", "somalia",
- "someons", "someones",
- "somethn", "somethin",
- "southen", "southern",
- "soveits", "soviets",
- "spacebr", "spacebar",
- "spainsh", "spanish",
- "spansih", "spanish",
- "spanwed", "spawned",
- "sparkel", "sparkle",
- "spartas", "spartans",
- "spartsn", "spartans",
- "sparyed", "sprayed",
- "spawend", "spawned",
- "spawnig", "spawning",
- "specail", "special",
- "specfic", "specific",
- "specias", "specials",
- "specisl", "specials",
- "spectum", "spectrum",
- "speechs", "speeches",
- "spehres", "spheres",
- "speical", "special",
- "speices", "species",
- "spellig", "spelling",
- "spindel", "spindle",
- "spiritd", "spirited",
- "splaton", "splatoon",
- "splittr", "splitter",
- "spoiles", "spoilers",
- "spoitfy", "spotify",
- "spolied", "spoiled",
- "sponser", "sponsor",
- "sporles", "sproles",
- "sporuts", "sprouts",
- "spotfiy", "spotify",
- "sprinke", "sprinkle",
- "sproels", "sproles",
- "spwaned", "spawned",
- "sqaures", "squares",
- "sqeuaky", "squeaky",
- "sqiushy", "squishy",
- "squarey", "squarely",
- "squirel", "squirtle",
- "squirle", "squirrel",
- "squirrl", "squirrel",
- "squirte", "squirtle",
- "squsihy", "squishy",
- "sriraca", "sriracha",
- "srpouts", "sprouts",
- "sryians", "syrians",
- "sryinge", "syringe",
- "stadius", "stadiums",
- "staduim", "stadium",
- "stagnat", "stagnant",
- "staidum", "stadium",
- "stakler", "stalker",
- "stalkes", "stalkers",
- "stamnia", "stamina",
- "staoshi", "satoshi",
- "starins", "strains",
- "startde", "startled",
- "startus", "startups",
- "statits", "statist",
- "statsit", "statist",
- "statuer", "stature",
- "statuse", "statutes",
- "statuts", "statutes",
- "stautes", "statues",
- "stealty", "stealthy",
- "steeles", "steelers",
- "steorid", "steroid",
- "steriel", "sterile",
- "sterlie", "sterile",
- "stickes", "stickers",
- "stiring", "stirring",
- "stirker", "striker",
- "stirrig", "stirring",
- "stitchs", "stitches",
- "stlaker", "stalker",
- "stlyish", "stylish",
- "storeis", "stories",
- "storise", "stories",
- "stormde", "stormed",
- "straigt", "straight",
- "straind", "strained",
- "streamd", "streamed",
- "stregth", "strength",
- "strengh", "strength",
- "streoid", "steroid",
- "stresss", "stresses",
- "strians", "strains",
- "stricty", "strictly",
- "striekr", "striker",
- "stromed", "stormed",
- "stubbon", "stubborn",
- "studing", "studying",
- "stuidos", "studios",
- "stunami", "tsunami",
- "stupidr", "stupider",
- "stupidy", "stupidly",
- "stupire", "stupider",
- "suasage", "sausage",
- "subisdy", "subsidy",
- "subjest", "subjects",
- "subtiel", "subtitle",
- "succede", "succeed",
- "succeds", "succeeds",
- "succees", "succeeds",
- "succesd", "succeeds",
- "suceeds", "succeeds",
- "suddeny", "suddenly",
- "suefull", "usefull",
- "sufferd", "suffered",
- "summonr", "summoner",
- "summore", "summoner",
- "sunggle", "snuggle",
- "sunifre", "sunfire",
- "superme", "supreme",
- "suposed", "supposed",
- "suposes", "supposes",
- "suppoed", "supposed",
- "suppost", "supports",
- "suprass", "surpass",
- "supress", "suppress",
- "suprisd", "suprised",
- "suprise", "surprise",
- "suprize", "surprise",
- "supsend", "suspend",
- "suround", "surround",
- "surpeme", "supreme",
- "surroud", "surround",
- "sweidsh", "swedish",
- "swiflty", "swiftly",
- "swiming", "swimming",
- "switchs", "switches",
- "switfly", "swiftly",
- "swnasea", "swansea",
- "sycning", "syncing",
- "sycther", "scyther",
- "syirans", "syrians",
- "sykward", "skyward",
- "syllabe", "syllable",
- "symetry", "symmetry",
- "symmety", "symmetry",
- "symobls", "symbols",
- "sympaty", "sympathy",
- "symtpom", "symptom",
- "synegry", "synergy",
- "synoynm", "synonym",
- "sypmtom", "symptom",
- "syracue", "syracuse",
- "syrains", "syrians",
- "sysadmn", "sysadmin",
- "systemc", "systemic",
- "sytlish", "stylish",
- "tabacco", "tobacco",
- "tailban", "taliban",
- "tailord", "tailored",
- "talbian", "taliban",
- "tallets", "tallest",
- "tangeld", "tangled",
- "tanlged", "tangled",
- "targetd", "targeted",
- "taryvon", "trayvon",
- "teached", "taught",
- "teaspon", "teaspoon",
- "techeis", "techies",
- "tehcies", "techies",
- "temepst", "tempest",
- "tempels", "temples",
- "tempets", "tempest",
- "templas", "templars",
- "tempset", "tempest",
- "tenacle", "tentacle",
- "tendacy", "tendency",
- "tequlia", "tequila",
- "tesitfy", "testify",
- "testice", "testicle",
- "teusday", "tuesday",
- "thankyu", "thankyou",
- "thearpy", "therapy",
- "theistc", "theistic",
- "theives", "thieves",
- "themsef", "themself",
- "therefo", "thereof",
- "therien", "therein",
- "theroem", "theorem",
- "thesits", "theists",
- "thiests", "theists",
- "thirldy", "thirdly",
- "thirten", "thirteen",
- "thirtsy", "thirsty",
- "thoerem", "theorem",
- "thorats", "throats",
- "thornes", "thrones",
- "thoruim", "thorium",
- "thoughs", "thoughts",
- "threadd", "threaded",
- "threeof", "thereof",
- "thridly", "thirdly",
- "thristy", "thirsty",
- "throast", "throats",
- "throium", "thorium",
- "thryoid", "thyroid",
- "thyorid", "thyroid",
- "thyriod", "thyroid",
- "tigther", "tighter",
- "tiolets", "toilets",
- "tirdent", "trident",
- "titanim", "titanium",
- "tlaking", "talking",
- "tobbaco", "tobacco",
- "toliets", "toilets",
- "tolkein", "tolkien",
- "tomatos", "tomatoes",
- "tongiht", "tonight",
- "tonuges", "tongues",
- "toppins", "toppings",
- "torando", "tornado",
- "torndao", "tornado",
- "torpdeo", "torpedo",
- "torrest", "torrents",
- "tortila", "tortilla",
- "toruney", "tourney",
- "toubles", "troubles",
- "touchda", "touchpad",
- "tounrey", "tourney",
- "tourisy", "touristy",
- "tourits", "tourist",
- "tournes", "tourneys",
- "toursim", "tourism",
- "toursit", "tourist",
- "towords", "towards",
- "trackes", "trackers",
- "trailes", "trailers",
- "traines", "trainers",
- "trainig", "training",
- "tralier", "trailer",
- "tratior", "traitor",
- "traveld", "traveled",
- "travere", "traverse",
- "travesy", "travesty",
- "travles", "travels",
- "treasue", "treasure",
- "treatis", "treaties",
- "tremelo", "tremolo",
- "trendig", "trending",
- "trialer", "trailer",
- "triange", "triangle",
- "triator", "traitor",
- "trickey", "trickery",
- "tridnet", "trident",
- "trimuph", "triumph",
- "trinkes", "trinkets",
- "trinkst", "trinkets",
- "trintiy", "trinity",
- "triolgy", "trilogy",
- "troleld", "trolled",
- "troling", "trolling",
- "tronado", "tornado",
- "tropedo", "torpedo",
- "trudnle", "trundle",
- "truimph", "triumph",
- "trukish", "turkish",
- "trundel", "trundle",
- "trunlde", "trundle",
- "tryahrd", "tryhard",
- "tryavon", "trayvon",
- "tsamina", "stamina",
- "tsnuami", "tsunami",
- "tsuanmi", "tsunami",
- "tsunmai", "tsunami",
- "tuesdsy", "tuesdays",
- "tunnles", "tunnels",
- "turbins", "turbines",
- "turksih", "turkish",
- "turltes", "turtles",
- "turrest", "turrets",
- "turtels", "turtles",
- "tuseday", "tuesday",
- "tusnami", "tsunami",
- "tutrles", "turtles",
- "twiligt", "twilight",
- "tyelnol", "tylenol",
- "typcial", "typical",
- "tyrhard", "tryhard",
- "tyrrany", "tyranny",
- "udpated", "updated",
- "uesfull", "usefull",
- "ugprade", "upgrade",
- "ukarine", "ukraine",
- "ukranie", "ukraine",
- "ukriane", "ukraine",
- "ultimae", "ultimate",
- "umbrela", "umbrella",
- "unahppy", "unhappy",
- "unbannd", "unbanned",
- "underog", "undergo",
- "unfairy", "unfairly",
- "ungoldy", "ungodly",
- "unicors", "unicorns",
- "uniquey", "uniquely",
- "unknwon", "unknown",
- "unkonwn", "unknown",
- "unlcean", "unclean",
- "unlcoks", "unlocks",
- "unlcuky", "unlucky",
- "unlikey", "unlikely",
- "unopend", "unopened",
- "unprone", "unproven",
- "unusabe", "unusable",
- "unworty", "unworthy",
- "upgarde", "upgrade",
- "upgrads", "upgrades",
- "uplaods", "uploads",
- "upsteam", "upstream",
- "urainum", "uranium",
- "uranuim", "uranium",
- "uretrha", "urethra",
- "urkaine", "ukraine",
- "urnaium", "uranium",
- "urugauy", "uruguay",
- "usefull", "useful",
- "usefuly", "usefully",
- "utiltiy", "utility",
- "utopain", "utopian",
- "utpoian", "utopian",
- "vaccins", "vaccines",
- "vaccume", "vacuum",
- "vageuly", "vaguely",
- "vaguley", "vaguely",
- "vairant", "variant",
- "valenca", "valencia",
- "valetta", "valletta",
- "valkyre", "valkyrie",
- "valuabe", "valuable",
- "valuble", "valuable",
- "vampirs", "vampires",
- "vanguad", "vanguard",
- "varaint", "variant",
- "vareity", "variety",
- "varians", "variants",
- "varient", "variant",
- "varisty", "varsity",
- "varitey", "variety",
- "varstiy", "varsity",
- "vasalls", "vassals",
- "vasslas", "vassals",
- "vaugely", "vaguely",
- "vecotrs", "vectors",
- "vectros", "vectors",
- "veitnam", "vietnam",
- "veiwers", "viewers",
- "vendeta", "vendetta",
- "verbaly", "verbally",
- "verical", "vertical",
- "verious", "various",
- "verison", "version",
- "veritgo", "vertigo",
- "versoin", "version",
- "vertgio", "vertigo",
- "vessles", "vessels",
- "vetween", "between",
- "viatmin", "vitamin",
- "vibratr", "vibrator",
- "vicitms", "victims",
- "vientam", "vietnam",
- "vigrins", "virgins",
- "vikigns", "vikings",
- "villian", "villain",
- "villify", "vilify",
- "virbate", "vibrate",
- "virigns", "virgins",
- "virtiol", "vitriol",
- "virutal", "virtual",
- "virutes", "virtues",
- "visable", "visible",
- "visably", "visibly",
- "visbily", "visibly",
- "visting", "visiting",
- "vistors", "visitors",
- "vitaliy", "vitality",
- "vitamis", "vitamins",
- "vitenam", "vietnam",
- "vitirol", "vitriol",
- "vitmain", "vitamin",
- "vitroil", "vitriol",
- "vitrual", "virtual",
- "vitrues", "virtues",
- "volatge", "voltage",
- "volumne", "volume",
- "votlage", "voltage",
- "vrigins", "virgins",
- "waclott", "walcott",
- "wacther", "watcher",
- "waitres", "waiters",
- "waktins", "watkins",
- "warcrat", "warcraft",
- "wardobe", "wardrobe",
- "wariwck", "warwick",
- "warrany", "warranty",
- "warrent", "warrant",
- "warrios", "warriors",
- "warwcik", "warwick",
- "wathcer", "watcher",
- "watiers", "waiters",
- "waviers", "waivers",
- "wawrick", "warwick",
- "wayword", "wayward",
- "webapge", "webpage",
- "webiste", "website",
- "webstie", "website",
- "weigths", "weights",
- "weilded", "wielded",
- "weirldy", "weirdly",
- "weirods", "weirdos",
- "welathy", "wealthy",
- "wendsay", "wednesday",
- "wensday", "wednesday",
- "wepbage", "webpage",
- "weridly", "weirdly",
- "weridos", "weirdos",
- "werstle", "wrestle",
- "wesbite", "website",
- "whaeton", "wheaton",
- "whipser", "whisper",
- "whislte", "whistle",
- "whistel", "whistle",
- "whitsle", "whistle",
- "whsiper", "whisper",
- "wiaters", "waiters",
- "wiavers", "waivers",
- "widgest", "widgets",
- "wieghts", "weights",
- "wigdets", "widgets",
- "windosr", "windsor",
- "winnins", "winnings",
- "winsdor", "windsor",
- "wintson", "winston",
- "wirting", "writing",
- "wisnton", "winston",
- "withces", "witches",
- "witheld", "withheld",
- "withing", "within",
- "withold", "withhold",
- "wlacott", "walcott",
- "wokring", "working",
- "workins", "workings",
- "woudlnt", "wouldnt",
- "woudlve", "wouldve",
- "woulndt", "wouldnt",
- "wreslte", "wrestle",
- "wroking", "working",
- "wtiches", "witches",
- "wupport", "support",
- "yaching", "yachting",
- "younget", "youngest",
- "youseff", "yousef",
- "youself", "yourself",
- "zaelots", "zealots",
- "zealtos", "zealots",
- "zelaots", "zealots",
- "zelaous", "zealous",
- "zimbabe", "zimbabwe",
- "zionsim", "zionism",
- "zionsit", "zionist",
- "zoinism", "zionism",
- "zoinist", "zionist",
- "abbout", "about",
- "abilty", "ability",
- "absail", "abseil",
- "abutts", "abuts",
- "achive", "achieve",
- "acused", "accused",
- "addopt", "adopt",
- "addres", "address",
- "adress", "address",
- "aeriel", "aerial",
- "affort", "afford",
- "agains", "against",
- "aginst", "against",
- "ahppen", "happen",
- "aiport", "airport",
- "aisian", "asian",
- "albiet", "albeit",
- "alchol", "alcohol",
- "aledge", "allege",
- "aleged", "alleged",
- "allign", "align",
- "almsot", "almost",
- "alomst", "almost",
- "alowed", "allowed",
- "alwasy", "always",
- "alwyas", "always",
- "amking", "making",
- "ammend", "amend",
- "amoung", "among",
- "aplied", "applied",
- "appart", "apart",
- "aquire", "acquire",
- "aready", "already",
- "arised", "arose",
- "arival", "arrival",
- "arrary", "array",
- "artice", "article",
- "asetic", "ascetic",
- "asside", "aside",
- "attemp", "attempt",
- "attemt", "attempt",
- "auther", "author",
- "awared", "awarded",
- "bedore", "before",
- "beeing", "being",
- "befoer", "before",
- "beggin", "begin",
- "beleif", "belief",
- "belive", "believe",
- "beteen", "between",
- "betwen", "between",
- "beween", "between",
- "bianry", "binary",
- "boyant", "buoyant",
- "broady", "broadly",
- "buddah", "buddha",
- "buring", "burying",
- "carcas", "carcass",
- "casion", "caisson",
- "casued", "caused",
- "casues", "causes",
- "ceasar", "caesar",
- "cencus", "census",
- "censur", "censor",
- "cheifs", "chiefs",
- "circut", "circuit",
- "clasic", "classic",
- "coform", "conform",
- "comany", "company",
- "coucil", "council",
- "curent", "current",
- "densly", "densely",
- "deside", "decide",
- "devels", "delves",
- "devide", "divide",
- "dieing", "dying",
- "divice", "device",
- "doulbe", "double",
- "dreasm", "dreams",
- "duting", "during",
- "ealier", "earlier",
- "eearly", "early",
- "efford", "effort",
- "emited", "emitted",
- "emnity", "enmity",
- "enduce", "induce",
- "enlish", "english",
- "erally", "orally",
- "eratic", "erratic",
- "ethose", "those",
- "exampt", "exempt",
- "excact", "exact",
- "excell", "excel",
- "exerpt", "excerpt",
- "exinct", "extinct",
- "expell", "expel",
- "expoch", "epoch",
- "extint", "extinct",
- "facist", "fascist",
- "faught", "fought",
- "finaly", "finally",
- "forsaw", "foresaw",
- "fougth", "fought",
- "fourty", "forty",
- "foward", "forward",
- "freind", "friend",
- "fromed", "formed",
- "fufill", "fulfill",
- "futher", "further",
- "gardai", "gardaí",
- "geting", "getting",
- "ghandi", "gandhi",
- "glight", "flight",
- "gloabl", "global",
- "godess", "goddess",
- "guilia", "giulia",
- "guilio", "giulio",
- "habeus", "habeas",
- "harras", "harass",
- "hatian", "haitian",
- "heared", "heard",
- "hertzs", "hertz",
- "hieght", "height",
- "higest", "highest",
- "higway", "highway",
- "honory", "honorary",
- "howver", "however",
- "hstory", "history",
- "hunman", "human",
- "husban", "husband",
- "hvaing", "having",
- "illess", "illness",
- "ilness", "illness",
- "imagin", "imagine",
- "imense", "immense",
- "includ", "include",
- "inital", "initial",
- "interm", "interim",
- "intial", "initial",
- "invlid", "invalid",
- "iunior", "junior",
- "jaques", "jacques",
- "jospeh", "joseph",
- "jouney", "journey",
- "klenex", "kleenex",
- "labled", "labelled",
- "largst", "largest",
- "larrry", "larry",
- "lefted", "left",
- "lenght", "length",
- "lerans", "learns",
- "liason", "liaison",
- "libary", "library",
- "lieing", "lying",
- "lieved", "lived",
- "littel", "little",
- "livley", "lively",
- "lonley", "lonely",
- "mailny", "mainly",
- "markes", "marks",
- "mileau", "milieu",
- "milion", "million",
- "millon", "million",
- "misile", "missile",
- "missen", "mizzen",
- "missle", "missile",
- "mkaing", "making",
- "moderm", "modem",
- "moreso", "more",
- "mounth", "month",
- "myraid", "myriad",
- "naieve", "naive",
- "nestin", "nesting",
- "nineth", "ninth",
- "noveau", "nouveau",
- "occour", "occur",
- "occurr", "occur",
- "offred", "offered",
- "omited", "omitted",
- "ouevre", "oeuvre",
- "oxigen", "oxygen",
- "p0enis", "penis",
- "packge", "package",
- "peaple", "people",
- "pensle", "pencil",
- "peopel", "people",
- "peotry", "poetry",
- "perade", "parade",
- "persan", "person",
- "persue", "pursue",
- "plateu", "plateau",
- "poenis", "penis",
- "poisin", "poison",
- "polute", "pollute",
- "posess", "possess",
- "posion", "poison",
- "prairy", "prairie",
- "prarie", "prairie",
- "preiod", "period",
- "privte", "private",
- "proces", "process",
- "proove", "prove",
- "psuedo", "pseudo",
- "psyhic", "psychic",
- "pucini", "puccini",
- "pumkin", "pumpkin",
- "puting", "putting",
- "pyscic", "psychic",
- "quizes", "quizzes",
- "quuery", "query",
- "racaus", "raucous",
- "radify", "ratify",
- "raelly", "really",
- "reacll", "recall",
- "realyl", "really",
- "reched", "reached",
- "recide", "reside",
- "recrod", "record",
- "refect", "reflect",
- "relaly", "really",
- "renewl", "renewal",
- "retuns", "returns",
- "reveiw", "review",
- "rhymme", "rhyme",
- "rigeur", "rigueur",
- "rocord", "record",
- "rougly", "roughly",
- "runing", "running",
- "rythem", "rhythm",
- "rythim", "rhythm",
- "saftey", "safety",
- "salery", "salary",
- "satisy", "satisfy",
- "satric", "satiric",
- "saught", "sought",
- "scince", "science",
- "scirpt", "script",
- "seceed", "succeed",
- "seinor", "senior",
- "sepina", "subpoena",
- "sevice", "service",
- "shamen", "shaman",
- "sheild", "shield",
- "shiped", "shipped",
- "shorly", "shortly",
- "shoudl", "should",
- "shreak", "shriek",
- "siezed", "seized",
- "sixtin", "sistine",
- "skiped", "skipped",
- "sneeks", "sneaks",
- "somene", "someone",
- "soruce", "source",
- "soudns", "sounds",
- "sourth", "south",
- "speach", "speech",
- "spects", "aspects",
- "spoace", "space",
- "sqaure", "square",
- "staion", "station",
- "stange", "strange",
- "stilus", "stylus",
- "stirrs", "stirs",
- "stopry", "story",
- "strnad", "strand",
- "studdy", "study",
- "suceed", "succeed",
- "sucess", "success",
- "sucide", "suicide",
- "sumary", "summary",
- "suport", "support",
- "supose", "suppose",
- "surfce", "surface",
- "surley", "surly",
- "swaers", "swears",
- "swepth", "swept",
- "talekd", "talked",
- "theese", "these",
- "therby", "thereby",
- "thigns", "things",
- "thigsn", "things",
- "thikns", "thinks",
- "thiunk", "think",
- "thnigs", "things",
- "threee", "three",
- "tkaing", "taking",
- "tounge", "tongue",
- "tourch", "torch",
- "towrad", "toward",
- "trafic", "traffic",
- "troups", "troupes",
- "truely", "truly",
- "twelth", "twelfth",
- "tyrany", "tyranny",
- "unabel", "unable",
- "unkown", "unknown",
- "unmont", "unmount",
- "unmout", "unmount",
- "untill", "until",
- "usally", "usually",
- "useage", "usage",
- "useing", "using",
- "usualy", "usually",
- "vaccum", "vacuum",
- "variey", "variety",
- "varing", "varying",
- "varity", "variety",
- "vasall", "vassal",
- "vigeur", "vigueur",
- "villin", "villain",
- "vreity", "variety",
- "vriety", "variety",
- "whants", "wants",
- "wheras", "whereas",
- "wheter", "whether",
- "wholey", "wholly",
- "whther", "whether",
- "wnated", "wanted",
- "writen", "written",
- "yaerly", "yearly",
- "yotube", "youtube",
- "zeebra", "zebra",
- "abotu", "about",
- "adres", "address",
- "afair", "affair",
- "agian", "again",
- "agina", "again",
- "agred", "agreed",
- "alege", "allege",
- "alsot", "also",
- "altho", "although",
- "amung", "among",
- "anual", "annual",
- "aroud", "around",
- "arund", "around",
- "asign", "assign",
- "assit", "assist",
- "asume", "assume",
- "atain", "attain",
- "autor", "author",
- "baout", "about",
- "blaim", "blame",
- "boaut", "bout",
- "boook", "book",
- "borke", "broke",
- "breif", "brief",
- "caost", "coast",
- "casue", "cause",
- "chasr", "chaser",
- "cheif", "chief",
- "chuch", "church",
- "claer", "clear",
- "clera", "clear",
- "coudl", "could",
- "crowm", "crown",
- "deram", "dram",
- "diety", "deity",
- "doens", "does",
- "doign", "doing",
- "donig", "doing",
- "drnik", "drink",
- "durig", "during",
- "earnt", "earned",
- "eigth", "eighth",
- "eiter", "either",
- "emtpy", "empty",
- "endig", "ending",
- "eveyr", "every",
- "exept", "except",
- "eyars", "years",
- "eyasr", "years",
- "fiels", "fields",
- "firts", "flirts",
- "fleed", "fled",
- "fomed", "formed",
- "foucs", "focus",
- "foudn", "found",
- "fouth", "fourth",
- "frome", "from",
- "ganes", "games",
- "gaurd", "guard",
- "gerat", "great",
- "gogin", "going",
- "goign", "going",
- "gonig", "going",
- "graet", "great",
- "greif", "grief",
- "gropu", "group",
- "guage", "gauge",
- "hapen", "happen",
- "herad", "heard",
- "heroe", "hero",
- "higer", "higher",
- "housr", "hours",
- "htere", "there",
- "htikn", "think",
- "hting", "thing",
- "htink", "think",
- "hwihc", "which",
- "hwile", "while",
- "hwole", "whole",
- "idaes", "ideas",
- "idesa", "ideas",
- "ihaca", "ithaca",
- "knwos", "knows",
- "konws", "knows",
- "lastr", "last",
- "lavae", "larvae",
- "layed", "laid",
- "leage", "league",
- "leanr", "lean",
- "leran", "learn",
- "levle", "level",
- "lible", "libel",
- "liekd", "liked",
- "liuke", "like",
- "lmits", "limits",
- "lonly", "lonely",
- "lukid", "likud",
- "lybia", "libya",
- "maked", "marked",
- "makse", "makes",
- "mamal", "mammal",
- "mileu", "milieu",
- "mkaes", "makes",
- "modle", "model",
- "moent", "moment",
- "moeny", "money",
- "monts", "months",
- "movei", "movie",
- "muder", "murder",
- "mysef", "myself",
- "neice", "niece",
- "ninty", "ninety",
- "ocurr", "occur",
- "oging", "going",
- "opose", "oppose",
- "orded", "ordered",
- "orgin", "origin",
- "otehr", "other",
- "ouput", "output",
- "owudl", "would",
- "paide", "paid",
- "palce", "place",
- "pased", "passed",
- "payed", "paid",
- "peice", "piece",
- "peoms", "poems",
- "poety", "poetry",
- "pwoer", "power",
- "qtuie", "quite",
- "qutie", "quite",
- "realy", "really",
- "repid", "rapid",
- "rised", "raised",
- "rulle", "rule",
- "rwite", "write",
- "rythm", "rhythm",
- "safty", "safety",
- "scoll", "scroll",
- "seach", "search",
- "seige", "siege",
- "seing", "seeing",
- "sence", "sense",
- "sicne", "since",
- "sieze", "seize",
- "sinse", "sines",
- "slowy", "slowly",
- "snese", "sneeze",
- "soley", "solely",
- "sotry", "story",
- "sotyr", "satyr",
- "soudn", "sound",
- "sould", "could",
- "spred", "spread",
- "stlye", "style",
- "stong", "strong",
- "stoyr", "story",
- "strat", "start",
- "stroy", "story",
- "suppy", "supply",
- "swaer", "swear",
- "syrap", "syrup",
- "sytem", "system",
- "sytle", "style",
- "tatoo", "tattoo",
- "thast", "that",
- "theif", "thief",
- "theri", "their",
- "thgat", "that",
- "thier", "their",
- "thign", "thing",
- "thikn", "think",
- "thnig", "thing",
- "thrid", "third",
- "thsoe", "those",
- "thyat", "that",
- "tihkn", "think",
- "timne", "time",
- "tiome", "time",
- "tkaes", "takes",
- "todya", "today",
- "tyhat", "that",
- "unsed", "used",
- "weild", "wield",
- "whant", "want",
- "whcih", "which",
- "whihc", "which",
- "whith", "with",
- "whlch", "which",
- "wholy", "wholly",
- "wierd", "weird",
- "wille", "will",
- "willk", "will",
- "withh", "with",
- "witht", "with",
- "wiull", "will",
- "wnats", "wants",
- "wohle", "whole",
- "worls", "world",
- "woudl", "would",
- "wriet", "write",
- "wroet", "wrote",
- "yaers", "years",
- "yatch", "yacht",
- "yearm", "year",
- "yeasr", "years",
- "yeild", "yield",
- "yeras", "years",
- "yersa", "years",
- "agin", "again",
- "agre", "agree",
- "ahev", "have",
- "ahve", "have",
- "alse", "else",
- "amke", "make",
- "anbd", "and",
- "andd", "and",
- "apon", "upon",
- "aslo", "also",
- "awya", "away",
- "bakc", "back",
- "bcak", "back",
- "clas", "class",
- "cpoy", "coy",
- "cxan", "cyan",
- "daed", "dead",
- "dael", "deal",
- "diea", "idea",
- "doub", "doubt",
- "dyas", "dryas",
- "eahc", "each",
- "efel", "evil",
- "eles", "eels",
- "ened", "need",
- "enxt", "next",
- "esle", "else",
- "eyar", "year",
- "fatc", "fact",
- "fidn", "find",
- "fomr", "from",
- "grwo", "grow",
- "haev", "have",
- "halp", "help",
- "holf", "hold",
- "hten", "then",
- "htey", "they",
- "htis", "this",
- "hvae", "have",
- "hvea", "have",
- "inot", "into",
- "iwll", "will",
- "iwth", "with",
- "jstu", "just",
- "jsut", "just",
- "knwo", "know",
- "konw", "know",
- "kwno", "know",
- "liek", "like",
- "loev", "love",
- "lveo", "love",
- "lvoe", "love",
- "mkae", "make",
- "mkea", "make",
- "mroe", "more",
- "nkow", "know",
- "nkwo", "know",
- "nmae", "name",
- "noth", "north",
- "nowe", "now",
- "omre", "more",
- "onot", "note",
- "onyl", "only",
- "owrk", "work",
- "peom", "poem",
- "pich", "pitch",
- "rela", "real",
- "sasy", "says",
- "smae", "same",
- "smoe", "some",
- "soem", "some",
- "sohw", "show",
- "stpo", "stop",
- "suop", "soup",
- "syas", "says",
- "tahn", "than",
- "taht", "that",
- "tast", "taste",
- "tath", "that",
- "tehy", "they",
- "tghe", "the",
- "ther", "there",
- "thge", "the",
- "thna", "than",
- "thne", "then",
- "thsi", "this",
- "thta", "that",
- "tiem", "time",
- "tihs", "this",
- "tjhe", "the",
- "tkae", "take",
- "tood", "todo",
- "tust", "trust",
- "twon", "town",
- "twpo", "two",
- "tyhe", "they",
- "uise", "use",
- "vell", "well",
- "veyr", "very",
- "vrey", "very",
- "vyer", "very",
- "vyre", "very",
- "waht", "what",
- "wass", "was",
- "watn", "want",
- "weas", "was",
- "wehn", "when",
- "whic", "which",
- "whta", "what",
- "wich", "which",
- "wief", "wife",
- "wiew", "view",
- "wiht", "with",
- "witn", "with",
- "wnat", "want",
- "wokr", "work",
- "wrok", "work",
- "wtih", "with",
- "yaer", "year",
- "yera", "year",
- "yrea", "year",
- "ytou", "you",
- "adn", "and",
- "ect", "etc",
- "nto", "not",
- "teh", "the",
- "thn", "then",
- "tje", "the",
- "whn", "when",
- "wih", "with",
- "yuo", "you",
-}
-
-// DictAmerican converts UK spellings to US spellings
-var DictAmerican = []string{
- "institutionalisation", "institutionalization",
- "internationalisation", "internationalization",
- "professionalisation", "professionalization",
- "compartmentalising", "compartmentalizing",
- "institutionalising", "institutionalizing",
- "internationalising", "internationalizing",
- "compartmentalised", "compartmentalized",
- "compartmentalises", "compartmentalizes",
- "decriminalisation", "decriminalization",
- "denationalisation", "denationalization",
- "fictionalisations", "fictionalizations",
- "institutionalised", "institutionalized",
- "institutionalises", "institutionalizes",
- "intellectualising", "intellectualizing",
- "internationalised", "internationalized",
- "internationalises", "internationalizes",
- "pedestrianisation", "pedestrianization",
- "professionalising", "professionalizing",
- "archaeologically", "archeologically",
- "compartmentalise", "compartmentalize",
- "decentralisation", "decentralization",
- "demilitarisation", "demilitarization",
- "externalisations", "externalizations",
- "fictionalisation", "fictionalization",
- "institutionalise", "institutionalize",
- "intellectualised", "intellectualized",
- "intellectualises", "intellectualizes",
- "internationalise", "internationalize",
- "nationalisations", "nationalizations",
- "palaeontologists", "paleontologists",
- "professionalised", "professionalized",
- "professionalises", "professionalizes",
- "rationalisations", "rationalizations",
- "sensationalising", "sensationalizing",
- "sentimentalising", "sentimentalizing",
- "acclimatisation", "acclimatization",
- "bougainvillaeas", "bougainvilleas",
- "commercialising", "commercializing",
- "conceptualising", "conceptualizing",
- "contextualising", "contextualizing",
- "crystallisation", "crystallization",
- "decriminalising", "decriminalizing",
- "democratisation", "democratization",
- "denationalising", "denationalizing",
- "depersonalising", "depersonalizing",
- "desensitisation", "desensitization",
- "destabilisation", "destabilization",
- "disorganisation", "disorganization",
- "extemporisation", "extemporization",
- "externalisation", "externalization",
- "familiarisation", "familiarization",
- "generalisations", "generalizations",
- "hospitalisation", "hospitalization",
- "individualising", "individualizing",
- "industrialising", "industrializing",
- "intellectualise", "intellectualize",
- "internalisation", "internalization",
- "manoeuvrability", "maneuverability",
- "marginalisation", "marginalization",
- "materialisation", "materialization",
- "miniaturisation", "miniaturization",
- "nationalisation", "nationalization",
- "neighbourliness", "neighborliness",
- "overemphasising", "overemphasizing",
- "palaeontologist", "paleontologist",
- "particularising", "particularizing",
- "pedestrianising", "pedestrianizing",
- "professionalise", "professionalize",
- "psychoanalysing", "psychoanalyzing",
- "rationalisation", "rationalization",
- "reorganisations", "reorganizations",
- "revolutionising", "revolutionizing",
- "sensationalised", "sensationalized",
- "sensationalises", "sensationalizes",
- "sentimentalised", "sentimentalized",
- "sentimentalises", "sentimentalizes",
- "specialisations", "specializations",
- "standardisation", "standardization",
- "synchronisation", "synchronization",
- "systematisation", "systematization",
- "aggrandisement", "aggrandizement",
- "anaesthetising", "anesthetizing",
- "archaeological", "archeological",
- "archaeologists", "archeologists",
- "bougainvillaea", "bougainvillea",
- "characterising", "characterizing",
- "collectivising", "collectivizing",
- "commercialised", "commercialized",
- "commercialises", "commercializes",
- "conceptualised", "conceptualized",
- "conceptualises", "conceptualizes",
- "contextualised", "contextualized",
- "contextualises", "contextualizes",
- "decentralising", "decentralizing",
- "decriminalised", "decriminalized",
- "decriminalises", "decriminalizes",
- "dehumanisation", "dehumanization",
- "demilitarising", "demilitarizing",
- "demobilisation", "demobilization",
- "demoralisation", "demoralization",
- "denationalised", "denationalized",
- "denationalises", "denationalizes",
- "depersonalised", "depersonalized",
- "depersonalises", "depersonalizes",
- "disembowelling", "disemboweling",
- "dramatisations", "dramatizations",
- "editorialising", "editorializing",
- "encyclopaedias", "encyclopedias",
- "fictionalising", "fictionalizing",
- "fraternisation", "fraternization",
- "generalisation", "generalization",
- "gynaecological", "gynecological",
- "gynaecologists", "gynecologists",
- "haematological", "hematological",
- "haematologists", "hematologists",
- "immobilisation", "immobilization",
- "individualised", "individualized",
- "individualises", "individualizes",
- "industrialised", "industrialized",
- "industrialises", "industrializes",
- "liberalisation", "liberalization",
- "monopolisation", "monopolization",
- "naturalisation", "naturalization",
- "neighbourhoods", "neighborhoods",
- "neutralisation", "neutralization",
- "organisational", "organizational",
- "outmanoeuvring", "outmaneuvering",
- "overemphasised", "overemphasized",
- "overemphasises", "overemphasizes",
- "paediatricians", "pediatricians",
- "particularised", "particularized",
- "particularises", "particularizes",
- "pasteurisation", "pasteurization",
- "pedestrianised", "pedestrianized",
- "pedestrianises", "pedestrianizes",
- "philosophising", "philosophizing",
- "politicisation", "politicization",
- "popularisation", "popularization",
- "pressurisation", "pressurization",
- "prioritisation", "prioritization",
- "privatisations", "privatizations",
- "propagandising", "propagandizing",
- "psychoanalysed", "psychoanalyzed",
- "psychoanalyses", "psychoanalyzes",
- "regularisation", "regularization",
- "reorganisation", "reorganization",
- "revolutionised", "revolutionized",
- "revolutionises", "revolutionizes",
- "secularisation", "secularization",
- "sensationalise", "sensationalize",
- "sentimentalise", "sentimentalize",
- "serialisations", "serializations",
- "specialisation", "specialization",
- "sterilisations", "sterilizations",
- "stigmatisation", "stigmatization",
- "transistorised", "transistorized",
- "unrecognisable", "unrecognizable",
- "visualisations", "visualizations",
- "westernisation", "westernization",
- "accessorising", "accessorizing",
- "acclimatising", "acclimatizing",
- "amortisations", "amortizations",
- "amphitheatres", "amphitheaters",
- "anaesthetised", "anesthetized",
- "anaesthetises", "anesthetizes",
- "anaesthetists", "anesthetists",
- "archaeologist", "archeologist",
- "backpedalling", "backpedaling",
- "behaviourists", "behaviorists",
- "breathalysers", "breathalyzers",
- "breathalysing", "breathalyzing",
- "callisthenics", "calisthenics",
- "cannibalising", "cannibalizing",
- "characterised", "characterized",
- "characterises", "characterizes",
- "circularising", "circularizing",
- "clarinettists", "clarinetists",
- "collectivised", "collectivized",
- "collectivises", "collectivizes",
- "commercialise", "commercialize",
- "computerising", "computerizing",
- "conceptualise", "conceptualize",
- "contextualise", "contextualize",
- "criminalising", "criminalizing",
- "crystallising", "crystallizing",
- "decentralised", "decentralized",
- "decentralises", "decentralizes",
- "decriminalise", "decriminalize",
- "demilitarised", "demilitarized",
- "demilitarises", "demilitarizes",
- "democratising", "democratizing",
- "denationalise", "denationalize",
- "depersonalise", "depersonalize",
- "desensitising", "desensitizing",
- "destabilising", "destabilizing",
- "disembowelled", "disemboweled",
- "dishonourable", "dishonorable",
- "dishonourably", "dishonorably",
- "dramatisation", "dramatization",
- "editorialised", "editorialized",
- "editorialises", "editorializes",
- "encyclopaedia", "encyclopedia",
- "encyclopaedic", "encyclopedic",
- "extemporising", "extemporizing",
- "externalising", "externalizing",
- "familiarising", "familiarizing",
- "fertilisation", "fertilization",
- "fictionalised", "fictionalized",
- "fictionalises", "fictionalizes",
- "formalisation", "formalization",
- "fossilisation", "fossilization",
- "globalisation", "globalization",
- "gynaecologist", "gynecologist",
- "haematologist", "hematologist",
- "haemophiliacs", "hemophiliacs",
- "haemorrhaging", "hemorrhaging",
- "harmonisation", "harmonization",
- "hospitalising", "hospitalizing",
- "hypothesising", "hypothesizing",
- "immortalising", "immortalizing",
- "individualise", "individualize",
- "industrialise", "industrialize",
- "internalising", "internalizing",
- "marginalising", "marginalizing",
- "materialising", "materializing",
- "mechanisation", "mechanization",
- "memorialising", "memorializing",
- "miniaturising", "miniaturizing",
- "miscatalogued", "miscataloged",
- "misdemeanours", "misdemeanors",
- "multicoloured", "multicolored",
- "nationalising", "nationalizing",
- "neighbourhood", "neighborhood",
- "normalisation", "normalization",
- "organisations", "organizations",
- "outmanoeuvred", "outmaneuvered",
- "outmanoeuvres", "outmaneuvers",
- "overemphasise", "overemphasize",
- "paediatrician", "pediatrician",
- "palaeontology", "paleontology",
- "particularise", "particularize",
- "passivisation", "passivization",
- "patronisingly", "patronizingly",
- "pedestrianise", "pedestrianize",
- "personalising", "personalizing",
- "philosophised", "philosophized",
- "philosophises", "philosophizes",
- "privatisation", "privatization",
- "propagandised", "propagandized",
- "propagandises", "propagandizes",
- "proselytisers", "proselytizers",
- "proselytising", "proselytizing",
- "psychoanalyse", "psychoanalyze",
- "pulverisation", "pulverization",
- "rationalising", "rationalizing",
- "reconnoitring", "reconnoitering",
- "revolutionise", "revolutionize",
- "romanticising", "romanticizing",
- "serialisation", "serialization",
- "socialisation", "socialization",
- "stabilisation", "stabilization",
- "standardising", "standardizing",
- "sterilisation", "sterilization",
- "subsidisation", "subsidization",
- "synchronising", "synchronizing",
- "systematising", "systematizing",
- "tantalisingly", "tantalizingly",
- "underutilised", "underutilized",
- "victimisation", "victimization",
- "visualisation", "visualization",
- "vocalisations", "vocalizations",
- "vulgarisation", "vulgarization",
- "accessorised", "accessorized",
- "accessorises", "accessorizes",
- "acclimatised", "acclimatized",
- "acclimatises", "acclimatizes",
- "amortisation", "amortization",
- "amphitheatre", "amphitheater",
- "anaesthetics", "anesthetics",
- "anaesthetise", "anesthetize",
- "anaesthetist", "anesthetist",
- "antagonising", "antagonizing",
- "appetisingly", "appetizingly",
- "backpedalled", "backpedaled",
- "bastardising", "bastardizing",
- "behaviourism", "behaviorism",
- "behaviourist", "behaviorist",
- "bowdlerising", "bowdlerizing",
- "breathalysed", "breathalyzed",
- "breathalyser", "breathalyzer",
- "breathalyses", "breathalyzes",
- "cannibalised", "cannibalized",
- "cannibalises", "cannibalizes",
- "capitalising", "capitalizing",
- "caramelising", "caramelizing",
- "categorising", "categorizing",
- "centigrammes", "centigrams",
- "centralising", "centralizing",
- "centrepieces", "centerpieces",
- "characterise", "characterize",
- "circularised", "circularized",
- "circularises", "circularizes",
- "clarinettist", "clarinetist",
- "collectivise", "collectivize",
- "colonisation", "colonization",
- "computerised", "computerized",
- "computerises", "computerizes",
- "criminalised", "criminalized",
- "criminalises", "criminalizes",
- "crystallised", "crystallized",
- "crystallises", "crystallizes",
- "decentralise", "decentralize",
- "dehumanising", "dehumanizing",
- "demilitarise", "demilitarize",
- "demobilising", "demobilizing",
- "democratised", "democratized",
- "democratises", "democratizes",
- "demoralising", "demoralizing",
- "desensitised", "desensitized",
- "desensitises", "desensitizes",
- "destabilised", "destabilized",
- "destabilises", "destabilizes",
- "discolouring", "discoloring",
- "dishonouring", "dishonoring",
- "disorganised", "disorganized",
- "editorialise", "editorialize",
- "endeavouring", "endeavoring",
- "equalisation", "equalization",
- "evangelising", "evangelizing",
- "extemporised", "extemporized",
- "extemporises", "extemporizes",
- "externalised", "externalized",
- "externalises", "externalizes",
- "familiarised", "familiarized",
- "familiarises", "familiarizes",
- "fictionalise", "fictionalize",
- "finalisation", "finalization",
- "fraternising", "fraternizing",
- "generalising", "generalizing",
- "haemophiliac", "hemophiliac",
- "haemorrhaged", "hemorrhaged",
- "haemorrhages", "hemorrhages",
- "haemorrhoids", "hemorrhoids",
- "homoeopathic", "homeopathic",
- "homogenising", "homogenizing",
- "hospitalised", "hospitalized",
- "hospitalises", "hospitalizes",
- "hypothesised", "hypothesized",
- "hypothesises", "hypothesizes",
- "idealisation", "idealization",
- "immobilisers", "immobilizers",
- "immobilising", "immobilizing",
- "immortalised", "immortalized",
- "immortalises", "immortalizes",
- "immunisation", "immunization",
- "initialising", "initializing",
- "internalised", "internalized",
- "internalises", "internalizes",
- "jeopardising", "jeopardizing",
- "legalisation", "legalization",
- "legitimising", "legitimizing",
- "liberalising", "liberalizing",
- "manoeuvrable", "maneuverable",
- "manoeuvrings", "maneuverings",
- "marginalised", "marginalized",
- "marginalises", "marginalizes",
- "marvellously", "marvelously",
- "materialised", "materialized",
- "materialises", "materializes",
- "maximisation", "maximization",
- "memorialised", "memorialized",
- "memorialises", "memorializes",
- "metabolising", "metabolizing",
- "militarising", "militarizing",
- "milligrammes", "milligrams",
- "miniaturised", "miniaturized",
- "miniaturises", "miniaturizes",
- "misbehaviour", "misbehavior",
- "misdemeanour", "misdemeanor",
- "mobilisation", "mobilization",
- "moisturisers", "moisturizers",
- "moisturising", "moisturizing",
- "monopolising", "monopolizing",
- "moustachioed", "mustachioed",
- "nationalised", "nationalized",
- "nationalises", "nationalizes",
- "naturalising", "naturalizing",
- "neighbouring", "neighboring",
- "neutralising", "neutralizing",
- "oesophaguses", "esophaguses",
- "organisation", "organization",
- "orthopaedics", "orthopedics",
- "outmanoeuvre", "outmaneuver",
- "palaeolithic", "paleolithic",
- "pasteurising", "pasteurizing",
- "personalised", "personalized",
- "personalises", "personalizes",
- "philosophise", "philosophize",
- "plagiarising", "plagiarizing",
- "ploughshares", "plowshares",
- "polarisation", "polarization",
- "politicising", "politicizing",
- "popularising", "popularizing",
- "pressurising", "pressurizing",
- "prioritising", "prioritizing",
- "propagandise", "propagandize",
- "proselytised", "proselytized",
- "proselytiser", "proselytizer",
- "proselytises", "proselytizes",
- "radicalising", "radicalizing",
- "rationalised", "rationalized",
- "rationalises", "rationalizes",
- "realisations", "realizations",
- "recognisable", "recognizable",
- "recognisably", "recognizably",
- "recognisance", "recognizance",
- "reconnoitred", "reconnoitered",
- "reconnoitres", "reconnoiters",
- "regularising", "regularizing",
- "reorganising", "reorganizing",
- "revitalising", "revitalizing",
- "rhapsodising", "rhapsodizing",
- "romanticised", "romanticized",
- "romanticises", "romanticizes",
- "scandalising", "scandalizing",
- "scrutinising", "scrutinizing",
- "secularising", "secularizing",
- "specialising", "specializing",
- "squirrelling", "squirreling",
- "standardised", "standardized",
- "standardises", "standardizes",
- "stigmatising", "stigmatizing",
- "sympathisers", "sympathizers",
- "sympathising", "sympathizing",
- "synchronised", "synchronized",
- "synchronises", "synchronizes",
- "synthesisers", "synthesizers",
- "synthesising", "synthesizing",
- "systematised", "systematized",
- "systematises", "systematizes",
- "technicolour", "technicolor",
- "theatregoers", "theatergoers",
- "traumatising", "traumatizing",
- "trivialising", "trivializing",
- "unauthorised", "unauthorized",
- "uncatalogued", "uncataloged",
- "unfavourable", "unfavorable",
- "unfavourably", "unfavorably",
- "unionisation", "unionization",
- "unrecognised", "unrecognized",
- "untrammelled", "untrammeled",
- "urbanisation", "urbanization",
- "vaporisation", "vaporization",
- "vocalisation", "vocalization",
- "watercolours", "watercolors",
- "westernising", "westernizing",
- "accessorise", "accessorize",
- "acclimatise", "acclimatize",
- "agonisingly", "agonizingly",
- "amortisable", "amortizable",
- "anaesthesia", "anesthesia",
- "anaesthetic", "anesthetic",
- "anglicising", "anglicizing",
- "antagonised", "antagonized",
- "antagonises", "antagonizes",
- "apologising", "apologizing",
- "archaeology", "archeology",
- "authorising", "authorizing",
- "bastardised", "bastardized",
- "bastardises", "bastardizes",
- "bedevilling", "bedeviling",
- "behavioural", "behavioral",
- "belabouring", "belaboring",
- "bowdlerised", "bowdlerized",
- "bowdlerises", "bowdlerizes",
- "breathalyse", "breathalyze",
- "brutalising", "brutalizing",
- "cannibalise", "cannibalize",
- "capitalised", "capitalized",
- "capitalises", "capitalizes",
- "caramelised", "caramelized",
- "caramelises", "caramelizes",
- "carbonising", "carbonizing",
- "cataloguing", "cataloging",
- "categorised", "categorized",
- "categorises", "categorizes",
- "cauterising", "cauterizing",
- "centigramme", "centigram",
- "centilitres", "centiliters",
- "centimetres", "centimeters",
- "centralised", "centralized",
- "centralises", "centralizes",
- "centrefolds", "centerfolds",
- "centrepiece", "centerpiece",
- "channelling", "channeling",
- "chequebooks", "checkbooks",
- "circularise", "circularize",
- "colourfully", "colorfully",
- "colourizing", "colorizing",
- "computerise", "computerize",
- "councillors", "councilors",
- "counselling", "counseling",
- "counsellors", "counselors",
- "criminalise", "criminalize",
- "criticising", "criticizing",
- "crystallise", "crystallize",
- "customising", "customizing",
- "defenceless", "defenseless",
- "dehumanised", "dehumanized",
- "dehumanises", "dehumanizes",
- "demobilised", "demobilized",
- "demobilises", "demobilizes",
- "democratise", "democratize",
- "demoralised", "demoralized",
- "demoralises", "demoralizes",
- "deodorising", "deodorizing",
- "desensitise", "desensitize",
- "destabilise", "destabilize",
- "discoloured", "discolored",
- "dishevelled", "disheveled",
- "dishonoured", "dishonored",
- "dramatising", "dramatizing",
- "economising", "economizing",
- "empathising", "empathizing",
- "emphasising", "emphasizing",
- "endeavoured", "endeavored",
- "epitomising", "epitomizing",
- "evangelised", "evangelized",
- "evangelises", "evangelizes",
- "extemporise", "extemporize",
- "externalise", "externalize",
- "factorising", "factorizing",
- "familiarise", "familiarize",
- "fantasising", "fantasizing",
- "favouritism", "favoritism",
- "fertilisers", "fertilizers",
- "fertilising", "fertilizing",
- "flavourings", "flavorings",
- "flavourless", "flavorless",
- "flavoursome", "flavorsome",
- "formalising", "formalizing",
- "fossilising", "fossilizing",
- "fraternised", "fraternized",
- "fraternises", "fraternizes",
- "galvanising", "galvanizing",
- "generalised", "generalized",
- "generalises", "generalizes",
- "ghettoising", "ghettoizing",
- "globalising", "globalizing",
- "gruellingly", "gruelingly",
- "gynaecology", "gynecology",
- "haematology", "hematology",
- "haemoglobin", "hemoglobin",
- "haemophilia", "hemophilia",
- "haemorrhage", "hemorrhage",
- "harmonising", "harmonizing",
- "homoeopaths", "homeopaths",
- "homoeopathy", "homeopathy",
- "homogenised", "homogenized",
- "homogenises", "homogenizes",
- "hospitalise", "hospitalize",
- "hybridising", "hybridizing",
- "hypnotising", "hypnotizing",
- "hypothesise", "hypothesize",
- "immobilised", "immobilized",
- "immobiliser", "immobilizer",
- "immobilises", "immobilizes",
- "immortalise", "immortalize",
- "impanelling", "impaneling",
- "imperilling", "imperiling",
- "initialised", "initialized",
- "initialises", "initializes",
- "initialling", "initialing",
- "instalments", "installments",
- "internalise", "internalize",
- "italicising", "italicizing",
- "jeopardised", "jeopardized",
- "jeopardises", "jeopardizes",
- "kilogrammes", "kilograms",
- "legitimised", "legitimized",
- "legitimises", "legitimizes",
- "liberalised", "liberalized",
- "liberalises", "liberalizes",
- "lionisation", "lionization",
- "liquidisers", "liquidizers",
- "liquidising", "liquidizing",
- "magnetising", "magnetizing",
- "manoeuvring", "maneuvering",
- "marginalise", "marginalize",
- "marshalling", "marshaling",
- "materialise", "materialize",
- "mechanising", "mechanizing",
- "memorialise", "memorialize",
- "mesmerising", "mesmerizing",
- "metabolised", "metabolized",
- "metabolises", "metabolizes",
- "micrometres", "micrometers",
- "militarised", "militarized",
- "militarises", "militarizes",
- "milligramme", "milligram",
- "millilitres", "milliliters",
- "millimetres", "millimeters",
- "miniaturise", "miniaturize",
- "modernising", "modernizing",
- "moisturised", "moisturized",
- "moisturiser", "moisturizer",
- "moisturises", "moisturizes",
- "monopolised", "monopolized",
- "monopolises", "monopolizes",
- "nationalise", "nationalize",
- "naturalised", "naturalized",
- "naturalises", "naturalizes",
- "neighbourly", "neighborly",
- "neutralised", "neutralized",
- "neutralises", "neutralizes",
- "normalising", "normalizing",
- "orthopaedic", "orthopedic",
- "ostracising", "ostracizing",
- "oxidisation", "oxidization",
- "paediatrics", "pediatrics",
- "paedophiles", "pedophiles",
- "paedophilia", "pedophilia",
- "passivising", "passivizing",
- "pasteurised", "pasteurized",
- "pasteurises", "pasteurizes",
- "patronising", "patronizing",
- "personalise", "personalize",
- "plagiarised", "plagiarized",
- "plagiarises", "plagiarizes",
- "ploughshare", "plowshare",
- "politicised", "politicized",
- "politicises", "politicizes",
- "popularised", "popularized",
- "popularises", "popularizes",
- "praesidiums", "presidiums",
- "pressurised", "pressurized",
- "pressurises", "pressurizes",
- "prioritised", "prioritized",
- "prioritises", "prioritizes",
- "privatising", "privatizing",
- "proselytise", "proselytize",
- "publicising", "publicizing",
- "pulverising", "pulverizing",
- "quarrelling", "quarreling",
- "radicalised", "radicalized",
- "radicalises", "radicalizes",
- "randomising", "randomizing",
- "rationalise", "rationalize",
- "realisation", "realization",
- "recognising", "recognizing",
- "reconnoitre", "reconnoiter",
- "regularised", "regularized",
- "regularises", "regularizes",
- "remodelling", "remodeling",
- "reorganised", "reorganized",
- "reorganises", "reorganizes",
- "revitalised", "revitalized",
- "revitalises", "revitalizes",
- "rhapsodised", "rhapsodized",
- "rhapsodises", "rhapsodizes",
- "romanticise", "romanticize",
- "scandalised", "scandalized",
- "scandalises", "scandalizes",
- "sceptically", "skeptically",
- "scrutinised", "scrutinized",
- "scrutinises", "scrutinizes",
- "secularised", "secularized",
- "secularises", "secularizes",
- "sensitising", "sensitizing",
- "serialising", "serializing",
- "sermonising", "sermonizing",
- "shrivelling", "shriveling",
- "signalising", "signalizing",
- "snorkelling", "snorkeling",
- "snowploughs", "snowplow",
- "socialising", "socializing",
- "solemnising", "solemnizing",
- "specialised", "specialized",
- "specialises", "specializes",
- "squirrelled", "squirreled",
- "stabilisers", "stabilizers",
- "stabilising", "stabilizing",
- "standardise", "standardize",
- "stencilling", "stenciling",
- "sterilisers", "sterilizers",
- "sterilising", "sterilizing",
- "stigmatised", "stigmatized",
- "stigmatises", "stigmatizes",
- "subsidisers", "subsidizers",
- "subsidising", "subsidizing",
- "summarising", "summarizing",
- "symbolising", "symbolizing",
- "sympathised", "sympathized",
- "sympathiser", "sympathizer",
- "sympathises", "sympathizes",
- "synchronise", "synchronize",
- "synthesised", "synthesized",
- "synthesiser", "synthesizer",
- "synthesises", "synthesizes",
- "systematise", "systematize",
- "tantalising", "tantalizing",
- "temporising", "temporizing",
- "tenderising", "tenderizing",
- "terrorising", "terrorizing",
- "theatregoer", "theatergoer",
- "traumatised", "traumatized",
- "traumatises", "traumatizes",
- "trivialised", "trivialized",
- "trivialises", "trivializes",
- "tyrannising", "tyrannizing",
- "uncivilised", "uncivilized",
- "unorganised", "unorganized",
- "unravelling", "unraveling",
- "utilisation", "utilization",
- "vandalising", "vandalizing",
- "verbalising", "verbalizing",
- "victimising", "victimizing",
- "visualising", "visualizing",
- "vulgarising", "vulgarizing",
- "watercolour", "watercolor",
- "westernised", "westernized",
- "westernises", "westernizes",
- "worshipping", "worshiping",
- "aeroplanes", "airplanes",
- "amortising", "amortizing",
- "anglicised", "anglicized",
- "anglicises", "anglicizes",
- "annualised", "annualized",
- "antagonise", "antagonize",
- "apologised", "apologized",
- "apologises", "apologizes",
- "appetisers", "appetizers",
- "appetising", "appetizing",
- "authorised", "authorized",
- "authorises", "authorizes",
- "bannisters", "banisters",
- "bastardise", "bastardize",
- "bedevilled", "bedeviled",
- "behaviours", "behaviors",
- "bejewelled", "bejeweled",
- "belaboured", "belabored",
- "bowdlerise", "bowdlerize",
- "brutalised", "brutalized",
- "brutalises", "brutalizes",
- "canalising", "canalizing",
- "cancelling", "canceling",
- "canonising", "canonizing",
- "capitalise", "capitalize",
- "caramelise", "caramelize",
- "carbonised", "carbonized",
- "carbonises", "carbonizes",
- "catalogued", "cataloged",
- "catalogues", "catalogs",
- "catalysing", "catalyzing",
- "categorise", "categorize",
- "cauterised", "cauterized",
- "cauterises", "cauterizes",
- "centilitre", "centiliter",
- "centimetre", "centimeter",
- "centralise", "centralize",
- "centrefold", "centerfold",
- "channelled", "channeled",
- "chequebook", "checkbook",
- "chiselling", "chiseling",
- "civilising", "civilizing",
- "clamouring", "clamoring",
- "colonisers", "colonizers",
- "colonising", "colonizing",
- "colourants", "colorants",
- "colourized", "colorized",
- "colourizes", "colorizes",
- "colourless", "colorless",
- "connexions", "connections",
- "councillor", "councilor",
- "counselled", "counseled",
- "counsellor", "counselor",
- "criticised", "criticized",
- "criticises", "criticizes",
- "cudgelling", "cudgeling",
- "customised", "customized",
- "customises", "customizes",
- "dehumanise", "dehumanize",
- "demobilise", "demobilize",
- "demonising", "demonizing",
- "demoralise", "demoralize",
- "deodorised", "deodorized",
- "deodorises", "deodorizes",
- "deputising", "deputizing",
- "digitising", "digitizing",
- "discolours", "discolors",
- "dishonours", "dishonors",
- "dramatised", "dramatized",
- "dramatises", "dramatizes",
- "drivelling", "driveling",
- "economised", "economized",
- "economises", "economizes",
- "empathised", "empathized",
- "empathises", "empathizes",
- "emphasised", "emphasized",
- "emphasises", "emphasizes",
- "enamelling", "enameling",
- "endeavours", "endeavors",
- "energising", "energizing",
- "epaulettes", "epaulets",
- "epicentres", "epicenters",
- "epitomised", "epitomized",
- "epitomises", "epitomizes",
- "equalisers", "equalizers",
- "equalising", "equalizing",
- "eulogising", "eulogizing",
- "evangelise", "evangelize",
- "factorised", "factorized",
- "factorises", "factorizes",
- "fantasised", "fantasized",
- "fantasises", "fantasizes",
- "favourable", "favorable",
- "favourably", "favorably",
- "favourites", "favorites",
- "feminising", "feminizing",
- "fertilised", "fertilized",
- "fertiliser", "fertilizer",
- "fertilises", "fertilizes",
- "fibreglass", "fiberglass",
- "finalising", "finalizing",
- "flavouring", "flavoring",
- "formalised", "formalized",
- "formalises", "formalizes",
- "fossilised", "fossilized",
- "fossilises", "fossilizes",
- "fraternise", "fraternize",
- "fulfilment", "fulfillment",
- "funnelling", "funneling",
- "galvanised", "galvanized",
- "galvanises", "galvanizes",
- "gambolling", "gamboling",
- "gaolbreaks", "jailbreaks",
- "generalise", "generalize",
- "ghettoised", "ghettoized",
- "ghettoises", "ghettoizes",
- "globalised", "globalized",
- "globalises", "globalizes",
- "gonorrhoea", "gonorrhea",
- "grovelling", "groveling",
- "harbouring", "harboring",
- "harmonised", "harmonized",
- "harmonises", "harmonizes",
- "homoeopath", "homeopath",
- "homogenise", "homogenize",
- "honourable", "honorable",
- "honourably", "honorably",
- "humanising", "humanizing",
- "humourless", "humorless",
- "hybridised", "hybridized",
- "hybridises", "hybridizes",
- "hypnotised", "hypnotized",
- "hypnotises", "hypnotizes",
- "idealising", "idealizing",
- "immobilise", "immobilize",
- "immunising", "immunizing",
- "impanelled", "impaneled",
- "imperilled", "imperiled",
- "inflexions", "inflections",
- "initialise", "initialize",
- "initialled", "initialed",
- "instalment", "installment",
- "ionisation", "ionization",
- "italicised", "italicized",
- "italicises", "italicizes",
- "jeopardise", "jeopardize",
- "kilogramme", "kilogram",
- "kilometres", "kilometers",
- "lacklustre", "lackluster",
- "legalising", "legalizing",
- "legitimise", "legitimize",
- "liberalise", "liberalize",
- "liquidised", "liquidized",
- "liquidiser", "liquidizer",
- "liquidises", "liquidizes",
- "localising", "localizing",
- "magnetised", "magnetized",
- "magnetises", "magnetizes",
- "manoeuvred", "maneuvered",
- "manoeuvres", "maneuvers",
- "marshalled", "marshaled",
- "marvelling", "marveling",
- "marvellous", "marvelous",
- "maximising", "maximizing",
- "mechanised", "mechanized",
- "mechanises", "mechanizes",
- "memorising", "memorizing",
- "mesmerised", "mesmerized",
- "mesmerises", "mesmerizes",
- "metabolise", "metabolize",
- "micrometre", "micrometer",
- "militarise", "militarize",
- "millilitre", "milliliter",
- "millimetre", "millimeter",
- "minimising", "minimizing",
- "mobilising", "mobilizing",
- "modernised", "modernized",
- "modernises", "modernizes",
- "moisturise", "moisturize",
- "monopolise", "monopolize",
- "moralising", "moralizing",
- "mouldering", "moldering",
- "moustached", "mustached",
- "moustaches", "mustaches",
- "naturalise", "naturalize",
- "neighbours", "neighbors",
- "neutralise", "neutralize",
- "normalised", "normalized",
- "normalises", "normalizes",
- "oesophagus", "esophagus",
- "optimising", "optimizing",
- "organisers", "organizers",
- "organising", "organizing",
- "ostracised", "ostracized",
- "ostracises", "ostracizes",
- "paederasts", "pederasts",
- "paediatric", "pediatric",
- "paedophile", "pedophile",
- "panellists", "panelists",
- "paralysing", "paralyzing",
- "parcelling", "parceling",
- "passivised", "passivized",
- "passivises", "passivizes",
- "pasteurise", "pasteurize",
- "patronised", "patronized",
- "patronises", "patronizes",
- "penalising", "penalizing",
- "pencilling", "penciling",
- "plagiarise", "plagiarize",
- "polarising", "polarizing",
- "politicise", "politicize",
- "popularise", "popularize",
- "practising", "practicing",
- "praesidium", "presidium",
- "pressurise", "pressurize",
- "prioritise", "prioritize",
- "privatised", "privatized",
- "privatises", "privatizes",
- "programmes", "programs",
- "publicised", "publicized",
- "publicises", "publicizes",
- "pulverised", "pulverized",
- "pulverises", "pulverizes",
- "pummelling", "pummeled",
- "quarrelled", "quarreled",
- "radicalise", "radicalize",
- "randomised", "randomized",
- "randomises", "randomizes",
- "realisable", "realizable",
- "recognised", "recognized",
- "recognises", "recognizes",
- "refuelling", "refueling",
- "regularise", "regularize",
- "remodelled", "remodeled",
- "remoulding", "remolding",
- "reorganise", "reorganize",
- "revitalise", "revitalize",
- "rhapsodise", "rhapsodize",
- "ritualised", "ritualized",
- "sanitising", "sanitizing",
- "satirising", "satirizing",
- "scandalise", "scandalize",
- "scepticism", "skepticism",
- "scrutinise", "scrutinize",
- "secularise", "secularize",
- "sensitised", "sensitized",
- "sensitises", "sensitizes",
- "sepulchres", "sepulchers",
- "serialised", "serialized",
- "serialises", "serializes",
- "sermonised", "sermonized",
- "sermonises", "sermonizes",
- "shovelling", "shoveling",
- "shrivelled", "shriveled",
- "signalised", "signalized",
- "signalises", "signalizes",
- "signalling", "signaling",
- "snivelling", "sniveling",
- "snorkelled", "snorkeled",
- "snowplough", "snowplow",
- "socialised", "socialized",
- "socialises", "socializes",
- "sodomising", "sodomizing",
- "solemnised", "solemnized",
- "solemnises", "solemnizes",
- "specialise", "specialize",
- "spiralling", "spiraling",
- "splendours", "splendors",
- "stabilised", "stabilized",
- "stabiliser", "stabilizer",
- "stabilises", "stabilizes",
- "stencilled", "stenciled",
- "sterilised", "sterilized",
- "steriliser", "sterilizer",
- "sterilises", "sterilizes",
- "stigmatise", "stigmatize",
- "subsidised", "subsidized",
- "subsidiser", "subsidizer",
- "subsidises", "subsidizes",
- "succouring", "succoring",
- "sulphurous", "sulfurous",
- "summarised", "summarized",
- "summarises", "summarizes",
- "swivelling", "swiveling",
- "symbolised", "symbolized",
- "symbolises", "symbolizes",
- "sympathise", "sympathize",
- "synthesise", "synthesize",
- "tantalised", "tantalized",
- "tantalises", "tantalizes",
- "temporised", "temporized",
- "temporises", "temporizes",
- "tenderised", "tenderized",
- "tenderises", "tenderizes",
- "terrorised", "terrorized",
- "terrorises", "terrorizes",
- "theorising", "theorizing",
- "traumatise", "traumatize",
- "travellers", "travelers",
- "travelling", "traveling",
- "tricolours", "tricolors",
- "trivialise", "trivialize",
- "tunnelling", "tunneling",
- "tyrannised", "tyrannized",
- "tyrannises", "tyrannizes",
- "unequalled", "unequaled",
- "unionising", "unionizing",
- "unravelled", "unraveled",
- "unrivalled", "unrivaled",
- "urbanising", "urbanizing",
- "utilisable", "utilizable",
- "vandalised", "vandalized",
- "vandalises", "vandalizes",
- "vaporising", "vaporizing",
- "verbalised", "verbalized",
- "verbalises", "verbalizes",
- "victimised", "victimized",
- "victimises", "victimizes",
- "visualised", "visualized",
- "visualises", "visualizes",
- "vocalising", "vocalizing",
- "vulcanised", "vulcanized",
- "vulgarised", "vulgarized",
- "vulgarises", "vulgarizes",
- "weaselling", "weaseling",
- "westernise", "westernize",
- "womanisers", "womanizers",
- "womanising", "womanizing",
- "worshipped", "worshiped",
- "worshipper", "worshiper",
- "aeroplane", "airplane",
- "aetiology", "etiology",
- "agonising", "agonizing",
- "almanacks", "almanacs",
- "aluminium", "aluminum",
- "amortised", "amortized",
- "amortises", "amortizes",
- "analogues", "analogs",
- "analysing", "analyzing",
- "anglicise", "anglicize",
- "apologise", "apologize",
- "appetiser", "appetizer",
- "armourers", "armorers",
- "armouries", "armories",
- "artefacts", "artifacts",
- "authorise", "authorize",
- "baptising", "baptizing",
- "behaviour", "behavior",
- "belabours", "belabors",
- "brutalise", "brutalize",
- "callipers", "calipers",
- "canalised", "canalized",
- "canalises", "canalizes",
- "cancelled", "canceled",
- "canonised", "canonized",
- "canonises", "canonizes",
- "carbonise", "carbonize",
- "carolling", "caroling",
- "catalogue", "catalog",
- "catalysed", "catalyzed",
- "catalyses", "catalyzes",
- "cauterise", "cauterize",
- "cavilling", "caviling",
- "chequered", "checkered",
- "chiselled", "chiseled",
- "civilised", "civilized",
- "civilises", "civilizes",
- "clamoured", "clamored",
- "colonised", "colonized",
- "coloniser", "colonizer",
- "colonises", "colonizes",
- "colourant", "colorant",
- "coloureds", "coloreds",
- "colourful", "colorful",
- "colouring", "coloring",
- "colourize", "colorize",
- "connexion", "connection",
- "criticise", "criticize",
- "cruellest", "cruelest",
- "cudgelled", "cudgeled",
- "customise", "customize",
- "demeanour", "demeanor",
- "demonised", "demonized",
- "demonises", "demonizes",
- "deodorise", "deodorize",
- "deputised", "deputized",
- "deputises", "deputizes",
- "dialogues", "dialogs",
- "diarrhoea", "diarrhea",
- "digitised", "digitized",
- "digitises", "digitizes",
- "discolour", "discolor",
- "disfavour", "disfavor",
- "dishonour", "dishonor",
- "dramatise", "dramatize",
- "drivelled", "driveled",
- "economise", "economize",
- "empathise", "empathize",
- "emphasise", "emphasize",
- "enamelled", "enameled",
- "enamoured", "enamored",
- "endeavour", "endeavor",
- "energised", "energized",
- "energises", "energizes",
- "epaulette", "epaulet",
- "epicentre", "epicenter",
- "epitomise", "epitomize",
- "equalised", "equalized",
- "equaliser", "equalizer",
- "equalises", "equalizes",
- "eulogised", "eulogized",
- "eulogises", "eulogizes",
- "factorise", "factorize",
- "fantasise", "fantasize",
- "favouring", "favoring",
- "favourite", "favorite",
- "feminised", "feminized",
- "feminises", "feminizes",
- "fertilise", "fertilize",
- "finalised", "finalized",
- "finalises", "finalizes",
- "flautists", "flutists",
- "flavoured", "flavored",
- "formalise", "formalize",
- "fossilise", "fossilize",
- "funnelled", "funneled",
- "galvanise", "galvanize",
- "gambolled", "gamboled",
- "gaolbirds", "jailbirds",
- "gaolbreak", "jailbreak",
- "ghettoise", "ghettoize",
- "globalise", "globalize",
- "gravelled", "graveled",
- "grovelled", "groveled",
- "gruelling", "grueling",
- "harboured", "harbored",
- "harmonise", "harmonize",
- "honouring", "honoring",
- "humanised", "humanized",
- "humanises", "humanizes",
- "humouring", "humoring",
- "hybridise", "hybridize",
- "hypnotise", "hypnotize",
- "idealised", "idealized",
- "idealises", "idealizes",
- "idolising", "idolizing",
- "immunised", "immunized",
- "immunises", "immunizes",
- "inflexion", "inflection",
- "italicise", "italicize",
- "itemising", "itemizing",
- "jewellers", "jewelers",
- "jewellery", "jewelry",
- "kilometre", "kilometer",
- "labelling", "labeling",
- "labourers", "laborers",
- "labouring", "laboring",
- "legalised", "legalized",
- "legalises", "legalizes",
- "leukaemia", "leukemia",
- "levellers", "levelers",
- "levelling", "leveling",
- "libelling", "libeling",
- "libellous", "libelous",
- "licencing", "licensing",
- "lionising", "lionizing",
- "liquidise", "liquidize",
- "localised", "localized",
- "localises", "localizes",
- "magnetise", "magnetize",
- "manoeuvre", "maneuver",
- "marvelled", "marveled",
- "maximised", "maximized",
- "maximises", "maximizes",
- "mechanise", "mechanize",
- "mediaeval", "medieval",
- "memorised", "memorized",
- "memorises", "memorizes",
- "mesmerise", "mesmerize",
- "minimised", "minimized",
- "minimises", "minimizes",
- "mobilised", "mobilized",
- "mobilises", "mobilizes",
- "modellers", "modelers",
- "modelling", "modeling",
- "modernise", "modernize",
- "moralised", "moralized",
- "moralises", "moralizes",
- "motorised", "motorized",
- "mouldered", "moldered",
- "mouldiest", "moldiest",
- "mouldings", "moldings",
- "moustache", "mustache",
- "neighbour", "neighbor",
- "normalise", "normalize",
- "odourless", "odorless",
- "oestrogen", "estrogen",
- "optimised", "optimized",
- "optimises", "optimizes",
- "organised", "organized",
- "organiser", "organizer",
- "organises", "organizes",
- "ostracise", "ostracize",
- "oxidising", "oxidizing",
- "paederast", "pederast",
- "panelling", "paneling",
- "panellist", "panelist",
- "paralysed", "paralyzed",
- "paralyses", "paralyzes",
- "parcelled", "parceled",
- "passivise", "passivize",
- "patronise", "patronize",
- "pedalling", "pedaling",
- "penalised", "penalized",
- "penalises", "penalizes",
- "pencilled", "penciled",
- "ploughing", "plowing",
- "ploughman", "plowman",
- "ploughmen", "plowmen",
- "polarised", "polarized",
- "polarises", "polarizes",
- "practised", "practiced",
- "practises", "practices",
- "pretences", "pretenses",
- "primaeval", "primeval",
- "privatise", "privatize",
- "programme", "program",
- "publicise", "publicize",
- "pulverise", "pulverize",
- "pummelled", "pummel",
- "randomise", "randomize",
- "ravelling", "raveling",
- "realising", "realizing",
- "recognise", "recognize",
- "refuelled", "refueled",
- "remoulded", "remolded",
- "revellers", "revelers",
- "revelling", "reveling",
- "rivalling", "rivaling",
- "saltpetre", "saltpeter",
- "sanitised", "sanitized",
- "sanitises", "sanitizes",
- "satirised", "satirized",
- "satirises", "satirizes",
- "savouries", "savories",
- "savouring", "savoring",
- "sceptical", "skeptical",
- "sensitise", "sensitize",
- "sepulchre", "sepulcher",
- "serialise", "serialize",
- "sermonise", "sermonize",
- "shovelled", "shoveled",
- "signalise", "signalize",
- "signalled", "signaled",
- "snivelled", "sniveled",
- "socialise", "socialize",
- "sodomised", "sodomized",
- "sodomises", "sodomizes",
- "solemnise", "solemnize",
- "spiralled", "spiraled",
- "splendour", "splendor",
- "stabilise", "stabilize",
- "sterilise", "sterilize",
- "subsidise", "subsidize",
- "succoured", "succored",
- "sulphates", "sulfates",
- "sulphides", "sulfides",
- "summarise", "summarize",
- "swivelled", "swiveled",
- "symbolise", "symbolize",
- "syphoning", "siphoning",
- "tantalise", "tantalize",
- "tasselled", "tasseled",
- "temporise", "temporize",
- "tenderise", "tenderize",
- "terrorise", "terrorize",
- "theorised", "theorized",
- "theorises", "theorizes",
- "towelling", "toweling",
- "travelled", "traveled",
- "traveller", "traveler",
- "trialling", "trialing",
- "tricolour", "tricolor",
- "tunnelled", "tunneled",
- "tyrannise", "tyrannize",
- "unionised", "unionized",
- "unionises", "unionizes",
- "unsavoury", "unsavory",
- "urbanised", "urbanized",
- "urbanises", "urbanizes",
- "utilising", "utilizing",
- "vandalise", "vandalize",
- "vaporised", "vaporized",
- "vaporises", "vaporizes",
- "verbalise", "verbalize",
- "victimise", "victimize",
- "visualise", "visualize",
- "vocalised", "vocalized",
- "vocalises", "vocalizes",
- "vulgarise", "vulgarize",
- "weaselled", "weaseled",
- "womanised", "womanized",
- "womaniser", "womanizer",
- "womanises", "womanizes",
- "yodelling", "yodeling",
- "yoghourts", "yogurts",
- "agonised", "agonized",
- "agonises", "agonizes",
- "almanack", "almanac",
- "amortise", "amortize",
- "analogue", "analog",
- "analysed", "analyzed",
- "analyses", "analyzes",
- "armoured", "armored",
- "armourer", "armorer",
- "artefact", "artifact",
- "baptised", "baptized",
- "baptises", "baptizes",
- "baulking", "balking",
- "belabour", "belabor",
- "bevelled", "beveled",
- "calibres", "calibers",
- "calliper", "caliper",
- "canalise", "canalize",
- "canonise", "canonize",
- "carolled", "caroled",
- "catalyse", "catalyze",
- "cavilled", "caviled",
- "civilise", "civilize",
- "clamours", "clamors",
- "clangour", "clangor",
- "colonise", "colonize",
- "coloured", "colored",
- "cosiness", "coziness",
- "crueller", "crueler",
- "defences", "defenses",
- "demonise", "demonize",
- "deputise", "deputize",
- "dialling", "dialing",
- "dialogue", "dialog",
- "digitise", "digitize",
- "draughty", "drafty",
- "duelling", "dueling",
- "energise", "energize",
- "enthrals", "enthralls",
- "equalise", "equalize",
- "eulogise", "eulogize",
- "favoured", "favored",
- "feminise", "feminize",
- "finalise", "finalize",
- "flautist", "flutist",
- "flavours", "flavors",
- "foetuses", "fetuses",
- "fuelling", "fueling",
- "gaolbird", "jailbird",
- "gryphons", "griffins",
- "harbours", "harbors",
- "honoured", "honored",
- "humanise", "humanize",
- "humoured", "humored",
- "idealise", "idealize",
- "idolised", "idolized",
- "idolises", "idolizes",
- "immunise", "immunize",
- "ionisers", "ionizers",
- "ionising", "ionizing",
- "itemised", "itemized",
- "itemises", "itemizes",
- "jewelled", "jeweled",
- "jeweller", "jeweler",
- "labelled", "labeled",
- "laboured", "labored",
- "labourer", "laborer",
- "legalise", "legalize",
- "levelled", "leveled",
- "leveller", "leveler",
- "libelled", "libeled",
- "licenced", "licensed",
- "licences", "licenses",
- "lionised", "lionized",
- "lionises", "lionizes",
- "localise", "localize",
- "maximise", "maximize",
- "memorise", "memorize",
- "minimise", "minimize",
- "misspelt", "misspelled",
- "mobilise", "mobilize",
- "modelled", "modeled",
- "modeller", "modeler",
- "moralise", "moralize",
- "moulders", "molders",
- "mouldier", "moldier",
- "moulding", "molding",
- "moulting", "molting",
- "offences", "offenses",
- "optimise", "optimize",
- "organise", "organize",
- "oxidised", "oxidized",
- "oxidises", "oxidizes",
- "panelled", "paneled",
- "paralyse", "paralyze",
- "parlours", "parlors",
- "pedalled", "pedaled",
- "penalise", "penalize",
- "philtres", "filters",
- "ploughed", "plowed",
- "polarise", "polarize",
- "practise", "practice",
- "pretence", "pretense",
- "ravelled", "raveled",
- "realised", "realized",
- "realises", "realizes",
- "remoulds", "remolds",
- "revelled", "reveled",
- "reveller", "reveler",
- "rivalled", "rivaled",
- "rumoured", "rumored",
- "sanitise", "sanitize",
- "satirise", "satirize",
- "saviours", "saviors",
- "savoured", "savored",
- "sceptics", "skeptics",
- "sceptres", "scepters",
- "sodomise", "sodomize",
- "spectres", "specters",
- "succours", "succors",
- "sulphate", "sulfate",
- "sulphide", "sulfide",
- "syphoned", "siphoned",
- "theatres", "theaters",
- "theorise", "theorize",
- "towelled", "toweled",
- "toxaemia", "toxemia",
- "trialled", "trialed",
- "unionise", "unionize",
- "urbanise", "urbanize",
- "utilised", "utilized",
- "utilises", "utilizes",
- "vaporise", "vaporize",
- "vocalise", "vocalize",
- "womanise", "womanize",
- "yodelled", "yodeled",
- "yoghourt", "yogurt",
- "yoghurts", "yogurts",
- "agonise", "agonize",
- "anaemia", "anemia",
- "anaemic", "anemic",
- "analyse", "analyze",
- "arbours", "arbors",
- "armoury", "armory",
- "baptise", "baptize",
- "baulked", "balked",
- "behoved", "behooved",
- "behoves", "behooves",
- "calibre", "caliber",
- "candour", "candor",
- "centred", "centered",
- "centres", "centers",
- "cheques", "checks",
- "clamour", "clamor",
- "colours", "colors",
- "cosiest", "coziest",
- "defence", "defense",
- "dialled", "dialed",
- "distils", "distills",
- "duelled", "dueled",
- "enthral", "enthrall",
- "favours", "favors",
- "fervour", "fervor",
- "flavour", "flavor",
- "fuelled", "fueled",
- "fulfils", "fulfills",
- "gaolers", "jailers",
- "gaoling", "jailing",
- "gipsies", "gypsies",
- "glueing", "gluing",
- "goitres", "goiters",
- "grammes", "grams",
- "groynes", "groins",
- "gryphon", "griffin",
- "harbour", "harbor",
- "honours", "honors",
- "humours", "humors",
- "idolise", "idolize",
- "instals", "installs",
- "instils", "instills",
- "ionised", "ionized",
- "ioniser", "ionizer",
- "ionises", "ionizes",
- "itemise", "itemize",
- "labours", "labors",
- "licence", "license",
- "lionise", "lionize",
- "louvred", "louvered",
- "louvres", "louvers",
- "moulded", "molded",
- "moulder", "molder",
- "moulted", "molted",
- "offence", "offense",
- "oxidise", "oxidize",
- "parlour", "parlor",
- "philtre", "filter",
- "ploughs", "plows",
- "pyjamas", "pajamas",
- "rancour", "rancor",
- "realise", "realize",
- "remould", "remold",
- "rigours", "rigors",
- "rumours", "rumors",
- "saviour", "savior",
- "savours", "savors",
- "savoury", "savory",
- "sceptic", "skeptic",
- "sceptre", "scepter",
- "spectre", "specter",
- "storeys", "stories",
- "succour", "succor",
- "sulphur", "sulfur",
- "syphons", "siphons",
- "theatre", "theater",
- "tumours", "tumors",
- "utilise", "utilize",
- "vapours", "vapors",
- "waggons", "wagons",
- "yoghurt", "yogurt",
- "ageing", "aging",
- "appals", "appalls",
- "arbour", "arbor",
- "ardour", "ardor",
- "baulks", "balks",
- "behove", "behoove",
- "centre", "center",
- "cheque", "check",
- "chilli", "chili",
- "colour", "color",
- "cosier", "cozier",
- "cosies", "cozies",
- "cosily", "cozily",
- "distil", "distill",
- "edoema", "edema",
- "enrols", "enrolls",
- "faecal", "fecal",
- "faeces", "feces",
- "favour", "favor",
- "fibres", "fibers",
- "foetal", "fetal",
- "foetid", "fetid",
- "foetus", "fetus",
- "fulfil", "fulfill",
- "gaoled", "jailed",
- "gaoler", "jailer",
- "goitre", "goiter",
- "gramme", "gram",
- "groyne", "groin",
- "honour", "honor",
- "humour", "humor",
- "instal", "install",
- "instil", "instill",
- "ionise", "ionize",
- "labour", "labor",
- "litres", "liters",
- "lustre", "luster",
- "meagre", "meager",
- "metres", "meters",
- "mitres", "miters",
- "moulds", "molds",
- "mouldy", "moldy",
- "moults", "molts",
- "odours", "odors",
- "plough", "plow",
- "pyjama", "pajama",
- "rigour", "rigor",
- "rumour", "rumor",
- "savour", "savor",
- "storey", "story",
- "syphon", "siphon",
- "tumour", "tumor",
- "valour", "valor",
- "vapour", "vapor",
- "vigour", "vigor",
- "waggon", "wagon",
- "appal", "appall",
- "baulk", "balk",
- "enrol", "enroll",
- "fibre", "fiber",
- "gaols", "jails",
- "litre", "liter",
- "metre", "meter",
- "mitre", "miter",
- "mould", "mold",
- "moult", "molt",
- "odour", "odor",
- "tyres", "tires",
- "cosy", "cozy",
- "gaol", "jail",
- "tyre", "tire",
-}
-
-// DictBritish converts US spellings to UK spellings
-var DictBritish = []string{
- "institutionalization", "institutionalisation",
- "internationalization", "internationalisation",
- "professionalization", "professionalisation",
- "compartmentalizing", "compartmentalising",
- "institutionalizing", "institutionalising",
- "internationalizing", "internationalising",
- "compartmentalized", "compartmentalised",
- "compartmentalizes", "compartmentalises",
- "decriminalization", "decriminalisation",
- "denationalization", "denationalisation",
- "fictionalizations", "fictionalisations",
- "institutionalized", "institutionalised",
- "institutionalizes", "institutionalises",
- "intellectualizing", "intellectualising",
- "internationalized", "internationalised",
- "internationalizes", "internationalises",
- "pedestrianization", "pedestrianisation",
- "professionalizing", "professionalising",
- "compartmentalize", "compartmentalise",
- "decentralization", "decentralisation",
- "demilitarization", "demilitarisation",
- "externalizations", "externalisations",
- "fictionalization", "fictionalisation",
- "institutionalize", "institutionalise",
- "intellectualized", "intellectualised",
- "intellectualizes", "intellectualises",
- "internationalize", "internationalise",
- "nationalizations", "nationalisations",
- "professionalized", "professionalised",
- "professionalizes", "professionalises",
- "rationalizations", "rationalisations",
- "sensationalizing", "sensationalising",
- "sentimentalizing", "sentimentalising",
- "acclimatization", "acclimatisation",
- "commercializing", "commercialising",
- "conceptualizing", "conceptualising",
- "contextualizing", "contextualising",
- "crystallization", "crystallisation",
- "decriminalizing", "decriminalising",
- "democratization", "democratisation",
- "denationalizing", "denationalising",
- "depersonalizing", "depersonalising",
- "desensitization", "desensitisation",
- "disorganization", "disorganisation",
- "extemporization", "extemporisation",
- "externalization", "externalisation",
- "familiarization", "familiarisation",
- "generalizations", "generalisations",
- "hospitalization", "hospitalisation",
- "individualizing", "individualising",
- "industrializing", "industrialising",
- "intellectualize", "intellectualise",
- "internalization", "internalisation",
- "maneuverability", "manoeuvrability",
- "materialization", "materialisation",
- "miniaturization", "miniaturisation",
- "nationalization", "nationalisation",
- "overemphasizing", "overemphasising",
- "paleontologists", "palaeontologists",
- "particularizing", "particularising",
- "pedestrianizing", "pedestrianising",
- "professionalize", "professionalise",
- "psychoanalyzing", "psychoanalysing",
- "rationalization", "rationalisation",
- "reorganizations", "reorganisations",
- "revolutionizing", "revolutionising",
- "sensationalized", "sensationalised",
- "sensationalizes", "sensationalises",
- "sentimentalized", "sentimentalised",
- "sentimentalizes", "sentimentalises",
- "specializations", "specialisations",
- "standardization", "standardisation",
- "synchronization", "synchronisation",
- "systematization", "systematisation",
- "aggrandizement", "aggrandisement",
- "characterizing", "characterising",
- "collectivizing", "collectivising",
- "commercialized", "commercialised",
- "commercializes", "commercialises",
- "conceptualized", "conceptualised",
- "conceptualizes", "conceptualises",
- "contextualized", "contextualised",
- "contextualizes", "contextualises",
- "decentralizing", "decentralising",
- "decriminalized", "decriminalised",
- "decriminalizes", "decriminalises",
- "dehumanization", "dehumanisation",
- "demilitarizing", "demilitarising",
- "demobilization", "demobilisation",
- "demoralization", "demoralisation",
- "denationalized", "denationalised",
- "denationalizes", "denationalises",
- "depersonalized", "depersonalised",
- "depersonalizes", "depersonalises",
- "dramatizations", "dramatisations",
- "editorializing", "editorialising",
- "fictionalizing", "fictionalising",
- "fraternization", "fraternisation",
- "generalization", "generalisation",
- "immobilization", "immobilisation",
- "individualized", "individualised",
- "individualizes", "individualises",
- "industrialized", "industrialised",
- "industrializes", "industrialises",
- "liberalization", "liberalisation",
- "monopolization", "monopolisation",
- "naturalization", "naturalisation",
- "neighborliness", "neighbourliness",
- "neutralization", "neutralisation",
- "organizational", "organisational",
- "outmaneuvering", "outmanoeuvring",
- "overemphasized", "overemphasised",
- "overemphasizes", "overemphasises",
- "paleontologist", "palaeontologist",
- "particularized", "particularised",
- "particularizes", "particularises",
- "pasteurization", "pasteurisation",
- "pedestrianized", "pedestrianised",
- "pedestrianizes", "pedestrianises",
- "philosophizing", "philosophising",
- "politicization", "politicisation",
- "popularization", "popularisation",
- "pressurization", "pressurisation",
- "prioritization", "prioritisation",
- "privatizations", "privatisations",
- "propagandizing", "propagandising",
- "psychoanalyzed", "psychoanalysed",
- "psychoanalyzes", "psychoanalyses",
- "reconnoitering", "reconnoitring",
- "regularization", "regularisation",
- "reorganization", "reorganisation",
- "revolutionized", "revolutionised",
- "revolutionizes", "revolutionises",
- "secularization", "secularisation",
- "sensationalize", "sensationalise",
- "sentimentalize", "sentimentalise",
- "serializations", "serialisations",
- "specialization", "specialisation",
- "sterilizations", "sterilisations",
- "stigmatization", "stigmatisation",
- "transistorized", "transistorised",
- "unrecognizable", "unrecognisable",
- "visualizations", "visualisations",
- "westernization", "westernisation",
- "accessorizing", "accessorising",
- "acclimatizing", "acclimatising",
- "amortizations", "amortisations",
- "amphitheaters", "amphitheatres",
- "anesthetizing", "anaesthetising",
- "archeologists", "archaeologists",
- "breathalyzers", "breathalysers",
- "breathalyzing", "breathalysing",
- "cannibalizing", "cannibalising",
- "characterized", "characterised",
- "characterizes", "characterises",
- "circularizing", "circularising",
- "collectivized", "collectivised",
- "collectivizes", "collectivises",
- "commercialize", "commercialise",
- "computerizing", "computerising",
- "conceptualize", "conceptualise",
- "contextualize", "contextualise",
- "criminalizing", "criminalising",
- "crystallizing", "crystallising",
- "decentralized", "decentralised",
- "decentralizes", "decentralises",
- "decriminalize", "decriminalise",
- "demilitarized", "demilitarised",
- "demilitarizes", "demilitarises",
- "democratizing", "democratising",
- "denationalize", "denationalise",
- "depersonalize", "depersonalise",
- "desensitizing", "desensitising",
- "destabilizing", "destabilising",
- "disemboweling", "disembowelling",
- "dramatization", "dramatisation",
- "editorialized", "editorialised",
- "editorializes", "editorialises",
- "extemporizing", "extemporising",
- "externalizing", "externalising",
- "familiarizing", "familiarising",
- "fertilization", "fertilisation",
- "fictionalized", "fictionalised",
- "fictionalizes", "fictionalises",
- "formalization", "formalisation",
- "fossilization", "fossilisation",
- "globalization", "globalisation",
- "gynecological", "gynaecological",
- "gynecologists", "gynaecologists",
- "harmonization", "harmonisation",
- "hematological", "haematological",
- "hematologists", "haematologists",
- "hospitalizing", "hospitalising",
- "hypothesizing", "hypothesising",
- "immortalizing", "immortalising",
- "individualize", "individualise",
- "industrialize", "industrialise",
- "internalizing", "internalising",
- "marginalizing", "marginalising",
- "materializing", "materialising",
- "mechanization", "mechanisation",
- "memorializing", "memorialising",
- "miniaturizing", "miniaturising",
- "nationalizing", "nationalising",
- "neighborhoods", "neighbourhoods",
- "normalization", "normalisation",
- "organizations", "organisations",
- "outmaneuvered", "outmanoeuvred",
- "overemphasize", "overemphasise",
- "particularize", "particularise",
- "passivization", "passivisation",
- "patronizingly", "patronisingly",
- "pedestrianize", "pedestrianise",
- "pediatricians", "paediatricians",
- "personalizing", "personalising",
- "philosophized", "philosophised",
- "philosophizes", "philosophises",
- "privatization", "privatisation",
- "propagandized", "propagandised",
- "propagandizes", "propagandises",
- "proselytizers", "proselytisers",
- "proselytizing", "proselytising",
- "psychoanalyze", "psychoanalyse",
- "pulverization", "pulverisation",
- "rationalizing", "rationalising",
- "reconnoitered", "reconnoitred",
- "revolutionize", "revolutionise",
- "romanticizing", "romanticising",
- "serialization", "serialisation",
- "socialization", "socialisation",
- "standardizing", "standardising",
- "sterilization", "sterilisation",
- "subsidization", "subsidisation",
- "synchronizing", "synchronising",
- "systematizing", "systematising",
- "tantalizingly", "tantalisingly",
- "underutilized", "underutilised",
- "victimization", "victimisation",
- "visualization", "visualisation",
- "vocalizations", "vocalisations",
- "vulgarization", "vulgarisation",
- "accessorized", "accessorised",
- "accessorizes", "accessorises",
- "acclimatized", "acclimatised",
- "acclimatizes", "acclimatises",
- "amortization", "amortisation",
- "amphitheater", "amphitheatre",
- "anesthetists", "anaesthetists",
- "anesthetized", "anaesthetised",
- "anesthetizes", "anaesthetises",
- "antagonizing", "antagonising",
- "appetizingly", "appetisingly",
- "archeologist", "archaeologist",
- "backpedaling", "backpedalling",
- "bastardizing", "bastardising",
- "behaviorists", "behaviourists",
- "bowdlerizing", "bowdlerising",
- "breathalyzed", "breathalysed",
- "breathalyzes", "breathalyses",
- "cannibalized", "cannibalised",
- "cannibalizes", "cannibalises",
- "capitalizing", "capitalising",
- "caramelizing", "caramelising",
- "categorizing", "categorising",
- "centerpieces", "centrepieces",
- "centralizing", "centralising",
- "characterize", "characterise",
- "circularized", "circularised",
- "circularizes", "circularises",
- "clarinetists", "clarinettists",
- "collectivize", "collectivise",
- "colonization", "colonisation",
- "computerized", "computerised",
- "computerizes", "computerises",
- "criminalized", "criminalised",
- "criminalizes", "criminalises",
- "crystallized", "crystallised",
- "crystallizes", "crystallises",
- "decentralize", "decentralise",
- "dehumanizing", "dehumanising",
- "demilitarize", "demilitarise",
- "demobilizing", "demobilising",
- "democratized", "democratised",
- "democratizes", "democratises",
- "demoralizing", "demoralising",
- "desensitized", "desensitised",
- "desensitizes", "desensitises",
- "destabilized", "destabilised",
- "destabilizes", "destabilises",
- "disemboweled", "disembowelled",
- "dishonorable", "dishonourable",
- "dishonorably", "dishonourably",
- "disorganized", "disorganised",
- "editorialize", "editorialise",
- "equalization", "equalisation",
- "evangelizing", "evangelising",
- "extemporized", "extemporised",
- "extemporizes", "extemporises",
- "externalized", "externalised",
- "externalizes", "externalises",
- "familiarized", "familiarised",
- "familiarizes", "familiarises",
- "fictionalize", "fictionalise",
- "finalization", "finalisation",
- "fraternizing", "fraternising",
- "generalizing", "generalising",
- "gynecologist", "gynaecologist",
- "hematologist", "haematologist",
- "hemophiliacs", "haemophiliacs",
- "hemorrhaging", "haemorrhaging",
- "homogenizing", "homogenising",
- "hospitalized", "hospitalised",
- "hospitalizes", "hospitalises",
- "hypothesized", "hypothesised",
- "hypothesizes", "hypothesises",
- "idealization", "idealisation",
- "immobilizers", "immobilisers",
- "immobilizing", "immobilising",
- "immortalized", "immortalised",
- "immortalizes", "immortalises",
- "immunization", "immunisation",
- "initializing", "initialising",
- "installments", "instalments",
- "internalized", "internalised",
- "internalizes", "internalises",
- "jeopardizing", "jeopardising",
- "legalization", "legalisation",
- "legitimizing", "legitimising",
- "liberalizing", "liberalising",
- "maneuverable", "manoeuvrable",
- "maneuverings", "manoeuvrings",
- "marginalized", "marginalised",
- "marginalizes", "marginalises",
- "materialized", "materialised",
- "materializes", "materialises",
- "maximization", "maximisation",
- "memorialized", "memorialised",
- "memorializes", "memorialises",
- "metabolizing", "metabolising",
- "militarizing", "militarising",
- "miniaturized", "miniaturised",
- "miniaturizes", "miniaturises",
- "miscataloged", "miscatalogued",
- "misdemeanors", "misdemeanours",
- "mobilization", "mobilisation",
- "moisturizers", "moisturisers",
- "moisturizing", "moisturising",
- "monopolizing", "monopolising",
- "multicolored", "multicoloured",
- "nationalized", "nationalised",
- "nationalizes", "nationalises",
- "naturalizing", "naturalising",
- "neighborhood", "neighbourhood",
- "neutralizing", "neutralising",
- "organization", "organisation",
- "outmaneuvers", "outmanoeuvres",
- "paleontology", "palaeontology",
- "pasteurizing", "pasteurising",
- "pediatrician", "paediatrician",
- "personalized", "personalised",
- "personalizes", "personalises",
- "philosophize", "philosophise",
- "plagiarizing", "plagiarising",
- "polarization", "polarisation",
- "politicizing", "politicising",
- "popularizing", "popularising",
- "pressurizing", "pressurising",
- "prioritizing", "prioritising",
- "propagandize", "propagandise",
- "proselytized", "proselytised",
- "proselytizer", "proselytiser",
- "proselytizes", "proselytises",
- "radicalizing", "radicalising",
- "rationalized", "rationalised",
- "rationalizes", "rationalises",
- "realizations", "realisations",
- "recognizable", "recognisable",
- "recognizably", "recognisably",
- "recognizance", "recognisance",
- "reconnoiters", "reconnoitres",
- "regularizing", "regularising",
- "reorganizing", "reorganising",
- "revitalizing", "revitalising",
- "rhapsodizing", "rhapsodising",
- "romanticized", "romanticised",
- "romanticizes", "romanticises",
- "scandalizing", "scandalising",
- "scrutinizing", "scrutinising",
- "secularizing", "secularising",
- "standardized", "standardised",
- "standardizes", "standardises",
- "stigmatizing", "stigmatising",
- "sympathizers", "sympathisers",
- "sympathizing", "sympathising",
- "synchronized", "synchronised",
- "synchronizes", "synchronises",
- "synthesizing", "synthesising",
- "systematized", "systematised",
- "systematizes", "systematises",
- "theatergoers", "theatregoers",
- "traumatizing", "traumatising",
- "trivializing", "trivialising",
- "unauthorized", "unauthorised",
- "unionization", "unionisation",
- "unrecognized", "unrecognised",
- "urbanization", "urbanisation",
- "vaporization", "vaporisation",
- "vocalization", "vocalisation",
- "westernizing", "westernising",
- "accessorize", "accessorise",
- "acclimatize", "acclimatise",
- "agonizingly", "agonisingly",
- "amortizable", "amortisable",
- "anesthetics", "anaesthetics",
- "anesthetist", "anaesthetist",
- "anesthetize", "anaesthetise",
- "anglicizing", "anglicising",
- "antagonized", "antagonised",
- "antagonizes", "antagonises",
- "apologizing", "apologising",
- "backpedaled", "backpedalled",
- "bastardized", "bastardised",
- "bastardizes", "bastardises",
- "behaviorism", "behaviourism",
- "behaviorist", "behaviourist",
- "bowdlerized", "bowdlerised",
- "bowdlerizes", "bowdlerises",
- "brutalizing", "brutalising",
- "cannibalize", "cannibalise",
- "capitalized", "capitalised",
- "capitalizes", "capitalises",
- "caramelized", "caramelised",
- "caramelizes", "caramelises",
- "carbonizing", "carbonising",
- "categorized", "categorised",
- "categorizes", "categorises",
- "cauterizing", "cauterising",
- "centerfolds", "centrefolds",
- "centerpiece", "centrepiece",
- "centiliters", "centilitres",
- "centimeters", "centimetres",
- "centralized", "centralised",
- "centralizes", "centralises",
- "circularize", "circularise",
- "clarinetist", "clarinettist",
- "computerize", "computerise",
- "criminalize", "criminalise",
- "criticizing", "criticising",
- "crystallize", "crystallise",
- "customizing", "customising",
- "defenseless", "defenceless",
- "dehumanized", "dehumanised",
- "dehumanizes", "dehumanises",
- "demobilized", "demobilised",
- "demobilizes", "demobilises",
- "democratize", "democratise",
- "demoralized", "demoralised",
- "demoralizes", "demoralises",
- "deodorizing", "deodorising",
- "desensitize", "desensitise",
- "destabilize", "destabilise",
- "discoloring", "discolouring",
- "dishonoring", "dishonouring",
- "dramatizing", "dramatising",
- "economizing", "economising",
- "empathizing", "empathising",
- "emphasizing", "emphasising",
- "endeavoring", "endeavouring",
- "epitomizing", "epitomising",
- "esophaguses", "oesophaguses",
- "evangelized", "evangelised",
- "evangelizes", "evangelises",
- "extemporize", "extemporise",
- "externalize", "externalise",
- "factorizing", "factorising",
- "familiarize", "familiarise",
- "fantasizing", "fantasising",
- "fertilizers", "fertilisers",
- "fertilizing", "fertilising",
- "formalizing", "formalising",
- "fossilizing", "fossilising",
- "fraternized", "fraternised",
- "fraternizes", "fraternises",
- "fulfillment", "fulfilment",
- "galvanizing", "galvanising",
- "generalized", "generalised",
- "generalizes", "generalises",
- "ghettoizing", "ghettoising",
- "globalizing", "globalising",
- "harmonizing", "harmonising",
- "hemophiliac", "haemophiliac",
- "hemorrhaged", "haemorrhaged",
- "hemorrhages", "haemorrhages",
- "hemorrhoids", "haemorrhoids",
- "homogenized", "homogenised",
- "homogenizes", "homogenises",
- "hospitalize", "hospitalise",
- "hybridizing", "hybridising",
- "hypnotizing", "hypnotising",
- "hypothesize", "hypothesise",
- "immobilized", "immobilised",
- "immobilizer", "immobiliser",
- "immobilizes", "immobilises",
- "immortalize", "immortalise",
- "initialized", "initialised",
- "initializes", "initialises",
- "installment", "instalment",
- "internalize", "internalise",
- "italicizing", "italicising",
- "jeopardized", "jeopardised",
- "jeopardizes", "jeopardises",
- "legitimized", "legitimised",
- "legitimizes", "legitimises",
- "liberalized", "liberalised",
- "liberalizes", "liberalises",
- "lionization", "lionisation",
- "liquidizers", "liquidisers",
- "liquidizing", "liquidising",
- "magnetizing", "magnetising",
- "maneuvering", "manoeuvring",
- "marginalize", "marginalise",
- "marvelously", "marvellously",
- "materialize", "materialise",
- "mechanizing", "mechanising",
- "memorialize", "memorialise",
- "mesmerizing", "mesmerising",
- "metabolized", "metabolised",
- "metabolizes", "metabolises",
- "militarized", "militarised",
- "militarizes", "militarises",
- "milliliters", "millilitres",
- "millimeters", "millimetres",
- "miniaturize", "miniaturise",
- "misbehavior", "misbehaviour",
- "misdemeanor", "misdemeanour",
- "modernizing", "modernising",
- "moisturized", "moisturised",
- "moisturizer", "moisturiser",
- "moisturizes", "moisturises",
- "monopolized", "monopolised",
- "monopolizes", "monopolises",
- "nationalize", "nationalise",
- "naturalized", "naturalised",
- "naturalizes", "naturalises",
- "neighboring", "neighbouring",
- "neutralized", "neutralised",
- "neutralizes", "neutralises",
- "normalizing", "normalising",
- "orthopedics", "orthopaedics",
- "ostracizing", "ostracising",
- "outmaneuver", "outmanoeuvre",
- "oxidization", "oxidisation",
- "pasteurized", "pasteurised",
- "pasteurizes", "pasteurises",
- "patronizing", "patronising",
- "personalize", "personalise",
- "plagiarized", "plagiarised",
- "plagiarizes", "plagiarises",
- "politicized", "politicised",
- "politicizes", "politicises",
- "popularized", "popularised",
- "popularizes", "popularises",
- "pressurized", "pressurised",
- "pressurizes", "pressurises",
- "prioritized", "prioritised",
- "prioritizes", "prioritises",
- "privatizing", "privatising",
- "proselytize", "proselytise",
- "publicizing", "publicising",
- "pulverizing", "pulverising",
- "radicalized", "radicalised",
- "radicalizes", "radicalises",
- "randomizing", "randomising",
- "rationalize", "rationalise",
- "realization", "realisation",
- "recognizing", "recognising",
- "reconnoiter", "reconnoitre",
- "regularized", "regularised",
- "regularizes", "regularises",
- "reorganized", "reorganised",
- "reorganizes", "reorganises",
- "revitalized", "revitalised",
- "revitalizes", "revitalises",
- "rhapsodized", "rhapsodised",
- "rhapsodizes", "rhapsodises",
- "romanticize", "romanticise",
- "scandalized", "scandalised",
- "scandalizes", "scandalises",
- "scrutinized", "scrutinised",
- "scrutinizes", "scrutinises",
- "secularized", "secularised",
- "secularizes", "secularises",
- "sensitizing", "sensitising",
- "serializing", "serialising",
- "sermonizing", "sermonising",
- "signalizing", "signalising",
- "skeptically", "sceptically",
- "socializing", "socialising",
- "solemnizing", "solemnising",
- "specialized", "specialised",
- "specializes", "specialises",
- "squirreling", "squirrelling",
- "stabilizers", "stabilisers",
- "stabilizing", "stabilising",
- "standardize", "standardise",
- "sterilizers", "sterilisers",
- "sterilizing", "sterilising",
- "stigmatized", "stigmatised",
- "stigmatizes", "stigmatises",
- "subsidizers", "subsidisers",
- "subsidizing", "subsidising",
- "summarizing", "summarising",
- "symbolizing", "symbolising",
- "sympathized", "sympathised",
- "sympathizer", "sympathiser",
- "sympathizes", "sympathises",
- "synchronize", "synchronise",
- "synthesized", "synthesised",
- "synthesizes", "synthesises",
- "systematize", "systematise",
- "tantalizing", "tantalising",
- "temporizing", "temporising",
- "tenderizing", "tenderising",
- "terrorizing", "terrorising",
- "theatergoer", "theatregoer",
- "traumatized", "traumatised",
- "traumatizes", "traumatises",
- "trivialized", "trivialised",
- "trivializes", "trivialises",
- "tyrannizing", "tyrannising",
- "uncataloged", "uncatalogued",
- "uncivilized", "uncivilised",
- "unfavorable", "unfavourable",
- "unfavorably", "unfavourably",
- "unorganized", "unorganised",
- "untrammeled", "untrammelled",
- "utilization", "utilisation",
- "vandalizing", "vandalising",
- "verbalizing", "verbalising",
- "victimizing", "victimising",
- "visualizing", "visualising",
- "vulgarizing", "vulgarising",
- "watercolors", "watercolours",
- "westernized", "westernised",
- "westernizes", "westernises",
- "amortizing", "amortising",
- "anesthesia", "anaesthesia",
- "anesthetic", "anaesthetic",
- "anglicized", "anglicised",
- "anglicizes", "anglicises",
- "annualized", "annualised",
- "antagonize", "antagonise",
- "apologized", "apologised",
- "apologizes", "apologises",
- "appetizers", "appetisers",
- "appetizing", "appetising",
- "archeology", "archaeology",
- "authorizes", "authorises",
- "bastardize", "bastardise",
- "bedeviling", "bedevilling",
- "behavioral", "behavioural",
- "belaboring", "belabouring",
- "bowdlerize", "bowdlerise",
- "brutalized", "brutalised",
- "brutalizes", "brutalises",
- "canalizing", "canalising",
- "canonizing", "canonising",
- "capitalize", "capitalise",
- "caramelize", "caramelise",
- "carbonized", "carbonised",
- "carbonizes", "carbonises",
- "cataloging", "cataloguing",
- "catalyzing", "catalysing",
- "categorize", "categorise",
- "cauterized", "cauterised",
- "cauterizes", "cauterises",
- "centerfold", "centrefold",
- "centiliter", "centilitre",
- "centimeter", "centimetre",
- "centralize", "centralise",
- "channeling", "channelling",
- "checkbooks", "chequebooks",
- "civilizing", "civilising",
- "colonizers", "colonisers",
- "colonizing", "colonising",
- "colorfully", "colourfully",
- "colorizing", "colourizing",
- "councilors", "councillors",
- "counselors", "counsellors",
- "criticized", "criticised",
- "criticizes", "criticises",
- "customized", "customised",
- "customizes", "customises",
- "dehumanize", "dehumanise",
- "demobilize", "demobilise",
- "demonizing", "demonising",
- "demoralize", "demoralise",
- "deodorized", "deodorised",
- "deodorizes", "deodorises",
- "deputizing", "deputising",
- "digitizing", "digitising",
- "discolored", "discoloured",
- "disheveled", "dishevelled",
- "dishonored", "dishonoured",
- "dramatized", "dramatised",
- "dramatizes", "dramatises",
- "economized", "economised",
- "economizes", "economises",
- "empathized", "empathised",
- "empathizes", "empathises",
- "emphasized", "emphasised",
- "emphasizes", "emphasises",
- "endeavored", "endeavoured",
- "energizing", "energising",
- "epicenters", "epicentres",
- "epitomized", "epitomised",
- "epitomizes", "epitomises",
- "equalizers", "equalisers",
- "equalizing", "equalising",
- "eulogizing", "eulogising",
- "evangelize", "evangelise",
- "factorized", "factorised",
- "factorizes", "factorises",
- "fantasized", "fantasised",
- "fantasizes", "fantasises",
- "favoritism", "favouritism",
- "feminizing", "feminising",
- "fertilized", "fertilised",
- "fertilizer", "fertiliser",
- "fertilizes", "fertilises",
- "fiberglass", "fibreglass",
- "finalizing", "finalising",
- "flavorings", "flavourings",
- "flavorless", "flavourless",
- "flavorsome", "flavoursome",
- "formalized", "formalised",
- "formalizes", "formalises",
- "fossilized", "fossilised",
- "fossilizes", "fossilises",
- "fraternize", "fraternise",
- "galvanized", "galvanised",
- "galvanizes", "galvanises",
- "generalize", "generalise",
- "ghettoized", "ghettoised",
- "ghettoizes", "ghettoises",
- "globalized", "globalised",
- "globalizes", "globalises",
- "gruelingly", "gruellingly",
- "gynecology", "gynaecology",
- "harmonized", "harmonised",
- "harmonizes", "harmonises",
- "hematology", "haematology",
- "hemoglobin", "haemoglobin",
- "hemophilia", "haemophilia",
- "hemorrhage", "haemorrhage",
- "homogenize", "homogenise",
- "humanizing", "humanising",
- "hybridized", "hybridised",
- "hybridizes", "hybridises",
- "hypnotized", "hypnotised",
- "hypnotizes", "hypnotises",
- "idealizing", "idealising",
- "immobilize", "immobilise",
- "immunizing", "immunising",
- "impaneling", "impanelling",
- "imperiling", "imperilling",
- "initialing", "initialling",
- "initialize", "initialise",
- "ionization", "ionisation",
- "italicized", "italicised",
- "italicizes", "italicises",
- "jeopardize", "jeopardise",
- "kilometers", "kilometres",
- "lackluster", "lacklustre",
- "legalizing", "legalising",
- "legitimize", "legitimise",
- "liberalize", "liberalise",
- "liquidized", "liquidised",
- "liquidizer", "liquidiser",
- "liquidizes", "liquidises",
- "localizing", "localising",
- "magnetized", "magnetised",
- "magnetizes", "magnetises",
- "maneuvered", "manoeuvred",
- "marshaling", "marshalling",
- "maximizing", "maximising",
- "mechanized", "mechanised",
- "mechanizes", "mechanises",
- "memorizing", "memorising",
- "mesmerized", "mesmerised",
- "mesmerizes", "mesmerises",
- "metabolize", "metabolise",
- "militarize", "militarise",
- "milliliter", "millilitre",
- "millimeter", "millimetre",
- "minimizing", "minimising",
- "mobilizing", "mobilising",
- "modernized", "modernised",
- "modernizes", "modernises",
- "moisturize", "moisturise",
- "monopolize", "monopolise",
- "moralizing", "moralising",
- "naturalize", "naturalise",
- "neighborly", "neighbourly",
- "neutralize", "neutralise",
- "normalized", "normalised",
- "normalizes", "normalises",
- "optimizing", "optimising",
- "organizers", "organisers",
- "organizing", "organising",
- "orthopedic", "orthopaedic",
- "ostracized", "ostracised",
- "ostracizes", "ostracises",
- "paralyzing", "paralysing",
- "pasteurize", "pasteurise",
- "patronized", "patronised",
- "patronizes", "patronises",
- "pedophiles", "paedophiles",
- "pedophilia", "paedophilia",
- "penalizing", "penalising",
- "plagiarize", "plagiarise",
- "plowshares", "ploughshares",
- "polarizing", "polarising",
- "politicize", "politicise",
- "popularize", "popularise",
- "prioritize", "prioritise",
- "privatized", "privatised",
- "privatizes", "privatises",
- "publicized", "publicised",
- "publicizes", "publicises",
- "pulverized", "pulverised",
- "pulverizes", "pulverises",
- "quarreling", "quarrelling",
- "radicalize", "radicalise",
- "randomized", "randomised",
- "randomizes", "randomises",
- "realizable", "realisable",
- "recognized", "recognised",
- "recognizes", "recognises",
- "regularize", "regularise",
- "remodeling", "remodelling",
- "reorganize", "reorganise",
- "revitalize", "revitalise",
- "rhapsodize", "rhapsodise",
- "ritualized", "ritualised",
- "sanitizing", "sanitising",
- "satirizing", "satirising",
- "scandalize", "scandalise",
- "scrutinize", "scrutinise",
- "secularize", "secularise",
- "sensitized", "sensitised",
- "sensitizes", "sensitises",
- "sepulchers", "sepulchres",
- "serialized", "serialised",
- "serializes", "serialises",
- "sermonized", "sermonised",
- "sermonizes", "sermonises",
- "shriveling", "shrivelling",
- "signalized", "signalised",
- "signalizes", "signalises",
- "skepticism", "scepticism",
- "socialized", "socialised",
- "socializes", "socialises",
- "sodomizing", "sodomising",
- "solemnized", "solemnised",
- "solemnizes", "solemnises",
- "specialize", "specialise",
- "squirreled", "squirrelled",
- "stabilized", "stabilised",
- "stabilizer", "stabiliser",
- "stabilizes", "stabilises",
- "stenciling", "stencilling",
- "sterilized", "sterilised",
- "sterilizer", "steriliser",
- "sterilizes", "sterilises",
- "stigmatize", "stigmatise",
- "subsidized", "subsidised",
- "subsidizer", "subsidiser",
- "subsidizes", "subsidises",
- "summarized", "summarised",
- "summarizes", "summarises",
- "symbolized", "symbolised",
- "symbolizes", "symbolises",
- "sympathize", "sympathise",
- "tantalized", "tantalised",
- "tantalizes", "tantalises",
- "temporized", "temporised",
- "temporizes", "temporises",
- "tenderized", "tenderised",
- "tenderizes", "tenderises",
- "terrorized", "terrorised",
- "terrorizes", "terrorises",
- "theorizing", "theorising",
- "traumatize", "traumatise",
- "trivialize", "trivialise",
- "tyrannized", "tyrannised",
- "tyrannizes", "tyrannises",
- "unionizing", "unionising",
- "unraveling", "unravelling",
- "urbanizing", "urbanising",
- "utilizable", "utilisable",
- "vandalized", "vandalised",
- "vandalizes", "vandalises",
- "vaporizing", "vaporising",
- "verbalized", "verbalised",
- "verbalizes", "verbalises",
- "victimized", "victimised",
- "victimizes", "victimises",
- "visualized", "visualised",
- "visualizes", "visualises",
- "vocalizing", "vocalising",
- "vulcanized", "vulcanised",
- "vulgarized", "vulgarised",
- "vulgarizes", "vulgarises",
- "watercolor", "watercolour",
- "westernize", "westernise",
- "womanizers", "womanisers",
- "womanizing", "womanising",
- "worshiping", "worshipping",
- "agonizing", "agonising",
- "airplanes", "aeroplanes",
- "amortized", "amortised",
- "amortizes", "amortises",
- "analyzing", "analysing",
- "apologize", "apologise",
- "appetizer", "appetiser",
- "artifacts", "artefacts",
- "baptizing", "baptising",
- "bedeviled", "bedevilled",
- "behaviors", "behaviours",
- "bejeweled", "bejewelled",
- "belabored", "belaboured",
- "brutalize", "brutalise",
- "canalized", "canalised",
- "canalizes", "canalises",
- "canonized", "canonised",
- "canonizes", "canonises",
- "carbonize", "carbonise",
- "cataloged", "catalogued",
- "catalyzed", "catalysed",
- "catalyzes", "catalyses",
- "cauterize", "cauterise",
- "channeled", "channelled",
- "checkbook", "chequebook",
- "checkered", "chequered",
- "chiseling", "chiselling",
- "civilized", "civilised",
- "civilizes", "civilises",
- "clamoring", "clamouring",
- "colonized", "colonised",
- "colonizer", "coloniser",
- "colonizes", "colonises",
- "colorants", "colourants",
- "colorized", "colourized",
- "colorizes", "colourizes",
- "colorless", "colourless",
- "councilor", "councillor",
- "counseled", "counselled",
- "counselor", "counsellor",
- "criticize", "criticise",
- "cudgeling", "cudgelling",
- "customize", "customise",
- "demonized", "demonised",
- "demonizes", "demonises",
- "deodorize", "deodorise",
- "deputized", "deputised",
- "deputizes", "deputises",
- "digitized", "digitised",
- "digitizes", "digitises",
- "discolors", "discolours",
- "dishonors", "dishonours",
- "dramatize", "dramatise",
- "driveling", "drivelling",
- "economize", "economise",
- "empathize", "empathise",
- "emphasize", "emphasise",
- "enameling", "enamelling",
- "endeavors", "endeavours",
- "energized", "energised",
- "energizes", "energises",
- "enthralls", "enthrals",
- "epicenter", "epicentre",
- "epitomize", "epitomise",
- "equalized", "equalised",
- "equalizer", "equaliser",
- "equalizes", "equalises",
- "eulogized", "eulogised",
- "eulogizes", "eulogises",
- "factorize", "factorise",
- "fantasize", "fantasise",
- "favorable", "favourable",
- "favorably", "favourably",
- "favorites", "favourites",
- "feminized", "feminised",
- "feminizes", "feminises",
- "fertilize", "fertilise",
- "finalized", "finalised",
- "finalizes", "finalises",
- "flavoring", "flavouring",
- "formalize", "formalise",
- "fossilize", "fossilise",
- "funneling", "funnelling",
- "galvanize", "galvanise",
- "gamboling", "gambolling",
- "ghettoize", "ghettoise",
- "globalize", "globalise",
- "gonorrhea", "gonorrhoea",
- "groveling", "grovelling",
- "harboring", "harbouring",
- "harmonize", "harmonise",
- "honorably", "honourably",
- "humanized", "humanised",
- "humanizes", "humanises",
- "hybridize", "hybridise",
- "hypnotize", "hypnotise",
- "idealized", "idealised",
- "idealizes", "idealises",
- "idolizing", "idolising",
- "immunized", "immunised",
- "immunizes", "immunises",
- "impaneled", "impanelled",
- "imperiled", "imperilled",
- "initialed", "initialled",
- "italicize", "italicise",
- "itemizing", "itemising",
- "kilometer", "kilometre",
- "legalized", "legalised",
- "legalizes", "legalises",
- "lionizing", "lionising",
- "liquidize", "liquidise",
- "localized", "localised",
- "localizes", "localises",
- "magnetize", "magnetise",
- "maneuvers", "manoeuvres",
- "marshaled", "marshalled",
- "marveling", "marvelling",
- "marvelous", "marvellous",
- "maximized", "maximised",
- "maximizes", "maximises",
- "mechanize", "mechanise",
- "memorized", "memorised",
- "memorizes", "memorises",
- "mesmerize", "mesmerise",
- "minimized", "minimised",
- "minimizes", "minimises",
- "mobilized", "mobilised",
- "mobilizes", "mobilises",
- "modernize", "modernise",
- "moldering", "mouldering",
- "moralized", "moralised",
- "moralizes", "moralises",
- "motorized", "motorised",
- "mustached", "moustached",
- "mustaches", "moustaches",
- "neighbors", "neighbours",
- "normalize", "normalise",
- "optimized", "optimised",
- "optimizes", "optimises",
- "organized", "organised",
- "organizer", "organiser",
- "organizes", "organises",
- "ostracize", "ostracise",
- "oxidizing", "oxidising",
- "panelists", "panellists",
- "paralyzed", "paralysed",
- "paralyzes", "paralyses",
- "parceling", "parcelling",
- "patronize", "patronise",
- "pedophile", "paedophile",
- "penalized", "penalised",
- "penalizes", "penalises",
- "penciling", "pencilling",
- "plowshare", "ploughshare",
- "polarized", "polarised",
- "polarizes", "polarises",
- "practiced", "practised",
- "pretenses", "pretences",
- "privatize", "privatise",
- "publicize", "publicise",
- "pulverize", "pulverise",
- "quarreled", "quarrelled",
- "randomize", "randomise",
- "realizing", "realising",
- "recognize", "recognise",
- "refueling", "refuelling",
- "remodeled", "remodelled",
- "remolding", "remoulding",
- "saltpeter", "saltpetre",
- "sanitized", "sanitised",
- "sanitizes", "sanitises",
- "satirized", "satirised",
- "satirizes", "satirises",
- "sensitize", "sensitise",
- "sepulcher", "sepulchre",
- "serialize", "serialise",
- "sermonize", "sermonise",
- "shoveling", "shovelling",
- "shriveled", "shrivelled",
- "signaling", "signalling",
- "signalize", "signalise",
- "skeptical", "sceptical",
- "sniveling", "snivelling",
- "snorkeled", "snorkelled",
- "socialize", "socialise",
- "sodomized", "sodomised",
- "sodomizes", "sodomises",
- "solemnize", "solemnise",
- "spiraling", "spiralling",
- "splendors", "splendours",
- "stabilize", "stabilise",
- "stenciled", "stencilled",
- "sterilize", "sterilise",
- "subsidize", "subsidise",
- "succoring", "succouring",
- "sulfurous", "sulphurous",
- "summarize", "summarise",
- "swiveling", "swivelling",
- "symbolize", "symbolise",
- "tantalize", "tantalise",
- "temporize", "temporise",
- "tenderize", "tenderise",
- "terrorize", "terrorise",
- "theorized", "theorised",
- "theorizes", "theorises",
- "travelers", "travellers",
- "traveling", "travelling",
- "tricolors", "tricolours",
- "tunneling", "tunnelling",
- "tyrannize", "tyrannise",
- "unequaled", "unequalled",
- "unionized", "unionised",
- "unionizes", "unionises",
- "unraveled", "unravelled",
- "unrivaled", "unrivalled",
- "urbanized", "urbanised",
- "urbanizes", "urbanises",
- "utilizing", "utilising",
- "vandalize", "vandalise",
- "vaporized", "vaporised",
- "vaporizes", "vaporises",
- "verbalize", "verbalise",
- "victimize", "victimise",
- "visualize", "visualise",
- "vocalized", "vocalised",
- "vocalizes", "vocalises",
- "vulgarize", "vulgarise",
- "weaseling", "weaselling",
- "womanized", "womanised",
- "womanizer", "womaniser",
- "womanizes", "womanises",
- "worshiped", "worshipped",
- "worshiper", "worshipper",
- "agonized", "agonised",
- "agonizes", "agonises",
- "airplane", "aeroplane",
- "aluminum", "aluminium",
- "amortize", "amortise",
- "analyzed", "analysed",
- "analyzes", "analyses",
- "armorers", "armourers",
- "armories", "armouries",
- "artifact", "artefact",
- "baptized", "baptised",
- "baptizes", "baptises",
- "behavior", "behaviour",
- "behooved", "behoved",
- "behooves", "behoves",
- "belabors", "belabours",
- "calibers", "calibres",
- "canalize", "canalise",
- "canonize", "canonise",
- "catalogs", "catalogues",
- "catalyze", "catalyse",
- "caviling", "cavilling",
- "centered", "centred",
- "chiseled", "chiselled",
- "civilize", "civilise",
- "clamored", "clamoured",
- "colonize", "colonise",
- "colorant", "colourant",
- "coloreds", "coloureds",
- "colorful", "colourful",
- "coloring", "colouring",
- "colorize", "colourize",
- "coziness", "cosiness",
- "cruelest", "cruellest",
- "cudgeled", "cudgelled",
- "defenses", "defences",
- "demeanor", "demeanour",
- "demonize", "demonise",
- "deputize", "deputise",
- "diarrhea", "diarrhoea",
- "digitize", "digitise",
- "disfavor", "disfavour",
- "dishonor", "dishonour",
- "distills", "distils",
- "driveled", "drivelled",
- "enameled", "enamelled",
- "enamored", "enamoured",
- "endeavor", "endeavour",
- "energize", "energise",
- "epaulets", "epaulettes",
- "equalize", "equalise",
- "estrogen", "oestrogen",
- "etiology", "aetiology",
- "eulogize", "eulogise",
- "favoring", "favouring",
- "favorite", "favourite",
- "feminize", "feminise",
- "finalize", "finalise",
- "flavored", "flavoured",
- "flutists", "flautists",
- "fulfills", "fulfils",
- "funneled", "funnelled",
- "gamboled", "gambolled",
- "graveled", "gravelled",
- "groveled", "grovelled",
- "grueling", "gruelling",
- "harbored", "harboured",
- "honoring", "honouring",
- "humanize", "humanise",
- "humoring", "humouring",
- "idealize", "idealise",
- "idolized", "idolised",
- "idolizes", "idolises",
- "immunize", "immunise",
- "ionizing", "ionising",
- "itemized", "itemised",
- "itemizes", "itemises",
- "jewelers", "jewellers",
- "labeling", "labelling",
- "laborers", "labourers",
- "laboring", "labouring",
- "legalize", "legalise",
- "leukemia", "leukaemia",
- "levelers", "levellers",
- "leveling", "levelling",
- "libeling", "libelling",
- "libelous", "libellous",
- "lionized", "lionised",
- "lionizes", "lionises",
- "localize", "localise",
- "louvered", "louvred",
- "maneuver", "manoeuvre",
- "marveled", "marvelled",
- "maximize", "maximise",
- "memorize", "memorise",
- "minimize", "minimise",
- "mobilize", "mobilise",
- "modelers", "modellers",
- "modeling", "modelling",
- "moldered", "mouldered",
- "moldiest", "mouldiest",
- "moldings", "mouldings",
- "moralize", "moralise",
- "mustache", "moustache",
- "neighbor", "neighbour",
- "odorless", "odourless",
- "offenses", "offences",
- "optimize", "optimise",
- "organize", "organise",
- "oxidized", "oxidised",
- "oxidizes", "oxidises",
- "paneling", "panelling",
- "panelist", "panellist",
- "paralyze", "paralyse",
- "parceled", "parcelled",
- "pedaling", "pedalling",
- "penalize", "penalise",
- "penciled", "pencilled",
- "polarize", "polarise",
- "pretense", "pretence",
- "pummeled", "pummelling",
- "raveling", "ravelling",
- "realized", "realised",
- "realizes", "realises",
- "refueled", "refuelled",
- "remolded", "remoulded",
- "revelers", "revellers",
- "reveling", "revelling",
- "rivaling", "rivalling",
- "sanitize", "sanitise",
- "satirize", "satirise",
- "savories", "savouries",
- "savoring", "savouring",
- "scepters", "sceptres",
- "shoveled", "shovelled",
- "signaled", "signalled",
- "skeptics", "sceptics",
- "sniveled", "snivelled",
- "sodomize", "sodomise",
- "specters", "spectres",
- "spiraled", "spiralled",
- "splendor", "splendour",
- "succored", "succoured",
- "sulfates", "sulphates",
- "sulfides", "sulphides",
- "swiveled", "swivelled",
- "tasseled", "tasselled",
- "theaters", "theatres",
- "theorize", "theorise",
- "toweling", "towelling",
- "traveler", "traveller",
- "trialing", "trialling",
- "tricolor", "tricolour",
- "tunneled", "tunnelled",
- "unionize", "unionise",
- "unsavory", "unsavoury",
- "urbanize", "urbanise",
- "utilized", "utilised",
- "utilizes", "utilises",
- "vaporize", "vaporise",
- "vocalize", "vocalise",
- "weaseled", "weaselled",
- "womanize", "womanise",
- "yodeling", "yodelling",
- "agonize", "agonise",
- "analyze", "analyse",
- "appalls", "appals",
- "armored", "armoured",
- "armorer", "armourer",
- "baptize", "baptise",
- "behoove", "behove",
- "belabor", "belabour",
- "beveled", "bevelled",
- "caliber", "calibre",
- "caroled", "carolled",
- "caviled", "cavilled",
- "centers", "centres",
- "clamors", "clamours",
- "clangor", "clangour",
- "colored", "coloured",
- "coziest", "cosiest",
- "crueler", "crueller",
- "defense", "defence",
- "dialing", "dialling",
- "dialogs", "dialogues",
- "distill", "distil",
- "dueling", "duelling",
- "enrolls", "enrols",
- "epaulet", "epaulette",
- "favored", "favoured",
- "flavors", "flavours",
- "flutist", "flautist",
- "fueling", "fuelling",
- "fulfill", "fulfil",
- "goiters", "goitres",
- "harbors", "harbours",
- "honored", "honoured",
- "humored", "humoured",
- "idolize", "idolise",
- "ionized", "ionised",
- "ionizes", "ionises",
- "itemize", "itemise",
- "jeweled", "jewelled",
- "jeweler", "jeweller",
- "jewelry", "jewellery",
- "labeled", "labelled",
- "labored", "laboured",
- "laborer", "labourer",
- "leveled", "levelled",
- "leveler", "leveller",
- "libeled", "libelled",
- "lionize", "lionise",
- "louvers", "louvres",
- "modeled", "modelled",
- "modeler", "modeller",
- "molders", "moulders",
- "moldier", "mouldier",
- "molding", "moulding",
- "molting", "moulting",
- "offense", "offence",
- "oxidize", "oxidise",
- "pajamas", "pyjamas",
- "paneled", "panelled",
- "parlors", "parlours",
- "pedaled", "pedalled",
- "plowing", "ploughing",
- "plowman", "ploughman",
- "plowmen", "ploughmen",
- "realize", "realise",
- "remolds", "remoulds",
- "reveled", "revelled",
- "reveler", "reveller",
- "rivaled", "rivalled",
- "rumored", "rumoured",
- "saviors", "saviours",
- "savored", "savoured",
- "scepter", "sceptre",
- "skeptic", "sceptic",
- "specter", "spectre",
- "succors", "succours",
- "sulfate", "sulphate",
- "sulfide", "sulphide",
- "theater", "theatre",
- "toweled", "towelled",
- "toxemia", "toxaemia",
- "trialed", "trialled",
- "utilize", "utilise",
- "yodeled", "yodelled",
- "anemia", "anaemia",
- "anemic", "anaemic",
- "appall", "appal",
- "arbors", "arbours",
- "armory", "armoury",
- "candor", "candour",
- "center", "centre",
- "clamor", "clamour",
- "colors", "colours",
- "cozier", "cosier",
- "cozies", "cosies",
- "cozily", "cosily",
- "dialed", "dialled",
- "drafty", "draughty",
- "dueled", "duelled",
- "favors", "favours",
- "fervor", "fervour",
- "fibers", "fibres",
- "flavor", "flavour",
- "fueled", "fuelled",
- "goiter", "goitre",
- "harbor", "harbour",
- "honors", "honours",
- "humors", "humours",
- "labors", "labours",
- "liters", "litres",
- "louver", "louvre",
- "luster", "lustre",
- "meager", "meagre",
- "miters", "mitres",
- "molded", "moulded",
- "molder", "moulder",
- "molted", "moulted",
- "pajama", "pyjama",
- "parlor", "parlour",
- "plowed", "ploughed",
- "rancor", "rancour",
- "remold", "remould",
- "rigors", "rigours",
- "rumors", "rumours",
- "savors", "savours",
- "savory", "savoury",
- "succor", "succour",
- "tumors", "tumours",
- "vapors", "vapours",
- "aging", "ageing",
- "arbor", "arbour",
- "ardor", "ardour",
- "armor", "armour",
- "chili", "chilli",
- "color", "colour",
- "edema", "edoema",
- "favor", "favour",
- "fecal", "faecal",
- "feces", "faeces",
- "fiber", "fibre",
- "honor", "honour",
- "humor", "humour",
- "labor", "labour",
- "liter", "litre",
- "miter", "mitre",
- "molds", "moulds",
- "moldy", "mouldy",
- "molts", "moults",
- "odors", "odours",
- "plows", "ploughs",
- "rigor", "rigour",
- "rumor", "rumour",
- "savor", "savour",
- "valor", "valour",
- "vapor", "vapour",
- "vigor", "vigour",
- "cozy", "cosy",
- "mold", "mould",
- "molt", "moult",
- "odor", "odour",
- "plow", "plough",
-}
diff --git a/vendor/github.com/golangci/modinfo/.gitignore b/vendor/github.com/golangci/modinfo/.gitignore
deleted file mode 100644
index 9f11b755a..000000000
--- a/vendor/github.com/golangci/modinfo/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-.idea/
diff --git a/vendor/github.com/golangci/modinfo/.golangci.yml b/vendor/github.com/golangci/modinfo/.golangci.yml
deleted file mode 100644
index 9698182f2..000000000
--- a/vendor/github.com/golangci/modinfo/.golangci.yml
+++ /dev/null
@@ -1,157 +0,0 @@
-run:
- timeout: 7m
-
-linters-settings:
- govet:
- enable:
- - shadow
- gocyclo:
- min-complexity: 12
- goconst:
- min-len: 3
- min-occurrences: 3
- funlen:
- lines: -1
- statements: 50
- misspell:
- locale: US
- depguard:
- rules:
- main:
- deny:
- - pkg: "github.com/instana/testify"
- desc: not allowed
- - pkg: "github.com/pkg/errors"
- desc: Should be replaced by standard lib errors package
- tagalign:
- align: false
- order:
- - xml
- - json
- - yaml
- - yml
- - toml
- - mapstructure
- - url
- godox:
- keywords:
- - FIXME
- gocritic:
- enabled-tags:
- - diagnostic
- - style
- - performance
- disabled-checks:
- - paramTypeCombine # already handle by gofumpt.extra-rules
- - whyNoLint # already handle by nonolint
- - unnamedResult
- - hugeParam
- - sloppyReassign
- - rangeValCopy
- - octalLiteral
- - ptrToRefParam
- - appendAssign
- - ruleguard
- - httpNoBody
- - exposedSyncMutex
- revive:
- rules:
- - name: struct-tag
- - name: blank-imports
- - name: context-as-argument
- - name: context-keys-type
- - name: dot-imports
- - name: error-return
- - name: error-strings
- - name: error-naming
- - name: exported
- disabled: true
- - name: if-return
- - name: increment-decrement
- - name: var-naming
- - name: var-declaration
- - name: package-comments
- disabled: true
- - name: range
- - name: receiver-naming
- - name: time-naming
- - name: unexported-return
- - name: indent-error-flow
- - name: errorf
- - name: empty-block
- - name: superfluous-else
- - name: unused-parameter
- disabled: true
- - name: unreachable-code
- - name: redefines-builtin-id
-
- tagliatelle:
- case:
- rules:
- json: pascal
- yaml: camel
- xml: camel
- header: header
- mapstructure: camel
- env: upperSnake
- envconfig: upperSnake
-
-linters:
- enable-all: true
- disable:
- - deadcode # deprecated
- - exhaustivestruct # deprecated
- - golint # deprecated
- - ifshort # deprecated
- - interfacer # deprecated
- - maligned # deprecated
- - nosnakecase # deprecated
- - scopelint # deprecated
- - structcheck # deprecated
- - varcheck # deprecated
- - cyclop # duplicate of gocyclo
- - sqlclosecheck # not relevant (SQL)
- - rowserrcheck # not relevant (SQL)
- - execinquery # not relevant (SQL)
- - lll
- - gosec
- - dupl # not relevant
- - prealloc # too many false-positive
- - bodyclose # too many false-positive
- - gomnd
- - testpackage # not relevant
- - tparallel # not relevant
- - paralleltest # not relevant
- - nestif # too many false-positive
- - wrapcheck
- - goerr113 # not relevant
- - nlreturn # not relevant
- - wsl # not relevant
- - exhaustive # not relevant
- - exhaustruct # not relevant
- - makezero # not relevant
- - forbidigo
- - varnamelen # not relevant
- - nilnil # not relevant
- - ireturn # not relevant
- - contextcheck # too many false-positive
- - tenv # we already have a test "framework" to handle env vars
- - noctx
- - errchkjson
- - nonamedreturns
- - gosmopolitan # not relevant
- - gochecknoglobals
-
-issues:
- exclude-use-default: false
- max-issues-per-linter: 0
- max-same-issues: 0
- exclude:
- - 'Error return value of .((os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*printf?|os\.(Un)?Setenv). is not checked'
- - 'ST1000: at least one file in a package should have a package comment'
- exclude-rules:
- - path: (.+)_test.go
- linters:
- - funlen
- - goconst
- - maintidx
diff --git a/vendor/github.com/golangci/modinfo/LICENSE b/vendor/github.com/golangci/modinfo/LICENSE
deleted file mode 100644
index f288702d2..000000000
--- a/vendor/github.com/golangci/modinfo/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<https://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff --git a/vendor/github.com/golangci/modinfo/Makefile b/vendor/github.com/golangci/modinfo/Makefile
deleted file mode 100644
index df91018f1..000000000
--- a/vendor/github.com/golangci/modinfo/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-.PHONY: clean check test
-
-default: clean check test
-
-clean:
- rm -rf dist/ cover.out
-
-test: clean
- go test -v -cover ./...
-
-check:
- golangci-lint run
diff --git a/vendor/github.com/golangci/modinfo/module.go b/vendor/github.com/golangci/modinfo/module.go
deleted file mode 100644
index ff0b21b9b..000000000
--- a/vendor/github.com/golangci/modinfo/module.go
+++ /dev/null
@@ -1,157 +0,0 @@
-package modinfo
-
-import (
- "bytes"
- "encoding/json"
- "errors"
- "fmt"
- "os"
- "os/exec"
- "path/filepath"
- "reflect"
- "sort"
- "strings"
- "sync"
-
- "golang.org/x/mod/modfile"
- "golang.org/x/tools/go/analysis"
-)
-
-type ModInfo struct {
- Path string `json:"Path"`
- Dir string `json:"Dir"`
- GoMod string `json:"GoMod"`
- GoVersion string `json:"GoVersion"`
- Main bool `json:"Main"`
-}
-
-var (
- once sync.Once
- information []ModInfo
- errInfo error
-)
-
-var Analyzer = &analysis.Analyzer{
- Name: "modinfo",
- Doc: "Module information",
- URL: "https://github.com/golangci/modinfo",
- Run: runOnce,
- ResultType: reflect.TypeOf([]ModInfo(nil)),
-}
-
-func runOnce(pass *analysis.Pass) (any, error) {
- _, ok := os.LookupEnv("MODINFO_DEBUG_DISABLE_ONCE")
- if ok {
- return GetModuleInfo(pass)
- }
-
- once.Do(func() {
- information, errInfo = GetModuleInfo(pass)
- })
-
- return information, errInfo
-}
-
-// GetModuleInfo gets modules information.
-// Always returns 1 element except for workspace (returns all the modules of the workspace).
-// Based on `go list -m -json` behavior.
-func GetModuleInfo(pass *analysis.Pass) ([]ModInfo, error) {
- // https://github.com/golang/go/issues/44753#issuecomment-790089020
- cmd := exec.Command("go", "list", "-m", "-json")
- for _, file := range pass.Files {
- name := pass.Fset.File(file.Pos()).Name()
- if filepath.Ext(name) != ".go" {
- continue
- }
-
- cmd.Dir = filepath.Dir(name)
- break
- }
-
- out, err := cmd.Output()
- if err != nil {
- return nil, fmt.Errorf("command go list: %w: %s", err, string(out))
- }
-
- var infos []ModInfo
-
- for dec := json.NewDecoder(bytes.NewBuffer(out)); dec.More(); {
- var v ModInfo
- if err := dec.Decode(&v); err != nil {
- return nil, fmt.Errorf("unmarshaling error: %w: %s", err, string(out))
- }
-
- if v.GoMod == "" {
- return nil, errors.New("working directory is not part of a module")
- }
-
- if !v.Main || v.Dir == "" {
- continue
- }
-
- infos = append(infos, v)
- }
-
- if len(infos) == 0 {
- return nil, errors.New("go.mod file not found")
- }
-
- sort.Slice(infos, func(i, j int) bool {
- return len(infos[i].Path) > len(infos[j].Path)
- })
-
- return infos, nil
-}
-
-// FindModuleFromPass finds the module related to the files of the pass.
-func FindModuleFromPass(pass *analysis.Pass) (ModInfo, error) {
- infos, ok := pass.ResultOf[Analyzer].([]ModInfo)
- if !ok {
- return ModInfo{}, errors.New("no modinfo analyzer result")
- }
-
- var name string
- for _, file := range pass.Files {
- f := pass.Fset.File(file.Pos()).Name()
- if filepath.Ext(f) != ".go" {
- continue
- }
-
- name = f
- break
- }
-
- // no Go file found in analysis pass
- if name == "" {
- name, _ = os.Getwd()
- }
-
- for _, info := range infos {
- if !strings.HasPrefix(name, info.Dir) {
- continue
- }
- return info, nil
- }
-
- return ModInfo{}, errors.New("module information not found")
-}
-
-// ReadModuleFileFromPass read the `go.mod` file from the pass result.
-func ReadModuleFileFromPass(pass *analysis.Pass) (*modfile.File, error) {
- info, err := FindModuleFromPass(pass)
- if err != nil {
- return nil, err
- }
-
- return ReadModuleFile(info)
-}
-
-// ReadModuleFile read the `go.mod` file.
-func ReadModuleFile(info ModInfo) (*modfile.File, error) {
- raw, err := os.ReadFile(info.GoMod)
- if err != nil {
- return nil, fmt.Errorf("reading go.mod file: %w", err)
- }
-
- return modfile.Parse("go.mod", raw, nil)
-}
diff --git a/vendor/github.com/golangci/modinfo/readme.md b/vendor/github.com/golangci/modinfo/readme.md
deleted file mode 100644
index 2175de8eb..000000000
--- a/vendor/github.com/golangci/modinfo/readme.md
+++ /dev/null
@@ -1,73 +0,0 @@
-# modinfo
-
-This module contains:
-- an analyzer that returns module information.
-- methods to find and read `go.mod` file
-
-## Examples
-
-```go
-package main
-
-import (
- "fmt"
-
- "github.com/golangci/modinfo"
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/analysis/passes/inspect"
-)
-
-var Analyzer = &analysis.Analyzer{
- Name: "example",
- Doc: "Example",
- Run: func(pass *analysis.Pass) (interface{}, error) {
- file, err := modinfo.ReadModuleFileFromPass(pass)
- if err != nil {
- return nil, err
- }
-
- fmt.Println("go.mod", file)
-
- // TODO
-
- return nil, nil
- },
- Requires: []*analysis.Analyzer{
- inspect.Analyzer,
- modinfo.Analyzer,
- },
-}
-```
-
-```go
-package main
-
-import (
- "fmt"
-
- "github.com/golangci/modinfo"
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/analysis/passes/inspect"
-)
-
-var Analyzer = &analysis.Analyzer{
- Name: "example",
- Doc: "Example",
- Run: func(pass *analysis.Pass) (interface{}, error) {
- info, err := modinfo.FindModuleFromPass(pass)
- if err != nil {
- return nil, err
- }
-
- fmt.Println("Module", info.Dir)
-
- // TODO
-
- return nil, nil
- },
- Requires: []*analysis.Analyzer{
- inspect.Analyzer,
- modinfo.Analyzer,
- },
-}
-```
diff --git a/vendor/github.com/golangci/plugin-module-register/LICENSE b/vendor/github.com/golangci/plugin-module-register/LICENSE
deleted file mode 100644
index e72bfddab..000000000
--- a/vendor/github.com/golangci/plugin-module-register/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<https://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<https://www.gnu.org/licenses/why-not-lgpl.html>. \ No newline at end of file
diff --git a/vendor/github.com/golangci/plugin-module-register/register/register.go b/vendor/github.com/golangci/plugin-module-register/register/register.go
deleted file mode 100644
index 72ad7f46f..000000000
--- a/vendor/github.com/golangci/plugin-module-register/register/register.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package register
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
- "sync"
-
- "golang.org/x/tools/go/analysis"
-)
-
-// Plugins load mode.
-const (
- LoadModeSyntax = "syntax"
- LoadModeTypesInfo = "typesinfo"
-)
-
-var (
- pluginsMu sync.RWMutex
- plugins = make(map[string]NewPlugin)
-)
-
-// LinterPlugin the interface of the plugin structure.
-type LinterPlugin interface {
- BuildAnalyzers() ([]*analysis.Analyzer, error)
- GetLoadMode() string
-}
-
-// NewPlugin the contract of the constructor of a plugin.
-type NewPlugin func(conf any) (LinterPlugin, error)
-
-// Plugin registers a plugin.
-func Plugin(name string, p NewPlugin) {
- pluginsMu.Lock()
-
- plugins[name] = p
-
- pluginsMu.Unlock()
-}
-
-// GetPlugin gets a plugin by name.
-func GetPlugin(name string) (NewPlugin, error) {
- pluginsMu.Lock()
- defer pluginsMu.Unlock()
-
- p, ok := plugins[name]
- if !ok {
- return nil, fmt.Errorf("plugin %q not found", name)
- }
-
- return p, nil
-}
-
-// DecodeSettings decode settings from golangci-lint to the structure of the plugin configuration.
-func DecodeSettings[T any](rawSettings any) (T, error) {
- var buffer bytes.Buffer
-
- if err := json.NewEncoder(&buffer).Encode(rawSettings); err != nil {
- var zero T
- return zero, fmt.Errorf("encoding settings: %w", err)
- }
-
- decoder := json.NewDecoder(&buffer)
- decoder.DisallowUnknownFields()
-
- s := new(T)
- if err := decoder.Decode(s); err != nil {
- var zero T
- return zero, fmt.Errorf("decoding settings: %w", err)
- }
-
- return *s, nil
-}
diff --git a/vendor/github.com/golangci/revgrep/.gitignore b/vendor/github.com/golangci/revgrep/.gitignore
deleted file mode 100644
index 0540fe2ca..000000000
--- a/vendor/github.com/golangci/revgrep/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-testdata/git
diff --git a/vendor/github.com/golangci/revgrep/.golangci.yml b/vendor/github.com/golangci/revgrep/.golangci.yml
deleted file mode 100644
index 5239720ac..000000000
--- a/vendor/github.com/golangci/revgrep/.golangci.yml
+++ /dev/null
@@ -1,80 +0,0 @@
-run:
- timeout: 2m
-
-linters-settings:
- govet:
- enable-all: true
- disable:
- - fieldalignment
- gocyclo:
- min-complexity: 30 # 30 by default (but we recommend 10-20)
- goconst:
- min-len: 3
- min-occurrences: 3
- misspell:
- locale: US
- funlen:
- lines: -1
- statements: 80 # default 40
- gocognit:
- min-complexity: 65 # default 30
- gofumpt:
- extra-rules: true
- godox:
- keywords:
- - FIXME
-
-linters:
- enable-all: true
- disable:
- - deadcode # deprecated
- - exhaustivestruct # deprecated
- - golint # deprecated
- - ifshort # deprecated
- - interfacer # deprecated
- - maligned # deprecated
- - nosnakecase # deprecated
- - scopelint # deprecated
- - structcheck # deprecated
- - varcheck # deprecated
- - cyclop # duplicate of gocyclo
- - sqlclosecheck # not relevant (SQL)
- - rowserrcheck # not relevant (SQL)
- - execinquery # not relevant (SQL)
- - dupl
- - lll
- - nestif
- - gomnd
- - goerr113
- - nlreturn
- - wsl
- - exhaustive
- - exhaustruct
- - tparallel
- - testpackage
- - paralleltest
- - ifshort
- - forcetypeassert
- - varnamelen
- - prealloc # false-positives
- - nosnakecase
- - nonamedreturns
- - nilerr
- - depguard
-
-issues:
- exclude-use-default: false
- max-issues-per-linter: 0
- max-same-issues: 0
- exclude:
- - 'ST1000: at least one file in a package should have a package comment'
- exclude-rules:
- - path: (.+)_test.go
- linters:
- - funlen
- - goconst
- - gosec
- - maintidx
- - path: cmd/revgrep/main.go
- linters:
- - forbidigo
diff --git a/vendor/github.com/golangci/revgrep/LICENSE b/vendor/github.com/golangci/revgrep/LICENSE
deleted file mode 100644
index 8dada3eda..000000000
--- a/vendor/github.com/golangci/revgrep/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/vendor/github.com/golangci/revgrep/Makefile b/vendor/github.com/golangci/revgrep/Makefile
deleted file mode 100644
index 5ac8725d0..000000000
--- a/vendor/github.com/golangci/revgrep/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-.PHONY: clean lint lint-fix test
-
-default: lint test
-
-test:
- go test -v -cover ./...
-
-lint:
- golangci-lint run
-
-lint-fix:
- golangci-lint run --fix
diff --git a/vendor/github.com/golangci/revgrep/README.md b/vendor/github.com/golangci/revgrep/README.md
deleted file mode 100644
index 97f25ffb3..000000000
--- a/vendor/github.com/golangci/revgrep/README.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# Overview
-
-`revgrep` is a CLI tool used to filter static analysis tools to only lines changed based on a commit reference.
-
-# Install
-
-```bash
-go get -u github.com/golangci/revgrep/...
-```
-
-# Usage
-
-In the scenario below, a change was made causing a warning in `go vet` on line 5, but `go vet` will show all warnings.
-Using `revgrep`, you can show only warnings for lines of code that have been changed (in this case, hiding line 6).
-
-```bash
-[user@host dir (master)]$ go vet
-main.go:5: missing argument for Sprintf("%s"): format reads arg 1, have only 0 args
-main.go:6: missing argument for Sprintf("%s"): format reads arg 1, have only 0 args
-[user@host dir (master)]$ go vet |& revgrep
-main.go:5: missing argument for Sprintf("%s"): format reads arg 1, have only 0 args
-```
-
-`|&` is shown above as many static analysis programs write to `stderr`, not `stdout`, `|&` combines both `stderr` and
-`stdout`. It could also be achieved with `go vet 2>&1 | revgrep`.
-
-`revgrep` CLI tool will return an exit status of 1 if any issues match, else it will return 0. Consider using
-`${PIPESTATUS[0]}` for the exit status of the `go vet` command in the above example.
-
-```
-Usage: revgrep [options] [from-rev] [to-rev]
-
-from-rev filters issues to lines changed since (and including) this revision
- to-rev filters issues to lines changed since (and including) this revision, requires <from-rev>
-
- If no revisions are given, and there are unstaged changes or untracked files, only those changes are shown
- If no revisions are given, and there are no unstaged changes or untracked files, only changes in HEAD~ are shown
- If from-rev is given and to-rev is not, only changes between from-rev and HEAD are shown.
-
- -d Show debug output
- -regexp string
- Regexp to match path, line number, optional column number, and message
-```
-
-# Other Examples
-
-Issues between branches:
-```bash
-[user@host dir (feature/branch)]$ go vet |& revgrep master
-```
-
-Issues since last push:
-```bash
-[user@host dir (master)]$ go vet |& revgrep origin/master
-```
diff --git a/vendor/github.com/golangci/revgrep/revgrep.go b/vendor/github.com/golangci/revgrep/revgrep.go
deleted file mode 100644
index 1ef81b203..000000000
--- a/vendor/github.com/golangci/revgrep/revgrep.go
+++ /dev/null
@@ -1,483 +0,0 @@
-// Package revgrep filter static analysis tools to only lines changed based on a commit reference.
-package revgrep
-
-import (
- "bufio"
- "bytes"
- "errors"
- "fmt"
- "io"
- "os"
- "os/exec"
- "path/filepath"
- "regexp"
- "strconv"
- "strings"
-)
-
-// Checker provides APIs to filter static analysis tools to specific commits,
-// such as showing only issues since last commit.
-type Checker struct {
- // Patch file (unified) to read to detect lines being changed,
- // if nil revgrep will attempt to detect the VCS and generate an appropriate patch.
- // Auto-detection will search for uncommitted changes first,
- // if none found, will generate a patch from last committed change.
- // File paths within patches must be relative to current working directory.
- Patch io.Reader
- // NewFiles is a list of file names (with absolute paths) where the entire contents of the file is new.
- NewFiles []string
- // Debug sets the debug writer for additional output.
- Debug io.Writer
- // RevisionFrom check revision starting at, leave blank for auto-detection ignored if patch is set.
- RevisionFrom string
- // WholeFiles indicates that the user wishes to see all issues that comes up anywhere in any file that has been changed in this revision or patch.
- WholeFiles bool
- // RevisionTo checks revision finishing at, leave blank for auto-detection ignored if patch is set.
- RevisionTo string
- // Regexp to match path, line number, optional column number, and message.
- Regexp string
- // AbsPath is used to make an absolute path of an issue's filename to be relative in order to match patch file.
- // If not set, current working directory is used.
- AbsPath string
-
- // Calculated changes for next calls to IsNewIssue
- changes map[string][]pos
-}
-
-// Issue contains metadata about an issue found.
-type Issue struct {
- // File is the name of the file as it appeared from the patch.
- File string
- // LineNo is the line number of the file.
- LineNo int
- // ColNo is the column number or 0 if none could be parsed.
- ColNo int
- // HunkPos is position from file's first @@, for new files this will be the line number.
- // See also: https://developer.github.com/v3/pulls/comments/#create-a-comment
- HunkPos int
- // Issue text as it appeared from the tool.
- Issue string
- // Message is the issue without file name, line number and column number.
- Message string
-}
-
-// InputIssue represents issue found by some linter.
-type InputIssue interface {
- FilePath() string
- Line() int
-}
-
-type simpleInputIssue struct {
- filePath string
- lineNumber int
-}
-
-type pos struct {
- lineNo int // line number
- hunkPos int // position relative to first @@ in file
-}
-
-func (i simpleInputIssue) FilePath() string {
- return i.filePath
-}
-
-func (i simpleInputIssue) Line() int {
- return i.lineNumber
-}
-
-// Prepare extracts a patch and changed lines.
-func (c *Checker) Prepare() error {
- returnErr := c.preparePatch()
- c.changes = c.linesChanged()
- return returnErr
-}
-
-// IsNewIssue checks whether issue found by linter is new: it was found in changed lines.
-func (c *Checker) IsNewIssue(i InputIssue) (hunkPos int, isNew bool) {
- fchanges, ok := c.changes[filepath.ToSlash(i.FilePath())]
- if !ok { // file wasn't changed
- return 0, false
- }
-
- if c.WholeFiles {
- return i.Line(), true
- }
-
- var (
- fpos pos
- changed bool
- )
- // found file, see if lines matched
- for _, pos := range fchanges {
- if pos.lineNo == i.Line() {
- fpos = pos
- changed = true
- break
- }
- }
-
- if changed || fchanges == nil {
- // either file changed or it's a new file
- hunkPos := fpos.lineNo
- if changed { // existing file changed
- hunkPos = fpos.hunkPos
- }
-
- return hunkPos, true
- }
-
- return 0, false
-}
-
-// Check scans reader and writes any lines to writer that have been added in Checker.Patch.
-//
-// Returns the issues written to writer when no error occurs.
-//
-// If no VCS could be found or other VCS errors occur,
-// all issues are written to writer and an error is returned.
-//
-// File paths in reader must be relative to current working directory or absolute.
-func (c *Checker) Check(reader io.Reader, writer io.Writer) (issues []Issue, err error) {
- returnErr := c.Prepare()
- writeAll := returnErr != nil
-
- // file.go:lineNo:colNo:message
- // colNo is optional, strip spaces before message
- lineRE := regexp.MustCompile(`(.+\.go):([0-9]+):([0-9]+)?:?\s*(.*)`)
- if c.Regexp != "" {
- lineRE, err = regexp.Compile(c.Regexp)
- if err != nil {
- return nil, fmt.Errorf("could not parse regexp: %w", err)
- }
- }
-
- // TODO consider lazy loading this, if there's nothing in stdin, no point
- // checking for recent changes
- c.debugf("lines changed: %+v", c.changes)
-
- absPath := c.AbsPath
- if absPath == "" {
- absPath, err = os.Getwd()
- if err != nil {
- returnErr = fmt.Errorf("could not get current working directory: %w", err)
- }
- }
-
- // Scan each line in reader and only write those lines if lines changed
- scanner := bufio.NewScanner(reader)
- for scanner.Scan() {
- line := lineRE.FindSubmatch(scanner.Bytes())
- if line == nil {
- c.debugf("cannot parse file+line number: %s", scanner.Text())
- continue
- }
-
- if writeAll {
- _, _ = fmt.Fprintln(writer, scanner.Text())
- continue
- }
-
- // Make absolute path names relative
- path := string(line[1])
- if rel, err := filepath.Rel(absPath, path); err == nil {
- c.debugf("rewrote path from %q to %q (absPath: %q)", path, rel, absPath)
- path = rel
- }
-
- // Parse line number
- lno, err := strconv.ParseUint(string(line[2]), 10, 64)
- if err != nil {
- c.debugf("cannot parse line number: %q", scanner.Text())
- continue
- }
-
- // Parse optional column number
- var cno uint64
- if len(line[3]) > 0 {
- cno, err = strconv.ParseUint(string(line[3]), 10, 64)
- if err != nil {
- c.debugf("cannot parse column number: %q", scanner.Text())
- // Ignore this error and continue
- }
- }
-
- // Extract message
- msg := string(line[4])
-
- c.debugf("path: %q, lineNo: %v, colNo: %v, msg: %q", path, lno, cno, msg)
-
- simpleIssue := simpleInputIssue{filePath: path, lineNumber: int(lno)}
-
- hunkPos, changed := c.IsNewIssue(simpleIssue)
- if changed {
- issue := Issue{
- File: path,
- LineNo: int(lno),
- ColNo: int(cno),
- HunkPos: hunkPos,
- Issue: scanner.Text(),
- Message: msg,
- }
- issues = append(issues, issue)
-
- _, _ = fmt.Fprintln(writer, scanner.Text())
- } else {
- c.debugf("unchanged: %s", scanner.Text())
- }
- }
-
- if err := scanner.Err(); err != nil {
- returnErr = fmt.Errorf("error reading standard input: %w", err)
- }
-
- return issues, returnErr
-}
-
-func (c *Checker) debugf(format string, s ...interface{}) {
- if c.Debug != nil {
- _, _ = fmt.Fprint(c.Debug, "DEBUG: ")
- _, _ = fmt.Fprintf(c.Debug, format+"\n", s...)
- }
-}
-
-func (c *Checker) preparePatch() error {
- // Check if patch is supplied, if not, retrieve from VCS
- if c.Patch == nil {
- var err error
- c.Patch, c.NewFiles, err = GitPatch(c.RevisionFrom, c.RevisionTo)
- if err != nil {
- return fmt.Errorf("could not read git repo: %w", err)
- }
- if c.Patch == nil {
- return errors.New("no version control repository found")
- }
- }
-
- return nil
-}
-
-// linesChanges returns a map of file names to line numbers being changed.
-// If key is nil, the file has been recently added, else it contains a slice of positions that have been added.
-func (c *Checker) linesChanged() map[string][]pos {
- type state struct {
- file string
- lineNo int // current line number within chunk
- hunkPos int // current line count since first @@ in file
- changes []pos // position of changes
- }
-
- changes := make(map[string][]pos)
-
- for _, file := range c.NewFiles {
- changes[file] = nil
- }
-
- if c.Patch == nil {
- return changes
- }
-
- var s state
-
- scanner := bufio.NewReader(c.Patch)
- var scanErr error
- for {
- lineB, isPrefix, err := scanner.ReadLine()
- if isPrefix {
- // If a single line overflowed the buffer, don't bother processing it as
- // it's likey part of a file and not relevant to the patch.
- continue
- }
- if err != nil {
- scanErr = err
- break
- }
- line := strings.TrimRight(string(lineB), "\n")
-
- c.debugf(line)
- s.lineNo++
- s.hunkPos++
- switch {
- case strings.HasPrefix(line, "+++ ") && len(line) > 4:
- if s.changes != nil {
- // record the last state
- changes[s.file] = s.changes
- }
- // 6 removes "+++ b/"
- s = state{file: line[6:], hunkPos: -1, changes: []pos{}}
- case strings.HasPrefix(line, "@@ "):
- // @@ -1 +2,4 @@
- // chdr ^^^^^^^^^^^^^
- // ahdr ^^^^
- // cstart ^
- chdr := strings.Split(line, " ")
- ahdr := strings.Split(chdr[2], ",")
- // [1:] to remove leading plus
- cstart, err := strconv.ParseUint(ahdr[0][1:], 10, 64)
- if err != nil {
- panic(err)
- }
- s.lineNo = int(cstart) - 1 // -1 as cstart is the next line number
- case strings.HasPrefix(line, "-"):
- s.lineNo--
- case strings.HasPrefix(line, "+"):
- s.changes = append(s.changes, pos{lineNo: s.lineNo, hunkPos: s.hunkPos})
- }
- }
-
- if !errors.Is(scanErr, io.EOF) {
- _, _ = fmt.Fprintln(os.Stderr, "reading standard input:", scanErr)
- }
-
- // record the last state
- changes[s.file] = s.changes
-
- return changes
-}
-
-// GitPatch returns a patch from a git repository.
-// If no git repository was found and no errors occurred, nil is returned,
-// else an error is returned revisionFrom and revisionTo defines the git diff parameters,
-// if left blank and there are unstaged changes or untracked files,
-// only those will be returned else only check changes since HEAD~.
-// If revisionFrom is set but revisionTo is not,
-// untracked files will be included, to exclude untracked files set revisionTo to HEAD~.
-// It's incorrect to specify revisionTo without a revisionFrom.
-func GitPatch(revisionFrom, revisionTo string) (io.Reader, []string, error) {
- // check if git repo exists
- if err := exec.Command("git", "status", "--porcelain").Run(); err != nil {
- // don't return an error, we assume the error is not repo exists
- return nil, nil, nil
- }
-
- // make a patch for untracked files
- ls, err := exec.Command("git", "ls-files", "--others", "--exclude-standard").CombinedOutput()
- if err != nil {
- return nil, nil, fmt.Errorf("error executing git ls-files: %w", err)
- }
-
- var newFiles []string
- for _, file := range bytes.Split(ls, []byte{'\n'}) {
- if len(file) == 0 || bytes.HasSuffix(file, []byte{'/'}) {
- // ls-files was sometimes showing directories when they were ignored
- // I couldn't create a test case for this as I couldn't reproduce correctly for the moment,
- // just exclude files with trailing /
- continue
- }
-
- newFiles = append(newFiles, string(file))
- }
-
- if revisionFrom != "" {
- args := []string{revisionFrom}
-
- if revisionTo != "" {
- args = append(args, revisionTo)
- }
-
- args = append(args, "--")
-
- patch, errDiff := gitDiff(args...)
- if errDiff != nil {
- return nil, nil, errDiff
- }
-
- if revisionTo == "" {
- return patch, newFiles, nil
- }
-
- return patch, nil, nil
- }
-
- // make a patch for unstaged changes
- patch, err := gitDiff("--")
- if err != nil {
- return nil, nil, err
- }
-
- unstaged := patch.Len() > 0
-
- // If there's unstaged changes OR untracked changes (or both),
- // then this is a suitable patch
- if unstaged || newFiles != nil {
- return patch, newFiles, nil
- }
-
- // check for changes in recent commit
- patch, err = gitDiff("HEAD~", "--")
- if err != nil {
- return nil, nil, err
- }
-
- return patch, nil, nil
-}
-
-func gitDiff(extraArgs ...string) (*bytes.Buffer, error) {
- cmd := exec.Command("git", "diff", "--color=never", "--no-ext-diff")
-
- if isSupportedByGit(2, 41, 0) {
- cmd.Args = append(cmd.Args, "--default-prefix")
- }
-
- cmd.Args = append(cmd.Args, "--relative")
- cmd.Args = append(cmd.Args, extraArgs...)
-
- patch := new(bytes.Buffer)
- errBuff := new(bytes.Buffer)
-
- cmd.Stdout = patch
- cmd.Stderr = errBuff
-
- if err := cmd.Run(); err != nil {
- return nil, fmt.Errorf("error executing %q: %w: %w", strings.Join(cmd.Args, " "), err, readAsError(errBuff))
- }
-
- return patch, nil
-}
-
-func readAsError(buff io.Reader) error {
- output, err := io.ReadAll(buff)
- if err != nil {
- return fmt.Errorf("read stderr: %w", err)
- }
-
- return errors.New(string(output))
-}
-
-func isSupportedByGit(major, minor, patch int) bool {
- output, err := exec.Command("git", "version").CombinedOutput()
- if err != nil {
- return false
- }
-
- parts := bytes.Split(bytes.TrimSpace(output), []byte(" "))
- if len(parts) < 3 {
- return false
- }
-
- v := string(parts[2])
- if v == "" {
- return false
- }
-
- vp := regexp.MustCompile(`^(\d+)\.(\d+)(?:\.(\d+))?.*$`).FindStringSubmatch(v)
- if len(vp) < 4 {
- return false
- }
-
- currentMajor, err := strconv.Atoi(vp[1])
- if err != nil {
- return false
- }
-
- currentMinor, err := strconv.Atoi(vp[2])
- if err != nil {
- return false
- }
-
- currentPatch, err := strconv.Atoi(vp[3])
- if err != nil {
- return false
- }
-
- return currentMajor*1_000_000_000+currentMinor*1_000_000+currentPatch*1_000 >= major*1_000_000_000+minor*1_000_000+patch*1_000
-}
diff --git a/vendor/github.com/golangci/unconvert/LICENSE b/vendor/github.com/golangci/unconvert/LICENSE
deleted file mode 100644
index 744875676..000000000
--- a/vendor/github.com/golangci/unconvert/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2012 The Go Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/github.com/golangci/unconvert/README.md b/vendor/github.com/golangci/unconvert/README.md
deleted file mode 100644
index e9230c218..000000000
--- a/vendor/github.com/golangci/unconvert/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Fork of [unconvert](https://github.com/mdempsky/unconvert) to be usable as a library.
-
-The specific elements are inside the file `golangci.go`.
-
-The only modification of the file `unconvert.go` is the remove of the global variables for the flags.
-The tests will never work because of that, then the CI is disabled.
diff --git a/vendor/github.com/golangci/unconvert/golangci.go b/vendor/github.com/golangci/unconvert/golangci.go
deleted file mode 100644
index 306c44e5e..000000000
--- a/vendor/github.com/golangci/unconvert/golangci.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package unconvert
-
-import (
- "go/ast"
- "go/token"
- "strings"
- "sync"
-
- "golang.org/x/tools/go/analysis"
-)
-
-// Transformed version of the original unconvert flags section.
-// The section has been removed inside `unconvert.go`
-var (
- flagAll = pointer(false)
- flagApply = pointer(false)
- flagCPUProfile = pointer("")
- flagSafe = pointer(false)
- flagV = pointer(false)
- flagTests = pointer(true)
- flagFastMath = pointer(false)
- flagTags = pointer("")
- flagConfigs = pointer("")
-)
-
-func pointer[T string | int | int32 | int64 | bool](v T) *T { return &v }
-
-func Run(pass *analysis.Pass, fastMath, safe bool) []token.Position {
- type res struct {
- file string
- edits editSet
- }
-
- flagFastMath = pointer(fastMath)
- flagSafe = pointer(safe)
-
- ch := make(chan res)
- var wg sync.WaitGroup
- for _, file := range pass.Files {
- file := file
-
- tokenFile := pass.Fset.File(file.Package)
- filename := tokenFile.Position(file.Package).Filename
-
- // Hack to recognize _cgo_gotypes.go.
- if strings.HasSuffix(filename, "-d") || strings.HasSuffix(filename, "/_cgo_gotypes.go") {
- continue
- }
-
- wg.Add(1)
- go func() {
- defer wg.Done()
-
- v := visitor{info: pass.TypesInfo, file: tokenFile, edits: make(editSet)}
- ast.Walk(&v, file)
-
- ch <- res{filename, v.edits}
- }()
- }
- go func() {
- wg.Wait()
- close(ch)
- }()
-
- m := make(fileToEditSet)
- for r := range ch {
- m[r.file] = r.edits
- }
-
- var positions []token.Position
- for _, edit := range m {
- for position, _ := range edit {
- positions = append(positions, position)
- }
- }
-
- return positions
-}
diff --git a/vendor/github.com/golangci/unconvert/unconvert.go b/vendor/github.com/golangci/unconvert/unconvert.go
deleted file mode 100644
index 222aeadf8..000000000
--- a/vendor/github.com/golangci/unconvert/unconvert.go
+++ /dev/null
@@ -1,650 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package unconvert Unconvert removes redundant type conversions from Go packages.
-package unconvert
-
-import (
- "bytes"
- "encoding/json"
- "flag"
- "fmt"
- "go/ast"
- "go/format"
- "go/parser"
- "go/token"
- "go/types"
- "io/ioutil"
- "log"
- "os"
- "os/exec"
- "reflect"
- "runtime/pprof"
- "sort"
- "strings"
- "sync"
- "unicode"
-
- "golang.org/x/text/width"
- "golang.org/x/tools/go/packages"
-)
-
-// Unnecessary conversions are identified by the position
-// of their left parenthesis within a source file.
-
-type editSet map[token.Position]struct{}
-
-func (e editSet) add(pos token.Position) {
- pos.Offset = 0
- e[pos] = struct{}{}
-}
-
-func (e editSet) has(pos token.Position) bool {
- pos.Offset = 0
- _, ok := e[pos]
- return ok
-}
-
-func (e editSet) remove(pos token.Position) {
- pos.Offset = 0
- delete(e, pos)
-}
-
-// intersect removes positions from e that are not present in x.
-func (e editSet) intersect(x editSet) {
- for pos := range e {
- if _, ok := x[pos]; !ok {
- delete(e, pos)
- }
- }
-}
-
-type fileToEditSet map[string]editSet
-
-func apply(file string, edits editSet) {
- if len(edits) == 0 {
- return
- }
-
- fset := token.NewFileSet()
- f, err := parser.ParseFile(fset, file, nil, parser.ParseComments)
- if err != nil {
- log.Fatal(err)
- }
-
- // Note: We modify edits during the walk.
- v := editor{edits: edits, file: fset.File(f.Package)}
- ast.Walk(&v, f)
- if len(edits) != 0 {
- log.Printf("%s: missing edits %s", file, edits)
- }
-
- // TODO(mdempsky): Write to temporary file and rename.
- var buf bytes.Buffer
- err = format.Node(&buf, fset, f)
- if err != nil {
- log.Fatal(err)
- }
-
- err = ioutil.WriteFile(file, buf.Bytes(), 0)
- if err != nil {
- log.Fatal(err)
- }
-}
-
-type editor struct {
- edits editSet
- file *token.File
-}
-
-func (e *editor) Visit(n ast.Node) ast.Visitor {
- if n == nil {
- return nil
- }
- v := reflect.ValueOf(n).Elem()
- for i, n := 0, v.NumField(); i < n; i++ {
- switch f := v.Field(i).Addr().Interface().(type) {
- case *ast.Expr:
- e.rewrite(f)
- case *[]ast.Expr:
- for i := range *f {
- e.rewrite(&(*f)[i])
- }
- }
- }
- return e
-}
-
-func (e *editor) rewrite(f *ast.Expr) {
- call, ok := (*f).(*ast.CallExpr)
- if !ok {
- return
- }
-
- pos := e.file.Position(call.Lparen)
- if !e.edits.has(pos) {
- return
- }
- *f = call.Args[0]
- e.edits.remove(pos)
-}
-
-var (
- cr = []byte{'\r'}
- nl = []byte{'\n'}
-)
-
-func print(conversions []token.Position) {
- var file string
- var lines [][]byte
-
- for _, pos := range conversions {
- fmt.Printf("%s:%d:%d: unnecessary conversion\n", pos.Filename, pos.Line, pos.Column)
- if *flagV {
- if pos.Filename != file {
- buf, err := ioutil.ReadFile(pos.Filename)
- if err != nil {
- log.Fatal(err)
- }
- file = pos.Filename
- lines = bytes.Split(buf, nl)
- }
-
- line := bytes.TrimSuffix(lines[pos.Line-1], cr)
- fmt.Printf("%s\n", line)
-
- // For files processed by cgo, Column is the
- // column location after cgo processing, which
- // may be different than the source column
- // that we want here. In lieu of a better
- // heuristic for detecting this case, at least
- // avoid panicking if column is out of bounds.
- if pos.Column <= len(line) {
- fmt.Printf("%s^\n", rub(line[:pos.Column-1]))
- }
- }
- }
-}
-
-// Rub returns a copy of buf with all non-whitespace characters replaced
-// by spaces (like rubbing them out with white out).
-func rub(buf []byte) []byte {
- // TODO(mdempsky): Handle combining characters?
- var res bytes.Buffer
- for _, r := range string(buf) {
- if unicode.IsSpace(r) {
- res.WriteRune(r)
- continue
- }
- switch width.LookupRune(r).Kind() {
- case width.EastAsianWide, width.EastAsianFullwidth:
- res.WriteString(" ")
- default:
- res.WriteByte(' ')
- }
- }
- return res.Bytes()
-}
-
-func usage() {
- fmt.Fprintf(os.Stderr, "usage: unconvert [flags] [package ...]\n")
- flag.PrintDefaults()
-}
-
-func main() {
- flag.Usage = usage
- flag.Parse()
-
- if *flagCPUProfile != "" {
- f, err := os.Create(*flagCPUProfile)
- if err != nil {
- log.Fatal(err)
- }
- pprof.StartCPUProfile(f)
- defer pprof.StopCPUProfile()
- }
-
- patterns := flag.Args() // 0 or more import path patterns.
-
- var configs [][]string
- if *flagConfigs != "" {
- if os.Getenv("UNCONVERT_CONFIGS_EXPERIMENT") != "1" {
- fmt.Println("WARNING: -configs is experimental and subject to change without notice.")
- fmt.Println("Please comment at https://github.com/mdempsky/unconvert/issues/26")
- fmt.Println("if you'd like to rely on this interface.")
- fmt.Println("(Set UNCONVERT_CONFIGS_EXPERIMENT=1 to silence this warning.)")
- fmt.Println()
- }
-
- if err := json.Unmarshal([]byte(*flagConfigs), &configs); err != nil {
- log.Fatal(err)
- }
- } else if *flagAll {
- configs = allConfigs()
- } else {
- configs = [][]string{nil}
- }
-
- m := mergeEdits(patterns, configs)
-
- if *flagApply {
- var wg sync.WaitGroup
- for f, e := range m {
- wg.Add(1)
- f, e := f, e
- go func() {
- defer wg.Done()
- apply(f, e)
- }()
- }
- wg.Wait()
- } else {
- var conversions []token.Position
- for _, positions := range m {
- for pos := range positions {
- conversions = append(conversions, pos)
- }
- }
- sort.Sort(byPosition(conversions))
- print(conversions)
- if len(conversions) > 0 {
- os.Exit(1)
- }
- }
-}
-
-func allConfigs() [][]string {
- out, err := exec.Command("go", "tool", "dist", "list", "-json").Output()
- if err != nil {
- log.Fatal(err)
- }
-
- var platforms []struct {
- GOOS, GOARCH string
- }
- err = json.Unmarshal(out, &platforms)
- if err != nil {
- log.Fatal(err)
- }
-
- var res [][]string
- for _, platform := range platforms {
- res = append(res, []string{
- "GOOS=" + platform.GOOS,
- "GOARCH=" + platform.GOARCH,
- })
- }
- return res
-}
-
-func mergeEdits(patterns []string, configs [][]string) fileToEditSet {
- m := make(fileToEditSet)
- for _, config := range configs {
- for f, e := range computeEdits(patterns, config) {
- if e0, ok := m[f]; ok {
- e0.intersect(e)
- } else {
- m[f] = e
- }
- }
- }
- return m
-}
-
-func computeEdits(patterns []string, config []string) fileToEditSet {
- // TODO(mdempsky): Move into config?
- var buildFlags []string
- if *flagTags != "" {
- buildFlags = []string{"-tags", *flagTags}
- }
-
- pkgs, err := packages.Load(&packages.Config{
- Mode: packages.NeedSyntax | packages.NeedTypes | packages.NeedTypesInfo,
- Env: append(os.Environ(), config...),
- BuildFlags: buildFlags,
- Tests: *flagTests,
- }, patterns...)
- if err != nil {
- log.Fatal(err)
- }
- packages.PrintErrors(pkgs)
-
- type res struct {
- file string
- edits editSet
- }
-
- ch := make(chan res)
- var wg sync.WaitGroup
- for _, pkg := range pkgs {
- for _, file := range pkg.Syntax {
- pkg, file := pkg, file
- tokenFile := pkg.Fset.File(file.Package)
- filename := tokenFile.Position(file.Package).Filename
-
- // Hack to recognize _cgo_gotypes.go.
- if strings.HasSuffix(filename, "-d") || strings.HasSuffix(filename, "/_cgo_gotypes.go") {
- continue
- }
-
- wg.Add(1)
- go func() {
- defer wg.Done()
- v := visitor{info: pkg.TypesInfo, file: tokenFile, edits: make(editSet)}
- ast.Walk(&v, file)
- ch <- res{filename, v.edits}
- }()
- }
- }
- go func() {
- wg.Wait()
- close(ch)
- }()
-
- m := make(fileToEditSet)
- for r := range ch {
- m[r.file] = r.edits
- }
- return m
-}
-
-type step struct {
- n ast.Node
- i int
-}
-
-type visitor struct {
- info *types.Info
- file *token.File
- edits editSet
- path []step
-}
-
-func (v *visitor) Visit(node ast.Node) ast.Visitor {
- if node != nil {
- v.path = append(v.path, step{n: node})
- } else {
- n := len(v.path)
- v.path = v.path[:n-1]
- if n >= 2 {
- v.path[n-2].i++
- }
- }
-
- if call, ok := node.(*ast.CallExpr); ok {
- v.unconvert(call)
- }
- return v
-}
-
-func (v *visitor) unconvert(call *ast.CallExpr) {
- // TODO(mdempsky): Handle useless multi-conversions.
-
- // Conversions have exactly one argument.
- if len(call.Args) != 1 || call.Ellipsis != token.NoPos {
- return
- }
- ft, ok := v.info.Types[call.Fun]
- if !ok {
- fmt.Println("Missing type for function")
- return
- }
- if !ft.IsType() {
- // Function call; not a conversion.
- return
- }
- at, ok := v.info.Types[call.Args[0]]
- if !ok {
- fmt.Println("Missing type for argument")
- return
- }
- if !types.Identical(ft.Type, at.Type) {
- // A real conversion.
- return
- }
- if !*flagFastMath && isFloatingPoint(ft.Type) {
- // As of Go 1.9, explicit floating-point type
- // conversions are always significant because they
- // force rounding and prevent operation fusing.
- return
- }
- if isUntypedValue(call.Args[0], v.info) {
- // Workaround golang.org/issue/13061.
- return
- }
- if *flagSafe && !v.isSafeContext(at.Type) {
- // TODO(mdempsky): Remove this message.
- fmt.Println("Skipped a possible type conversion because of -safe at", v.file.Position(call.Pos()))
- return
- }
-
- v.edits.add(v.file.Position(call.Lparen))
-}
-
-// isFloatingPointer reports whether t's underlying type is a floating
-// point type.
-func isFloatingPoint(t types.Type) bool {
- ut, ok := t.Underlying().(*types.Basic)
- return ok && ut.Info()&(types.IsFloat|types.IsComplex) != 0
-}
-
-// isSafeContext reports whether the current context requires
-// an expression of type t.
-//
-// TODO(mdempsky): That's a bad explanation.
-func (v *visitor) isSafeContext(t types.Type) bool {
- ctxt := &v.path[len(v.path)-2]
- switch n := ctxt.n.(type) {
- case *ast.AssignStmt:
- pos := ctxt.i - len(n.Lhs)
- if pos < 0 {
- fmt.Println("Type conversion on LHS of assignment?")
- return false
- }
- if n.Tok == token.DEFINE {
- // Skip := assignments.
- return true
- }
- // We're a conversion in the pos'th element of n.Rhs.
- // Check that the corresponding element of n.Lhs is of type t.
- lt, ok := v.info.Types[n.Lhs[pos]]
- if !ok {
- fmt.Println("Missing type for LHS expression")
- return false
- }
- return types.Identical(t, lt.Type)
- case *ast.BinaryExpr:
- if n.Op == token.SHL || n.Op == token.SHR {
- if ctxt.i == 1 {
- // RHS of a shift is always safe.
- return true
- }
- // For the LHS, we should inspect up another level.
- fmt.Println("TODO(mdempsky): Handle LHS of shift expressions")
- return true
- }
- var other ast.Expr
- if ctxt.i == 0 {
- other = n.Y
- } else {
- other = n.X
- }
- ot, ok := v.info.Types[other]
- if !ok {
- fmt.Println("Missing type for other binop subexpr")
- return false
- }
- return types.Identical(t, ot.Type)
- case *ast.CallExpr:
- pos := ctxt.i - 1
- if pos < 0 {
- // Type conversion in the function subexpr is okay.
- return true
- }
- ft, ok := v.info.Types[n.Fun]
- if !ok {
- fmt.Println("Missing type for function expression")
- return false
- }
- sig, ok := ft.Type.(*types.Signature)
- if !ok {
- // "Function" is either a type conversion (ok) or a builtin (ok?).
- return true
- }
- params := sig.Params()
- var pt types.Type
- if sig.Variadic() && n.Ellipsis == token.NoPos && pos >= params.Len()-1 {
- pt = params.At(params.Len() - 1).Type().(*types.Slice).Elem()
- } else {
- pt = params.At(pos).Type()
- }
- return types.Identical(t, pt)
- case *ast.CompositeLit, *ast.KeyValueExpr:
- fmt.Println("TODO(mdempsky): Compare against value type of composite literal type at", v.file.Position(n.Pos()))
- return true
- case *ast.ReturnStmt:
- // TODO(mdempsky): Is there a better way to get the corresponding
- // return parameter type?
- var funcType *ast.FuncType
- for i := len(v.path) - 1; funcType == nil && i >= 0; i-- {
- switch f := v.path[i].n.(type) {
- case *ast.FuncDecl:
- funcType = f.Type
- case *ast.FuncLit:
- funcType = f.Type
- }
- }
- var typeExpr ast.Expr
- for i, j := ctxt.i, 0; j < len(funcType.Results.List); j++ {
- f := funcType.Results.List[j]
- if len(f.Names) == 0 {
- if i >= 1 {
- i--
- continue
- }
- } else {
- if i >= len(f.Names) {
- i -= len(f.Names)
- continue
- }
- }
- typeExpr = f.Type
- break
- }
- if typeExpr == nil {
- fmt.Println(ctxt)
- }
- pt, ok := v.info.Types[typeExpr]
- if !ok {
- fmt.Println("Missing type for return parameter at", v.file.Position(n.Pos()))
- return false
- }
- return types.Identical(t, pt.Type)
- case *ast.StarExpr, *ast.UnaryExpr:
- // TODO(mdempsky): I think these are always safe.
- return true
- case *ast.SwitchStmt:
- // TODO(mdempsky): I think this is always safe?
- return true
- default:
- // TODO(mdempsky): When can this happen?
- fmt.Printf("... huh, %T at %v\n", n, v.file.Position(n.Pos()))
- return true
- }
-}
-
-func isUntypedValue(n ast.Expr, info *types.Info) (res bool) {
- switch n := n.(type) {
- case *ast.BinaryExpr:
- switch n.Op {
- case token.SHL, token.SHR:
- // Shifts yield an untyped value if their LHS is untyped.
- return isUntypedValue(n.X, info)
- case token.EQL, token.NEQ, token.LSS, token.GTR, token.LEQ, token.GEQ:
- // Comparisons yield an untyped boolean value.
- return true
- case token.ADD, token.SUB, token.MUL, token.QUO, token.REM,
- token.AND, token.OR, token.XOR, token.AND_NOT,
- token.LAND, token.LOR:
- return isUntypedValue(n.X, info) && isUntypedValue(n.Y, info)
- }
- case *ast.UnaryExpr:
- switch n.Op {
- case token.ADD, token.SUB, token.NOT, token.XOR:
- return isUntypedValue(n.X, info)
- }
- case *ast.BasicLit:
- // Basic literals are always untyped.
- return true
- case *ast.ParenExpr:
- return isUntypedValue(n.X, info)
- case *ast.SelectorExpr:
- return isUntypedValue(n.Sel, info)
- case *ast.Ident:
- if obj, ok := info.Uses[n]; ok {
- if obj.Pkg() == nil && obj.Name() == "nil" {
- // The universal untyped zero value.
- return true
- }
- if b, ok := obj.Type().(*types.Basic); ok && b.Info()&types.IsUntyped != 0 {
- // Reference to an untyped constant.
- return true
- }
- }
- case *ast.CallExpr:
- if b, ok := asBuiltin(n.Fun, info); ok {
- switch b.Name() {
- case "real", "imag":
- return isUntypedValue(n.Args[0], info)
- case "complex":
- return isUntypedValue(n.Args[0], info) && isUntypedValue(n.Args[1], info)
- }
- }
- }
-
- return false
-}
-
-func asBuiltin(n ast.Expr, info *types.Info) (*types.Builtin, bool) {
- for {
- paren, ok := n.(*ast.ParenExpr)
- if !ok {
- break
- }
- n = paren.X
- }
-
- ident, ok := n.(*ast.Ident)
- if !ok {
- return nil, false
- }
-
- obj, ok := info.Uses[ident]
- if !ok {
- return nil, false
- }
-
- b, ok := obj.(*types.Builtin)
- return b, ok
-}
-
-type byPosition []token.Position
-
-func (p byPosition) Len() int {
- return len(p)
-}
-
-func (p byPosition) Less(i, j int) bool {
- if p[i].Filename != p[j].Filename {
- return p[i].Filename < p[j].Filename
- }
- if p[i].Line != p[j].Line {
- return p[i].Line < p[j].Line
- }
- return p[i].Column < p[j].Column
-}
-
-func (p byPosition) Swap(i, j int) {
- p[i], p[j] = p[j], p[i]
-}