diff --git a/preview/apitypes/apitypes.go b/preview/apitypes/apitypes.go index e2144b6..ae97500 100644 --- a/preview/apitypes/apitypes.go +++ b/preview/apitypes/apitypes.go @@ -65,6 +65,7 @@ type FriendlyDiagnostic = types.FriendlyDiagnostic type ParameterWithSource struct { types.Parameter TypeRange hcl.Range `json:"type_range"` + DefRange hcl.Range `json:"def_range"` } func WithSource(p []types.Parameter) []ParameterWithSource { @@ -76,6 +77,7 @@ func WithSource(p []types.Parameter) []ParameterWithSource { if param.Source != nil { src.TypeRange = param.Source.HCLBlock().TypeRange + src.DefRange = param.Source.HCLBlock().DefRange } result = append(result, src) diff --git a/public/build/preview.wasm b/public/build/preview.wasm index fb523a5..5b49051 100755 Binary files a/public/build/preview.wasm and b/public/build/preview.wasm differ diff --git a/src/client/Editor.tsx b/src/client/Editor.tsx index 38cf980..0e7d81b 100644 --- a/src/client/Editor.tsx +++ b/src/client/Editor.tsx @@ -39,6 +39,7 @@ export const Editor: FC = () => { const $code = useStore((state) => state.code); const $setCode = useStore((state) => state.setCode); + const $setEditor = useStore((state) => state.setEditor); const [codeCopied, setCodeCopied] = useState(() => false); const copyTimeoutId = useRef | undefined>( @@ -161,6 +162,7 @@ export const Editor: FC = () => {
$setEditor(editor)} onChange={(code) => { if (code !== undefined) { $setCode(code); diff --git a/src/client/Preview.tsx b/src/client/Preview.tsx index 96af017..388c52c 100644 --- a/src/client/Preview.tsx +++ b/src/client/Preview.tsx @@ -14,7 +14,7 @@ import { } from "@/client/diagnostics"; import { useDebouncedValue } from "@/client/hooks/debounce"; import { useStore } from "@/client/store"; -import type {Parameter, ParserLog, PreviewOutput} from "@/gen/types"; +import type { ParameterWithSource, ParserLog, PreviewOutput} from "@/gen/types"; import { cn } from "@/utils/cn"; import ReactJsonView from "@microlink/react-json-view"; import * as Dialog from "@radix-ui/react-dialog"; @@ -581,7 +581,7 @@ const Log: FC = ({ log }) => { ); }; -type FormProps = { parameters: Parameter[] }; +type FormProps = { parameters: ParameterWithSource[] }; const Form: FC = ({ parameters }) => { return parameters @@ -589,7 +589,7 @@ const Form: FC = ({ parameters }) => { .map((p, index) => ); }; -type FormElementProps = { parameter: Parameter }; +type FormElementProps = { parameter: ParameterWithSource }; const FormElement: FC = ({ parameter }) => { const $form = useStore((state) => state.form); const $setForm = useStore((state) => state.setFormState); diff --git a/src/client/components/DynamicParameter.tsx b/src/client/components/DynamicParameter.tsx index 8759200..2096c36 100644 --- a/src/client/components/DynamicParameter.tsx +++ b/src/client/components/DynamicParameter.tsx @@ -28,7 +28,11 @@ import { } from "@/client/components/Tooltip"; import { useDebouncedValue } from "@/client/hooks/debounce"; import { useEffectEvent } from "@/client/hooks/hookPolyfills"; -import type { NullHCLString, Parameter, ParameterOption } from "@/gen/types"; +import type { + NullHCLString, + ParameterWithSource as Parameter, + ParameterOption, +} from "@/gen/types"; import { CircleAlert, Info, @@ -38,6 +42,7 @@ import { } from "lucide-react"; import { type FC, useEffect, useId, useRef, useState } from "react"; import * as Yup from "yup"; +import { useStore } from "@/client/store"; interface WorkspaceBuildParameter { readonly name: string; @@ -121,6 +126,19 @@ const ParameterLabel: FC = ({ autofill, id, }) => { + const $editor = useStore((state) => state.editor); + + const onGoToDefinition = () => { + $editor?.revealLine(parameter.def_range.Start.Line); + $editor?.setSelection({ + startLineNumber: parameter.def_range.Start.Line, + startColumn: parameter.def_range.Start.Column, + endColumn: parameter.def_range.End.Column, + endLineNumber: parameter.def_range.End.Line, + }); + $editor?.focus() + }; + const displayName = parameter.display_name ? parameter.display_name : parameter.name; @@ -130,26 +148,17 @@ const ParameterLabel: FC = ({ return (
- { - // {parameter.icon && ( - // - // )} - }