Preparing report...

Report for github.com/daptin/daptin

A    Great!    Found 86 issues across 133 files

Tweet

gofmt78%

Gofmt formats Go programs. We run gofmt -s on your code, where -s is for the "simplify" command


go_vet100%

go vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string.

No problems detected. Good job!


gocyclo63%

Gocyclo calculates cyclomatic complexities of functions in Go source code. The cyclomatic complexity of a function is calculated according to the following rules: 1 is the base complexity of a function +1 for each 'if', 'for', 'case', '&&' or '||' Go Report Card warns on functions with cyclomatic complexity > 15.

    • daptin/server/resource/dbmethods.go
    • Line 1453: warning: cyclomatic complexity 64 of function (*DbResource).ResultToArrayOfMap() is high (> 15) (gocyclo)
    • Line 626: warning: cyclomatic complexity 16 of function (*DbResource).GetRowPermission() is high (> 15) (gocyclo)
    • daptin/server/resource/handle_action.go
    • Line 184: warning: cyclomatic complexity 70 of function (*DbResource).HandleActionRequest() is high (> 15) (gocyclo)
    • Line 884: warning: cyclomatic complexity 27 of function evaluateString() is high (> 15) (gocyclo)
    • Line 793: warning: cyclomatic complexity 22 of function BuildActionContext() is high (> 15) (gocyclo)
    • Line 655: warning: cyclomatic complexity 19 of function BuildOutcome() is high (> 15) (gocyclo)
    • daptin/server/resource/imap_mailbox.go
    • Line 137: warning: cyclomatic complexity 29 of function (*DaptinImapMailBox).ListMessages() is high (> 15) (gocyclo)
    • Line 306: warning: cyclomatic complexity 16 of function (*DaptinImapMailBox).SearchMessages() is high (> 15) (gocyclo)
    • daptin/server/resource/dbfunctions_create.go
    • Line 354: warning: cyclomatic complexity 21 of function CheckAuditTables() is high (> 15) (gocyclo)
    • Line 201: warning: cyclomatic complexity 21 of function CheckTranslationTables() is high (> 15) (gocyclo)
    • Line 504: warning: cyclomatic complexity 19 of function convertRelationsToColumns() is high (> 15) (gocyclo)
    • Line 757: warning: cyclomatic complexity 18 of function getColumnLine() is high (> 15) (gocyclo)
    • daptin/server_test.go
    • Line 308: warning: cyclomatic complexity 59 of function runTests() is high (> 15) (gocyclo)
    • Line 934: warning: cyclomatic complexity 23 of function FtpTest() is high (> 15) (gocyclo)
    • daptin/server/server.go
    • Line 47: warning: cyclomatic complexity 64 of function Main() is high (> 15) (gocyclo)
    • Line 891: warning: cyclomatic complexity 16 of function MergeTables() is high (> 15) (gocyclo)

golint78%

