mirror of
https://github.com/bendtherules/completion-viz.git
synced 2026-08-18 13:42:51 +00:00
refactor(misc): Use hook version of completionMapping and sourceMapping everywhere
Also stopped exporting the mappings directly from respective files to enforce this
This commit is contained in:
+2
-3
@@ -3,8 +3,7 @@ import React, { useState } from "react";
|
|||||||
import { SourceViewer } from "./components/SourceViewer";
|
import { SourceViewer } from "./components/SourceViewer";
|
||||||
import { CompletionViewer } from "./components/CompletionViewer";
|
import { CompletionViewer } from "./components/CompletionViewer";
|
||||||
|
|
||||||
import { completionMapping } from "./logic/completionMapping";
|
import { useCompletionMapping } from "./logic/completionMapping";
|
||||||
import { sourceMapping } from "./logic/sourceMapping";
|
|
||||||
import { runEngine } from "./logic/runEngine";
|
import { runEngine } from "./logic/runEngine";
|
||||||
|
|
||||||
import "./tailwind.output.css";
|
import "./tailwind.output.css";
|
||||||
@@ -15,6 +14,7 @@ World!\`; abc()`;
|
|||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const [inputCode, setInputCode] = useState<string>(sampleInputCode);
|
const [inputCode, setInputCode] = useState<string>(sampleInputCode);
|
||||||
|
const completionMapping = useCompletionMapping();
|
||||||
|
|
||||||
// useLayoutEffect(() => {
|
// useLayoutEffect(() => {
|
||||||
runEngine(inputCode);
|
runEngine(inputCode);
|
||||||
@@ -31,7 +31,6 @@ function App() {
|
|||||||
<CompletionViewer
|
<CompletionViewer
|
||||||
code={inputCode}
|
code={inputCode}
|
||||||
completionDetails={completionMapping.completionDetails}
|
completionDetails={completionMapping.completionDetails}
|
||||||
sourceMapping={sourceMapping}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,18 +1,14 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { ICompletionDetail } from "../../logic/completionMapping";
|
import { ICompletionDetail } from "../../logic/completionMapping";
|
||||||
import { TSourceMapping } from "../../logic/sourceMapping";
|
|
||||||
|
|
||||||
import { CompletionCardFull } from "../CompletionCard";
|
import { CompletionCardFull } from "../CompletionCard";
|
||||||
|
|
||||||
export function CompletionViewer(props: {
|
export function CompletionViewer(props: {
|
||||||
code: string;
|
code: string;
|
||||||
completionDetails: ICompletionDetail[];
|
completionDetails: ICompletionDetail[];
|
||||||
sourceMapping: TSourceMapping;
|
|
||||||
}) {
|
}) {
|
||||||
const { code, completionDetails } = props;
|
const { code, completionDetails } = props;
|
||||||
|
|
||||||
// function renderCompletionResult(inputCompletion: ICompletionDetail) {}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="">
|
<div className="">
|
||||||
{/* Title for completion section */}
|
{/* Title for completion section */}
|
||||||
|
|||||||
@@ -8,16 +8,17 @@ import {
|
|||||||
Token,
|
Token,
|
||||||
} from "../../types/prism-types";
|
} from "../../types/prism-types";
|
||||||
|
|
||||||
import { sourceMapping } from "../../logic/sourceMapping";
|
import { TSourceMapping, useSourceMapping } from "../../logic/sourceMapping";
|
||||||
import {
|
import {
|
||||||
useCompletionMapping,
|
useCompletionMapping,
|
||||||
ICompletionDetail,
|
ICompletionDetail,
|
||||||
ICompletionMapping,
|
TCompletionMapping,
|
||||||
} from "../../logic/completionMapping";
|
} from "../../logic/completionMapping";
|
||||||
|
|
||||||
function getCompletionFromSourceToken(
|
function getCompletionFromSourceToken(
|
||||||
matcheeToken: Token,
|
matcheeToken: Token,
|
||||||
completionMapping: ICompletionMapping
|
completionMapping: TCompletionMapping,
|
||||||
|
sourceMapping: TSourceMapping
|
||||||
): ICompletionDetail | null {
|
): ICompletionDetail | null {
|
||||||
const matchingSourceDetails = sourceMapping.mappingArray.find(
|
const matchingSourceDetails = sourceMapping.mappingArray.find(
|
||||||
({ token: tmpToken }) => matcheeToken === tmpToken
|
({ token: tmpToken }) => matcheeToken === tmpToken
|
||||||
@@ -72,7 +73,9 @@ function PreRenderer({
|
|||||||
getLineProps,
|
getLineProps,
|
||||||
getTokenProps,
|
getTokenProps,
|
||||||
}: IPreRendererProps) {
|
}: IPreRendererProps) {
|
||||||
|
const sourceMapping = useSourceMapping();
|
||||||
sourceMapping.reset();
|
sourceMapping.reset();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<pre className={`${className} px-4 py-2 overflow-auto`} style={style}>
|
<pre className={`${className} px-4 py-2 overflow-auto`} style={style}>
|
||||||
{tokens.map((line, i) => (
|
{tokens.map((line, i) => (
|
||||||
@@ -123,6 +126,7 @@ function TokenRenderer({
|
|||||||
getTokenProps,
|
getTokenProps,
|
||||||
}: ITokenRendererProps) {
|
}: ITokenRendererProps) {
|
||||||
const completionMapping = useCompletionMapping();
|
const completionMapping = useCompletionMapping();
|
||||||
|
const sourceMapping = useSourceMapping();
|
||||||
|
|
||||||
const refFn = sourceMapping.registerToken(token);
|
const refFn = sourceMapping.registerToken(token);
|
||||||
if (isLastTokenInLine) {
|
if (isLastTokenInLine) {
|
||||||
@@ -132,7 +136,8 @@ function TokenRenderer({
|
|||||||
const onClickToken = (tmpToken: Token) => {
|
const onClickToken = (tmpToken: Token) => {
|
||||||
const matchingCompletion = getCompletionFromSourceToken(
|
const matchingCompletion = getCompletionFromSourceToken(
|
||||||
tmpToken,
|
tmpToken,
|
||||||
completionMapping
|
completionMapping,
|
||||||
|
sourceMapping
|
||||||
);
|
);
|
||||||
if (matchingCompletion !== null) {
|
if (matchingCompletion !== null) {
|
||||||
console.log(
|
console.log(
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ export interface ICompletionDetail {
|
|||||||
completionValue: any;
|
completionValue: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ICompletionMapping {
|
export interface TCompletionMapping {
|
||||||
completionDetails: ICompletionDetail[];
|
completionDetails: ICompletionDetail[];
|
||||||
addCompletion(_: { node: Node; result: CompletionRecord }): void;
|
addCompletion(_: { node: Node; result: CompletionRecord }): void;
|
||||||
reset(): void;
|
reset(): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const completionMapping: ICompletionMapping = {
|
const completionMapping: TCompletionMapping = {
|
||||||
completionDetails: [],
|
completionDetails: [],
|
||||||
addCompletion({ node, result }) {
|
addCompletion({ node, result }) {
|
||||||
const { start, end } = node;
|
const { start, end } = node;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export interface TSourceMapping {
|
|||||||
getElementsInRange(start: number, end: number): HTMLElement[];
|
getElementsInRange(start: number, end: number): HTMLElement[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export const sourceMapping: TSourceMapping = {
|
const sourceMapping: TSourceMapping = {
|
||||||
mappingArray: [],
|
mappingArray: [],
|
||||||
lastEnd: 0,
|
lastEnd: 0,
|
||||||
registerToken(t: Token) {
|
registerToken(t: Token) {
|
||||||
|
|||||||
Reference in New Issue
Block a user