Add AI SQL generation, chart configuration, and LSP support#84
Merged
Conversation
- 新增 AiSql: SQL 编辑器头部「AI」入口, 输入自然语言生成 SQL - 自动附带当前数据源结构(表+字段)作上下文, 复用 ai_chat 命令与已配置的 AI 服务商 - 结果去除 Markdown 围栏后插入到编辑器光标处; ⌘/Ctrl+↵ 快捷生成 - 未配置 API Key 时友好提示
- ChartPanel 增加「AI 配图」: 描述需求, AI 返回图表配置 JSON 并自动应用 - 以可用列(名+类型)与支持的图表类型作上下文, 复用 ai_chat - 解析后设置图表类型/维度/指标/聚合(散点映射 X/Y/分组), 字段按列名校验 - ⌘/Ctrl+↵ 生成; 未配置 Key 友好提示
- 每张表新增「复制建表语句」: MySQL 用 SHOW CREATE TABLE, SQLite 取 sqlite_master.sql - 复制到剪贴板并提示; 兼容库限定(库.表)
- 每张表新增「导出 CSV」: 运行 SELECT *(上限 10 万行)并下载 - 复用 downloadCsv(带 BOM); 兼容库限定与 MySQL/SQLite
- 图表配置可「存预设」(命名)并以标签列表一键套用、删除 - 预设存入 KV(数据库), 套用时字段按当前结果列过滤 - 抽出 buildConfig/applyConfig, 与上次配置持久化共用
- Tauri WebView 不支持 window.prompt, 导致点击无反应 - 改为内联命名输入(回车保存/Esc 取消)
- window.confirm 在 Tauri WebView 不可靠 - 全部替换前改为内联确认条(取消/确认替换), 展示影响处数与文件数
- 后端 xlsx 插件(console_type=xlsx, 运行输出文件路径) - 新增 XlsxView: 用 Tauri fs 读取字节 + SheetJS 解析, 工作表切换 - 复用 VirtualTable(虚拟滚动) + ChartPanel(27 种图表) + 导出 CSV - SheetJS 动态导入按需分包(~430KB), 不拖大主包 - App.vue 增加 xlsx 输出分支, 设置项新增 Excel 表/图表
- smartOpen 对 Excel 扩展名直接路由到数据视图(切 xlsx 语言, 控制台显示 Excel 表/图表) - 不再走文本打开判断, XlsxView 读取该路径解析展示
- 新增 lsp.rs: 按语言拉起语言服务器, Content-Length 帧解析, 事件转发(lsp:message/lsp:exit) - 命令: lsp_available/lsp_start/lsp_send/lsp_stop, 透明转发 JSON-RPC - 解析可执行全路径并增广 PATH(解决 GUI 应用 PATH 缺失) - 内置 python/ts-js/rust/go/c-cpp/lua/php/ruby/html/css/json 服务器映射
- 新增 lspTransport: 把 codemirror-languageserver 的 Transport 桥到 Tauri 命令/事件 - 新增 lspExtension: 按语言+文件构建 LSP 扩展, 语言/服务器不可用时返回 null(不影响编辑器) - useCodeMirrorEditor: 有文件且服务器可用时挂载 LSP, 文件切换就地重配置 - CodeEditor/App 传入 filePath/rootDir - 引入 codemirror-languageserver 等依赖
- 后端 lsp_server_list/lsp_install: 列出状态并执行安装命令, 实时输出日志(lsp:install/lsp:install-done) - 新增设置「语言服务」标签: 显示各语言服务器是否已安装, 未装可一键安装并看日志, 装完自动重检 - 安装走 npm/rustup/go/brew/gem, 失败可按提示手动安装
- 无文件路径时用 untitled: 文档 URI(语言服务器按内存内容分析) - 放开仅已保存文件才挂载 LSP 的限制; 默认 Python 草稿即可触发诊断/补全 - autoClose:true 避免扩展重建时事件监听泄漏
- tooltip 挂到 document.body, 解决父级 transform/overflow 导致的悬浮窗错位 - 新增 lspStatus 共享状态, 状态栏显示绿色「LSP」表示当前语言已启用语言服务
- tooltip 配置用 Prec.highest + parent:body + position:fixed, 确保精确定位到悬停 token - 新增 buildTooltipTheme: 悬浮文档/诊断/补全统一美化, 跟随明暗主题(圆角/阴影/代码块/选中态/诊断色条)
- 之前的 Prec.highest + parent:body + position:fixed 反而把悬浮窗顶到下方 - 改回与 useCodeMirrorFunctionHelp 一致的默认定位机制, 仅保留样式主题
- 不再依赖 CodeMirror tooltip 定位; 监听鼠标 posAtCoords 取诊断+hover, 挂到 body 的 fixed 浮层显示在鼠标下方(越界翻转/夹紧) - 隐藏库默认的 hover/诊断 tooltip(避免重复与错位) - 主题适配(明暗), 诊断按严重级色条; 引入 @codemirror/lint 读诊断
- posAtCoords 会就近吸附到最近字符, 导致移到空白处仍显示错误并跟随 - 增加行垂直区间 + 行内水平范围判断, 鼠标不在文本上即隐藏
- 之前用 lineBlockAt 的文档内坐标与鼠标视口坐标比较, 永远判定不在行内 → 全隐藏 - 改用 coordsAtPos 的视口坐标做行内垂直/水平判断
- 内层选项列表由固定 max-h-60 改为 flex-1 + min-h-0 + overflow-auto, 始终在算出的可用高度内滚动 - 下方放不下且上方更大时翻转到上方显示
- 自建 LanguageServerClient, 用 onCapabilities/onError/onClose 驱动状态: connecting(索引中)→on(就绪)/off - 状态栏: 启动/索引时显示旋转图标 + 「LSP 索引中」, 就绪后绿点「LSP」 - 避免从无提示突然跳到报错, 交互更清晰
- 两处 loop+match 改为 while let - Content-Length 用 message.len()(字符串字节长度)替代 as_bytes().len()
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.