From f0ac9f97e2551aef14cd023de95da3281f12a5ee Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Thu, 27 Apr 2023 14:42:11 +0530 Subject: feat(build): remove Detekt This no longer adds value for me and instead results in unnecessary bikeshedding. --- detekt-baselines/app.xml | 102 --------------------------------- detekt-baselines/autofill-parser.xml | 29 ---------- detekt-baselines/coroutine-utils.xml | 9 --- detekt-baselines/crypto-pgpainless.xml | 7 --- detekt-baselines/format-common.xml | 8 --- detekt-baselines/random.xml | 19 ------ detekt-baselines/sentry-stub.xml | 11 ---- detekt-baselines/ssh.xml | 9 --- detekt-baselines/ui-compose.xml | 5 -- 9 files changed, 199 deletions(-) delete mode 100644 detekt-baselines/app.xml delete mode 100644 detekt-baselines/autofill-parser.xml delete mode 100644 detekt-baselines/coroutine-utils.xml delete mode 100644 detekt-baselines/crypto-pgpainless.xml delete mode 100644 detekt-baselines/format-common.xml delete mode 100644 detekt-baselines/random.xml delete mode 100644 detekt-baselines/sentry-stub.xml delete mode 100644 detekt-baselines/ssh.xml delete mode 100644 detekt-baselines/ui-compose.xml (limited to 'detekt-baselines') diff --git a/detekt-baselines/app.xml b/detekt-baselines/app.xml deleted file mode 100644 index bf021902..00000000 --- a/detekt-baselines/app.xml +++ /dev/null @@ -1,102 +0,0 @@ - - - - - ComplexCondition:AutofillFilterView.kt$AutofillFilterView$(list.isEmpty() && rvPasswordSwitcher.nextView.id == rvPasswordEmpty.id) || (list.isNotEmpty() && rvPasswordSwitcher.nextView.id == rvPassword.id) - ComplexCondition:BaseGitActivity.kt$BaseGitActivity$(rootCause is org.eclipse.jgit.errors.TransportException || rootCause is org.eclipse.jgit.api.errors.TransportException || rootCause is org.eclipse.jgit.api.errors.InvalidRemoteException || (rootCause is UserAuthException && rootCause.message == "Exhausted available authentication methods")) - ComplexCondition:GitServerConfigActivity.kt$GitServerConfigActivity$localDir.exists() && localDirFiles.isNotEmpty() && !(localDirFiles.size == 1 && localDirFiles[0].name == ".git") - ComplexCondition:PasswordCreationActivity.kt$PasswordCreationActivity$(!editing || (editing && suggestedName != file.nameWithoutExtension)) && file.exists() - ComplexCondition:PasswordStore.kt$PasswordStore$(keyCode == KeyEvent.KEYCODE_SEARCH || keyCode == KeyEvent.KEYCODE_F && event.isCtrlPressed) && !searchItem.isActionViewExpanded - EmptyFunctionBlock:BasicBottomSheet.kt$BasicBottomSheet.<no name provided>${} - EmptyFunctionBlock:ItemCreationBottomSheet.kt$ItemCreationBottomSheet.<no name provided>${} - EmptyFunctionBlock:PasswordFragment.kt$PasswordFragment.<no name provided>.<no name provided>${} - ForbiddenComment:Api30AutofillResponseBuilder.kt$Api30AutofillResponseBuilder$// TODO: Support multi-step authentication flows in apps via FLAG_DELAY_SAVE - ForbiddenComment:AutofillResponseBuilder.kt$AutofillResponseBuilder$// TODO: Support multi-step authentication flows in apps via FLAG_DELAY_SAVE - ForbiddenComment:AutofillResponseBuilder.kt$AutofillResponseBuilder.Companion$// FIXME: We should clone the original dataset here and add the credentials to be filled - ForbiddenComment:OreoAutofillService.kt$OreoAutofillService.Companion$// TODO: Provide a user-configurable denylist - ImplicitDefaultLocale:PasswordExportService.kt$PasswordExportService$String.format("%tFT%<tRZ", Calendar.getInstance(TimeZone.getTimeZone("Z"))) - LongMethod:AutofillFilterView.kt$AutofillFilterView$private fun bindUI() - LongMethod:CredentialFinder.kt$CredentialFinder$override fun askForPassword(cont: Continuation<String?>, isRetry: Boolean) - LongMethod:GeneralSettings.kt$GeneralSettings$override fun provideSettings(builder: PreferenceScreen.Builder) - LongMethod:GitCommandExecutor.kt$GitCommandExecutor$suspend fun execute(): Result<Unit, Throwable> - LongMethod:GitServerConfigActivity.kt$GitServerConfigActivity$override fun onCreate(savedInstanceState: Bundle?) - LongMethod:GitServerConfigActivity.kt$GitServerConfigActivity$private fun cloneRepository() - LongMethod:PasswordCreationActivity.kt$PasswordCreationActivity$override fun onCreate(savedInstanceState: Bundle?) - LongMethod:PasswordCreationActivity.kt$PasswordCreationActivity$private fun encrypt() - LongMethod:PasswordFragment.kt$PasswordFragment$private fun initializePasswordList() - LongMethod:RepositorySettings.kt$RepositorySettings$override fun provideSettings(builder: PreferenceScreen.Builder) - LongMethod:SettingsActivity.kt$SettingsActivity$override fun onCreate(savedInstanceState: Bundle?) - LoopWithTooManyJumpStatements:AutofillMatcher.kt$AutofillMatcher.Companion$for ((key, value) in prefs.all) { if (!key.startsWith(PREFERENCE_PREFIX_MATCHES)) continue // We know that preferences starting with `PREFERENCE_PREFIX_MATCHES` were // created with `putStringSet`. @Suppress("UNCHECKED_CAST") val oldMatches = value as? Set<String> if (oldMatches == null) { logcat(WARN) { "Failed to read matches for $key" } continue } // Delete all matches for file locations that are going to be overwritten, then // transfer matches over to the files at their new locations. val newMatches = oldMatches .asSequence() .minus(deletePathList) .minus(oldNewPathMap.values) .map { match -> val newPath = oldNewPathMap[match] ?: return@map match logcat { "Updating match for $key: $match --> $newPath" } newPath } .toSet() if (newMatches != oldMatches) prefs.edit { putStringSet(key, newMatches) } } - LoopWithTooManyJumpStatements:ErrorMessages.kt$ErrorMessages$while (cause.cause != null) { if (cause is GitException) break val nextCause = cause.cause!! if (nextCause is RemoteException) break cause = nextCause } - MagicNumber:ClipboardService.kt$ClipboardService$1000 - MagicNumber:ClipboardService.kt$ClipboardService$1000L - MagicNumber:ClipboardService.kt$ClipboardService$45 - MagicNumber:ClipboardService.kt$ClipboardService$500 - MagicNumber:DicewareModule.kt$DicewareModule$6 - MagicNumber:DicewarePasswordGeneratorDialogFragment.kt$DicewarePasswordGeneratorDialogFragment$5 - MagicNumber:Extensions.kt$1000 - MagicNumber:GitConfigActivity.kt$GitConfigActivity$0.5f - MagicNumber:GitConfigActivity.kt$GitConfigActivity$500 - MagicNumber:GitConfigActivity.kt$GitConfigActivity$8 - MagicNumber:GitLogAdapter.kt$8 - MagicNumber:GitServerConfigActivity.kt$GitServerConfigActivity$500 - MagicNumber:LaunchActivity.kt$LaunchActivity$500L - MagicNumber:PasswordExportService.kt$PasswordExportService$1024 - MagicNumber:PasswordGeneratorDialogFragment.kt$PasswordGeneratorDialogFragment$20 - MagicNumber:PasswordItemRecyclerAdapter.kt$PasswordItemRecyclerAdapter.PasswordItemViewHolder$0.7f - MagicNumber:ProxySelectorActivity.kt$ProxySelectorActivity$500 - MagicNumber:SshKey.kt$SshKey$100_000 - MagicNumber:SshKey.kt$SshKey$15 - MagicNumber:SshKey.kt$SshKey$30 - MagicNumber:SshKey.kt$SshKey.Algorithm.Ecdsa$256 - MagicNumber:SshKey.kt$SshKey.Algorithm.Rsa$3072 - MagicNumber:SshjSessionFactory.kt$SshjSession$22 - MatchingDeclarationName:AutofillViewUtils.kt$DatasetMetadata - MaxLineLength:BaseGitActivity.kt$BaseGitActivity$"The server does not support multiple Git operations per SSH session. Please try again, a slower fallback mode will be used." - MaxLineLength:BaseGitActivity.kt$BaseGitActivity$"WARNING: The remote host key has changed. If this is expected, please go to Git server settings and clear the saved host key." - NestedBlockDepth:FieldItemAdapter.kt$FieldItemAdapter.FieldItemViewHolder$fun bind(fieldItem: FieldItem, showPassword: Boolean, copyTextToClipboard: (String?) -> Unit) - NestedBlockDepth:GitOperation.kt$GitOperation$suspend fun executeAfterAuthentication(authMode: AuthMode): Result<Unit, Throwable> - NestedBlockDepth:PasswordExportService.kt$PasswordExportService$override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int - ReturnCount:Api30AutofillResponseBuilder.kt$Api30AutofillResponseBuilder$private fun makeFillOtpFromSmsDataset( context: Context, imeSpec: InlinePresentationSpec? ): Dataset? - ReturnCount:Api30AutofillResponseBuilder.kt$Api30AutofillResponseBuilder$private fun makeSaveInfo(): SaveInfo? - ReturnCount:AutofillDecryptActivity.kt$AutofillDecryptActivity$private suspend fun decryptCredential(file: File, password: String): Credentials? - ReturnCount:AutofillResponseBuilder.kt$AutofillResponseBuilder$private fun makeFillOtpFromSmsDataset(context: Context): Dataset? - ReturnCount:AutofillResponseBuilder.kt$AutofillResponseBuilder$private fun makeSaveInfo(): SaveInfo? - ReturnCount:AutofillViewUtils.kt$@SuppressLint("RestrictedApi") fun makeInlinePresentation( context: Context, imeSpec: InlinePresentationSpec, metadata: DatasetMetadata ): InlinePresentation? - ReturnCount:BaseGitActivity.kt$BaseGitActivity$suspend fun launchGitOperation(operation: GitOp): Result<Unit, Throwable> - ReturnCount:ClipboardService.kt$ClipboardService$override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int - ReturnCount:Extensions.kt$fun File.contains(other: File): Boolean - ReturnCount:GitOperation.kt$GitOperation$suspend fun executeAfterAuthentication(authMode: AuthMode): Result<Unit, Throwable> - ReturnCount:GitSettings.kt$GitSettings$fun updateConnectionSettingsIfValid( newAuthMode: AuthMode, newUrl: String ): UpdateConnectionSettingsResult - ReturnCount:OreoAutofillService.kt$OreoAutofillService$override fun onFillRequest( request: FillRequest, cancellationSignal: CancellationSignal, callback: FillCallback ) - ReturnCount:OreoAutofillService.kt$OreoAutofillService$override fun onSaveRequest(request: SaveRequest, callback: SaveCallback) - ReturnCount:PasswordRepository.kt$PasswordRepository$fun getCurrentBranch(): String? - ReturnCount:PasswordStore.kt$PasswordStore$override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean - ReturnCount:ShortcutHandler.kt$ShortcutHandler$fun addPinnedShortcut(item: PasswordItem, intent: Intent) - SpreadOperator:Api30AutofillResponseBuilder.kt$Api30AutofillResponseBuilder$(*ignoredIds.toTypedArray()) - SpreadOperator:AutofillResponseBuilder.kt$AutofillResponseBuilder$(*ignoredIds.toTypedArray()) - SpreadOperator:BreakOutOfDetached.kt$BreakOutOfDetached$( // abort the rebase git.rebase().setOperation(RebaseCommand.Operation.ABORT), *resetCommands, ) - SpreadOperator:BreakOutOfDetached.kt$BreakOutOfDetached$( // reset hard back to our local HEAD git.reset().setMode(ResetCommand.ResetType.HARD), *resetCommands, ) - SpreadOperator:ErrorMessages.kt$GitException$(res, *fmt) - SpreadOperator:ErrorMessages.kt$GitException.PullException$(res, *fmt) - SpreadOperator:ErrorMessages.kt$GitException.PushException$(res, *fmt) - ThrowsCount:GitCommandExecutor.kt$GitCommandExecutor$suspend fun execute(): Result<Unit, Throwable> - ThrowsCount:SshKey.kt$SshKey$fun import(uri: Uri) - TooManyFunctions:AbstractLogger.kt$AbstractLogger : Logger - TooManyFunctions:PasswordStore.kt$PasswordStore : BaseGitActivity - TopLevelPropertyNaming:AutofillMatcher.kt$private const val PREFERENCES_AUTOFILL_APP_MATCHES = "oreo_autofill_app_matches" - TopLevelPropertyNaming:AutofillMatcher.kt$private const val PREFERENCES_AUTOFILL_WEB_MATCHES = "oreo_autofill_web_matches" - TopLevelPropertyNaming:PasswordStore.kt$const val PASSWORD_FRAGMENT_TAG = "PasswordsList" - TopLevelPropertyNaming:SshKey.kt$private const val ANDROIDX_SECURITY_KEYSET_PREF_NAME = "androidx_sshkey_keyset_prefs" - TopLevelPropertyNaming:SshKey.kt$private const val KEYSTORE_ALIAS = "sshkey" - TopLevelPropertyNaming:SshKey.kt$private const val PROVIDER_ANDROID_KEY_STORE = "AndroidKeyStore" - UseCheckOrError:CredentialFinder.kt$CredentialFinder$throw IllegalStateException("Only SshKey and Password connection mode ask for passwords") - UseCheckOrError:FragmentViewBindingDelegate.kt$FragmentViewBindingDelegate$throw IllegalStateException( "Should not attempt to get bindings when Fragment views are destroyed." ) - UseCheckOrError:GitOperation.kt$GitOperation$throw IllegalStateException("Biometric authentication failures should be ignored") - UseCheckOrError:PGPKeyImportActivity.kt$PGPKeyImportActivity$throw IllegalStateException("Failed to open selected file") - UseCheckOrError:SshKey.kt$SshKey$throw IllegalStateException("SSH key does not exist in Keystore") - UseCheckOrError:SshKeyGenActivity.kt$SshKeyGenActivity$throw IllegalStateException("Impossible key type selection") - UtilityClassWithPublicConstructor:AutofillMatcher.kt$AutofillMatcher - WildcardImport:Application.kt$import androidx.appcompat.app.AppCompatDelegate.* - - diff --git a/detekt-baselines/autofill-parser.xml b/detekt-baselines/autofill-parser.xml deleted file mode 100644 index 9a7f95f7..00000000 --- a/detekt-baselines/autofill-parser.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - DestructuringDeclarationWithTooManyEntries:AutofillStrategyDsl.kt$AutofillRule$(type, matcher, optional, matchHidden) - ForbiddenComment:AutofillFormParser.kt$AutofillFormParser$// TODO: Support WebViews in apps via Digital Asset Links - ForbiddenComment:AutofillStrategy.kt$// TODO: Introduce a custom fill/generate/update flow for this scenario - ForbiddenComment:FormField.kt$FormField$// TODO: Revisit this decision in the future - LongMethod:ByteArray.kt$@Suppress("ComplexMethod", "NestedBlockDepth") internal fun ByteArray.binarySearch(labels: List<ByteArray>, labelIndex: Int): String? - LoopWithTooManyJumpStatements:AutofillStrategyDsl.kt$PairOfFieldsMatcher$for ((i, tieBreaker) in tieBreakers.withIndex()) { val new = current.filter { tieBreaker(it, alreadyMatched) } if (new.isEmpty()) { logcat { "Tie breaker #${i + 1}: Didn't match any pair of fields; skipping" } continue } // and return if the available options have been narrowed to a single field. if (new.size == 1) { logcat { "Tie breaker #${i + 1}: Success" } current = new break } logcat { "Tie breaker #${i + 1}: Matched ${new.size} pairs of fields; continuing" } current = new } - LoopWithTooManyJumpStatements:AutofillStrategyDsl.kt$SingleFieldMatcher$for ((i, tieBreaker) in tieBreakers.withIndex()) { // Successively filter matched fields via tie breakers... val new = current.filter { tieBreaker(it, alreadyMatched) } // skipping those tie breakers that are not satisfied for any remaining field... if (new.isEmpty()) { logcat { "Tie breaker #${i + 1}: Didn't match any field; skipping" } continue } // and return if the available options have been narrowed to a single field. if (new.size == 1) { logcat { "Tie breaker #${i + 1}: Success" } current = new break } logcat { "Tie breaker #${i + 1}: Matched ${new.size} fields; continuing" } current = new } - LoopWithTooManyJumpStatements:ByteArray.kt$while (true) { val byte0 = if (expectDot) { expectDot = false '.'.code.toByte() } else { labels[currentLabelIndex][currentLabelByteIndex] and BITMASK } val byte1 = this[start + publicSuffixByteIndex] and BITMASK // Compare the bytes. Note that the file stores UTF-8 encoded bytes, so we must compare // the // unsigned bytes. compareResult = (byte0.toUByte() - byte1.toUByte()).toInt() if (compareResult != 0) { break } publicSuffixByteIndex++ currentLabelByteIndex++ if (publicSuffixByteIndex == publicSuffixLength) { break } if (labels[currentLabelIndex].size == currentLabelByteIndex) { // We've exhausted our current label. Either there are more labels to compare, in // which // case we expect a dot as the next character. Otherwise, we've checked all our // labels. if (currentLabelIndex == labels.size - 1) { break } else { currentLabelIndex++ currentLabelByteIndex = -1 expectDot = true } } } - MagicNumber:AutofillHelper.kt$FixedSaveCallback$29 - MagicNumber:AutofillScenario.kt$4 - MagicNumber:AutofillScenario.kt$5 - MaxLineLength:FormField.kt$FormField$"\"$hint\", \"$fieldId\"${if (isFocused) ", focused" else ""}${if (isVisible) ", visible" else ""}, $webOrigin, $htmlAttributesDebug, $autofillHints" - ReturnCount:AutofillFormParser.kt$AutofillFormParser$private fun determineFormOrigin(context: Context): FormOrigin? - ReturnCount:AutofillFormParser.kt$AutofillFormParser$private fun webOriginToFormOrigin(context: Context, origin: String): FormOrigin? - ReturnCount:AutofillFormParser.kt$FormOrigin.Companion$public fun fromBundle(bundle: Bundle): FormOrigin? - ReturnCount:AutofillStrategyDsl.kt$AutofillRule$fun match( allPassword: List<FormField>, allUsername: List<FormField>, allOtp: List<FormField>, singleOriginMode: Boolean, isManualRequest: Boolean ): AutofillScenario<FormField>? - ReturnCount:PublicSuffixListCache.kt$private fun getSuffixPlusUpToOne(domain: String, suffix: String): String? - ReturnCount:PublicSuffixListData.kt$PublicSuffixListData$private fun findExceptionMatch(labels: List<ByteArray>, wildcardMatch: String?): String? - ReturnCount:PublicSuffixListData.kt$PublicSuffixListData$private fun findMatchingRule(domainLabels: List<String>): List<String> - TooGenericExceptionCaught:AutofillScenario.kt$AutofillScenario.Companion$e: Throwable - TopLevelPropertyNaming:PublicSuffixListLoader.kt$private const val PUBLIC_SUFFIX_LIST_FILE = "publicsuffixes" - UnusedPrivateMember:AutofillStrategy.kt$private inline fun <T> Pair<T, T>.none(predicate: T.() -> Boolean) - UnusedPrivateMember:FormField.kt$FormField$// Ignored for now, see excludedByHints private val excludedByAutocompleteHint = htmlAutocomplete == "off" - - diff --git a/detekt-baselines/coroutine-utils.xml b/detekt-baselines/coroutine-utils.xml deleted file mode 100644 index 6d7bc820..00000000 --- a/detekt-baselines/coroutine-utils.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - TooGenericExceptionCaught:RunSuspendCatching.kt$e: Throwable - - - TooGenericExceptionCaught:RunSuspendCatching.kt$e: Throwable - - diff --git a/detekt-baselines/crypto-pgpainless.xml b/detekt-baselines/crypto-pgpainless.xml deleted file mode 100644 index c3e6912d..00000000 --- a/detekt-baselines/crypto-pgpainless.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - ForbiddenComment:PGPKeyManager.kt$PGPKeyManager$// TODO: This is a temp hack for now and in future it should check that the GPGKeyManager can - - diff --git a/detekt-baselines/format-common.xml b/detekt-baselines/format-common.xml deleted file mode 100644 index 1d731d42..00000000 --- a/detekt-baselines/format-common.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - MaxLineLength:UriTotpFinderTest.kt$UriTotpFinderTest.Companion$"otpauth://totp/ACME%20Co:john@example.com?secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=ACME%20Co&algorithm=SHA256&digits=12&period=25" - ReturnCount:UriTotpFinder.kt$UriTotpFinder$override fun findSecret(content: String): String? - - diff --git a/detekt-baselines/random.xml b/detekt-baselines/random.xml deleted file mode 100644 index d4728260..00000000 --- a/detekt-baselines/random.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - ComplexCondition:RandomPhonemesGenerator.kt$RandomPhonemesGenerator$!candidate.flags.hasFlag(nextBasicType) || (isStartOfPart && candidate.flags hasFlag NOT_FIRST) || // Don't let a diphthong that starts with a vowel follow a vowel. (previousFlags hasFlag VOWEL && candidate.flags hasFlag VOWEL && candidate.flags hasFlag DIPHTHONG) || // Don't add multi-character candidates if we would go over the targetLength. (password.length + candidate.length > targetLength) || (pwFlags hasFlag PasswordGenerator.NO_AMBIGUOUS && candidate.isAmbiguous) - LongMethod:RandomPhonemesGenerator.kt$RandomPhonemesGenerator$fun generate(targetLength: Int, pwFlags: Int): String? - LoopWithTooManyJumpStatements:RandomPhonemesGenerator.kt$RandomPhonemesGenerator$while (password.length < targetLength) { // First part: Add a single letter or pronounceable pair of letters in varying case. val candidate = elements.secureRandomElement() // Reroll if the candidate does not fulfill the current requirements. if ( !candidate.flags.hasFlag(nextBasicType) || (isStartOfPart && candidate.flags hasFlag NOT_FIRST) || // Don't let a diphthong that starts with a vowel follow a vowel. (previousFlags hasFlag VOWEL && candidate.flags hasFlag VOWEL && candidate.flags hasFlag DIPHTHONG) || // Don't add multi-character candidates if we would go over the targetLength. (password.length + candidate.length > targetLength) || (pwFlags hasFlag PasswordGenerator.NO_AMBIGUOUS && candidate.isAmbiguous) ) { continue } // At this point the candidate could be appended to the password, but we still have // to determine the case. If no upper case characters are required, we don't add // any. val useUpperIfBothCasesAllowed = (isStartOfPart || candidate.flags hasFlag CONSONANT) && secureRandomBiasedBoolean(20) password += if ( pwFlags hasFlag PasswordGenerator.UPPERS && (!(pwFlags hasFlag PasswordGenerator.LOWERS) || useUpperIfBothCasesAllowed) ) { candidate.upperCase } else { candidate.lowerCase } // We ensured above that we will not go above the target length. check(password.length <= targetLength) if (password.length == targetLength) break // Second part: Add digits and symbols with a certain probability (if requested) if // they would not directly follow the first character in a pronounceable part. if ( !isStartOfPart && pwFlags hasFlag PasswordGenerator.DIGITS && secureRandomBiasedBoolean(30) ) { var randomDigit: Char do { randomDigit = secureRandomNumber(10).toString(10).first() } while ( pwFlags hasFlag PasswordGenerator.NO_AMBIGUOUS && randomDigit in PasswordGenerator.AMBIGUOUS_STR ) password += randomDigit // Begin a new pronounceable part after every digit. isStartOfPart = true nextBasicType = if (secureRandomBoolean()) VOWEL else CONSONANT previousFlags = 0 continue } if ( !isStartOfPart && pwFlags hasFlag PasswordGenerator.SYMBOLS && secureRandomBiasedBoolean(20) ) { var randomSymbol: Char do { randomSymbol = PasswordGenerator.SYMBOLS_STR.secureRandomCharacter() } while ( pwFlags hasFlag PasswordGenerator.NO_AMBIGUOUS && randomSymbol in PasswordGenerator.AMBIGUOUS_STR ) password += randomSymbol // Continue the password generation as if nothing was added. } // Third part: Determine the basic type of the next character depending on the letter // we just added. nextBasicType = when { candidate.flags.hasFlag(CONSONANT) -> VOWEL previousFlags.hasFlag(VOWEL) || candidate.flags.hasFlag(DIPHTHONG) || secureRandomBiasedBoolean(60) -> CONSONANT else -> VOWEL } previousFlags = candidate.flags isStartOfPart = false } - MagicNumber:PasswordGenerator.kt$PasswordGenerator$1000 - MagicNumber:PasswordGenerator.kt$PasswordGenerator$6 - MagicNumber:RandomNumberGenerator.kt$100 - MagicNumber:RandomNumberGenerator.kt$99 - MagicNumber:RandomPhonemesGenerator.kt$RandomPhonemesGenerator$10 - MagicNumber:RandomPhonemesGenerator.kt$RandomPhonemesGenerator$20 - MagicNumber:RandomPhonemesGenerator.kt$RandomPhonemesGenerator$30 - MagicNumber:RandomPhonemesGenerator.kt$RandomPhonemesGenerator$60 - ReturnCount:PasswordGenerator.kt$PasswordGenerator$internal fun isValidPassword(password: String, pwFlags: Int): Boolean - ThrowsCount:PasswordGenerator.kt$PasswordGenerator$@Throws(PasswordGeneratorException::class) public fun generate(passwordOptions: List<PasswordOption>, length: Int = DEFAULT_LENGTH): String - - diff --git a/detekt-baselines/sentry-stub.xml b/detekt-baselines/sentry-stub.xml deleted file mode 100644 index 108ff262..00000000 --- a/detekt-baselines/sentry-stub.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - EmptyFunctionBlock:Scope.kt$Scope${} - EmptyFunctionBlock:Sentry.kt$Sentry${} - - - EmptyFunctionBlock:Scope.kt$Scope${} - EmptyFunctionBlock:Sentry.kt$Sentry${} - - diff --git a/detekt-baselines/ssh.xml b/detekt-baselines/ssh.xml deleted file mode 100644 index 51033513..00000000 --- a/detekt-baselines/ssh.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - ReturnCount:SSHKeyManager.kt$SSHKeyManager$public fun needsAuthentication(): Boolean - SwallowedException:SSHKeyManager.kt$SSHKeyManager$e: IllegalStateException - TooManyFunctions:SSHKeyManager.kt$SSHKeyManager - - diff --git a/detekt-baselines/ui-compose.xml b/detekt-baselines/ui-compose.xml deleted file mode 100644 index c373eea4..00000000 --- a/detekt-baselines/ui-compose.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - -- cgit v1.2.3