omegalint's People
omegalint's Issues
Некорректное срабатывание
override fun setActiveMainPageId(mainPageId: MainPageId) {
val fixedPageId =
if (mainPageId == EMPTY_PAGE_ID)
mainPages.firstOrNull()?.id ?: mainPageId
else mainPageId
this.mainPageId = fixedPageId
val mainPage = mainPages.firstOrNull { it.id == fixedPageId } ?: return
val activeFragments = supportFragmentManager
.fragments
.filter { !it.isHidden && it is BaseFragment }
.toMutableList()
val currentFragment = supportFragmentManager.fragments.firstOrNull { fragment ->
mainPage.fragmentLauncher.isOurFragment(fragment)
}
activeFragments -= currentFragment
supportFragmentManager.edit {
activeFragments.forEach {
hide(it)
}
if (currentFragment == null) {
val newFragment = mainPage.fragmentLauncher.createFragment()
add(R.id.layout_container, newFragment, fixedPageId.toString())
} else {
show(currentFragment)
}
}
}
Проверка http://wiki.omega-r.club/dev-android-code#rec228194333 учитывает пустые строки, а не должна
Неверно выделяет пробелы перед открывающей скопкой
inline operator fun ErrorHandler.invoke(block: () -> R): R {}
//and
fun Session.toJsonableSession(): JsonableSession = if (this is JsonableSession) this else JsonableSession(this)
Проверка на то что одинаковый R.id в bind
Неверное выделение ветви when
BaseSettingsMenu.DOOR_STATUS -> {
SelectValueDialogFragment.createLauncher(
doorStatuses, domofon.settings.base.doorStatus.ordinal
).launchForResult(REQUEST_CODE_DOOR_STATUS)
}
Требует сделать упрощения уже в упрощенных управляющих инструкциях
private fun getTabName(position: Int): String {
return when (position) {
0 -> getString(R.string.label_issues_active)
else -> getString(R.string.label_issues_finished)
}
}
http://wiki.omega-r.club/dev-android-code#rec228389564
Добавить префикс `mask_` для строковых ресурсов, группа - маски
Wrong work with data class
data class GeneralSettings(
var doorStatus: Int = 1,
var keepDoorOpen: Boolean = false,
var keepDoorOpenSip: Boolean = false,
var doorOpenDuration: Int = 5,
var callDuration: Int = 5,
var talkDuration: Int = 5,
var conciergeApartment: Int = 100,
val conciergeApartment1: Int = 100,
var conciergeApartment2: Int = 100,
val conciergeApartment3: Int = 100,
var conciergeApartment5: Int = 100
)
Некорректное срабатывание
When declaring parameter names in a multi-line lambda, put the names on the first line, followed by an arrow and a new line:
http://wiki.omega-r.club/dev-android-code#rec228389710
Неверно выделяет контекст
fun DividerItemDecoration.addInset(context: Context, insetResId: Int): DividerItemDecoration {
val attrs = intArrayOf(android.R.attr.listDivider)
val attr = context.obtainStyledAttributes(attrs)
val divider = attr.getDrawable(0)
val inset = context.resources.getDimensionPixelSize(insetResId)
val insetDivider = InsetDrawable(divider, inset, 0, inset, 0)
attr.recycle()
setDrawable(insetDivider)
return this
}
Некоректное отображение пробела
Выделяет пробелы после точки в комментариях.
// message, here is where that should be initiated. See sendNotification method below.
Некорректное срабатывание
when (throwable) {
is SessionAppException.Timeout -> {
viewState.setCodeError(Text.from(R.string.error_sms_code_timeout))
}
is SessionAppException.IncorrectSmsConfirmation -> {
viewState.setCodeError(Text.from(R.string.error_sms_code_confirmation))
}
else -> super.handleErrors(throwable)
}
http://wiki.omega-r.club/dev-android-code#rec228389564
Слишком длинный код, чтобы умещать на 1 строке с кейсом
Подчеркивает правильный перенос
value
?.toJsonableSession()
?.let(adapter::toJson)
?.apply {
putString(key, this)
}
http://wiki.omega-r.club/dev-android-code#rec228388172
Wrong work with generic
class BasePresenter<VIEW: BaseView>: OmegaPresenter()
Некорректное срабатывание
package com.omegar.smartplatform.service.core.entities
import androidx.annotation.StringRes
import com.omegar.smartplatform.service.R
enum class IssueWorkStatus(@StringRes val title: Int) {
NEW(R.string.label_issue_new),
WORK(R.string.label_issue_work),
MODIFICATION(R.string.label_issue_modification),
CHECK(R.string.label_issue_check),
COMPLETE(R.string.label_issue_new)
}
Don't use abbreviations. http://wiki.omega-r.club/dev-android-code#rec228153340
Некорректное срабатывание
fun setOpenCallback(callback: (() -> Unit)?)
В объявлении типа (() -> Unit)?
на открывающую скобку срабатывает http://wiki.omega-r.club/dev-android-code#rec228388172
Некорректное срабатывание
Выделяет конструкторы классов как функции
// TODO mock
6 class Issue(
7 val number: Long = 0,
8 val dateCreated: Date = Date(),
9 val dateUpdated: Date = Date(),
Method has too much arguments. In functions, the number of parameters must not exceed 5.
http://wiki.omega-r.club/dev-android-code#rec228191623
Некорректное срабатывание проверки
companion object {
fun createLauncher() = createFragmentLauncher()
}
Выдает предупреждение
http://wiki.omega-r.club/dev-android-code#rec228389255
Некорректное срабатывание
private fun setExpiredState() {
shareControl.setControlState(ControlState.DISABLED)
turnOffControl.setControlState(ControlState.DISABLED)
}
http://wiki.omega-r.club/dev-android-code#rec228389564 срабатывает на всю функицю
Выделяет непревышающую лимит функцию
fun setActiveMainPageId(mainPageId: MainPageId) {
val fixedPageId =
if (mainPageId == EMPTY_PAGE_ID)
mainPages.firstOrNull()?.id ?: mainPageId
else mainPageId
this.mainPageId = fixedPageId
val mainPage = mainPages.firstOrNull { it.id == fixedPageId } ?: return
val activeFragments = supportFragmentManager
.fragments
.filter { !it.isHidden && it is BaseFragment }
.toMutableList()
val currentFragment = supportFragmentManager.fragments.firstOrNull { fragment ->
mainPage.fragmentLauncher.isOurFragment(fragment)
}
activeFragments -= currentFragment
supportFragmentManager.edit {
activeFragments.forEach {
hide(it)
}
if (currentFragment == null) {
val newFragment = mainPage.fragmentLauncher.createFragment()
add(R.id.layout_container, newFragment, fixedPageId.toString())
} else {
show(currentFragment)
}
}
}
Lint не выделяет пустые ветки "when"
ERROR with lamda
var croppingBlock: (() -> Int)? = null
Некорректное срабатывание
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " +
"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad " +
"minim veniam, quis nostrud exercitation ullamco laboris nisi ut " +
"aliquip ex ea commodo consequat. Duis aute irure dolor in " +
"reprehenderit in voluptate velit esse cillum dolore eu fugiat" +
" nulla pariatur. Excepteur sint occaecat cupidatat non proident, " +
"sunt in culpa qui officia deserunt mollit anim id est laborum."
Внутри строк на точках срабатывает правило http://wiki.omega-r.club/dev-android-code#rec228388172
Привила именования классов sealed
Для sealed
классов не должно работать привило именования классов при наследовании
sealed class DoorOpenState {
object Closed: DoorOpenState()
object Loading: DoorOpenState()
data class Opened(val secondsBeforeClose: Int): DoorOpenState()
}
Некорректное срабатывание
value
?.toJsonableSession()
?.let(adapter::toJson)
?.apply {
putString(key, this)
}
http://wiki.omega-r.club/dev-android-code#rec228388172 срабатывает на всех "?."
Привила именования классов при наследовании
Нужно подумать над исключением из правила об именовании классов-наследников *Parent: Parent()
случаи наследования от View и ViewGroup.
Например, создаем очень нестандартный контрол IconTextControl
, корнем которого является FrameLayout
. Тогда, по текущему правилу именования, его следует именовать IconTextControlFrameLayout
. Однако, этот контрол не планируется для использования в качестве ViewGroup
(не планируется добавлять в него дочерние элементы ни через xml, ни через addChild
), следовательно, его имя не должно указывать, что его следует использовать как FrameLayout
Другой пример: public class Button extends TextView
Некорректное срабатывание
Только в сборке gradle
@InjectViewState
class PasswordRecoveryPresenter(
private var email: String? = null
) : BasePresenter() {
companion object {
private const val REQUEST_CODE_PHONE = 5895
}
companion object should be the first Order warning.
http://wiki.omega-r.club/dev-android-code#rec228155171
Not understand data class constructors
// TODO mock
data class GeneralSettings(
var doorStatus: DoorStatus = DoorStatus.CLOSED,
var keepDoorOpen: Boolean = false,
var keepDoorOpenSip: Boolean = false,
var doorOpenDuration: Int = 5,
var callDuration: Int = 5,
var talkDuration: Int = 5,
var conciergeApartment: Int = 100,
var relayStatus: RelayStatus = RelayStatus.FINE_OPENED
) : Serializable
Неправильный текст ошибки при работе с when
when (currentId) {
R.id.motion_state_open_fired -> {
openCallback?.invoke()
}
}
[DoorOpenSlider.kt СП для жильца]
Need custom view id check??
Поправить порядок
Class members with access modifiers should be positioned in the following order: abstract, override, public, internal, protected, private. . Order warning.
companion object error
companion object {
private const val REQUEST_CODE_FREQUENCY = 1596
private const val REQUEST_CODE_DWDR = 1597
private const val REQUEST_CODE_DNR2 = 1598
private val FREQUENCIES = listOf(50, 60)
}
Некорректное срабатывание проверки
inflater.inflate(R.menu.menu_home, menu)
Выдает предупреждение о http://wiki.omega-r.club/dev-android-code#rec226396979
Обработка исключений
Нужно как-то придумать реализацию или убрать из строгих правил кейс, когда ловятся все исключения и обрабатываются, не проглатываясь
http://wiki.omega-r.club/dev-android-code#rec226454364
@SuppressLint("OMEGA_NOT_IGNORE_EXCEPTIONS")
override suspend fun addNewPlace(accountNumber: String, name: String) {
try {
val place = remoteDataSource.createPlace(accountNumber, name)
localDataSource.createPlace(place)
} catch (ex: SQLiteConstraintException) {
throw DoorphonesException.NameExists
} catch (ex: Exception) {
errorHandler.handleThrowable(ex)
}
}
Некорректное срабатывание
override val notifications: List<String>
get() = notificationsArrayList
http://wiki.omega-r.club/dev-android-code#rec228389255 срабатывает на геттеры
Именование строковых ресурсов - format_*
<string name="format_guest_code_expire_at">Действует до %s</string>
выдает ошибку
Требует упростить упрощенную функцию
companion object {
fun createLauncher() = createActivityLauncher()
}
http://wiki.omega-r.club/dev-android-code#rec228389255
Некорректное срабатывание
override fun toSerializable(): Serializable = this
Срабатывает http://wiki.omega-r.club/dev-android-code#rec228389255
Некорректное срабатывание
Классы с анотациями воспринимаются как функции.
@InjectViewState
class ProfilePresenter: BasePresenter() {
...
FUN SIZE: 76 Function size must be less than 30 lines(max value change to 40 lines if you use "when") http://wiki.omega-r.club/dev-android-code#rec228194333
Некорректное срабатывание
when (requestCode) {
REQUEST_CODE_PHONE -> {
if (resultCode == RESULT_OK && data != null) {
val credential = data.getParcelableExtra<Credential>(Credential.EXTRA_KEY)
phoneEditText.setText(credential?.id)
}
}
else -> super.onActivityResult(requestCode, resultCode, data)
}
На слово else
срабатывает правило http://wiki.omega-r.club/dev-android-code#rec228389564
Некорректное срабатывание
android:id="@+id/constraintlayout_controls"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:layout_marginBottom="38dp"
На android:layout_marginEnd
и android:layout_marginBottom
срабатывает http://wiki.omega-r.club/dev-android-code#rec228391990
XML автоматически отформатирован, этот порядок устанавливает студия
Некорректное срабатывание
<style name="PlacesSelectorDialog" parent="Theme.Design.Light.BottomSheetDialog">
Выдает предупреждение о http://wiki.omega-r.club/dev-android-code#rec228391441
Нужно добавить исключение при наследовании от встроенных в сдк тем
Требуется проверять идентификаторы
Требуется проверять идентфекаторы в xml файлах на наличие символа _
<TimePicker
...
"android:id"="@id/time_picker - WRONG
"android:id"="@id/timepicker - ALL RIGHT
...
KClass
OMEGA_ABBREVIATION_AS_WORD
Неправильно выделяет константы(как аббревиатуры)
companion object {
private const val EXTRA_TITLE = "EXTRA_TITLE"
private const val EXTRA_VALUE = "EXTRA_VALUE"
private const val EXTRA_MAX_VALUE = "EXTRA_MAX_VALUE"
fun createLauncher(@StringRes title: Int, value: Int, maxValue: Int) = createActivityLauncher(
EXTRA_TITLE put title,
EXTRA_VALUE put value,
EXTRA_MAX_VALUE put maxValue
)
}
Можно ли игнорировать геттеры и сеттеры??
Конструкотору класса передаем переменные, котлин автоматически генерирует поля с указанными параметрами и создает для них методы get и set, при создании экземпляра класса с 10 параметрами, MaxMethodCountDetector считает методы get и set для каждой переменной и выводит ошибку (потому что количество методов превышает порог).
Можно ли игнорировать геттеры и сеттеры??
Некорректное срабатывание
when (state) {
is DoorOpenState.Closed -> motionLayout.transitionToState(R.id.motion_state_initial)
На весь кейс срабатывает правило http://wiki.omega-r.club/dev-android-code#rec228389710
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.