3 Star 0 Fork 1

Gitee 极速下载 / ntt

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/nokia/ntt
克隆/下载
tags.go 2.16 KB
一键复制 编辑 原始数据 按行查看 历史
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strings"
"sync"
"github.com/nokia/ntt/project"
"github.com/nokia/ntt/ttcn3"
"github.com/nokia/ntt/ttcn3/syntax"
"github.com/spf13/cobra"
)
var (
TagsCommand = &cobra.Command{
Use: "tags",
Short: "Write a cTags database to stdout",
Long: `tags generates an index (or "tag") file for TTCN-3 language objects found in file(s).
This tag file allows these items to be quickly and easily located by a text
editor or other utility. A "tag" signifies a language object for which an index
entry is available (or, alternatively, the index entry created for that
object).`,
RunE: tags,
}
)
func tags(cmd *cobra.Command, args []string) error {
files, err := project.Files(Project)
if err != nil {
return err
}
var wg sync.WaitGroup
wg.Add(len(files))
tags := make([][]string, len(files))
for i := range files {
go func(i int) {
defer wg.Done()
tree := ttcn3.ParseFile(files[i])
for _, n := range tree.Tags() {
pos := syntax.Begin(n)
tags[i] = append(tags[i], NewTag(syntax.Name(n), syntax.Filename(n), pos.Line, Kind(n)))
}
}(i)
}
wg.Wait()
var lines []string
for i := range tags {
lines = append(lines, tags[i]...)
}
sort.Strings(lines)
w := bufio.NewWriter(os.Stdout)
fmt.Fprintln(w, "!_TAG_FILE_FORMAT 2 //")
fmt.Fprintln(w, "!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted/")
fmt.Fprintln(w, "!_TAG_PROGRAM_NAME ntt //")
fmt.Fprintln(w, strings.Join(lines, "\n"))
w.Flush()
return nil
}
func NewTag(name string, file string, line int, kind string) string {
return fmt.Sprintf("%s\t%s\t%d;\"\t%s", name, file, line, kind)
}
func Kind(n syntax.Node) string {
switch n.(type) {
case *syntax.Module:
return "n"
case *syntax.Field:
return "t"
case *syntax.PortTypeDecl:
return "t"
case *syntax.ComponentTypeDecl:
return "c"
case *syntax.StructTypeDecl:
return "m"
case *syntax.EnumTypeDecl:
return "e"
case *syntax.BehaviourTypeDecl:
return "t"
case *syntax.Declarator:
return "v"
case *syntax.FormalPar:
return "v"
case *syntax.TemplateDecl:
return "d"
case *syntax.FuncDecl:
return "f"
case *syntax.SignatureDecl:
return "f"
default:
return "e"
}
}
1
https://gitee.com/mirrors/ntt.git
git@gitee.com:mirrors/ntt.git
mirrors
ntt
ntt
master

搜索帮助