tree-sitter / node-tree-sitter

Node.js bindings for tree-sitter
https://www.npmjs.com/package/tree-sitter
MIT License
663 stars 118 forks source link

[question] How to get the inheritance chain of an already obtained class? #218

Open liaodalin19903 opened 3 months ago

liaodalin19903 commented 3 months ago

I can use node-tree-sitter to get a class node:

const Parser = require("tree-sitter")
const JavaScript = require("tree-sitter-javascript");

const { Query } = Parser 

//#region 【JavaScript】

const parser = new Parser()
parser.setLanguage(JavaScript)

// 1.  .matches 

const query = new Query(
  JavaScript,
  `
    (class_declaration name: (identifier) @class-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')
  }
}

  `);
const matches = query.matches(tree.rootNode);

// I can get a special class node
console.log(matches[3].captures[0].node.text)  // Dog 

//#endregion

but how to get the inheritance chain of the special class([Dog, Animal, AnimalBase])?