|
1 | | -import { isBlock, isBrsFile, isCallableType, isClassStatement, isClassType, isComponentType, isConstStatement, isEnumMemberType, isEnumType, isFunctionExpression, isInterfaceType, isMethodStatement, isNamespaceStatement, isNamespaceType, isNativeType, isXmlFile, isXmlScope } from '../../astUtils/reflection'; |
| 1 | +import { isBlock, isBrsFile, isCallableType, isClassStatement, isClassType, isComponentType, isConstStatement, isEnumMemberType, isEnumType, isFunctionExpression, isInterfaceType, isMethodStatement, isNamespaceStatement, isNamespaceType, isNativeType, isTypedFunctionType, isXmlFile, isXmlScope } from '../../astUtils/reflection'; |
2 | 2 | import type { FileReference, ProvideCompletionsEvent } from '../../interfaces'; |
3 | 3 | import type { BscFile } from '../../files/BscFile'; |
4 | 4 | import { AllowedTriviaTokens, DeclarableTypes, Keywords, TokenKind } from '../../lexer/TokenKind'; |
@@ -371,21 +371,31 @@ export class CompletionsProcessor { |
371 | 371 | private getCompletionKindFromSymbol(symbol: BscSymbol, areMembers = false) { |
372 | 372 | const type = symbol?.type; |
373 | 373 | const extraData = symbol?.data; |
| 374 | + const finalTypeNameLower = type?.toString().split('.').pop().toLowerCase(); |
| 375 | + const symbolNameLower = symbol?.name.toLowerCase(); |
| 376 | + let nameMatchesType = symbolNameLower === finalTypeNameLower; |
374 | 377 | if (isConstStatement(extraData?.definingNode)) { |
375 | 378 | return CompletionItemKind.Constant; |
376 | | - } else if (isClassType(type)) { |
| 379 | + } else if (isClassType(type) && nameMatchesType) { |
377 | 380 | return CompletionItemKind.Class; |
378 | 381 | } else if (isCallableType(type)) { |
379 | | - return areMembers ? CompletionItemKind.Method : CompletionItemKind.Function; |
380 | | - } else if (isInterfaceType(type)) { |
| 382 | + if (isTypedFunctionType(type) && !nameMatchesType) { |
| 383 | + if (symbolNameLower === type.name.replace(/\./gi, '_').toLowerCase()) { |
| 384 | + nameMatchesType = true; |
| 385 | + } |
| 386 | + } |
| 387 | + if (nameMatchesType) { |
| 388 | + return areMembers ? CompletionItemKind.Method : CompletionItemKind.Function; |
| 389 | + } |
| 390 | + } else if (isInterfaceType(type) && nameMatchesType) { |
381 | 391 | return CompletionItemKind.Interface; |
382 | | - } else if (isEnumType(type)) { |
| 392 | + } else if (isEnumType(type) && nameMatchesType) { |
383 | 393 | return CompletionItemKind.Enum; |
384 | 394 | } else if (isEnumMemberType(type)) { |
385 | 395 | return CompletionItemKind.EnumMember; |
386 | 396 | } else if (isNamespaceType(type)) { |
387 | 397 | return CompletionItemKind.Module; |
388 | | - } else if (isComponentType(type)) { |
| 398 | + } else if (isComponentType(type) && (nameMatchesType || symbolNameLower === 'rosgnode')) { |
389 | 399 | return CompletionItemKind.Interface; |
390 | 400 | } |
391 | 401 | if (areMembers) { |
|
0 commit comments