Skip to content

Commit 7770acc

Browse files
Add editor LSP display toggles
Expose inlay hints, code lens, and semantic tokens as editor settings and command palette toggles.
1 parent 99b7d58 commit 7770acc

9 files changed

Lines changed: 169 additions & 9 deletions

File tree

src/features/command-palette/components/command-palette.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,16 @@ const CommandPaletteContent = ({ commandPaletteInitialView }: CommandPaletteCont
136136
const autoDetectLanguage = useSettingsStore((state) => state.settings.autoDetectLanguage);
137137
const autoSave = useSettingsStore((state) => state.settings.autoSave);
138138
const compactMenuBar = useSettingsStore((state) => state.settings.compactMenuBar);
139+
const codeLens = useSettingsStore((state) => state.settings.codeLens);
139140
const coreFeatures = useSettingsStore((state) => state.settings.coreFeatures);
140141
const formatOnSave = useSettingsStore((state) => state.settings.formatOnSave);
141142
const iconTheme = useSettingsStore((state) => state.settings.iconTheme);
143+
const inlayHints = useSettingsStore((state) => state.settings.inlayHints);
142144
const isAIChatVisible = useSettingsStore((state) => state.settings.isAIChatVisible);
143145
const lineNumbers = useSettingsStore((state) => state.settings.lineNumbers);
144146
const nativeMenuBar = useSettingsStore((state) => state.settings.nativeMenuBar);
145147
const parameterHints = useSettingsStore((state) => state.settings.parameterHints);
148+
const semanticTokens = useSettingsStore((state) => state.settings.semanticTokens);
146149
const showGitHubActions = useSettingsStore((state) => state.settings.showGitHubActions);
147150
const showGitHubIssues = useSettingsStore((state) => state.settings.showGitHubIssues);
148151
const showGitHubPullRequests = useSettingsStore((state) => state.settings.showGitHubPullRequests);
@@ -190,13 +193,16 @@ const CommandPaletteContent = ({ commandPaletteInitialView }: CommandPaletteCont
190193
autoDetectLanguage,
191194
autoSave,
192195
compactMenuBar,
196+
codeLens,
193197
coreFeatures,
194198
formatOnSave,
195199
iconTheme,
200+
inlayHints,
196201
isAIChatVisible,
197202
lineNumbers,
198203
nativeMenuBar,
199204
parameterHints,
205+
semanticTokens,
200206
showGitHubActions,
201207
showGitHubIssues,
202208
showGitHubPullRequests,
@@ -215,13 +221,16 @@ const CommandPaletteContent = ({ commandPaletteInitialView }: CommandPaletteCont
215221
autoDetectLanguage,
216222
autoSave,
217223
compactMenuBar,
224+
codeLens,
218225
coreFeatures,
219226
formatOnSave,
220227
iconTheme,
228+
inlayHints,
221229
isAIChatVisible,
222230
lineNumbers,
223231
nativeMenuBar,
224232
parameterHints,
233+
semanticTokens,
225234
showGitHubActions,
226235
showGitHubIssues,
227236
showGitHubPullRequests,

src/features/command-palette/constants/settings-actions.tsx

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,13 @@ type CommandPaletteSettings = Pick<
3232
| "autoCompletion"
3333
| "autoDetectLanguage"
3434
| "autoSave"
35+
| "codeLens"
3536
| "coreFeatures"
3637
| "formatOnSave"
38+
| "inlayHints"
3739
| "lineNumbers"
3840
| "parameterHints"
41+
| "semanticTokens"
3942
| "showMinimap"
4043
| "telemetry"
4144
| "vimMode"
@@ -380,6 +383,47 @@ export const createSettingsActions = (params: SettingsActionsParams): Action[] =
380383
onClose();
381384
},
382385
},
386+
{
387+
id: "toggle-inlay-hints",
388+
label: settings.inlayHints ? "Language: Disable Inlay Hints" : "Language: Enable Inlay Hints",
389+
description: settings.inlayHints
390+
? "Hide inline type and parameter hints from language servers"
391+
: "Show inline type and parameter hints from language servers",
392+
icon: <Lightbulb />,
393+
category: "Language",
394+
action: () => {
395+
updateSetting("inlayHints", !settings.inlayHints);
396+
onClose();
397+
},
398+
},
399+
{
400+
id: "toggle-code-lens",
401+
label: settings.codeLens ? "Language: Disable Code Lens" : "Language: Enable Code Lens",
402+
description: settings.codeLens
403+
? "Hide inline code actions above symbols"
404+
: "Show inline code actions above symbols",
405+
icon: <ListBullets />,
406+
category: "Language",
407+
action: () => {
408+
updateSetting("codeLens", !settings.codeLens);
409+
onClose();
410+
},
411+
},
412+
{
413+
id: "toggle-semantic-tokens",
414+
label: settings.semanticTokens
415+
? "Language: Disable Semantic Tokens"
416+
: "Language: Enable Semantic Tokens",
417+
description: settings.semanticTokens
418+
? "Disable language server semantic highlighting"
419+
: "Use language server semantic highlighting",
420+
icon: <Palette />,
421+
category: "Language",
422+
action: () => {
423+
updateSetting("semanticTokens", !settings.semanticTokens);
424+
onClose();
425+
},
426+
},
383427
{
384428
id: "toggle-ai-completion",
385429
label: settings.aiCompletion ? "AI: Disable AI Completion" : "AI: Enable AI Completion",

src/features/editor/components/code-editor.tsx

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,9 @@ const CodeEditor = ({
199199
const athasEditorEngineEnabled = useSettingsStore(
200200
(state) => state.settings.coreFeatures.athasEditorEngine,
201201
);
202-
const parameterHintsEnabled = useSettingsStore((state) => state.settings.parameterHints);
202+
const inlayHintsEnabled = useSettingsStore((state) => state.settings.inlayHints);
203+
const codeLensEnabled = useSettingsStore((state) => state.settings.codeLens);
204+
const semanticTokensEnabled = useSettingsStore((state) => state.settings.semanticTokens);
203205
const isFindVisible = useUIState((state) => state.isFindVisible);
204206
const lspClient = useMemo(() => LspClient.getInstance(), []);
205207
const searchInputSignature = useMemo(
@@ -233,7 +235,9 @@ const CodeEditor = ({
233235
const largeEditorModeInfo = useLargeEditorModeInfo(value);
234236
const largeContentMode = useAthasEditor && largeEditorModeInfo.largeContentMode;
235237
const enableRichEditorServices = enableInteractiveServices && !largeContentMode;
236-
const enableInlayHints = useAthasEditor && enableRichEditorServices && parameterHintsEnabled;
238+
const enableInlayHints = useAthasEditor && enableRichEditorServices && inlayHintsEnabled;
239+
const enableCodeLens = enableRichEditorServices && codeLensEnabled;
240+
const enableSemanticTokens = useAthasEditor && enableRichEditorServices && semanticTokensEnabled;
237241

238242
const showMarkdownPreview = activeBuffer?.type === "markdownPreview";
239243
const showHtmlPreview = activeBuffer?.type === "htmlPreview";
@@ -333,8 +337,8 @@ const CodeEditor = ({
333337
lspVisibleLineRange,
334338
);
335339
const semanticTokens = useSemanticTokens(
336-
useAthasEditor && enableRichEditorServices ? filePath : undefined,
337-
useAthasEditor && enableRichEditorServices,
340+
enableSemanticTokens ? filePath : undefined,
341+
enableSemanticTokens,
338342
value,
339343
);
340344

@@ -369,8 +373,9 @@ const CodeEditor = ({
369373
[rMarkdownChunks],
370374
);
371375
const visibleCodeLenses = useMemo(
372-
() => [...pythonScriptCellLenses, ...rMarkdownChunkLenses],
373-
[pythonScriptCellLenses, rMarkdownChunkLenses],
376+
() =>
377+
codeLensEnabled ? [...pythonScriptCellLenses, ...rMarkdownChunkLenses] : [],
378+
[codeLensEnabled, pythonScriptCellLenses, rMarkdownChunkLenses],
374379
);
375380

376381
const handleCodeLensExecute = useCallback(
@@ -734,7 +739,7 @@ const CodeEditor = ({
734739
{enableRichEditorServices && useAthasEditor && <CompletionDropdown />}
735740

736741
{/* Code Lens */}
737-
{enableRichEditorServices && visibleCodeLenses.length > 0 && (
742+
{enableCodeLens && visibleCodeLenses.length > 0 && (
738743
<CodeLensOverlay
739744
ref={codeLensRef}
740745
lenses={visibleCodeLenses}

src/features/editor/components/monaco-editor.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ export function MonacoEditor({
146146
const minimapEnabled = useSettingsStore((state) => state.settings.showMinimap);
147147
const autoCompletion = useSettingsStore((state) => state.settings.autoCompletion);
148148
const parameterHints = useSettingsStore((state) => state.settings.parameterHints);
149+
const semanticTokens = useSettingsStore((state) => state.settings.semanticTokens);
149150
const inlineGitBlameEnabled = useSettingsStore((state) => state.settings.enableInlineGitBlame);
150151
const vimModeEnabled = useSettingsStore((state) => state.settings.vimMode);
151152
const vimRelativeLineNumbers = useSettingsStore((state) => state.settings.vimRelativeLineNumbers);
@@ -417,7 +418,7 @@ export function MonacoEditor({
417418
contextmenu: false,
418419
overviewRulerLanes: 0,
419420
fixedOverflowWidgets: false,
420-
"semanticHighlighting.enabled": true,
421+
"semanticHighlighting.enabled": semanticTokens,
421422
scrollbar: {
422423
vertical: scrollable ? "auto" : "hidden",
423424
horizontal: scrollable ? "auto" : "hidden",
@@ -724,6 +725,7 @@ export function MonacoEditor({
724725
renderIndentGuides,
725726
renderWhitespace,
726727
scrollable,
728+
semanticTokens,
727729
setScrollForBuffer,
728730
setViewportHeight,
729731
syncCursorAndSelection,
@@ -833,7 +835,7 @@ export function MonacoEditor({
833835
parameterHints: { enabled: parameterHints },
834836
cursorStyle: vimModeEnabled && vimCurrentMode === "normal" ? "block" : "line",
835837
cursorBlinking: vimModeEnabled && vimCurrentMode === "normal" ? "solid" : "blink",
836-
"semanticHighlighting.enabled": true,
838+
"semanticHighlighting.enabled": semanticTokens,
837839
scrollbar: {
838840
vertical: scrollable ? "auto" : "hidden",
839841
horizontal: scrollable ? "auto" : "hidden",
@@ -865,6 +867,7 @@ export function MonacoEditor({
865867
renderIndentGuides,
866868
renderWhitespace,
867869
scrollable,
870+
semanticTokens,
868871
tabSize,
869872
themeId,
870873
vimCurrentMode,

src/features/editor/components/toolbar/editor-status-actions.tsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,9 @@ export function EditorStatusActions({ bufferId, editorViewKey }: EditorStatusAct
164164
const wordWrap = useSettingsStore((state) => state.settings.wordWrap);
165165
const parameterHints = useSettingsStore((state) => state.settings.parameterHints);
166166
const autoCompletion = useSettingsStore((state) => state.settings.autoCompletion);
167+
const inlayHints = useSettingsStore((state) => state.settings.inlayHints);
168+
const codeLens = useSettingsStore((state) => state.settings.codeLens);
169+
const semanticTokens = useSettingsStore((state) => state.settings.semanticTokens);
167170
const vimMode = useSettingsStore((state) => state.settings.vimMode);
168171
const enableGitGutter = useSettingsStore((state) => state.settings.enableGitGutter);
169172
const enableInlineGitBlame = useSettingsStore((state) => state.settings.enableInlineGitBlame);
@@ -437,6 +440,30 @@ export function EditorStatusActions({ bufferId, editorViewKey }: EditorStatusAct
437440
onToggle: () => updateSetting("autoCompletion", !autoCompletion),
438441
disabled: false,
439442
},
443+
{
444+
id: "inlay-hints",
445+
label: "Inlay Hints",
446+
checked: inlayHints,
447+
shortcut: null,
448+
onToggle: () => updateSetting("inlayHints", !inlayHints),
449+
disabled: false,
450+
},
451+
{
452+
id: "code-lens",
453+
label: "Code Lens",
454+
checked: codeLens,
455+
shortcut: null,
456+
onToggle: () => updateSetting("codeLens", !codeLens),
457+
disabled: false,
458+
},
459+
{
460+
id: "semantic-tokens",
461+
label: "Semantic Tokens",
462+
checked: semanticTokens,
463+
shortcut: null,
464+
onToggle: () => updateSetting("semanticTokens", !semanticTokens),
465+
disabled: false,
466+
},
440467
{
441468
id: "vim-mode",
442469
label: "Vim Mode",

src/features/settings/components/tabs/editor-settings.tsx

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,15 @@ export const EditorSettings = () => {
2121
formatOnSave: state.settings.formatOnSave,
2222
highlightOccurrences: state.settings.highlightOccurrences,
2323
horizontalTabScroll: state.settings.horizontalTabScroll,
24+
codeLens: state.settings.codeLens,
25+
inlayHints: state.settings.inlayHints,
2426
lineNumbers: state.settings.lineNumbers,
2527
lintOnSave: state.settings.lintOnSave,
2628
maxOpenTabs: state.settings.maxOpenTabs,
2729
parameterHints: state.settings.parameterHints,
2830
renderIndentGuides: state.settings.renderIndentGuides,
2931
renderWhitespace: state.settings.renderWhitespace,
32+
semanticTokens: state.settings.semanticTokens,
3033
showMinimap: state.settings.showMinimap,
3134
tabSize: state.settings.tabSize,
3235
vimRelativeLineNumbers: state.settings.vimRelativeLineNumbers,
@@ -343,6 +346,45 @@ export const EditorSettings = () => {
343346
size="sm"
344347
/>
345348
</SettingRow>
349+
350+
<SettingRow
351+
label="Inlay Hints"
352+
description="Show inline type and parameter hints from language servers"
353+
onReset={() => updateSetting("inlayHints", getDefaultSetting("inlayHints"))}
354+
canReset={settings.inlayHints !== getDefaultSetting("inlayHints")}
355+
>
356+
<Switch
357+
checked={settings.inlayHints}
358+
onChange={(checked) => updateSetting("inlayHints", checked)}
359+
size="sm"
360+
/>
361+
</SettingRow>
362+
363+
<SettingRow
364+
label="Code Lens"
365+
description="Show inline code actions above symbols"
366+
onReset={() => updateSetting("codeLens", getDefaultSetting("codeLens"))}
367+
canReset={settings.codeLens !== getDefaultSetting("codeLens")}
368+
>
369+
<Switch
370+
checked={settings.codeLens}
371+
onChange={(checked) => updateSetting("codeLens", checked)}
372+
size="sm"
373+
/>
374+
</SettingRow>
375+
376+
<SettingRow
377+
label="Semantic Tokens"
378+
description="Use language server semantic highlighting"
379+
onReset={() => updateSetting("semanticTokens", getDefaultSetting("semanticTokens"))}
380+
canReset={settings.semanticTokens !== getDefaultSetting("semanticTokens")}
381+
>
382+
<Switch
383+
checked={settings.semanticTokens}
384+
onChange={(checked) => updateSetting("semanticTokens", checked)}
385+
size="sm"
386+
/>
387+
</SettingRow>
346388
</Section>
347389
</div>
348390
);

src/features/settings/config/default-settings.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ export const defaultSettings: Settings = {
3737
renderIndentGuides: true,
3838
highlightOccurrences: true,
3939
showMinimap: false,
40+
inlayHints: true,
41+
codeLens: true,
42+
semanticTokens: true,
4043
// Terminal
4144
terminalFontFamily: DEFAULT_MONO_FONT_FAMILY,
4245
terminalFontSize: DEFAULT_TERMINAL_FONT_SIZE,

src/features/settings/config/search-index.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,30 @@ export const settingsSearchIndex: SettingSearchRecord[] = [
718718
description: "Show function parameter hints",
719719
keywords: ["parameter", "hints", "intellisense", "function"],
720720
},
721+
{
722+
id: "language-inlay-hints",
723+
tab: "editor",
724+
section: "IntelliSense",
725+
label: "Inlay Hints",
726+
description: "Show inline type and parameter hints from language servers",
727+
keywords: ["inlay", "hints", "types", "parameters", "lsp"],
728+
},
729+
{
730+
id: "language-code-lens",
731+
tab: "editor",
732+
section: "IntelliSense",
733+
label: "Code Lens",
734+
description: "Show inline code actions above symbols",
735+
keywords: ["code", "lens", "actions", "lsp"],
736+
},
737+
{
738+
id: "language-semantic-tokens",
739+
tab: "editor",
740+
section: "IntelliSense",
741+
label: "Semantic Tokens",
742+
description: "Use language server semantic highlighting",
743+
keywords: ["semantic", "tokens", "highlighting", "lsp"],
744+
},
721745

722746
// Features Settings
723747
{

src/features/settings/types/settings.types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ export interface Settings {
4545
renderIndentGuides: boolean;
4646
highlightOccurrences: boolean;
4747
showMinimap: boolean;
48+
inlayHints: boolean;
49+
codeLens: boolean;
50+
semanticTokens: boolean;
4851
// Terminal
4952
terminalFontFamily: string;
5053
terminalFontSize: number;

0 commit comments

Comments
 (0)