Skip to content

Commit 080bac3

Browse files
authored
feat: add SwiftLint and ktlint for native code linting (#54)
- Add SwiftLint CI job (runs on Ubuntu) - Add ktlint CI job (runs on Ubuntu) - Add local lint scripts: yarn lint:swift, yarn lint:kotlin, yarn lint:native - Auto-fix minor style issues in Swift and Kotlin code
1 parent 474deab commit 080bac3

17 files changed

Lines changed: 123 additions & 37 deletions

.editorconfig

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,22 @@ end_of_line = lf
1313
charset = utf-8
1414
trim_trailing_whitespace = true
1515
insert_final_newline = true
16+
17+
[*.kt]
18+
indent_size = 2
19+
max_line_length = 140
20+
ktlint_standard_no-wildcard-imports = disabled
21+
ktlint_standard_filename = disabled
22+
ktlint_standard_package-name = disabled
23+
ktlint_standard_indent = disabled
24+
ktlint_standard_function-signature = disabled
25+
ktlint_standard_class-signature = disabled
26+
ktlint_standard_multiline-expression-wrapping = disabled
27+
ktlint_standard_function-expression-body = disabled
28+
ktlint_standard_trailing-comma-on-call-site = disabled
29+
ktlint_standard_trailing-comma-on-declaration-site = disabled
30+
ktlint_standard_blank-line-before-declaration = disabled
31+
ktlint_standard_import-ordering = disabled
32+
ktlint_standard_string-template-indent = disabled
33+
ktlint_standard_backing-property-naming = disabled
34+
ktlint_standard_no-consecutive-comments = disabled

.github/workflows/ci.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,31 @@ on:
1111
- checks_requested
1212

1313
jobs:
14+
lint-swift:
15+
runs-on: ubuntu-latest
16+
steps:
17+
- name: Checkout
18+
uses: actions/checkout@v4
19+
20+
- name: SwiftLint
21+
uses: norio-nomura/action-swiftlint@3.2.1
22+
with:
23+
args: --config .swiftlint.yml
24+
25+
lint-kotlin:
26+
runs-on: ubuntu-latest
27+
steps:
28+
- name: Checkout
29+
uses: actions/checkout@v4
30+
31+
- name: ktlint
32+
uses: ScaCap/action-ktlint@master
33+
with:
34+
github_token: ${{ secrets.GITHUB_TOKEN }}
35+
reporter: github-pr-review
36+
ktlint_version: "1.5.0"
37+
android: true
38+
1439
lint:
1540
runs-on: ubuntu-latest
1641
steps:

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,6 @@ lib/
8383
# React Native Codegen
8484
ios/generated
8585
android/generated
86+
87+
# ktlint binary cache
88+
.ktlint/

.swiftlint.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
included:
2+
- ios
3+
4+
excluded:
5+
- Pods
6+
- nitrogen/generated
7+
8+
disabled_rules:
9+
- line_length
10+
- file_length
11+
- type_body_length
12+
- function_body_length
13+
- cyclomatic_complexity
14+
- identifier_name
15+
- force_cast
16+
- force_try
17+
- nesting
18+
- trailing_whitespace
19+
- todo
20+
- unused_optional_binding
21+
22+
reporter: github-actions-logging

android/src/main/java/com/margelo/nitro/rive/HybridRiveFile.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ class HybridRiveFile : HybridRiveFileSpec() {
2525
get() = riveFile?.viewModelCount?.toDouble()
2626

2727
override fun viewModelByIndex(index: Double): HybridViewModelSpec? {
28-
val vm = riveFile?.getViewModelByIndex(index.toInt()) ?: return null;
28+
val vm = riveFile?.getViewModelByIndex(index.toInt()) ?: return null
2929
return HybridViewModel(vm)
3030
}
3131

3232
override fun viewModelByName(name: String): HybridViewModelSpec? {
33-
val vm = riveFile?.getViewModelByName(name) ?: return null;
33+
val vm = riveFile?.getViewModelByName(name) ?: return null
3434
return HybridViewModel(vm)
3535
}
3636

android/src/main/java/com/margelo/nitro/rive/HybridRiveFileFactory.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,4 +133,3 @@ class HybridRiveFileFactory : HybridRiveFileFactorySpec() {
133133
}
134134
}
135135
}
136-

android/src/main/java/com/margelo/nitro/rive/HybridRiveView.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
103103

104104
override fun bindViewModelInstance(viewModelInstance: HybridViewModelInstanceSpec) =
105105
executeOnUiThread {
106-
val hybridVmi = viewModelInstance as? HybridViewModelInstance ?: return@executeOnUiThread;
106+
val hybridVmi = viewModelInstance as? HybridViewModelInstance ?: return@executeOnUiThread
107107
view.bindViewModelInstance(hybridVmi.viewModelInstance)
108108
}
109109

