golang并行化无依赖的Gherkin格式化插件ghokin的使用

Golang并行化无依赖的Gherkin格式化插件ghokin的使用

简介

Ghokin是一个用于格式化和转换Gherkin文件的工具,它支持并行处理且无外部依赖。

安装

  1. 下载适用于您架构的最新二进制文件
  2. 如果找不到适合您架构的二进制文件,可以安装Go工具链,克隆仓库并运行:go install .

使用方式

基本命令

# 清理和/或转换Gherkin文件
ghokin [command]

可用命令:
  check       检查文件/文件夹是否格式正确
  fmt         格式化feature文件/文件夹
  help        获取命令帮助

标志:
      --config string   配置文件
  -h, --help           显示帮助信息

⚠️ Ghokin仅适用于UTF-8编码的文件,它会自动检测并转换非此字符集的文件。

fmt stdout命令

将stdin或feature文件格式化后输出到stdout

# 格式化文件并输出到stdout
ghokin fmt stdout features/test.feature

# 或通过管道
cat features/test.feature | ghokin fmt stdout

fmt replace命令

格式化并替换文件或目录中的所有文件

# 格式化并替换单个文件
ghokin fmt replace features/test.feature

# 格式化并替换目录中的所有文件
ghokin fmt replace features/

check命令

确保文件或目录中的所有文件格式正确,否则会以错误代码退出

# 检查单个文件
ghokin check features/test.feature

# 检查目录中的所有文件
ghokin check features/

配置

配置文件

默认配置使用2个空格缩进。可以通过在home目录或当前目录创建.ghokin.yml文件来覆盖配置:

indent: 2
aliases:
  json: "jq ."

环境变量

也可以使用环境变量代替静态配置文件:

export GHOKIN_INDENT=2
export GHOKIN_ALIASES='{"json":"jq ."}'

Shell命令集成

您可以在feature文件中使用shell命令来转换数据。首先需要在配置中定义别名,然后在要转换的行前一行使用该别名注释。

例如,假设@json在后台调用jq,我们可以在feature文件中这样验证和格式化json:

Feature: A Feature
  Description

  Scenario: A scenario to test
    Given a thing
    # @json
    """
    {
      "test": "test"
    }
    """

贡献

如果您想为ghokin项目添加新功能,最佳方式是先创建一个issue,以明确如何在代码中实现您的更改。

开发设置

克隆仓库后,您需要安装依赖:

go mod vendor

要测试您的更改,可以运行:

make test-all

更多关于golang并行化无依赖的Gherkin格式化插件ghokin的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang并行化无依赖的Gherkin格式化插件ghokin的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用ghokin并行化格式化Gherkin文件

ghokin是一个用于格式化Gherkin文件的Go工具,它支持并行处理多个文件,特别适合在大型项目中快速格式化大量.feature文件。下面我将详细介绍如何使用ghokin以及如何利用其并行化特性。

安装ghokin

首先安装ghokin工具:

go install github.com/antham/ghokin/v3/cmd/ghokin@latest

基本使用

最简单的格式化命令:

ghokin file.feature

这会格式化指定的feature文件并输出到标准输出。

并行化处理多个文件

ghokin内置支持并行处理多个文件,这是其最大优势之一。使用方式:

ghokin file1.feature file2.feature file3.feature

或者使用通配符:

ghokin features/**/*.feature

ghokin会自动并行处理这些文件,无需额外配置。

在Go代码中使用ghokin

如果你想在自己的Go程序中集成ghokin的功能,可以使用其API:

package main

import (
	"fmt"
	"os"
	"path/filepath"
	"sync"

	"github.com/antham/ghokin/v3/ghokin"
)

func main() {
	// 创建ghokin实例
	formatter := ghokin.NewFormatter()

	// 获取要格式化的文件列表
	files, err := filepath.Glob("features/**/*.feature")
	if err != nil {
		fmt.Printf("Error finding feature files: %v\n", err)
		os.Exit(1)
	}

	// 使用WaitGroup等待所有goroutine完成
	var wg sync.WaitGroup

	for _, file := range files {
		wg.Add(1)
		go func(f string) {
			defer wg.Done()
			
			// 读取文件内容
			content, err := os.ReadFile(f)
			if err != nil {
				fmt.Printf("Error reading %s: %v\n", f, err)
				return
			}

			// 格式化内容
			formatted, err := formatter.Format(string(content))
			if err != nil {
				fmt.Printf("Error formatting %s: %v\n", f, err)
				return
			}

			// 写回文件
			err = os.WriteFile(f, []byte(formatted), 0644)
			if err != nil {
				fmt.Printf("Error writing %s: %v\n", f, err)
				return
			}

			fmt.Printf("Formatted %s\n", f)
		}(file)
	}

	wg.Wait()
	fmt.Println("All files formatted!")
}

高级选项

ghokin提供了一些格式化选项:

# 缩进使用空格而不是制表符
ghokin --space-indent file.feature

# 指定缩进大小(默认为2)
ghokin --indent 4 file.feature

# 在场景前保留空行
ghokin --keep-blank-lines-before-scenario file.feature

性能考虑

并行化处理时,ghokin会自动根据CPU核心数确定并行度。如果需要限制并发数,可以在代码中实现:

// 创建一个带缓冲的channel来控制并发数
sem := make(chan struct{}, runtime.NumCPU())

for _, file := range files {
    wg.Add(1)
    sem <- struct{}{} // 获取信号量
    
    go func(f string) {
        defer func() {
            <-sem // 释放信号量
            wg.Done()
        }()
        
        // 处理文件...
    }(file)
}

总结

ghokin是一个高效的Gherkin格式化工具,主要特点包括:

  1. 原生支持并行处理多个文件
  2. 保持Gherkin语法结构不变
  3. 可配置的格式化选项
  4. 既可作为CLI工具也可作为库集成到Go项目中

对于大型BDD项目,使用ghokin可以显著提高.feature文件的格式化效率,保持代码风格一致。

回到顶部