diff --git a/packages/trace-viewer/src/ui/copyToClipboard.tsx b/packages/trace-viewer/src/ui/copyToClipboard.tsx index 96de5f3822..2c5d21aa0d 100644 --- a/packages/trace-viewer/src/ui/copyToClipboard.tsx +++ b/packages/trace-viewer/src/ui/copyToClipboard.tsx @@ -18,7 +18,8 @@ import * as React from 'react'; export const CopyToClipboard: React.FunctionComponent<{ value: string, -}> = ({ value }) => { + description?: string, +}> = ({ value, description }) => { const [iconClassName, setIconClassName] = React.useState('codicon-clippy'); const handleCopy = React.useCallback(() => { @@ -32,5 +33,5 @@ export const CopyToClipboard: React.FunctionComponent<{ }); }, [value]); - return ; -}; + return ; +}; \ No newline at end of file diff --git a/packages/trace-viewer/src/ui/sourceTab.css b/packages/trace-viewer/src/ui/sourceTab.css index 17e66460f4..e4e43d80b6 100644 --- a/packages/trace-viewer/src/ui/sourceTab.css +++ b/packages/trace-viewer/src/ui/sourceTab.css @@ -31,3 +31,13 @@ box-shadow: var(--vscode-scrollbar-shadow) 0 6px 6px -6px; z-index: 10; } + +.source-tab-file-name .copy-icon.codicon { + display: block; + cursor: pointer; +} + +.source-copy-to-clipboard { + display: block; + padding-left: 4px; +} \ No newline at end of file diff --git a/packages/trace-viewer/src/ui/sourceTab.tsx b/packages/trace-viewer/src/ui/sourceTab.tsx index a3acad64a2..f8952849cb 100644 --- a/packages/trace-viewer/src/ui/sourceTab.tsx +++ b/packages/trace-viewer/src/ui/sourceTab.tsx @@ -23,6 +23,7 @@ import { CodeMirrorWrapper } from '@web/components/codeMirrorWrapper'; import type { SourceHighlight } from '@web/components/codeMirrorWrapper'; import type { SourceLocation, SourceModel } from './modelUtil'; import type { StackFrame } from '@protocol/channels'; +import { CopyToClipboard } from './copyToClipboard'; export const SourceTab: React.FunctionComponent<{ stack: StackFrame[] | undefined, @@ -82,7 +83,14 @@ export const SourceTab: React.FunctionComponent<{ return
- {fileName &&
{fileName}
} + {fileName && ( +
+ {fileName} + + + +
+ )}
@@ -100,3 +108,11 @@ export async function calculateSha1(text: string): Promise { } return hexCodes.join(''); } + +function getFileName(fullPath?: string, lineNum?: number): string { + if (!fullPath) + return ''; + const pathSep = fullPath?.includes('/') ? '/' : '\\'; + const fileName = fullPath?.split(pathSep).pop() ?? ''; + return lineNum ? `${fileName}:${lineNum}` : fileName; +}