Golint is a linter for Go source code.

    • daptin/server/websockets/websocket_server.go
    • Line 11: warning: exported type WebSocketPayload should have comment or be unexported (golint)
    • Line 16: warning: exported type Message should have comment or be unexported (golint)
    • Line 18: warning: comment on exported type Server should be of the form "Server ..." (with optional leading article) (golint)
    • Line 31: warning: comment on exported function NewServer should be of the form "NewServer ..." (golint)
    • Line 52: warning: exported method Server.Add should have comment or be unexported (golint)
    • Line 62: warning: exported method Server.Del should have comment or be unexported (golint)
    • Line 66: warning: exported method Server.Done should have comment or be unexported (golint)
    • Line 70: warning: exported method Server.Err should have comment or be unexported (golint)
    • Line 80: warning: exported type WebSocketConnectionHandler should have comment or be unexported (golint)
    • daptin/main.go
    • Line 99: warning: don't use underscores in Go names; var port_variable should be portVariable (golint)
    • Line 100: warning: don't use underscores in Go names; var database_url_variable should be databaseURLVariable (golint)
    • daptin/server/ftp_server.go
    • Line 49: warning: don't use underscores in Go names; func parameter ftp_interface should be ftpInterface (golint)
    • Line 184: warning: exported method ClientDriver.SetFileMtime should have comment or be unexported (golint)
    • Line 224: warning: should replace errors.New(fmt.Sprintf(...)) with fmt.Errorf(...) (golint)
    • daptin/server/graphql.go
    • Line 27: warning: exported var Schema should have comment or be unexported (golint)
    • Line 29: warning: exported function MakeGraphqlSchema should have comment or be unexported (golint)
    • daptin/server/apiblueprint/apiblueprint.go
    • Line 16: warning: exported function InfoError should have comment or be unexported (golint)
    • Line 24: warning: if block ends with a return statement, so drop this else and outdent its block (golint)
    • Line 32: warning: exported type BlueprintWriter should have comment or be unexported (golint)
    • Line 36: warning: exported function NewBluePrintWriter should have comment or be unexported (golint)
    • Line 43: warning: exported method BlueprintWriter.WriteString should have comment or be unexported (golint)
    • Line 47: warning: exported method BlueprintWriter.WriteStringf should have comment or be unexported (golint)
    • Line 51: warning: exported method BlueprintWriter.Markdown should have comment or be unexported (golint)
    • Line 61: warning: exported function CreateColumnLine should have comment or be unexported (golint)
    • Line 78: warning: exported function BuildApiBlueprint should have comment or be unexported (golint)
    • Line 528: warning: exported function CreateDataInResponse should have comment or be unexported (golint)
    • Line 560: warning: exported function CreatePostMethod should have comment or be unexported (golint)
    • Line 615: warning: exported function CreateGetAllMethod should have comment or be unexported (golint)
    • Line 677: warning: exported function ProperCase should have comment or be unexported (golint)
    • Line 684: warning: exported function CreateDeleteMethod should have comment or be unexported (golint)
    • Line 711: warning: exported function CreateDeleteRelationMethod should have comment or be unexported (golint)
    • Line 739: warning: exported function CreateGetMethod should have comment or be unexported (golint)
    • Line 773: warning: exported function CreatePatchMethod should have comment or be unexported (golint)
    • daptin/server/columntypes/types.go
    • Line 18: warning: exported type EntityType should have comment or be unexported (golint)
    • Line 82: warning: exported method EntityType.MarshalJSON should have comment or be unexported (golint)
    • Line 87: warning: exported const DateTime should have comment (or a comment on this block) or be unexported (golint)
    • Line 151: warning: exported type DataTypeDetector should have comment or be unexported (golint)
    • Line 158: warning: exported function IsNumber should have comment or be unexported (golint)
    • Line 178: warning: exported function IsFloat should have comment or be unexported (golint)
    • Line 193: warning: exported function IsInt should have comment or be unexported (golint)
    • Line 376: warning: if block ends with a return statement, so drop this else and outdent its block (golint)
    • Line 385: warning: if block ends with a return statement, so drop this else and outdent its block (golint)
    • Line 407: warning: if block ends with a return statement, so drop this else and outdent its block (golint)
    • Line 416: warning: if block ends with a return statement, so drop this else and outdent its block (golint)
    • Line 438: warning: if block ends with a return statement, so drop this else and outdent its block (golint)
    • Line 447: warning: if block ends with a return statement, so drop this else and outdent its block (golint)
    • Line 538: warning: exported function ConvertValues should have comment or be unexported (golint)
    • Line 626: warning: exported function DetectType should have comment or be unexported (golint)
    • Line 641: warning: if block ends with a return statement, so drop this else and outdent its block (golint)
    • Line 666: warning: if block ends with a return statement, so drop this else and outdent its block (golint)
    • Line 676: warning: should replace errors.New(fmt.Sprintf(...)) with fmt.Errorf(...) (golint)
    • daptin/server/subsite.go
    • Line 25: warning: exported type HostSwitch should have comment or be unexported (golint)
    • Line 31: warning: exported type JsonApiError should have comment or be unexported (golint)
    • Line 35: warning: exported function CreateAssetColumnSync should have comment or be unexported (golint)
    • Line 139: warning: don't use underscores in Go names; var max_connections should be maxConnections (golint)
    • Line 140: warning: don't use underscores in Go names; var rate_limit should be rateLimit (golint)
    • Line 273: warning: exported type StaticFsWithDefaultIndex should have comment or be unexported (golint)
    • Line 278: warning: exported method StaticFsWithDefaultIndex.Open should have comment or be unexported (golint)
    • Line 346: warning: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) (golint)
    • Line 549: warning: exported function GetFilePath should have comment or be unexported (golint)
    • Line 789: warning: exported function EndsWithCheck should have comment or be unexported (golint)
    • Line 804: warning: exported function BeginsWithCheck should have comment or be unexported (golint)
    • daptin/server/statementbuilder/statement_builder.go
    • Line 7: warning: a blank import should be only in a main or test package, or have a comment justifying it (golint)
    • Line 12: warning: exported var Squirrel should have comment or be unexported (golint)
    • Line 14: warning: exported function InitialiseStatementBuilder should have comment or be unexported (golint)
    • daptin/server/columntypes/mtime.go
    • Line 16: warning: exported type ByLength should have comment or be unexported (golint)
    • Line 93: warning: exported function GetTime should have comment or be unexported (golint)
    • Line 107: warning: exported function GetDate should have comment or be unexported (golint)
    • Line 134: warning: exported function GetDateTime should have comment or be unexported (golint)
    • Line 145: warning: exported function GetTimeByFormat should have comment or be unexported (golint)
    • daptin/server/database_connection.go
    • Line 4: warning: a blank import should be only in a main or test package, or have a comment justifying it (golint)
    • Line 6: warning: a blank import should be only in a main or test package, or have a comment justifying it (golint)
    • Line 14: warning: exported function GetDbConnection should have comment or be unexported (golint)
    • daptin/server/jsmodel_handler.go
    • Line 16: warning: exported function CreateApiBlueprintHandler should have comment or be unexported (golint)
    • Line 22: warning: exported type ErrorResponse should have comment or be unexported (golint)
    • Line 26: warning: exported function ParseHexColor should have comment or be unexported (golint)
    • Line 44: warning: exported function CreateStatsHandler should have comment or be unexported (golint)
    • Line 90: warning: exported function CreateMetaHandler should have comment or be unexported (golint)
    • Line 103: warning: exported function CreateJsModelHandler should have comment or be unexported (golint)
    • Line 140: warning: if block ends with a return statement, so drop this else and outdent its block (golint)
    • Line 269: warning: exported type JsModel should have comment or be unexported (golint)
    • Line 276: warning: exported function NewJsonApiRelation should have comment or be unexported (golint)
    • Line 287: warning: exported type JsonApiRelation should have comment or be unexported (golint)
    • daptin/server/language.go
    • Line 10: warning: comment on exported type LanguageMiddleware should be of the form "LanguageMiddleware ..." (with optional leading article) (golint)
    • Line 16: warning: exported function NewLanguageMiddleware should have comment or be unexported (golint)
    • Line 31: warning: exported method LanguageMiddleware.LanguageMiddlewareFunc should have comment or be unexported (golint)
    • Line 37: warning: should not use basic type string as key in context.WithValue (golint)
    • Line 41: warning: exported function GetLanguagePreference should have comment or be unexported (golint)
    • daptin/server/utils.go
    • Line 19: warning: exported function CheckSystemSecrets should have comment or be unexported (golint)
    • Line 39: warning: exported function AddResourcesToApi2Go should have comment or be unexported (golint)
    • Line 73: warning: exported function GetTablesFromWorld should have comment or be unexported (golint)
    • Line 113: warning: don't use underscores in Go names; var table_name should be tableName (golint)
    • Line 115: warning: don't use underscores in Go names; var default_permission should be defaultPermission (golint)
    • Line 116: warning: don't use underscores in Go names; var world_schema_json should be worldSchemaJSON (golint)
    • Line 117: warning: don't use underscores in Go names; var default_order should be defaultOrder (golint)
    • Line 118: warning: don't use underscores in Go names; var is_top_level should be isTopLevel (golint)
    • Line 119: warning: don't use underscores in Go names; var is_hidden should be isHidden (golint)
    • Line 120: warning: don't use underscores in Go names; var is_state_tracking_enabled should be isStateTrackingEnabled (golint)
    • Line 167: warning: exported function BuildMiddlewareSet should have comment or be unexported (golint)
    • Line 253: warning: exported function CleanUpConfigFiles should have comment or be unexported (golint)
    • daptin/server/server.go
    • Line 44: warning: exported var TaskScheduler should have comment or be unexported (golint)
    • Line 45: warning: exported var Stats should have comment or be unexported (golint)
    • Line 47: warning: exported function Main should have comment or be unexported (golint)
    • Line 297: warning: don't use underscores in Go names; var yjs_temp_directory should be yjsTempDirectory (golint)
    • Line 338: warning: should omit 2nd value from range; this loop is equivalent to `for key := range ...` (golint)
    • Line 486: warning: don't use underscores in Go names; var ftp_interface should be ftpInterface (golint)
    • Line 674: warning: should not use basic type string as key in context.WithValue (golint)
    • Line 732: warning: exported function CreateFtpServers should have comment or be unexported (golint)
    • Line 732: warning: don't use underscores in Go names; func parameter ftp_interface should be ftpInterface (golint)
    • Line 775: warning: exported type SubSiteAssetCache should have comment or be unexported (golint)
    • Line 780: warning: exported type Crammd5 should have comment or be unexported (golint)
    • Line 787: warning: comment on exported method Crammd5.Next should be of the form "Next ..." (golint)
    • Line 891: warning: exported function MergeTables should have comment or be unexported (golint)
    • Line 985: warning: exported function NewSubPathFs should have comment or be unexported (golint)
    • Line 989: warning: exported type SubPathFs should have comment or be unexported (golint)
    • Line 994: warning: exported method SubPathFs.Open should have comment or be unexported (golint)
    • Line 999: warning: exported function AddStreamsToApi2Go should have comment or be unexported (golint)
    • Line 1011: warning: exported function GetStreamProcessors should have comment or be unexported (golint)
    • daptin/server/websockets/websocket_client.go
    • Line 17: warning: exported type Client should have comment or be unexported (golint)
    • Line 27: warning: comment on exported function NewClient should be of the form "NewClient ..." (golint)
    • Line 65: warning: exported method Client.Conn should have comment or be unexported (golint)
    • Line 79: warning: exported method Client.Done should have comment or be unexported (golint)
    • daptin/server/cors.go
    • Line 52: warning: exported function NewCorsMiddleware should have comment or be unexported (golint)
    • Line 68: warning: exported method CorsMiddleware.CorsMiddlewareFunc should have comment or be unexported (golint)
    • Line 83: warning: exported type CorsInfo should have comment or be unexported (golint)
    • daptin/server/mail_adapter.go
    • Line 21: warning: a blank import should be only in a main or test package, or have a comment justifying it (golint)
    • Line 55: warning: exported type SQLProcessorConfig should have comment or be unexported (golint)
    • Line 60: warning: exported type SQLProcessor should have comment or be unexported (golint)
    • Line 76: warning: comment on exported type Compressor should be of the form "Compressor ..." (with optional leading article) (golint)
    • Line 89: warning: exported type DaptinSmtpAuthenticator should have comment or be unexported (golint)
    • Line 94: warning: exported method DaptinSmtpAuthenticator.VerifyLOGIN should have comment or be unexported (golint)
    • Line 121: warning: exported method DaptinSmtpAuthenticator.VerifyCRAMMD5 should have comment or be unexported (golint)
    • Line 124: warning: exported method DaptinSmtpAuthenticator.GenerateCRAMMD5Challenge should have comment or be unexported (golint)
    • Line 127: warning: exported method DaptinSmtpAuthenticator.ExtractLoginFromAuthString should have comment or be unexported (golint)
    • Line 130: warning: exported method DaptinSmtpAuthenticator.DecodeLogin should have comment or be unexported (golint)
    • Line 135: warning: exported method DaptinSmtpAuthenticator.GetAdvertiseAuthentication should have comment or be unexported (golint)
    • Line 139: warning: exported method DaptinSmtpAuthenticator.GetMailSize should have comment or be unexported (golint)
    • Line 143: warning: exported function DaptinSmtpAuthenticatorCreator should have comment or be unexported (golint)
    • Line 152: warning: exported function DaptinSmtpDbResource should have comment or be unexported (golint)
    • Line 380: warning: should not use basic type string as key in context.WithValue (golint)
    • daptin/server/jwt/jwtmiddleware.go
    • Line 18: warning: exported var TokenCache should have comment or be unexported (golint)
    • Line 60: warning: exported type JWTMiddleware should have comment or be unexported (golint)
    • Line 64: warning: exported function OnError should have comment or be unexported (golint)
    • Line 101: warning: comment on exported method JWTMiddleware.HandlerWithNext should be of the form "HandlerWithNext ..." (golint)
    • Line 111: warning: exported method JWTMiddleware.Handler should have comment or be unexported (golint)
    • Line 167: warning: exported method JWTMiddleware.CheckJWT should have comment or be unexported (golint)
    • daptin/server/handlers.go
    • Line 16: warning: exported function CreateEventHandler should have comment or be unexported (golint)
    • Line 109: warning: exported function CreateEventStartHandler should have comment or be unexported (golint)
    • daptin/server/websockets/web_socket_connection_handler.go
    • Line 11: warning: comment on exported type WebSocketConnectionHandlerImpl should be of the form "WebSocketConnectionHandlerImpl ..." (with optional leading article) (golint)
    • Line 19: warning: exported method WebSocketConnectionHandlerImpl.MessageFromClient should have comment or be unexported (golint)
    • Line 113: warning: should omit 2nd value from range; this loop is equivalent to `for t := range ...` (golint)
    • daptin/server/auth/auth.go
    • Line 24: warning: exported type AuthPermission should have comment or be unexported (golint)
    • Line 26: warning: exported const None should have comment or be unexported (golint)
    • Line 29: warning: exported const GuestPeek should have comment (or a comment on this block) or be unexported (golint)
    • Line 53: warning: exported const GuestCRUD should have comment (or a comment on this block) or be unexported (golint)
    • Line 58: warning: exported var DEFAULT_PERMISSION should have comment or be unexported (golint)
    • Line 59: warning: exported var DEFAULT_PERMISSION_WHEN_ON_ADMIN should have comment or be unexported (golint)
    • Line 60: warning: exported var ALLOW_ALL_PERMISSIONS should have comment or be unexported (golint)
    • Line 66: warning: exported type ResourceAdapter should have comment or be unexported (golint)
    • Line 71: warning: exported type AuthMiddleware should have comment or be unexported (golint)
    • Line 80: warning: exported function NewAuthMiddlewareBuilder should have comment or be unexported (golint)
    • Line 88: warning: exported method AuthMiddleware.SetUserCrud should have comment or be unexported (golint)
    • Line 92: warning: exported method AuthMiddleware.SetUserGroupCrud should have comment or be unexported (golint)
    • Line 96: warning: exported method AuthMiddleware.SetUserUserGroupCrud should have comment or be unexported (golint)
    • Line 102: warning: exported function InitJwtMiddleware should have comment or be unexported (golint)
    • Line 134: warning: exported function StartsWith should have comment or be unexported (golint)
    • Line 147: warning: exported method AuthMiddleware.BasicAuthCheckMiddlewareWithHttp should have comment or be unexported (golint)
    • Line 184: warning: exported function BcryptCheckStringHash should have comment or be unexported (golint)
    • Line 189: warning: exported function CheckErr should have comment or be unexported (golint)
    • Line 201: warning: exported var UserGroupSelectQuery should have comment or be unexported (golint)
    • Line 211: warning: exported function PrepareAuthQueries should have comment or be unexported (golint)
    • Line 225: warning: exported type CachedUserAccount should have comment or be unexported (golint)
    • Line 230: warning: exported var LocalUserCacheMap should have comment or be unexported (golint)
    • Line 231: warning: exported var LocalUserCacheLock should have comment or be unexported (golint)
    • Line 234: warning: exported method AuthMiddleware.AuthCheckMiddlewareWithHttp should have comment or be unexported (golint)
    • Line 272: warning: should not use basic type string as key in context.WithValue (golint)
    • Line 273: warning: should not use basic type string as key in context.WithValue (golint)
    • Line 431: warning: should not use basic type string as key in context.WithValue (golint)
    • Line 441: warning: exported method AuthMiddleware.AuthCheckMiddleware should have comment or be unexported (golint)
    • Line 455: warning: exported type SessionUser should have comment or be unexported (golint)
    • Line 461: warning: exported type GroupPermission should have comment or be unexported (golint)

