@@ -39,7 +39,7 @@ import {
3939
4040import { readNgCompletionData , tsCompletionEntryToLspCompletionItem } from './completion' ;
4141import { tsDiagnosticToLspDiagnostic } from './diagnostic' ;
42- import { getHTMLVirtualContent , getSCSSVirtualContent } from './embedded_support' ;
42+ import { getHTMLVirtualContent , getSCSSVirtualContent , isInlineStyleNode } from './embedded_support' ;
4343import { ServerHost } from './server_host' ;
4444import { documentationToMarkdown } from './text_render' ;
4545import {
@@ -1327,7 +1327,23 @@ export class Session {
13271327 const offset = lspPositionToTsPosition ( scriptInfo , params . position ) ;
13281328 const info = languageService . getQuickInfoAtPosition ( scriptInfo . fileName , offset ) ;
13291329 if ( ! info ) {
1330- return null ;
1330+ const sf = this . getDefaultProjectForScriptInfo ( scriptInfo ) ?. getSourceFile ( scriptInfo . path ) ;
1331+ if ( ! sf ) {
1332+ return null ;
1333+ }
1334+ const node = getTokenAtPosition ( sf , offset ) ;
1335+ if ( ! isInlineStyleNode ( node ) ) {
1336+ return null ;
1337+ }
1338+ const virtualScssDocContents = getSCSSVirtualContent ( sf ) ;
1339+ const virtualScssDoc = TextDocument . create (
1340+ params . textDocument . uri . toString ( ) ,
1341+ 'scss' ,
1342+ 0 ,
1343+ virtualScssDocContents ,
1344+ ) ;
1345+ const stylesheet = scssLS . parseStylesheet ( virtualScssDoc ) ;
1346+ return scssLS . doHover ( virtualScssDoc , params . position , stylesheet ) ;
13311347 }
13321348 const { kind, kindModifiers, textSpan, displayParts, documentation, tags} = info ;
13331349 let desc = kindModifiers ? kindModifiers + ' ' : '' ;
@@ -1668,3 +1684,16 @@ function generateCommandAndTextEditsFromCodeActions(
16681684 additionalTextEdits : additionalTextEdits . length ? additionalTextEdits : undefined ,
16691685 } ;
16701686}
1687+
1688+ function getTokenAtPosition ( sourceFile : ts . SourceFile , position : number ) : ts . Node {
1689+ let current : ts . Node = sourceFile ;
1690+ while ( true ) {
1691+ const child = current
1692+ . getChildren ( sourceFile )
1693+ . find ( ( c ) => c . getStart ( sourceFile ) <= position && c . getEnd ( ) > position ) ;
1694+ if ( ! child || child . kind === ts . SyntaxKind . EndOfFileToken ) {
1695+ return current ;
1696+ }
1697+ current = child ;
1698+ }
1699+ }
0 commit comments