Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.

Commit ec1eccd

Browse files
committed
fix(editor): asynchronously read and apply tree sitter languages
1 parent fdcc86b commit ec1eccd

File tree

8 files changed

+118
-103
lines changed

8 files changed

+118
-103
lines changed

app/src/main/java/com/itsaky/androidide/fragments/output/LogViewFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,8 @@ abstract class LogViewFragment :
240240

241241
IDEColorSchemeProvider.readSchemeAsync(
242242
context = requireContext(),
243-
type = LogLanguage.TS_TYPE,
244-
coroutineScope = editor.editorScope
243+
coroutineScope = editor.editorScope,
244+
type = LogLanguage.TS_TYPE
245245
) { scheme ->
246246
editor.applyTreeSitterLang(LogLanguage(requireContext()), LogLanguage.TS_TYPE, scheme)
247247
}

editor/src/main/java/com/itsaky/androidide/editor/language/treesitter/KotlinLanguage.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package com.itsaky.androidide.editor.language.treesitter
2020
import android.content.Context
2121
import com.itsaky.androidide.editor.language.treesitter.TreeSitterLanguage.Factory
2222
import com.itsaky.androidide.treesitter.kotlin.TSLanguageKotlin
23+
import com.itsaky.androidide.utils.withStopWatch
2324
import io.github.rosemoe.sora.lang.Language.INTERRUPTION_LEVEL_STRONG
2425

2526
/**
@@ -28,7 +29,7 @@ import io.github.rosemoe.sora.lang.Language.INTERRUPTION_LEVEL_STRONG
2829
* @author Akash Yadav
2930
*/
3031
open class KotlinLanguage(context: Context) :
31-
TreeSitterLanguage(context, TSLanguageKotlin.getInstance(), TS_TYPE_KT) {
32+
TreeSitterLanguage(context, withStopWatch("TSLangKt.getInstance()") { TSLanguageKotlin.getInstance() }, TS_TYPE_KT) {
3233

3334
companion object {
3435

editor/src/main/java/com/itsaky/androidide/editor/language/treesitter/TSLanguageRegistry.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ interface TSLanguageRegistry {
4242
*/
4343
fun <T : TreeSitterLanguage> register(fileType: String, factory: TreeSitterLanguage.Factory<T>)
4444

45+
/**
46+
* Checks whether a [TreeSitterLanguage] has been registered for the given [file type][fileType].
47+
*
48+
* @return `true` if a [TreeSitterLanguage] has been registered for [fileType], `false` otherwise.
49+
*/
50+
fun hasLanguage(fileType: String): Boolean
51+
4552
/**
4653
* Returns the instance of the [TreeSitterLanguage.Factory] for the given file type.
4754
*

editor/src/main/java/com/itsaky/androidide/editor/language/treesitter/TreeSitterLanguageProvider.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,15 @@ import java.io.File
2727
*/
2828
object TreeSitterLanguageProvider {
2929

30+
fun hasTsLanguage(file: File) : Boolean {
31+
return TSLanguageRegistry.instance.hasLanguage(file.extension)
32+
}
33+
3034
fun forFile(file: File, context: Context): TreeSitterLanguage? {
35+
if (!hasTsLanguage(file)) {
36+
return null
37+
}
38+
3139
val type = file.extension
3240

3341
return try {

editor/src/main/java/com/itsaky/androidide/editor/language/treesitter/internal/TSLanguageRegistryImpl.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ class TSLanguageRegistryImpl : TSLanguageRegistry {
4242
}
4343
}
4444

45+
override fun hasLanguage(fileType: String): Boolean {
46+
return registry.containsKey(fileType)
47+
}
48+
4549
@Suppress("UNCHECKED_CAST")
4650
override fun <T : TreeSitterLanguage> getFactory(
4751
fileType: String

editor/src/main/java/com/itsaky/androidide/editor/schemes/IDEColorSchemeProvider.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import com.itsaky.androidide.eventbus.events.editor.ColorSchemeInvalidatedEvent
2323
import com.itsaky.androidide.preferences.internal.DEFAULT_COLOR_SCHEME
2424
import com.itsaky.androidide.preferences.internal.colorScheme
2525
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE
26-
import com.itsaky.androidide.tasks.executeAsyncProvideError
2726
import com.itsaky.androidide.utils.Environment
2827
import com.itsaky.androidide.utils.ILogger
2928
import com.itsaky.androidide.utils.isSystemInDarkMode
@@ -178,8 +177,8 @@ object IDEColorSchemeProvider {
178177
@JvmOverloads
179178
fun readSchemeAsync(
180179
context: Context,
181-
type: String? = null,
182180
coroutineScope: CoroutineScope,
181+
type: String? = null,
183182
callbackContext: CoroutineContext = Dispatchers.Main,
184183
callback: (SchemeAndroidIDE?) -> Unit
185184
) {

0 commit comments

Comments
 (0)