β¬ οΈ Back to Table of Contents
π ASTViewer¶
π Analysis Summary¶
| Metric | Count |
|---|---|
| π§ Functions | 2 |
| π¦ Imports | 10 |
| π JSX Elements | 3 |
| π Interfaces | 1 |
π Table of Contents¶
π οΈ File Location:¶
π packages/website/src/components/ast/ASTViewer.tsx
π¦ Imports¶
| Name | Source |
|---|---|
useEffect |
react |
useMemo |
react |
React |
react |
OnHoverNodeFn |
./types |
CopyButton |
../inputs/CopyButton |
debounce |
../lib/debounce |
scrollIntoViewIfNeeded |
../lib/scroll-into |
styles |
./ASTViewer.module.css |
DataRender |
./DataRenderer |
findSelectionPath |
./selectedRange |
JSX Elements¶
| Component | Type | Props | Children |
|---|---|---|---|
div |
element | className={styles.list} | |
DataRender |
component | lastElement={true}, level="ast", onHover={onHoverNode}, selectedPath={selecte... | none |
CopyButton |
component | value={model} | none |
Functions¶
tryToApplyFilter(value: T, filter: ESQuery.Selector): T | T[]¶
Parameters:
valueTfilterESQuery.Selector
Returns: T | T[]
Calls:
window.esquery.matchconsole.error
Internal Comments:
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
// @ts-expect-error - esquery requires js ast types
Code
function tryToApplyFilter<T>(value: T, filter?: ESQuery.Selector): T | T[] {
try {
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (window.esquery && filter) {
// @ts-expect-error - esquery requires js ast types
return window.esquery.match(value, filter, {
visitorKeys: window.visitorKeys,
});
}
} catch (e: unknown) {
console.error(e);
}
return value;
}
ASTViewer({ cursorPosition, enableScrolliβ¦: ASTViewerProps): React.JSX.Element¶
Parameters:
{ cursorPosition, enableScrolling, filter, hideCopyButton, onHoverNode, showTokens, value, }ASTViewerProps
Returns: React.JSX.Element
Calls:
useMemo (from react)tryToApplyFilterfindSelectionPath(model, cursorPosition).path.joinuseEffect (from react)debounce (from ../lib/debounce)document.querySelectorscrollIntoViewIfNeeded (from ../lib/scroll-into)delayed
Code
function ASTViewer({
cursorPosition,
enableScrolling,
filter,
hideCopyButton,
onHoverNode,
showTokens,
value,
}: ASTViewerProps): React.JSX.Element {
const model = useMemo(() => {
if (filter) {
return tryToApplyFilter(value, filter);
}
return value;
}, [value, filter]);
const selectedPath = useMemo(() => {
if (cursorPosition == null || !model || typeof model !== 'object') {
return 'ast';
}
return findSelectionPath(model, cursorPosition).path.join('.');
}, [cursorPosition, model]);
useEffect(() => {
if (enableScrolling) {
const delayed = debounce(() => {
const htmlElement = document.querySelector(
`div[data-level="${selectedPath}"] > a`,
);
if (htmlElement) {
scrollIntoViewIfNeeded(htmlElement);
}
}, 100);
delayed();
}
}, [selectedPath, enableScrolling]);
return (
<div className={styles.list}>
<DataRender
lastElement={true}
level="ast"
onHover={onHoverNode}
selectedPath={selectedPath}
showTokens={showTokens}
value={model}
/>
{!hideCopyButton && <CopyButton value={model} />}
</div>
);
}
Interfaces¶
ASTViewerProps¶
Interface Code
Properties¶
| Name | Type | Optional | Description |
|---|---|---|---|
cursorPosition |
number |
β | not shown |
enableScrolling |
boolean |
β | not shown |
filter |
ESQuery.Selector |
β | not shown |
hideCopyButton |
boolean |
β | not shown |
onHoverNode |
OnHoverNodeFn |
β | not shown |
showTokens |
boolean |
β | not shown |
value |
unknown |
β | not shown |
Generated by Syntax Scribe