diff --git a/gradle.properties b/gradle.properties index 15cd8db..f7bba08 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,12 +7,12 @@ pluginRepositoryUrl = https://github.com/nadlejs/intellij-plugin pluginVersion = 0.0.2 # Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html -pluginSinceBuild = 242 +pluginSinceBuild = 251 pluginUntilBuild = 253.* # IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension platformType = IU -platformVersion = 2024.2.5 +platformVersion = 2025.1.3 # Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html # Example: platformPlugins = com.jetbrains.php:203.4449.22, org.intellij.scala:2023.3.27@EAP diff --git a/package.json b/package.json index 63eb06e..e68469d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, "devDependencies": { - "@nadle/language-server": "0.0.2" + "@nadle/language-server": "https://pkg.pr.new/nadlejs/nadle/@nadle/language-server@bd64301" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e347a5c..355ae1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,13 +9,14 @@ importers: .: devDependencies: '@nadle/language-server': - specifier: 0.0.2 - version: 0.0.2 + specifier: https://pkg.pr.new/nadlejs/nadle/@nadle/language-server@bd64301 + version: https://pkg.pr.new/nadlejs/nadle/@nadle/language-server@bd64301 packages: - '@nadle/language-server@0.0.2': - resolution: {integrity: sha512-DoWankFcSNlQS0vhjfeSliOi2ow3k5k6l88gz/ayMgK5avIbyYqyRKCGybEw+dd/m88ZTIPsyVdRSvtd/d01QA==} + '@nadle/language-server@https://pkg.pr.new/nadlejs/nadle/@nadle/language-server@bd64301': + resolution: {integrity: sha512-RUuWRtX7TcW7jPNIxRj+IIuaaBn/SibrrozzmiH4kaN2KXg5VLrH0vK78++Bc3Q4f4SqP0mBOXl5mglL3VYbng==, tarball: https://pkg.pr.new/nadlejs/nadle/@nadle/language-server@bd64301} + version: 0.0.3 engines: {node: '>=22'} hasBin: true @@ -43,7 +44,7 @@ packages: snapshots: - '@nadle/language-server@0.0.2': + '@nadle/language-server@https://pkg.pr.new/nadlejs/nadle/@nadle/language-server@bd64301': dependencies: typescript: 5.9.3 vscode-languageserver: 9.0.1 diff --git a/src/main/kotlin/com/github/nadlejs/intellij/plugin/navigation/NadleTaskGotoDeclarationHandler.kt b/src/main/kotlin/com/github/nadlejs/intellij/plugin/navigation/NadleTaskGotoDeclarationHandler.kt deleted file mode 100644 index 7dae314..0000000 --- a/src/main/kotlin/com/github/nadlejs/intellij/plugin/navigation/NadleTaskGotoDeclarationHandler.kt +++ /dev/null @@ -1,79 +0,0 @@ -package com.github.nadlejs.intellij.plugin.navigation - -import com.github.nadlejs.intellij.plugin.util.NadleFileUtil -import com.intellij.codeInsight.navigation.actions.GotoDeclarationHandler -import com.intellij.openapi.editor.Editor -import com.intellij.psi.PsiElement - -class NadleTaskGotoDeclarationHandler : GotoDeclarationHandler { - - override fun getGotoDeclarationTargets( - element: PsiElement?, - offset: Int, - editor: Editor? - ): Array? { - if (element == null) return null - - val file = element.containingFile ?: return null - val virtualFile = file.virtualFile ?: return null - if (!NadleFileUtil.isNadleConfigFile(virtualFile)) return null - - // Get the task name from the string literal under cursor - val targetTaskName = extractStringContent(element) ?: return null - - // Check this string is inside a dependsOn context - if (!isInsideDependsOn(element)) return null - - // Find the tasks.register("targetTaskName", ...) definition in the file - val fileText = file.text - val pattern = Regex("""tasks\.register\s*\(\s*['"]${Regex.escape(targetTaskName)}['"]""") - val match = pattern.find(fileText) ?: return null - - val targetElement = file.findElementAt(match.range.first) ?: return null - return arrayOf(targetElement) - } - - private fun extractStringContent(element: PsiElement): String? { - val text = element.text ?: return null - - // Handle leaf elements inside string literals - // Walk up to find the string literal node - var current: PsiElement? = element - while (current != null) { - val t = current.text - if (t.length >= 2 && - ((t.startsWith("\"") && t.endsWith("\"")) || - (t.startsWith("'") && t.endsWith("'"))) - ) { - return t.substring(1, t.length - 1).ifBlank { null } - } - // Don't walk too far - if (current.textLength > 200) break - current = current.parent - } - - // The element itself might be a bare string content token - if (text.isNotBlank() && !text.contains(" ") && !text.startsWith("{")) { - return text - } - - return null - } - - private fun isInsideDependsOn(element: PsiElement): Boolean { - // Walk up the PSI tree and check surrounding text for dependsOn pattern - var current: PsiElement? = element.parent - var depth = 0 - while (current != null && depth < 15) { - val text = current.text - if (text.contains("dependsOn")) { - return true - } - // Stop if we've gone past the property assignment level - if (text.length > 2000) break - current = current.parent - depth++ - } - return false - } -} diff --git a/src/main/kotlin/com/github/nadlejs/intellij/plugin/search/NadleTaskSearchEverywhereContributor.kt b/src/main/kotlin/com/github/nadlejs/intellij/plugin/search/NadleTaskSearchEverywhereContributor.kt index e988ff4..509365b 100644 --- a/src/main/kotlin/com/github/nadlejs/intellij/plugin/search/NadleTaskSearchEverywhereContributor.kt +++ b/src/main/kotlin/com/github/nadlejs/intellij/plugin/search/NadleTaskSearchEverywhereContributor.kt @@ -4,12 +4,9 @@ import com.github.nadlejs.intellij.plugin.run.NadleTask import com.github.nadlejs.intellij.plugin.run.NadleTaskRunner import com.github.nadlejs.intellij.plugin.run.NadleTaskScanner import com.github.nadlejs.intellij.plugin.util.NadleIcons -import com.intellij.ide.actions.searcheverywhere.FoundItemDescriptor -import com.intellij.ide.actions.searcheverywhere.WeightedSearchEverywhereContributor -import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.ide.actions.searcheverywhere.SearchEverywhereContributor import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.project.Project -import com.intellij.psi.codeStyle.MinusculeMatcher import com.intellij.psi.codeStyle.NameUtil import com.intellij.util.Processor import java.awt.Component @@ -20,7 +17,7 @@ import javax.swing.ListCellRenderer class NadleTaskSearchEverywhereContributor( private val project: Project -) : WeightedSearchEverywhereContributor { +) : SearchEverywhereContributor { override fun getSearchProviderId(): String = javaClass.name @@ -55,10 +52,19 @@ class NadleTaskSearchEverywhereContributor( override fun getDataForItem(element: NadleTask, dataId: String): Any? = null - override fun fetchWeightedElements( + override fun processSelectedItem( + selected: NadleTask, + modifiers: Int, + searchText: String + ): Boolean { + NadleTaskRunner.run(project, selected) + return true + } + + override fun fetchElements( pattern: String, progressIndicator: ProgressIndicator, - consumer: Processor> + consumer: Processor ) { val basePath = project.basePath ?: return val tasks = NadleTaskScanner.scanTasksDetailed(Path.of(basePath)) @@ -72,28 +78,8 @@ class NadleTaskSearchEverywhereContributor( for (task in tasks) { progressIndicator.checkCanceled() if (matcher == null || matcher.matches(task.name)) { - val weight = matcher?.matchingDegree(task.name) ?: 0 - consumer.process(FoundItemDescriptor(task, weight)) + consumer.process(task) } } } - - override fun processSelectedItem( - selected: NadleTask, - modifiers: Int, - searchText: String - ): Boolean { - NadleTaskRunner.run(project, selected) - return true - } - - override fun fetchElements( - pattern: String, - progressIndicator: ProgressIndicator, - consumer: Processor - ) { - fetchWeightedElements(pattern, progressIndicator) { descriptor -> - consumer.process(descriptor.item) - } - } } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 972b101..85ba890 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -7,7 +7,7 @@ Adds run icons to tasks.register("name", fn) definitions and enables direct execution.
- Provides language intelligence (diagnostics, completions, hover, go-to-definition) for nadle.config.* files via the Nadle Language Server.
+ Provides language intelligence (diagnostics, completions, hover, go-to-definition, find usages) for nadle.config.* files via the Nadle Language Server.
Works seamlessly with nadle.config.ts, nadle.config.js, and other supported extensions. ]]>
@@ -29,9 +29,6 @@ - -