Skip to content

Commit 9dfbab5

Browse files
committed
Merge branch 'main' into feature/fastapi-alternatesyntax-support
2 parents 07e77f6 + 3b30d4a commit 9dfbab5

32 files changed

+584
-1439
lines changed

images/target.png

38.5 KB
Loading

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "digma",
33
"displayName": "Digma Continuous Feedback",
44
"description": "Code insights and Observability for OpenTelemetry. .NET, Python, more coming soon.",
5-
"version": "0.5.20",
5+
"version": "0.5.22",
66
"publisher": "digma",
77
"icon": "digma.png",
88
"engines": {
@@ -78,16 +78,6 @@
7878
"id": "context",
7979
"name": "Context"
8080
},
81-
{
82-
"type": "webview",
83-
"id": "errorFlowList",
84-
"name": "Error Flows List"
85-
},
86-
{
87-
"type": "webview",
88-
"id": "errorFlowDetails",
89-
"name": "Error Flow Details"
90-
},
9181
{
9282
"type": "webview",
9383
"id": "codeAnalytics",

src/analiticsCodeLens.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import * as vscode from 'vscode';
2-
import { SymbolProvider, trendToCodIcon } from './services/languages/symbolProvider';
3-
import { ErrorFlowListView } from './views/errorFlow/errorFlowListView';
4-
import { AnalyticsProvider, EndpointCodeObjectSummary, MethodCodeObjectSummary } from './services/analyticsProvider';
2+
import { EndpointCodeObjectSummary, MethodCodeObjectSummary } from './services/analyticsProvider';
53
import { Settings } from './settings';
64
import { DocumentInfoProvider, MethodInfo } from './services/documentInfoProvider';
75
import { CodeAnalyticsView } from './views/codeAnalytics/codeAnalyticsView';

src/views/errorFlow/errorFlowParameterDecorator.ts renamed to src/decorators/errorFlowParameterDecorator.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import * as vscode from 'vscode';
2-
import { ErrorFlowResponse, ParamStats } from '../../services/analyticsProvider';
3-
import { IParameter, ParameterDecorator } from "../../services/parameterDecorator";
4-
import { DocumentInfoProvider, ParameterInfo } from '../../services/documentInfoProvider';
5-
import { ErrorFlowStackViewModel } from '../codeAnalytics/errorFlowStackRenderer';
2+
import { ErrorFlowResponse, ParamStats } from '../services/analyticsProvider';
3+
import { IParameter, ParameterDecorator } from "../services/parameterDecorator";
4+
import { DocumentInfoProvider, ParameterInfo } from '../services/documentInfoProvider';
5+
import { ErrorFlowStackViewModel } from '../views/codeAnalytics/errorFlowStackRenderer';
66

77
export class ErrorFlowParameterDecorator extends ParameterDecorator<IParameter>
88
{

src/extension.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import { AnalyticsProvider} from './services/analyticsProvider';
44
import { SymbolProvider } from './services/languages/symbolProvider';
55
import { PythonLanguageExtractor } from "./services/languages/python/languageExtractor";
66
import { CSharpLanguageExtractor } from './services/languages/csharp/languageExtractor';
7-
import { ErrorFlowStackView } from './views/errorFlow/errorFlowStackView';
8-
import { ErrorFlowListView } from './views/errorFlow/errorFlowListView';
97
import { ContextView } from './views/contextView';
108
import { Settings } from './settings';
119
import { SourceControl, Git } from './services/sourceControl';
@@ -15,7 +13,8 @@ import { CodeAnalyticsView } from './views/codeAnalytics/codeAnalyticsView';
1513
import { ErrorsLineDecorator } from './decorators/errorsLineDecorator';
1614
import { HotspotMarkerDecorator } from './decorators/hotspotMarkerDecorator';
1715
import { EditorHelper } from './services/EditorHelper';
18-
import { CodeInvestigator } from './services/codeInvestigator';
16+
import { CodeInspector } from './services/codeInspector';
17+
import { VsCodeDebugInstrumentation } from './instrumentation/vscodeInstrumentation';
1918

2019
export async function activate(context: vscode.ExtensionContext)
2120
{
@@ -27,8 +26,8 @@ export async function activate(context: vscode.ExtensionContext)
2726
new Git()
2827
];
2928
const sourceControl = new SourceControl(supportedSourceControls);
30-
const codeInvestigator = new CodeInvestigator();
31-
const symbolProvider = new SymbolProvider(supportedLanguages, codeInvestigator);
29+
const codeInspector = new CodeInspector();
30+
const symbolProvider = new SymbolProvider(supportedLanguages, codeInspector);
3231
const analyticsProvider = new AnalyticsProvider();
3332
const documentInfoProvider = new DocumentInfoProvider(analyticsProvider, symbolProvider);
3433
const editorHelper = new EditorHelper(sourceControl, documentInfoProvider);
@@ -41,16 +40,14 @@ export async function activate(context: vscode.ExtensionContext)
4140
}
4241
context.subscriptions.push(new AnaliticsCodeLens(documentInfoProvider));
4342
context.subscriptions.push(new ContextView(analyticsProvider, context.extensionUri));
44-
//context.subscriptions.push(new ErrorFlowListView(analyticsProvider, context.extensionUri));
45-
// context.subscriptions.push(new ErrorFlowStackView(documentInfoProvider, editorHelper, context.extensionUri));
46-
//context.subscriptions.push(new ErrorFlowRawStackEditor());
47-
context.subscriptions.push(new MethodCallErrorTooltip(documentInfoProvider, codeInvestigator));
43+
context.subscriptions.push(new MethodCallErrorTooltip(documentInfoProvider, codeInspector));
4844
context.subscriptions.push(sourceControl);
4945
context.subscriptions.push(documentInfoProvider);
5046
context.subscriptions.push(new CodeAnalyticsView(analyticsProvider, documentInfoProvider,
5147
context.extensionUri, editorHelper));
5248
context.subscriptions.push(new ErrorsLineDecorator(documentInfoProvider));
5349
context.subscriptions.push(new HotspotMarkerDecorator(documentInfoProvider));
50+
context.subscriptions.push(new VsCodeDebugInstrumentation(analyticsProvider));
5451

5552
}
5653

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { NONAME } from 'dns';
2+
import * as vscode from 'vscode';
3+
import { Disposable } from 'vscode-languageclient';
4+
import { AnalyticsProvider } from '../services/analyticsProvider';
5+
6+
export class VsCodeDebugInstrumentation implements vscode.Disposable{
7+
8+
private eventRegistration : Disposable;
9+
10+
constructor(private _analyticsProvider: AnalyticsProvider){
11+
12+
this.eventRegistration = vscode.debug.registerDebugAdapterTrackerFactory('*', {
13+
createDebugAdapterTracker(session: vscode.DebugSession) {
14+
return {
15+
onWillReceiveMessage: m => {
16+
},
17+
onDidSendMessage:
18+
m => {
19+
if (m.event ==='continued'){
20+
console.log('continued');
21+
_analyticsProvider.sendInsturmentationEvent(1);
22+
}
23+
if (m.event==='stopped'){
24+
_analyticsProvider.sendInsturmentationEvent(0);
25+
}
26+
}
27+
};
28+
}
29+
});
30+
31+
}
32+
dispose() {
33+
if (this.eventRegistration){
34+
this.eventRegistration.dispose();
35+
}
36+
}
37+
38+
39+
}
40+
41+

