@@ -466,15 +466,18 @@ export default class Analyzer {
466466
467467 const typeOfDescendants =
468468 kind === LSP . SymbolKind . Variable
469- ? 'variable_name'
469+ ? [ 'variable_name' , 'word' ]
470470 : [ 'function_definition' , 'command_name' ]
471471 const startPosition = start
472472 ? { row : start . line , column : start . character }
473473 : baseNode . startPosition
474474
475475 const ignoredRanges : LSP . Range [ ] = [ ]
476476 const filterVariables = ( n : Parser . SyntaxNode ) => {
477- if ( n . text !== word ) {
477+ if (
478+ n . text !== word ||
479+ ( n . type === 'word' && ! TreeSitterUtil . isVariableInReadCommand ( n ) )
480+ ) {
478481 return false
479482 }
480483
@@ -510,11 +513,14 @@ export default class Analyzer {
510513
511514 const declarationCommand = TreeSitterUtil . findParentOfType ( n , 'declaration_command' )
512515 const isLocal =
513- ( definedVariable ?. text === word || ! ! ( ! definition && declarationCommand ) ) &&
514- ( parent . type === 'subshell' ||
515- [ 'local' , 'declare' , 'typeset' ] . includes (
516- declarationCommand ?. firstChild ?. text as any ,
517- ) )
516+ // Local `variable_name`s
517+ ( ( definedVariable ?. text === word || ! ! ( ! definition && declarationCommand ) ) &&
518+ ( parent . type === 'subshell' ||
519+ [ 'local' , 'declare' , 'typeset' ] . includes (
520+ declarationCommand ?. firstChild ?. text as any ,
521+ ) ) ) ||
522+ // Local variables within `read` command that are typed as `word`
523+ ( parent . type === 'subshell' && n . type === 'word' )
518524 if ( isLocal ) {
519525 if ( includeDeclaration ) {
520526 ignoredRanges . push ( TreeSitterUtil . range ( parent ) )
0 commit comments