Giter VIP home page Giter VIP logo

Comments (1)

ams1 avatar ams1 commented on August 27, 2024

Hi, me again 😄

In the meantime I found a way (not sure if it's the best) using an extension and the following commands from https://code.visualstudio.com/api/references/commands:

vscode.prepareCallHierarchy - Prepare call hierarchy at a position inside a document

  • uri - Uri of a text document
  • position - A position in a text document
  • (returns) - A promise that resolves to an array of CallHierarchyItem-instances

vscode.provideIncomingCalls - Compute incoming calls for an item

  • item - A call hierarchy item
  • (returns) - A promise that resolves to an array of CallHierarchyIncomingCall-instances

vscode.provideOutgoingCalls - Compute outgoing calls for an item

  • item - A call hierarchy item
  • (returns) - A promise that resolves to an array of CallHierarchyOutgoingCall-instances

A working snippet (maybe it helps others).

import * as vscode from 'vscode';

async function logOutgoingCalls(item: vscode.CallHierarchyItem) {
	const outgoingCalls: vscode.CallHierarchyOutgoingCall[] = await vscode.commands.executeCommand('vscode.provideOutgoingCalls', item);

	// iterate over outgoingCalls
	for (const outgoingCall of outgoingCalls) {
		console.log(item.name, '-[:invokes]->', outgoingCall.to.name);

		// recursively log outgoing calls
		// TODO: handle cycles
		await logOutgoingCalls(outgoingCall.to);
	}
}

async function logIncomingCalls(item: vscode.CallHierarchyItem) {
	const incomingCalls: vscode.CallHierarchyIncomingCall[] = await vscode.commands.executeCommand('vscode.provideIncomingCalls', item);

	// iterate over incomingCalls
	for (const incomingCall of incomingCalls) {
		console.log(incomingCall.from.name, '-[:invokes]->', item.name);

		// recursively log incoming calls
		// TODO: handle cycles
		await logIncomingCalls(incomingCall.from);
	}
}

export function activate(context: vscode.ExtensionContext) {
	console.log('Congratulations, your extension is now active!');

	let disposable = vscode.commands.registerCommand('extension.logCallHierarchy', async () => {
		if (vscode.window.activeTextEditor) {
			const position = vscode.window.activeTextEditor.selection.active;
			const uri = vscode.window.activeTextEditor.document.uri;

			const items: vscode.CallHierarchyItem[] = await vscode.commands.executeCommand('vscode.prepareCallHierarchy', uri, position);
			if (items) {
				for (const item of items) {

					// log incoming calls
					console.log('Incoming calls of ', item.name);
					await logIncomingCalls(item);

					// log outgoing calls
					console.log('Outgoing calls of ', item.name);
					await logOutgoingCalls(item);
				}
			}
		}
	});

	context.subscriptions.push(disposable);

	let statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 100);
	statusBarItem.command = 'extension.logCallHierarchy';
	statusBarItem.text = "Log Call Hierarchy";
	statusBarItem.show();
	context.subscriptions.push(statusBarItem);
}

export function deactivate() { }

From my point of view this can be closed - thank you.

from vscode-languageserver-node.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.