mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-12 13:40:19 +07:00
WEB-70567 WebSymbols: properly support standard HTML attributes with enumerated values
(cherry picked from commit 1dd2997721d943b7a1c1d461a80a0eab6d68c4aa) IJ-CR-150932 GitOrigin-RevId: e3a549d20ecdbdfd1d738c91decc16464be91e2e
This commit is contained in:
committed by
intellij-monorepo-bot
parent
972970502f
commit
c2121af7a3
@@ -6,6 +6,7 @@ import com.intellij.html.webSymbols.attributes.WebSymbolAttributeDescriptor
|
||||
import com.intellij.html.webSymbols.elements.WebSymbolElementDescriptor
|
||||
import com.intellij.model.Pointer
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.NlsSafe
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.SmartPointerManager
|
||||
import com.intellij.psi.createSmartPointer
|
||||
@@ -17,6 +18,7 @@ import com.intellij.psi.xml.XmlTag
|
||||
import com.intellij.util.asSafely
|
||||
import com.intellij.util.containers.Stack
|
||||
import com.intellij.webSymbols.*
|
||||
import com.intellij.webSymbols.WebSymbol.Companion.HTML_ATTRIBUTE_VALUES
|
||||
import com.intellij.webSymbols.completion.WebSymbolCodeCompletionItem
|
||||
import com.intellij.webSymbols.completion.WebSymbolCodeCompletionItemCustomizer
|
||||
import com.intellij.webSymbols.context.WebSymbolsContext
|
||||
@@ -257,20 +259,30 @@ class WebSymbolsHtmlQueryConfigurator : WebSymbolsQueryConfigurator {
|
||||
override val attributeValue: WebSymbolHtmlAttributeValue
|
||||
get() {
|
||||
val isBooleanAttribute = HtmlUtil.isBooleanAttribute(descriptor, null)
|
||||
val isEnumerated = descriptor.isEnumerated
|
||||
return WebSymbolHtmlAttributeValue.create(
|
||||
null,
|
||||
if (isBooleanAttribute) {
|
||||
WebSymbolHtmlAttributeValue.Type.BOOLEAN
|
||||
}
|
||||
else {
|
||||
WebSymbolHtmlAttributeValue.Type.STRING
|
||||
when {
|
||||
isBooleanAttribute -> WebSymbolHtmlAttributeValue.Type.BOOLEAN
|
||||
isEnumerated -> WebSymbolHtmlAttributeValue.Type.ENUM
|
||||
else -> WebSymbolHtmlAttributeValue.Type.STRING
|
||||
},
|
||||
!isBooleanAttribute,
|
||||
descriptor.defaultValue,
|
||||
null
|
||||
null,
|
||||
)
|
||||
}
|
||||
|
||||
override fun getSymbols(
|
||||
qualifiedKind: WebSymbolQualifiedKind,
|
||||
params: WebSymbolsListSymbolsQueryParams,
|
||||
scope: Stack<WebSymbolsScope>,
|
||||
): List<WebSymbolsScope> =
|
||||
if (qualifiedKind == HTML_ATTRIBUTE_VALUES && descriptor.isEnumerated)
|
||||
descriptor.enumeratedValues?.map { HtmlAttributeValueSymbol(it) } ?: emptyList()
|
||||
else
|
||||
emptyList()
|
||||
|
||||
override fun createPointer(): Pointer<HtmlAttributeDescriptorBasedSymbol> {
|
||||
val descriptor = this.descriptor
|
||||
val tagPtr = tag?.createSmartPointer()
|
||||
@@ -316,5 +328,20 @@ class WebSymbolsHtmlQueryConfigurator : WebSymbolsQueryConfigurator {
|
||||
Pointer.hardPointer(this)
|
||||
|
||||
}
|
||||
|
||||
private class HtmlAttributeValueSymbol(override val name: @NlsSafe String) : WebSymbol {
|
||||
override val origin: WebSymbolOrigin
|
||||
get() = WebSymbolOrigin.empty()
|
||||
|
||||
override val namespace: @NlsSafe SymbolNamespace
|
||||
get() = WebSymbol.NAMESPACE_HTML
|
||||
|
||||
override val kind: @NlsSafe SymbolKind
|
||||
get() = WebSymbol.KIND_HTML_ATTRIBUTE_VALUES
|
||||
|
||||
override fun createPointer(): Pointer<HtmlAttributeValueSymbol> =
|
||||
Pointer.hardPointer(this)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user