diff --git a/xml/xml-psi-impl/src/com/intellij/html/webSymbols/WebSymbolsHtmlQueryConfigurator.kt b/xml/xml-psi-impl/src/com/intellij/html/webSymbols/WebSymbolsHtmlQueryConfigurator.kt index e22642dcc064..601d53562d28 100644 --- a/xml/xml-psi-impl/src/com/intellij/html/webSymbols/WebSymbolsHtmlQueryConfigurator.kt +++ b/xml/xml-psi-impl/src/com/intellij/html/webSymbols/WebSymbolsHtmlQueryConfigurator.kt @@ -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, + ): List = + if (qualifiedKind == HTML_ATTRIBUTE_VALUES && descriptor.isEnumerated) + descriptor.enumeratedValues?.map { HtmlAttributeValueSymbol(it) } ?: emptyList() + else + emptyList() + override fun createPointer(): Pointer { 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 = + Pointer.hardPointer(this) + + } }