src/services/EditorHelper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export class EditorHelper {
4141
{
4242
let doc: vscode.TextDocument | undefined = undefined;
4343

44-
if(!await utils.fileExits(workspaceUri))
44+
if(!await utils.fileExists(workspaceUri))
4545
{
4646
doc = await this.askAndOpenFromSourceControl(editorInfo);
4747
}

src/services/analyticsProvider.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import { Logger } from "./logger";
66
import { Dictionary, momentJsDateParser } from "./utils";
77
import moment = require("moment");
88
import { integer } from "vscode-languageclient";
9+
import * as os from 'os';
10+
911

1012
export enum Impact
1113
{
@@ -349,6 +351,25 @@ export class AnalyticsProvider
349351
}
350352
return;
351353
}
354+
355+
public async sendInsturmentationEvent(event:integer): Promise<undefined>
356+
{
357+
try
358+
{
359+
const timestamp = Date.now().toString();
360+
const response = await this.send<undefined>(
361+
'POST',
362+
`/CodeAnalytics/instrumentation/event`,
363+
undefined,
364+
{event: event.toString(), machineName: os.hostname(),timestamp:timestamp });
365+
366+
return response;
367+
}
368+
catch(error){
369+
Logger.error('Failed to get error flow', error);
370+
}
371+
return;
372+
}
352373

353374

354375
private async send<TResponse>(method: string, relativePath: string, queryParams?: Dictionary<string, any>, body?: any): Promise<TResponse>
Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import * as vscode from 'vscode';
22

3-
import { DocumentInfoProvider, MethodInfo } from "./documentInfoProvider";
4-
import { Token, SymbolProvider } from './languages/symbolProvider';
3+
import { DocumentInfoProvider, MethodInfo } from './documentInfoProvider';
4+
import { SymbolProvider, SymbolTree } from './languages/symbolProvider';
5+
import { Token, TokenType } from './languages/tokens';
56

67
export interface Definition {
78
document: vscode.TextDocument
@@ -12,7 +13,7 @@ export type DefinitionWithTokens = Definition & {
1213
tokens: Token[]
1314
};
1415

15-
export class CodeInvestigator {
16+
export class CodeInspector {
1617

1718
public async getExecuteDefinitionMethodInfo(
1819
usageDocument: vscode.TextDocument,
@@ -63,4 +64,51 @@ export class CodeInvestigator {
6364
location,
6465
};
6566
}
67+
68+
public * getAllSymbolsOfKind(symbolTrees: SymbolTree[] | undefined, kind: vscode.SymbolKind): Generator<SymbolTree> {
69+
if(!symbolTrees) {
70+
return;
71+
}
72+
73+
for (const symbolTree of symbolTrees) {
74+
if(symbolTree.kind === kind) {
75+
yield symbolTree;
76+
}
77+
yield * this.getAllSymbolsOfKind(symbolTree.children as SymbolTree[] | undefined, kind);
78+
}
79+
}
80+
81+
public async derivesFrom(
82+
definition: DefinitionWithTokens,
83+
ancestorName: string,
84+
symbolProvider: SymbolProvider,
85+
findParentToken: (tokens: Token[], position: vscode.Position) => Token | undefined,
86+
): Promise<boolean> {
87+
const parentToken = findParentToken(definition.tokens, definition.location.range.start);
88+
if(!parentToken) {
89+
return false;
90+
}
91+
92+
if(parentToken.text === ancestorName) {
93+
return true;
94+
}
95+
96+
const parentInfo = await this.getTokensFromSymbolProvider(definition.document, parentToken.range.start, symbolProvider);
97+
if(!parentInfo) {
98+
return false;
99+
}
100+
101+
const parentSymbolTree = await symbolProvider.getSymbolTree(parentInfo.document);
102+
if(!parentSymbolTree) {
103+
return false;
104+
}
105+
106+
const parentDerivesFromAncestor = this.derivesFrom(
107+
parentInfo,
108+
ancestorName,
109+
symbolProvider,
110+
findParentToken,
111+
);
112+
return parentDerivesFromAncestor;
113+
}
66114
}

0 commit comments

Comments
 (0)