当前位置: 首页 > 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.lryc.cn/news/600755.html

相关文章:

  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 热词评论查询功能实现
  • Spring Boot 单元测试进阶:JUnit5 + Mock测试与切片测试实战及覆盖率报告生成
  • Android ADB命令之内存统计与分析
  • Java学习|黑马笔记|Day23】网络编程、反射、动态代理
  • 深入理解C语言快速排序与自省排序(Introsort)
  • 安卓服务与多线程
  • 学习嵌入式的第三十天-数据结构-(2025.7.21)网络编程
  • 系统性学习C语言-第二十三讲-文件操作
  • 台式电脑有多个风扇开机只有部分转动的原因
  • Matlab自学笔记六十五:解方程的数值解法(代码速成)
  • Nacos-服务注册,服务发现(二)
  • 八股文整理——计算机网络
  • 容器化成本优化:K8s资源请求与限制的黄金法则——从资源画像分析到25%成本削减的实战指南
  • 记录和分享抓取的数字货币和大A时序数据
  • 什么是ICMP报文?有什么用?
  • Matlab学习笔记:自定义函数
  • java基础(day16)set-map
  • DAY24 元组和OS模块
  • 【安全漏洞】网络守门员:深入理解与应用iptables,守护Linux服务器安全
  • Java基础-文件操作
  • spring Could 高频面试题
  • 面试问题总结——关于OpenCV(二)
  • 详解力扣高频SQL50题之619. 只出现一次的最大数字【简单】
  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——6. 传统算法实战:用OpenCV测量螺丝尺寸
  • 人工智能之数学基础:概率论之韦恩图的应用
  • Java 镜像减肥记:Docker 多阶段构建全攻略
  • 统计学08:概率分布
  • 【SSM】第二章 网上蛋糕项目商城-首页
  • lottie 动画使用
  • MySQL数据库本地迁移到云端完整教程