diff --git a/.changeset/shaggy-moons-dance.md b/.changeset/shaggy-moons-dance.md new file mode 100644 index 0000000000..e8de22b351 --- /dev/null +++ b/.changeset/shaggy-moons-dance.md @@ -0,0 +1,5 @@ +--- +"roo-cline": patch +--- + +Fix lint errors and change npm run lint to also run on webview-ui diff --git a/package.json b/package.json index 874661c497..83bd01c22d 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "compile": "npm run check-types && npm run lint && node esbuild.js", "compile-tests": "tsc -p . --outDir out", "install:all": "npm install && cd webview-ui && npm install", - "lint": "eslint src --ext ts", + "lint": "eslint src --ext ts && npm run lint --prefix webview-ui", "package": "npm run build:webview && npm run check-types && npm run lint && node esbuild.js --production", "pretest": "npm run compile-tests && npm run compile && npm run lint", "start:webview": "cd webview-ui && npm run start", diff --git a/webview-ui/package-lock.json b/webview-ui/package-lock.json index 189ee43466..ade601f9a5 100644 --- a/webview-ui/package-lock.json +++ b/webview-ui/package-lock.json @@ -34,7 +34,8 @@ }, "devDependencies": { "@babel/plugin-proposal-private-property-in-object": "^7.21.11", - "@types/vscode-webview": "^1.57.5" + "@types/vscode-webview": "^1.57.5", + "eslint": "^8.57.0" } }, "node_modules/@adobe/css-tools": { diff --git a/webview-ui/package.json b/webview-ui/package.json index 3d12cb9abb..2ede80f98e 100644 --- a/webview-ui/package.json +++ b/webview-ui/package.json @@ -31,7 +31,8 @@ "start": "react-scripts start", "build": "node ./scripts/build-react-no-split.js", "test": "react-scripts test --watchAll=false", - "eject": "react-scripts eject" + "eject": "react-scripts eject", + "lint": "eslint src --ext ts,tsx" }, "eslintConfig": { "extends": [ @@ -53,7 +54,8 @@ }, "devDependencies": { "@babel/plugin-proposal-private-property-in-object": "^7.21.11", - "@types/vscode-webview": "^1.57.5" + "@types/vscode-webview": "^1.57.5", + "eslint": "^8.57.0" }, "jest": { "transformIgnorePatterns": [ diff --git a/webview-ui/src/components/chat/ChatView.tsx b/webview-ui/src/components/chat/ChatView.tsx index 696df80518..ff765e2f7b 100644 --- a/webview-ui/src/components/chat/ChatView.tsx +++ b/webview-ui/src/components/chat/ChatView.tsx @@ -479,7 +479,7 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie }) }, [modifiedMessages]) - const isReadOnlyToolAction = (message: ClineMessage | undefined) => { + const isReadOnlyToolAction = useCallback((message: ClineMessage | undefined) => { if (message?.type === "ask") { if (!message.text) { return true @@ -488,9 +488,9 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie return ["readFile", "listFiles", "listFilesTopLevel", "listFilesRecursive", "listCodeDefinitionNames", "searchFiles"].includes(tool.tool) } return false - } + }, []) - const isWriteToolAction = (message: ClineMessage | undefined) => { + const isWriteToolAction = useCallback((message: ClineMessage | undefined) => { if (message?.type === "ask") { if (!message.text) { return true @@ -499,9 +499,9 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie return ["editedExistingFile", "appliedDiff", "newFileCreated"].includes(tool.tool) } return false - } + }, []) - const isMcpToolAlwaysAllowed = (message: ClineMessage | undefined) => { + const isMcpToolAlwaysAllowed = useCallback((message: ClineMessage | undefined) => { if (message?.type === "ask" && message.ask === "use_mcp_server") { if (!message.text) { return true @@ -514,9 +514,9 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie } } return false - } + }, [mcpServers]) - const isAllowedCommand = (message: ClineMessage | undefined) => { + const isAllowedCommand = useCallback((message: ClineMessage | undefined) => { if (message?.type === "ask") { const command = message.text if (!command) { @@ -533,19 +533,32 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie }) } return false - } + }, [allowedCommands]) - const isAutoApproved = (message: ClineMessage | undefined) => { - if (!message || message.type !== "ask") return false + const isAutoApproved = useCallback( + (message: ClineMessage | undefined) => { + if (!message || message.type !== "ask") return false - return ( - (alwaysAllowBrowser && message.ask === "browser_action_launch") || - (alwaysAllowReadOnly && message.ask === "tool" && isReadOnlyToolAction(message)) || - (alwaysAllowWrite && message.ask === "tool" && isWriteToolAction(message)) || - (alwaysAllowExecute && message.ask === "command" && isAllowedCommand(message)) || - (alwaysAllowMcp && message.ask === "use_mcp_server" && isMcpToolAlwaysAllowed(message)) - ) - } + return ( + (alwaysAllowBrowser && message.ask === "browser_action_launch") || + (alwaysAllowReadOnly && message.ask === "tool" && isReadOnlyToolAction(message)) || + (alwaysAllowWrite && message.ask === "tool" && isWriteToolAction(message)) || + (alwaysAllowExecute && message.ask === "command" && isAllowedCommand(message)) || + (alwaysAllowMcp && message.ask === "use_mcp_server" && isMcpToolAlwaysAllowed(message)) + ) + }, + [ + alwaysAllowBrowser, + alwaysAllowReadOnly, + alwaysAllowWrite, + alwaysAllowExecute, + alwaysAllowMcp, + isReadOnlyToolAction, + isWriteToolAction, + isAllowedCommand, + isMcpToolAlwaysAllowed + ] + ) useEffect(() => { // Only execute when isStreaming changes from true to false @@ -580,7 +593,7 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie } // Update previous value setWasStreaming(isStreaming) - }, [isStreaming, lastMessage, wasStreaming]) + }, [isStreaming, lastMessage, wasStreaming, isAutoApproved]) const isBrowserSessionMessage = (message: ClineMessage): boolean => { // which of visible messages are browser session messages, see above @@ -822,7 +835,7 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie if (isAutoApproved(lastMessage)) { handlePrimaryButtonClick() } - }, [clineAsk, enableButtons, handlePrimaryButtonClick, alwaysAllowBrowser, alwaysAllowReadOnly, alwaysAllowWrite, alwaysAllowExecute, alwaysAllowMcp, messages, allowedCommands, mcpServers]) + }, [clineAsk, enableButtons, handlePrimaryButtonClick, alwaysAllowBrowser, alwaysAllowReadOnly, alwaysAllowWrite, alwaysAllowExecute, alwaysAllowMcp, messages, allowedCommands, mcpServers, isAutoApproved, lastMessage]) return (