当前位置: 首页 > news >正文

gig-gitignore工具实战开发(五):gig add完善

文章目录

    • gig-gitignore工具实战开发(五):gig add完善
      • 🌐 GitHub模板支持
      • 🔌 API模板支持
      • 🖥️ TUI界面增强
        • 功能特点
      • 🚀 总结

gig-gitignore工具实战开发(五):gig add完善

✨ ​​前言​​: 在前几篇我们介绍了gig add的基础代码编写,本篇我们继续来完善gig add命令,重点介绍GitHub模板、API模板和TUI界面的实现。

🌐 GitHub模板支持

GitHub模板流程
存在
不存在
模板检查
用户执行命令
使用缓存
克隆模板
保存模板
合并内容
更新文件

核心代码实现:

func handleAdd(languages []string, source string, update bool) {if source == "github" {var templateDir stringvar err errorif update {// 强制更新GitHub模板templateDir, err = ensureRemoteTemplatesAreCloned(true)if err != nil {fmt.Printf("无法更新 GitHub 模板:%v\n", err)return}} else {// 检查本地缓存home, err := utils.GetUserHomeDir()if err != nil {fmt.Println("查找用户主目录时出错:", err)os.Exit(1)}templateDir = filepath.Join(home, ".ciclebyte", "gig", "template_github")// 自动克隆如果不存在if !utils.FileExists(templateDir) {templateDir, err = ensureRemoteTemplatesAreCloned(false)if err != nil {fmt.Printf("无法准备 GitHub 模板:%v\n", err)return}}}}// ...合并模板内容逻辑...
}

使用gig add Go Python -t github -u可以确保获取最新的GitHub模板!

🔌 API模板支持

UserCLIAPIgig add go -t api发送GET请求获取go模板返回模板内容显示差异并确认UserCLIAPI

核心代码实现:

func getGitignoreFromAPI(languages []string) (string, error) {client := &http.Client{}var result strings.Builderfor _, lang := range languages {url := fmt.Sprintf("https://api.gitignore.io/templates/%s", lang)req, err := http.NewRequest("GET", url, nil)if err != nil {return "", err}resp, err := client.Do(req)if err != nil {return "", err}defer resp.Body.Close()body, err := io.ReadAll(resp.Body)if err != nil {return "", err}result.WriteString(string(body))result.WriteString("\n\n")}return result.String(), nil
}

⚠️ ​​注意​​:API方式需要网络连接,离线环境下无法使用。

🖥️ TUI界面增强

确认
取消
用户输入--tui参数
初始化TUI应用
创建左右文本视图
计算内容差异
渲染带颜色的差异内容
设置键盘事件处理
显示交互界面
用户操作
返回true
返回false
功能特点
  1. ​直观的差异对比​​:

    • 左侧显示原始内容,右侧显示更新内容
    • 红色标记删除的行(-)
    • 绿色标记新增的行(+)
  2. ​便捷的导航控制​​:

    • Tab/Shift+Tab在视图间切换
    • 支持多种确认/取消方式
  3. ​响应式布局​​:

    • 自动适应终端大小
    • 内容过多时支持滚动
# 使用TUI界面添加Go语言模板
gig add go --tui# 效果示意
+-------------------------------------------+
| 原始版本                    更新版本       |
|+-----------------------------------------+|
||                           + bin/        ||
||                           + pkg/        ||
||                           + *.exe       ||
|+-----------------------------------------+|

核心代码实现:

func (dv *DiffViewer) ShowDiff(original, updated string) (bool, error) {// 创建左右文本视图leftView := tview.NewTextView()rightView := tview.NewTextView()// 生成差异内容dmp := diffmatchpatch.New()a, b, lineArray := dmp.DiffLinesToChars(original, updated)diffs := dmp.DiffMain(a, b, false)diffs = dmp.DiffCharsToLines(diffs, lineArray)// 渲染差异var leftBuilder, rightBuilder strings.Builderfor _, diff := range diffs {lines := strings.Split(diff.Text, "\n")for i, line := range lines {if i == len(lines)-1 && line == "" {continue}switch diff.Type {case diffmatchpatch.DiffInsert:rightBuilder.WriteString("[black:green]+ " + line + "[white:black]\n")case diffmatchpatch.DiffDelete:leftBuilder.WriteString("[black:red]- " + line + "[white:black]\n")case diffmatchpatch.DiffEqual:leftBuilder.WriteString("  " + line + "\n")rightBuilder.WriteString("  " + line + "\n")}}}// ...界面布局和事件处理代码...
}

🎮 ​​体验优化​​:通过--tui参数即可启用图形界面,比纯文本差异更直观!

🚀 总结

本次完善为gig add带来了三大增强:

  1. 🌐 ​​GitHub模板​​ - 支持离线缓存和强制更新
  2. 🔌 ​​API模板​​ - 提供最新内容的即时获取
  3. 🖥️ ​​TUI界面​​ - 提升交互体验
http://www.dtcms.com/a/299763.html

相关文章:

  • 单片机中的三极管
  • write`系统调用
  • 字节跳动正式开源AI智能体开发平台Coze
  • LeetCode——1957. 删除字符使字符串变好
  • 1.安装anaconda详细步骤(含安装截图)
  • Typecho插件开发实战:构建专业级访问日志系统
  • ESP32-idf学习(五)esp32C3移植lvgl①
  • 贝叶斯决策论
  • Spring AI MCP 客户端
  • Django+celery异步:拿来即用,可移植性高
  • SSSM框架相关问题总结
  • 拒绝SQL恐惧:用Python+pyqt打造Excel数据库查询系统
  • [Java恶补day47] 整理模板·考点十【二叉树层序遍历】
  • 快速入门Linux操作系统(一)
  • LeetCode 面试经典 150_数组/字符串_删除有序数组中的重复项(3_26_C++_简单)
  • RabbitMQ--消息丢失问题及解决
  • 是德科技 | AI上车后,这条“高速公路”如何畅通?
  • 如何高效合并音视频文件(时间短消耗资源少)(二)
  • 计网-TCP可靠传输
  • 周末小游戏推荐,离线也能畅玩
  • 阿里云对象存储OSS(Object Storage Service)全面解析
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘ipython’问题
  • 【计算机组成原理】第一章:计算机系统概述
  • GO 从入门到精通
  • STL——vector
  • GO 从入门到精通2
  • MyBatis-Plus 通用 Service
  • J2EE模式---表现层集成模式
  • MyBatis Plus 对数据表常用注解
  • 进阶数据结构:用红黑树实现封装map和set