mirror of
https://github.com/thunderbrewhq/binana.git
synced 2026-05-03 05:03:50 +00:00
feat(bna): implement fix-labels command
The fix-labels command will fix a symbol file by automatically renaming labels matching a certain regex, and looking for the captured parameter in a "fixlist" i.e. a newline delimited list of OG names.
This commit is contained in:
parent
d020e6ba36
commit
cbb42eb953
6 changed files with 145 additions and 4 deletions
93
go/app/util/fix-labels.go
Normal file
93
go/app/util/fix-labels.go
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
package util
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/thunderbrewhq/binana/go/symbols"
|
||||
)
|
||||
|
||||
type FixLabelsParams struct {
|
||||
// the input symbols file
|
||||
Input string
|
||||
// the list of fixed symbol names
|
||||
FixList string
|
||||
// regex to capture a word that will be matched against the fixlist
|
||||
Capture string
|
||||
// pattern to insert the match into so it may be checked against the fixlist
|
||||
FixPattern string
|
||||
}
|
||||
|
||||
func read_fixlist(path string) ([]string, error) {
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
var lines []string
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
lines = append(lines, scanner.Text())
|
||||
}
|
||||
return lines, scanner.Err()
|
||||
}
|
||||
|
||||
func FixLabels(params *FixLabelsParams) {
|
||||
capture := regexp.MustCompile(params.Capture)
|
||||
var (
|
||||
input io.Reader
|
||||
input_file *os.File
|
||||
fixlist []string
|
||||
table symbols.Table
|
||||
err error
|
||||
)
|
||||
|
||||
if params.Input != "" {
|
||||
input_file, err = os.Open(params.Input)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
input = input_file
|
||||
} else {
|
||||
input = os.Stdin
|
||||
}
|
||||
|
||||
if params.FixList == "" {
|
||||
panic("must have fix list")
|
||||
}
|
||||
|
||||
fixlist, err = read_fixlist(params.FixList)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
table.Init()
|
||||
if err = table.LoadFile(params.Input, input); err != nil {
|
||||
return
|
||||
}
|
||||
if input_file != nil {
|
||||
input_file.Close()
|
||||
}
|
||||
|
||||
for entry := range table.Entries() {
|
||||
symbol := entry.Symbol
|
||||
matches := capture.FindAllStringSubmatch(symbol.Name, 1)
|
||||
if len(matches) > 0 {
|
||||
//fmt.Fprintln(os.Stderr, "matches: ", matches)
|
||||
match := matches[0][1]
|
||||
fixed_match := strings.Replace(params.FixPattern, "$", match, 1)
|
||||
for _, fix := range fixlist {
|
||||
if strings.ToUpper(fixed_match) == strings.ToUpper(fix) {
|
||||
symbol.Name = fix
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Println(symbol.String())
|
||||
}
|
||||
}
|
||||
|
|
@ -39,7 +39,7 @@ type QueryParams struct {
|
|||
MaxBuild uint32
|
||||
// Regular expression for tokens (symbols/type information)
|
||||
Token string
|
||||
// If true, Token is a POSIX regular expression
|
||||
// If true, Token is a RE2 regular expression
|
||||
RegEx bool
|
||||
}
|
||||
|
||||
|
|
@ -202,9 +202,9 @@ func Query(params *QueryParams) {
|
|||
var token_query token_query
|
||||
token_query.params = params
|
||||
if params.RegEx {
|
||||
token_query.token_regexp = regexp.MustCompilePOSIX(token_query.params.Token)
|
||||
token_query.token_regexp = regexp.MustCompile(token_query.params.Token)
|
||||
} else {
|
||||
token_query.token_regexp = regexp.MustCompilePOSIX(regexp.QuoteMeta(params.Token))
|
||||
token_query.token_regexp = regexp.MustCompile(regexp.QuoteMeta(params.Token))
|
||||
}
|
||||
|
||||
if err := token_query.load_sample_database(); err != nil {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue