coc-ccls
Version:
C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting
59 lines (51 loc) • 1.53 kB
text/typescript
import { LanguageClient } from 'vscode-languageclient/lib/main';
import {
Position,
} from "vscode-languageserver-protocol";
import Uri from "vscode-uri";
import { IHierarchyNode } from '../types';
import { Hierarchy } from './hierarchy';
enum MemberKind {
Func = 3,
Var = 4,
}
interface MemberHierarchyNode extends IHierarchyNode {
children: MemberHierarchyNode[];
}
export class MemberHierarchyProvider extends Hierarchy<MemberHierarchyNode> {
protected contextValue: string = 'extension.ccls.memberHierarchyVisible';
constructor(
languageClient: LanguageClient
) {
super(languageClient, 'ccls.memberHierarchy', 'ccls.closeMemberHierarchy');
}
public onTreeItem(ti: TreeItem, element: MemberHierarchyNode) {
//
}
protected async onGetChildren(element: MemberHierarchyNode): Promise<MemberHierarchyNode[]> {
const result = await this.languageClient.sendRequest<MemberHierarchyNode>('$ccls/member', {
hierarchy: true,
id: element.id,
kind: MemberKind.Var,
levels: 1,
qualified: false,
});
element.children = result.children;
return result.children;
}
protected async onReveal(uri: Uri, position: Position): Promise<MemberHierarchyNode> {
return this.languageClient.sendRequest<MemberHierarchyNode>(
'$ccls/member',
{
hierarchy: true,
kind: MemberKind.Var,
levels: 2,
position,
qualified: false,
textDocument: {
uri: uri.toString(true),
},
}
);
}
}