Skip to content

Commit

Permalink
Merge pull request #11
Browse files Browse the repository at this point in the history
1.5.0
  • Loading branch information
mdddj committed Apr 28, 2024
2 parents ae57534 + 64107d1 commit 6c7ea84
Show file tree
Hide file tree
Showing 34 changed files with 727 additions and 52 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
# Changelog


## [1.5.0] - 2024-04-28

- 添加salvo api 接口搜索功能
- 添加salvo tool window
- 调整生成dto弹窗样式


## [1.3.5] - 2024-04-25

Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ plugins {
}

group = "shop.itbug"
version = "1.3.5"
version = "1.5.0"

repositories {
mavenCentral()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package shop.itbug.salvorstool.action.api

import com.intellij.icons.AllIcons
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import shop.itbug.salvorstool.service.SalvoApiService

class SalvoApiRefreshAction : AnAction() {

override fun actionPerformed(e: AnActionEvent) {
e.project?.let {
SalvoApiService.getInstance(it).doRefresh()
}
}

override fun update(e: AnActionEvent) {
e.presentation.isEnabled = e.project != null
e.presentation.icon = AllIcons.General.InlineRefresh
e.presentation.text = "Salvo API Refresh"
super.update(e)
}

override fun getActionUpdateThread(): ActionUpdateThread {
return ActionUpdateThread.BGT
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,8 @@ package shop.itbug.salvorstool.dialog
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.DialogWrapper
import com.intellij.ui.components.JBTabbedPane
import com.intellij.ui.dsl.builder.panel
import org.rust.lang.core.psi.impl.RsStructItemImpl
import shop.itbug.salvorstool.tool.AntdFactory
import shop.itbug.salvorstool.tool.MyFieldPsiElementManager
import shop.itbug.salvorstool.tool.myManager
import shop.itbug.salvorstool.widget.TypeJavaScriptEditor
import java.awt.Dimension
import javax.swing.JComponent
Expand Down
69 changes: 31 additions & 38 deletions src/main/kotlin/shop/itbug/salvorstool/dialog/GenerateDtoDialog.kt
Original file line number Diff line number Diff line change
@@ -1,24 +1,13 @@
package shop.itbug.salvorstool.dialog

import com.intellij.lang.Language
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.fileChooser.FileChooserDescriptor
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.guessProjectDir
import com.intellij.openapi.ui.DialogWrapper
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFileFactory
import com.intellij.psi.PsiManager
import com.intellij.ui.components.JBTabbedPane
import com.intellij.ui.dsl.builder.Align
import com.intellij.ui.dsl.builder.LabelPosition
import com.intellij.ui.dsl.builder.bindText
import com.intellij.ui.dsl.builder.panel
import org.rust.lang.RsLanguage
import org.rust.lang.core.psi.RsNamedFieldDecl
import org.rust.lang.core.psi.impl.RsStructItemImpl
import shop.itbug.salvorstool.i18n.MyI18n
Expand Down Expand Up @@ -49,7 +38,6 @@ enum class GenerateDtoDialogResultEnum {

///获取struct名称,例如: "user"表名字,生成对象的名称:"UserAddRequest"
fun GenerateDtoDialogResultEnum.getStructName(sqlTableName: String): String {

return when (this) {
GenerateDtoDialogResultEnum.AddRequest -> sqlTableName.underlineToCamel + "AddRequest"
GenerateDtoDialogResultEnum.UpdateRequest -> sqlTableName.underlineToCamel + "UpdateRequest"
Expand Down Expand Up @@ -120,40 +108,45 @@ class GenerateDtoDialog(private val project: Project, private val psiElement: R
fileName = (psiElement.myManager.getTableName?:"root")
)

private val tabView = JBTabbedPane()

init {
super.init()
title = "Generate DTO Object"
tabView.add("Add Request Param", panel {
row("Name:") {
textField().bindText(model::addRequestName).enabled(false)
}
row("Generate Class:") {
scrollCell(RsEditor(project, model.addRequestText)).align(Align.FILL)
}
})
tabView.add("Update Request Param", panel {
row("Name:") {
textField().bindText(model::updateRequestName).enabled(false)
}
row("Generate Class:") {
scrollCell(RsEditor(project, model.updateRequestText)).align(Align.FILL)
}
})
tabView.add("Response Param", panel {
row("Name:") {
textField().bindText(model::responseName).enabled(false)
}
row("Generate Class:") {
scrollCell(RsEditor(project, model.responseText)).align(Align.FILL)
}
})
}

override fun createCenterPanel(): JComponent {

return panel {
group("Add Request Param") {
row("Name:") {
textField().bindText(model::addRequestName).enabled(false)
}
row("Generate Class:") {
scrollCell(RsEditor(project, model.addRequestText))
}
}
group("Update Request Param") {
row("Name:") {
textField().bindText(model::updateRequestName).enabled(false)
}
row("Generate Class:") {
scrollCell(RsEditor(project, model.updateRequestText))
}
}
group("Response Param") {
row("Name:") {
textField().bindText(model::responseName).enabled(false)
}
row("Generate Class:") {
scrollCell(RsEditor(project, model.responseText))
}
row {
scrollCell(tabView).align(Align.FILL)
}
group(MyI18n.getMessage("save_to")) {
row(MyI18n.getMessage("select_directory")) {
group(MyI18n.saveTo) {
row(MyI18n.selectDir) {
textFieldWithBrowseButton(
project = project,
fileChooserDescriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor().withRoots(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ class GenerateRouterDialog(private val project: Project, psiElement: RsStructIte
row {
scrollCell(tabView)
}
group(MyI18n.getMessage("save_to")) {
row(MyI18n.getMessage("select_directory")) {
group(MyI18n.saveTo) {
row(MyI18n.selectDir) {
textFieldWithBrowseButton(
project = project,
fileChooserDescriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor().withRoots(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
package shop.itbug.salvorstool.dialog

import com.intellij.lang.Language
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.guessProjectDir
import com.intellij.openapi.ui.DialogWrapper
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.psi.PsiFileFactory
import com.intellij.psi.PsiManager
import com.intellij.ui.components.JBScrollPane
import com.intellij.ui.components.JBTabbedPane
import com.intellij.ui.dsl.builder.Align
import com.intellij.ui.dsl.builder.bindText
import com.intellij.ui.dsl.builder.panel
import org.rust.lang.RsLanguage
import org.rust.lang.core.psi.impl.RsStructItemImpl
import shop.itbug.salvorstool.i18n.MyI18n
import shop.itbug.salvorstool.tool.MyRsPsiFactory
Expand Down Expand Up @@ -83,8 +77,8 @@ class GenerateServiceDialog(private val project: Project, private val psiElement
scrollCell(tabView)
}
}
group(MyI18n.getMessage("save_to")) {
row(MyI18n.getMessage("select_directory")) {
group(MyI18n.saveTo) {
row(MyI18n.selectDir) {
textFieldWithBrowseButton(
project = project,
fileChooserDescriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor().withRoots(
Expand Down
3 changes: 3 additions & 0 deletions src/main/kotlin/shop/itbug/salvorstool/i18n/MyPluginBundle.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ object MyI18n: MyPluginBundle(){
override fun getMessage(key: String, vararg params: Any?): String {
return super.getMessage(key, *params)
}

val saveTo: String get() = getMessage("save_to")
val selectDir: String get() = getMessage("select_directory")
}

open class MyPluginBundle : AbstractBundle("messages.pluginBundle") {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package shop.itbug.salvorstool.messageing

import com.intellij.util.messages.Topic
import shop.itbug.salvorstool.model.SalvoApiItem

interface ApiScanMessaging {

fun apiScanEed(apiList: List<SalvoApiItem>)

companion object {

@Topic.ProjectLevel
val TOPIC = Topic.create("salvorstool.api-scan-messaging", ApiScanMessaging::class.java)
}

}
35 changes: 35 additions & 0 deletions src/main/kotlin/shop/itbug/salvorstool/model/SalvoApiItem.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package shop.itbug.salvorstool.model

import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.project.Project
import com.intellij.pom.Navigatable
import org.rust.lang.core.psi.RsMethodCall




enum class SalvoApiItemMethod {
Get,
Post,
Update,
Delete,
Put
}

data class SalvoApiItem(val api: String,val method: SalvoApiItemMethod,val rsMethodPsiElement: RsMethodCall){
override fun toString(): String {
return "\n${api} - $method"
}
}

fun SalvoApiItem.navTo(project: Project) {
val navigationElement = rsMethodPsiElement.navigationElement
ApplicationManager.getApplication().invokeLater {
if (navigationElement != null && navigationElement is Navigatable && (navigationElement as Navigatable).canNavigate()) {
(navigationElement as Navigatable).navigate(true)
}else{
FileEditorManager.getInstance(project).openFile(rsMethodPsiElement.containingFile.virtualFile)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package shop.itbug.salvorstool.searcheverywhere

import com.intellij.ide.actions.searcheverywhere.SearchEverywhereContributor
import com.intellij.ide.actions.searcheverywhere.SearchEverywhereContributorFactory
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.project.Project
import com.intellij.util.Processor
import shop.itbug.salvorstool.model.SalvoApiItem
import shop.itbug.salvorstool.model.navTo
import shop.itbug.salvorstool.service.SalvoApiService
import shop.itbug.salvorstool.window.SalvoApiItemRender
import javax.swing.ListCellRenderer

class SalvoSearchApi : SearchEverywhereContributorFactory<SalvoApiItem> {

override fun createContributor(initEvent: AnActionEvent): SearchEverywhereContributor<SalvoApiItem> {
return MySearchEverywhereProvider(initEvent.project!!)
}

override fun isAvailable(project: Project?): Boolean {
return project != null
}

private inner class MySearchEverywhereProvider(val project: Project) : SearchEverywhereContributor<SalvoApiItem> {

var allApi: List<SalvoApiItem> = SalvoApiService.getInstance(project).getApiList()


override fun getSearchProviderId(): String {
return MySearchEverywhereProvider::class.java.name
}

override fun getGroupName(): String {
return "Salvo"
}

override fun getSortWeight(): Int {
return Integer.MAX_VALUE
}

override fun showInFindResults(): Boolean {
return true
}

override fun getElementsRenderer(): ListCellRenderer<in SalvoApiItem> {
return SalvoApiItemRender()
}

override fun getDataForItem(element: SalvoApiItem, dataId: String): Any? {
return null
}

override fun processSelectedItem(selected: SalvoApiItem, modifiers: Int, searchText: String): Boolean {
selected.navTo(project)
return true
}

override fun fetchElements(
pattern: String,
progressIndicator: ProgressIndicator,
consumer: Processor<in SalvoApiItem>
) {
val list = if (pattern.isEmpty()) allApi else allApi.filter { it.api.contains(pattern) }
list.forEach {
if (consumer.process(it).not()) {
return
}
}
}

override fun isShownInSeparateTab(): Boolean {
return true
}

}
}
Loading

0 comments on commit 6c7ea84

Please sign in to comment.