-
-
Notifications
You must be signed in to change notification settings - Fork 147
Open
Description
How to query out all the properties and methods from a class?
I tried to match a class for getting all the properties and methods:
const Parser = require("tree-sitter")
const TypeScript = require("tree-sitter-typescript").typescript
const { Query } = Parser
const parser = new Parser()
parser.setLanguage(TypeScript)
/*
const query = new Query(
TypeScript,
`
(class_declaration
name: (identifier) @class-name
(class_heritage (extends_clause value: (identifier)))
)
`
);
*/
//(class_declaration name: (identifier) @class-name)
const query = new Query(
TypeScript,
`
(class_declaration
name: (type_identifier) @class-name
body: (class_body
(method_definition
name: (property_identifier) @the-method-name)))
`
);
const tree = parser.parse(`
class AnimalBase {
readonly skeleton: number
readonly blood: 'red' | 'blue' | 'transparent'
}
abstract class Animal extends AnimalBase {
readonly age: number = 0
abstract shout (): void
}
class Cat extends Animal {
shout() {
console.log('mew mew')
}
}
class Dog extends Animal {
shout() {
console.log('bark bark')
}
shout2() {
console.log('bark bark')
}
}
`);
const matches = query.matches(tree.rootNode);
//console.log(matches[1].captures[0].node.text) // Dog
console.log(matches[1].captures)
but I only get one class and one method:
[
{
name: 'class-name',
node: TypeIdentifierNode {
type: type_identifier,
startPosition: {row: 19, column: 6},
endPosition: {row: 19, column: 9},
childCount: 0,
}
},
{
name: 'the-method-name',
node: PropertyIdentifierNode {
type: property_identifier,
startPosition: {row: 20, column: 2},
endPosition: {row: 20, column: 7},
childCount: 0,
}
}
]
How to get the class Dog's all properties and methods?
ayjmax
Metadata
Metadata
Assignees
Labels
No labels