@@ -147,7 +147,6 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
147147
afterUpdate()
148148
}
149149

150-
151150
override fun afterUpdate() {
152151
logged(TAG, "afterUpdate") {
153152
val hybridFile = file as? HybridRiveFile
@@ -163,7 +162,7 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
163162
layoutScaleFactor = layoutScaleFactor?.toFloat() ?: DefaultConfiguration.LAYOUTSCALEFACTOR,
164163
bindData = dataBind.toBindData()
165164
)
166-
view.configure(config, dataBindingChanged=dataBindingChanged, needsReload, initialUpdate= initialUpdate)
165+
view.configure(config, dataBindingChanged = dataBindingChanged, needsReload, initialUpdate = initialUpdate)
167166

168167
if (needsReload && hybridFile != null) {
169168
hybridFile.registerView(this)
@@ -187,7 +186,7 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
187186
}
188187

189188
private fun executeOnUiThread(action: () -> Unit) {
190-
context.currentActivity?.runOnUiThread() {
189+
context.currentActivity?.runOnUiThread {
191190
try {
192191
action()
193192
} catch (e: Exception) {

android/src/main/java/com/margelo/nitro/rive/HybridViewModel.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class HybridViewModel(private val viewModel: ViewModel) : HybridViewModelSpec()
1818
override fun createInstanceByIndex(index: Double): HybridViewModelInstanceSpec? {
1919
try {
2020
val vmi = viewModel.createInstanceFromIndex(index.toInt())
21-
return HybridViewModelInstance(vmi);
21+
return HybridViewModelInstance(vmi)
2222
} catch (e: ViewModelException) {
2323
return null
2424
}
@@ -27,7 +27,7 @@ class HybridViewModel(private val viewModel: ViewModel) : HybridViewModelSpec()
2727
override fun createInstanceByName(name: String): HybridViewModelInstanceSpec? {
2828
try {
2929
val vmi = viewModel.createInstanceFromName(name)
30-
return HybridViewModelInstance(vmi);
30+
return HybridViewModelInstance(vmi)
3131
} catch (e: ViewModelException) {
3232
return null
3333
}
@@ -36,7 +36,7 @@ class HybridViewModel(private val viewModel: ViewModel) : HybridViewModelSpec()
3636
override fun createDefaultInstance(): HybridViewModelInstanceSpec? {
3737
try {
3838
val vmi = viewModel.createDefaultInstance()
39-
return HybridViewModelInstance(vmi);
39+
return HybridViewModelInstance(vmi)
4040
} catch (e: ViewModelException) {
4141
return null
4242
}
@@ -45,7 +45,7 @@ class HybridViewModel(private val viewModel: ViewModel) : HybridViewModelSpec()
4545
override fun createInstance(): HybridViewModelInstanceSpec? {
4646
try {
4747
val vmi = viewModel.createBlankInstance()
48-
return HybridViewModelInstance(vmi);
48+
return HybridViewModelInstance(vmi)
4949
} catch (e: ViewModelException) {
5050
return null
5151
}

android/src/main/java/com/rive/RiveReactNativeView.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import app.rive.runtime.kotlin.core.SMIInput
1919
import app.rive.runtime.kotlin.core.SMINumber
2020
import app.rive.runtime.kotlin.core.ViewModelInstance
2121
import app.rive.runtime.kotlin.core.errors.ViewModelException
22-
import com.margelo.nitro.core.AnyMap
2322
import com.margelo.nitro.rive.EventPropertiesOutput
2423
import com.margelo.nitro.rive.EventPropertiesOutputExtensions as EPO
2524
import com.margelo.nitro.rive.RiveEventType
@@ -187,7 +186,7 @@ class RiveReactNativeView(context: ThemedReactContext) : FrameLayout(context) {
187186

188187
fun play() = riveAnimationView?.play()
189188

190-
fun pause() = riveAnimationView?.pause();
189+
fun pause() = riveAnimationView?.pause()
191190

192191
fun addEventListener(onEvent: (event: RNEvent) -> Unit) {
193192
val eventListener = object : RiveFileController.RiveEventListener {
@@ -329,7 +328,7 @@ class RiveReactNativeView(context: ThemedReactContext) : FrameLayout(context) {
329328
}
330329
}
331330

332-
return newMap;
331+
return newMap
333332
}
334333

335334
/**

ios/HybridRiveFile.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import RiveRuntime
22

33
typealias ReferencedAssetCache = [String: RiveFileAsset]
44

5-
class HybridRiveFile: HybridRiveFileSpec, RiveViewSource {
5+
class HybridRiveFile: HybridRiveFileSpec, RiveViewSource {
66
var riveFile: RiveFile?
77
var referencedAssetCache: ReferencedAssetCache?
88
var assetLoader: ReferencedAssetLoader?

0 commit comments

Comments
 (0)