Skip to content

Commit 80f67c3

Browse files
authored
Fix linter warning for Protobus ServiceClient calls using object literals. (RooCodeInc#3942)
Fix linter warnings in the first half of the webview.
1 parent 01afe5e commit 80f67c3

17 files changed

+352
-277
lines changed

webview-ui/src/components/browser/BrowserSettingsMenu.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1+
import { useExtensionState } from "@/context/ExtensionStateContext"
2+
import { EmptyRequest, StringRequest } from "@shared/proto/common"
13
import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"
24
import { useEffect, useRef, useState } from "react"
35
import styled from "styled-components"
4-
import { useExtensionState } from "@/context/ExtensionStateContext"
5-
import { vscode } from "@/utils/vscode"
6-
import { CODE_BLOCK_BG_COLOR } from "../common/CodeBlock"
76
import { BrowserServiceClient, UiServiceClient } from "../../services/grpc-client"
87

98
interface ConnectionInfo {
@@ -29,7 +28,7 @@ export const BrowserSettingsMenu = () => {
2928
;(async () => {
3029
try {
3130
console.log("[DEBUG] SENDING BROWSER CONNECTION INFO REQUEST")
32-
const info = await BrowserServiceClient.getBrowserConnectionInfo({})
31+
const info = await BrowserServiceClient.getBrowserConnectionInfo(EmptyRequest.create({}))
3332
console.log("[DEBUG] GOT BROWSER REPLY:", info, typeof info)
3433
setConnectionInfo({
3534
isConnected: info.isConnected,
@@ -71,7 +70,7 @@ export const BrowserSettingsMenu = () => {
7170
// After a short delay, send a message to scroll to browser settings
7271
setTimeout(async () => {
7372
try {
74-
await UiServiceClient.scrollToSettings({ value: "browser" })
73+
await UiServiceClient.scrollToSettings(StringRequest.create({ value: "browser" }))
7574
} catch (error) {
7675
console.error("Error scrolling to browser settings:", error)
7776
}
@@ -85,7 +84,7 @@ export const BrowserSettingsMenu = () => {
8584
if (!showInfoPopover) {
8685
const fetchConnectionInfo = async () => {
8786
try {
88-
const info = await BrowserServiceClient.getBrowserConnectionInfo({})
87+
const info = await BrowserServiceClient.getBrowserConnectionInfo(EmptyRequest.create({}))
8988
setConnectionInfo({
9089
isConnected: info.isConnected,
9190
isRemote: info.isRemote,
@@ -125,7 +124,7 @@ export const BrowserSettingsMenu = () => {
125124
// Function to fetch connection info
126125
const fetchConnectionInfo = async () => {
127126
try {
128-
const info = await BrowserServiceClient.getBrowserConnectionInfo({})
127+
const info = await BrowserServiceClient.getBrowserConnectionInfo(EmptyRequest.create({}))
129128
setConnectionInfo({
130129
isConnected: info.isConnected,
131130
isRemote: info.isRemote,

webview-ui/src/components/chat/BrowserSessionRow.tsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1+
import { BrowserSettingsMenu } from "@/components/browser/BrowserSettingsMenu"
2+
import { ChatRowContent, ProgressIndicator } from "@/components/chat/ChatRow"
3+
import { CheckpointControls } from "@/components/common/CheckpointControls"
4+
import CodeBlock, { CODE_BLOCK_BG_COLOR } from "@/components/common/CodeBlock"
5+
import { useExtensionState } from "@/context/ExtensionStateContext"
6+
import { FileServiceClient } from "@/services/grpc-client"
7+
import { BROWSER_VIEWPORT_PRESETS } from "@shared/BrowserSettings"
8+
import { BrowserAction, BrowserActionResult, ClineMessage, ClineSayBrowserAction } from "@shared/ExtensionMessage"
9+
import { StringRequest } from "@shared/proto/common"
110
import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"
211
import deepEqual from "fast-deep-equal"
312
import React, { CSSProperties, memo, useEffect, useMemo, useRef, useState } from "react"
413
import { useSize } from "react-use"
514
import styled from "styled-components"
6-
import { BROWSER_VIEWPORT_PRESETS } from "@shared/BrowserSettings"
7-
import { BrowserAction, BrowserActionResult, ClineMessage, ClineSayBrowserAction } from "@shared/ExtensionMessage"
8-
import { useExtensionState } from "@/context/ExtensionStateContext"
9-
import { FileServiceClient } from "@/services/grpc-client"
10-
import { BrowserSettingsMenu } from "@/components/browser/BrowserSettingsMenu"
11-
import { CheckpointControls } from "@/components/common/CheckpointControls"
12-
import CodeBlock, { CODE_BLOCK_BG_COLOR } from "@/components/common/CodeBlock"
13-
import { ChatRowContent, ProgressIndicator } from "@/components/chat/ChatRow"
1415

1516
interface BrowserSessionRowProps {
1617
messages: ClineMessage[]
@@ -404,8 +405,8 @@ const BrowserSessionRow = memo((props: BrowserSessionRowProps) => {
404405
alt="Browser screenshot"
405406
style={imgScreenshotStyle}
406407
onClick={() =>
407-
FileServiceClient.openImage({ value: displayState.screenshot }).catch((err) =>
408-
console.error("Failed to open image:", err),
408+
FileServiceClient.openImage(StringRequest.create({ value: displayState.screenshot })).catch(
409+
(err) => console.error("Failed to open image:", err),
409410
)
410411
}
411412
/>

webview-ui/src/components/chat/ChatRow.tsx

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,21 @@
1-
import { VSCodeBadge, VSCodeProgressRing, VSCodeButton } from "@vscode/webview-ui-toolkit/react"
1+
import { VSCodeBadge, VSCodeButton, VSCodeProgressRing } from "@vscode/webview-ui-toolkit/react"
22
import deepEqual from "fast-deep-equal"
3-
import React, { memo, useCallback, useEffect, useMemo, useRef, useState, MouseEvent } from "react"
3+
import React, { memo, MouseEvent, useCallback, useEffect, useMemo, useRef, useState } from "react"
44

5-
import { useEvent, useSize } from "react-use"
6-
import styled from "styled-components"
5+
import CreditLimitError from "@/components/chat/CreditLimitError"
6+
import { OptionsButtons } from "@/components/chat/OptionsButtons"
7+
import TaskFeedbackButtons from "@/components/chat/TaskFeedbackButtons"
8+
import { CheckmarkControl } from "@/components/common/CheckmarkControl"
9+
import CodeBlock, { CODE_BLOCK_BG_COLOR } from "@/components/common/CodeBlock"
10+
import MarkdownBlock from "@/components/common/MarkdownBlock"
11+
import SuccessButton from "@/components/common/SuccessButton"
12+
import McpResponseDisplay from "@/components/mcp/chat-display/McpResponseDisplay"
13+
import McpResourceRow from "@/components/mcp/configuration/tabs/installed/server-row/McpResourceRow"
14+
import McpToolRow from "@/components/mcp/configuration/tabs/installed/server-row/McpToolRow"
15+
import { useExtensionState } from "@/context/ExtensionStateContext"
16+
import { FileServiceClient, TaskServiceClient } from "@/services/grpc-client"
17+
import { findMatchingResourceOrTemplate, getMcpServerDisplayName } from "@/utils/mcp"
18+
import { vscode } from "@/utils/vscode"
719
import {
820
ClineApiReqInfo,
921
ClineAskQuestion,
@@ -15,11 +27,15 @@ import {
1527
ExtensionMessage,
1628
} from "@shared/ExtensionMessage"
1729
import { COMMAND_OUTPUT_STRING, COMMAND_REQ_APP_STRING } from "@shared/combineCommandSequences"
18-
import { useExtensionState } from "@/context/ExtensionStateContext"
19-
import { findMatchingResourceOrTemplate, getMcpServerDisplayName } from "@/utils/mcp"
20-
import { vscode } from "@/utils/vscode"
21-
import { FileServiceClient, TaskServiceClient } from "@/services/grpc-client"
22-
import { CheckmarkControl } from "@/components/common/CheckmarkControl"
30+
import { Int64Request, StringRequest } from "@shared/proto/common"
31+
import { useEvent, useSize } from "react-use"
32+
import styled from "styled-components"
33+
import { CheckpointControls } from "../common/CheckpointControls"
34+
import CodeAccordian, { cleanPathPrefix } from "../common/CodeAccordian"
35+
import NewTaskPreview from "./NewTaskPreview"
36+
import QuoteButton from "./QuoteButton"
37+
import ReportBugPreview from "./ReportBugPreview"
38+
import UserMessage from "./UserMessage"
2339

2440
interface CopyButtonProps {
2541
textToCopy: string | undefined
@@ -76,23 +92,6 @@ const WithCopyButton = React.forwardRef<HTMLDivElement, WithCopyButtonProps>(
7692
)
7793
},
7894
)
79-
import { CheckpointControls, CheckpointOverlay } from "../common/CheckpointControls"
80-
import CodeAccordian, { cleanPathPrefix } from "../common/CodeAccordian"
81-
import CodeBlock, { CODE_BLOCK_BG_COLOR } from "@/components/common/CodeBlock"
82-
import MarkdownBlock from "@/components/common/MarkdownBlock"
83-
import Thumbnails from "@/components/common/Thumbnails"
84-
import McpToolRow from "@/components/mcp/configuration/tabs/installed/server-row/McpToolRow"
85-
import McpResponseDisplay from "@/components/mcp/chat-display/McpResponseDisplay"
86-
import CreditLimitError from "@/components/chat/CreditLimitError"
87-
import { OptionsButtons } from "@/components/chat/OptionsButtons"
88-
import { highlightText } from "./TaskHeader"
89-
import SuccessButton from "@/components/common/SuccessButton"
90-
import TaskFeedbackButtons from "@/components/chat/TaskFeedbackButtons"
91-
import NewTaskPreview from "./NewTaskPreview"
92-
import ReportBugPreview from "./ReportBugPreview"
93-
import McpResourceRow from "@/components/mcp/configuration/tabs/installed/server-row/McpResourceRow"
94-
import UserMessage from "./UserMessage"
95-
import QuoteButton from "./QuoteButton"
9695

9796
const ChatRowContainer = styled.div`
9897
padding: 10px 6px 10px 15px;
@@ -582,7 +581,7 @@ export const ChatRowContent = ({
582581
msUserSelect: "none",
583582
}}
584583
onClick={() => {
585-
FileServiceClient.openFile({ value: tool.content }).catch((err) =>
584+
FileServiceClient.openFile(StringRequest.create({ value: tool.content })).catch((err) =>
586585
console.error("Failed to open file:", err),
587586
)
588587
}}>
@@ -1284,9 +1283,11 @@ export const ChatRowContent = ({
12841283
disabled={seeNewChangesDisabled}
12851284
onClick={() => {
12861285
setSeeNewChangesDisabled(true)
1287-
TaskServiceClient.taskCompletionViewChanges({
1288-
value: message.ts,
1289-
}).catch((err) => console.error("Failed to show task completion view changes:", err))
1286+
TaskServiceClient.taskCompletionViewChanges(
1287+
Int64Request.create({
1288+
value: message.ts,
1289+
}),
1290+
).catch((err) => console.error("Failed to show task completion view changes:", err))
12901291
}}
12911292
style={{
12921293
cursor: seeNewChangesDisabled ? "wait" : "pointer",
@@ -1447,9 +1448,11 @@ export const ChatRowContent = ({
14471448
disabled={seeNewChangesDisabled}
14481449
onClick={() => {
14491450
setSeeNewChangesDisabled(true)
1450-
TaskServiceClient.taskCompletionViewChanges({
1451-
value: message.ts,
1452-
}).catch((err) =>
1451+
TaskServiceClient.taskCompletionViewChanges(
1452+
Int64Request.create({
1453+
value: message.ts,
1454+
}),
1455+
).catch((err) =>
14531456
console.error("Failed to show task completion view changes:", err),
14541457
)
14551458
}}>

webview-ui/src/components/chat/ChatTextArea.tsx

Lines changed: 46 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,46 @@
1-
import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"
2-
import React, { forwardRef, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react"
3-
import DynamicTextArea from "react-textarea-autosize"
4-
import { useClickAway, useEvent, useWindowSize } from "react-use"
5-
import styled from "styled-components"
6-
import { mentionRegex, mentionRegexGlobal } from "@shared/context-mentions"
7-
import { ExtensionMessage } from "@shared/ExtensionMessage"
1+
import { MAX_IMAGES_AND_FILES_PER_MESSAGE } from "@/components/chat/ChatView"
2+
import ContextMenu from "@/components/chat/ContextMenu"
3+
import SlashCommandMenu from "@/components/chat/SlashCommandMenu"
4+
import { CODE_BLOCK_BG_COLOR } from "@/components/common/CodeBlock"
5+
import Thumbnails from "@/components/common/Thumbnails"
6+
import Tooltip from "@/components/common/Tooltip"
7+
import ApiOptions, { normalizeApiConfiguration } from "@/components/settings/ApiOptions"
88
import { useExtensionState } from "@/context/ExtensionStateContext"
9+
import { FileServiceClient, StateServiceClient } from "@/services/grpc-client"
910
import {
1011
ContextMenuOptionType,
1112
getContextMenuOptions,
1213
insertMention,
1314
insertMentionDirectly,
1415
removeMention,
15-
shouldShowContextMenu,
1616
SearchResult,
17+
shouldShowContextMenu,
1718
} from "@/utils/context-mentions"
19+
import { useMetaKeyDetection, useShortcut } from "@/utils/hooks"
1820
import {
19-
SlashCommand,
20-
slashCommandDeleteRegex,
21-
shouldShowSlashCommandsMenu,
2221
getMatchingSlashCommands,
2322
insertSlashCommand,
2423
removeSlashCommand,
24+
shouldShowSlashCommandsMenu,
25+
SlashCommand,
26+
slashCommandDeleteRegex,
2527
validateSlashCommand,
2628
} from "@/utils/slash-commands"
27-
import { useMetaKeyDetection, useShortcut } from "@/utils/hooks"
2829
import { validateApiConfiguration, validateModelId } from "@/utils/validate"
2930
import { vscode } from "@/utils/vscode"
30-
import { EmptyRequest } from "@shared/proto/common"
31-
import { FileServiceClient, StateServiceClient } from "@/services/grpc-client"
32-
import { CODE_BLOCK_BG_COLOR } from "@/components/common/CodeBlock"
33-
import Thumbnails from "@/components/common/Thumbnails"
34-
import Tooltip from "@/components/common/Tooltip"
35-
import ApiOptions, { normalizeApiConfiguration } from "@/components/settings/ApiOptions"
36-
import { MAX_IMAGES_AND_FILES_PER_MESSAGE } from "@/components/chat/ChatView"
37-
import ContextMenu from "@/components/chat/ContextMenu"
38-
import SlashCommandMenu from "@/components/chat/SlashCommandMenu"
3931
import { ChatSettings } from "@shared/ChatSettings"
40-
import ServersToggleModal from "./ServersToggleModal"
32+
import { mentionRegex, mentionRegexGlobal } from "@shared/context-mentions"
33+
import { ExtensionMessage } from "@shared/ExtensionMessage"
34+
import { EmptyRequest, StringRequest } from "@shared/proto/common"
35+
import { FileSearchRequest, RelativePathsRequest } from "@shared/proto/file"
36+
import { PlanActMode, TogglePlanActModeRequest } from "@shared/proto/state"
37+
import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"
38+
import React, { forwardRef, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react"
39+
import DynamicTextArea from "react-textarea-autosize"
40+
import { useClickAway, useEvent, useWindowSize } from "react-use"
41+
import styled from "styled-components"
4142
import ClineRulesToggleModal from "../cline-rules/ClineRulesToggleModal"
42-
import { PlanActMode } from "@shared/proto/state"
43+
import ServersToggleModal from "./ServersToggleModal"
4344

4445
const getImageDimensions = (dataUrl: string): Promise<{ width: number; height: number }> => {
4546
return new Promise((resolve, reject) => {
@@ -320,7 +321,7 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
320321
// Fetch git commits when Git is selected or when typing a hash
321322
useEffect(() => {
322323
if (selectedType === ContextMenuOptionType.Git || /^[a-f0-9]+$/i.test(searchQuery)) {
323-
FileServiceClient.searchCommits({ value: searchQuery || "" })
324+
FileServiceClient.searchCommits(StringRequest.create({ value: searchQuery || "" }))
324325
.then((response) => {
325326
if (response.commits) {
326327
const commits: GitCommit[] = response.commits.map(
@@ -752,10 +753,12 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
752753

753754
// Set a timeout to debounce the search requests
754755
searchTimeoutRef.current = setTimeout(() => {
755-
FileServiceClient.searchFiles({
756-
query: query,
757-
mentionsRequestId: query,
758-
})
756+
FileServiceClient.searchFiles(
757+
FileSearchRequest.create({
758+
query: query,
759+
mentionsRequestId: query,
760+
}),
761+
)
759762
.then((results) => {
760763
setFileSearchResults(results.results || [])
761764
setSearchLoading(false)
@@ -998,18 +1001,20 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
9981001
}
9991002
setTimeout(() => {
10001003
const newMode = chatSettings.mode === "plan" ? PlanActMode.ACT : PlanActMode.PLAN
1001-
StateServiceClient.togglePlanActMode({
1002-
chatSettings: {
1003-
mode: newMode,
1004-
preferredLanguage: chatSettings.preferredLanguage,
1005-
openAIReasoningEffort: chatSettings.openAIReasoningEffort,
1006-
},
1007-
chatContent: {
1008-
message: inputValue.trim() ? inputValue : undefined,
1009-
images: selectedImages.length > 0 ? selectedImages : undefined,
1010-
files: selectedFiles.length > 0 ? selectedFiles : undefined,
1011-
},
1012-
})
1004+
StateServiceClient.togglePlanActMode(
1005+
TogglePlanActModeRequest.create({
1006+
chatSettings: {
1007+
mode: newMode,
1008+
preferredLanguage: chatSettings.preferredLanguage,
1009+
openAiReasoningEffort: chatSettings.openAIReasoningEffort,
1010+
},
1011+
chatContent: {
1012+
message: inputValue.trim() ? inputValue : undefined,
1013+
images: selectedImages.length > 0 ? selectedImages : undefined,
1014+
files: selectedFiles.length > 0 ? selectedFiles : undefined,
1015+
},
1016+
}),
1017+
)
10131018
// Focus the textarea after mode toggle with slight delay
10141019
setTimeout(() => {
10151020
textAreaRef.current?.focus()
@@ -1265,7 +1270,7 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
12651270
}
12661271
setIntendedCursorPosition(initialCursorPos)
12671272

1268-
FileServiceClient.getRelativePaths({ uris: validUris })
1273+
FileServiceClient.getRelativePaths(RelativePathsRequest.create({ uris: validUris }))
12691274
.then((response) => {
12701275
if (response.paths.length > 0) {
12711276
setPendingInsertions((prev) => [...prev, ...response.paths])

0 commit comments

Comments
 (0)