license100%

Checks whether your project has a LICENSE file.

No problems detected. Good job!


ineffassign68%

IneffAssign detects ineffectual assignments in Go code.

    • daptin/server/resource/dbfunctions_update.go
    • Line 133: warning: ineffectual assignment to err (ineffassign)
    • Line 281: warning: ineffectual assignment to err (ineffassign)
    • Line 294: warning: ineffectual assignment to err (ineffassign)
    • Line 353: warning: ineffectual assignment to err (ineffassign)
    • Line 387: warning: ineffectual assignment to err (ineffassign)
    • Line 594: warning: ineffectual assignment to err (ineffassign)
    • Line 612: warning: ineffectual assignment to err (ineffassign)
    • Line 1078: warning: ineffectual assignment to err (ineffassign)
    • Line 1081: warning: ineffectual assignment to err (ineffassign)
    • Line 1135: warning: ineffectual assignment to err (ineffassign)
    • daptin/server/resource/resource_update.go
    • Line 140: warning: ineffectual assignment to ok (ineffassign)
    • Line 151: warning: ineffectual assignment to ok (ineffassign)
    • Line 256: warning: ineffectual assignment to ok (ineffassign)
    • Line 454: warning: ineffectual assignment to err (ineffassign)
    • Line 468: warning: ineffectual assignment to err (ineffassign)
    • Line 589: warning: ineffectual assignment to err (ineffassign)
    • Line 590: warning: ineffectual assignment to err (ineffassign)
    • Line 592: warning: ineffectual assignment to err (ineffassign)
    • Line 650: warning: ineffectual assignment to updateForeignRow (ineffassign)
    • Line 697: warning: ineffectual assignment to updateForeignRow (ineffassign)
    • Line 764: warning: ineffectual assignment to err (ineffassign)
    • Line 765: warning: ineffectual assignment to err (ineffassign)
    • Line 767: warning: ineffectual assignment to err (ineffassign)
    • Line 893: warning: ineffectual assignment to selfTypeName (ineffassign)
    • daptin/server/resource/dbmethods.go
    • Line 415: warning: ineffectual assignment to err (ineffassign)
    • Line 550: warning: ineffectual assignment to err (ineffassign)
    • Line 551: warning: ineffectual assignment to err (ineffassign)
    • Line 553: warning: ineffectual assignment to err (ineffassign)
    • Line 732: warning: ineffectual assignment to err (ineffassign)
    • Line 760: warning: ineffectual assignment to err (ineffassign)
    • Line 835: warning: ineffectual assignment to err (ineffassign)
    • Line 918: warning: ineffectual assignment to err (ineffassign)
    • Line 1655: warning: ineffectual assignment to err (ineffassign)
    • Line 1705: warning: ineffectual assignment to err (ineffassign)
    • Line 1710: warning: ineffectual assignment to err (ineffassign)
    • Line 1761: warning: ineffectual assignment to err (ineffassign)
    • daptin/server/resource/action_integration_execute.go
    • Line 52: warning: ineffectual assignment to ok (ineffassign)
    • Line 273: warning: ineffectual assignment to err (ineffassign)
    • Line 279: warning: ineffectual assignment to authDone (ineffassign)
    • Line 295: warning: ineffectual assignment to authDone (ineffassign)
    • Line 306: warning: ineffectual assignment to authDone (ineffassign)
    • Line 321: warning: ineffectual assignment to authDone (ineffassign)
    • Line 330: warning: ineffectual assignment to authDone (ineffassign)
    • Line 339: warning: ineffectual assignment to authDone (ineffassign)
    • Line 465: warning: ineffectual assignment to intValue (ineffassign)
    • Line 679: warning: ineffectual assignment to err (ineffassign)
    • daptin/server_test.go
    • Line 540: warning: ineffectual assignment to err (ineffassign)
    • Line 963: warning: ineffectual assignment to err (ineffassign)
    • Line 964: warning: ineffectual assignment to err (ineffassign)
    • Line 970: warning: ineffectual assignment to files (ineffassign)
    • Line 970: warning: ineffectual assignment to err (ineffassign)
    • Line 979: warning: ineffectual assignment to files (ineffassign)
    • daptin/server/subsite.go
    • Line 61: warning: ineffectual assignment to err (ineffassign)
    • Line 77: warning: ineffectual assignment to err (ineffassign)
    • Line 139: warning: ineffectual assignment to err (ineffassign)
    • Line 140: warning: ineffectual assignment to err (ineffassign)

misspell99%

Misspell Finds commonly misspelled English words