mirror of
https://git.sr.ht/~eliasnaur/gio-cmd
synced 2026-07-01 07:35:37 +00:00
all: cleanup code and upgrade to modern Go facilities
Signed-off-by: ddkwork
This commit is contained in:
@@ -121,7 +121,7 @@ func (d *AndroidTestDriver) tryUninstall() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *AndroidTestDriver) adb(args ...interface{}) []byte {
|
func (d *AndroidTestDriver) adb(args ...any) []byte {
|
||||||
strs := []string{}
|
strs := []string{}
|
||||||
for _, arg := range args {
|
for _, arg := range args {
|
||||||
strs = append(strs, fmt.Sprint(arg))
|
strs = append(strs, fmt.Sprint(arg))
|
||||||
|
|||||||
+11
-17
@@ -191,10 +191,7 @@ func compileAndroid(tmpDir string, tools *androidTools, bi *buildInfo) (err erro
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
minSDK := 17
|
minSDK := max(bi.minsdk, 17)
|
||||||
if bi.minsdk > minSDK {
|
|
||||||
minSDK = bi.minsdk
|
|
||||||
}
|
|
||||||
tcRoot := filepath.Join(ndkRoot, "toolchains", "llvm", "prebuilt", archNDK())
|
tcRoot := filepath.Join(ndkRoot, "toolchains", "llvm", "prebuilt", archNDK())
|
||||||
var builds errgroup.Group
|
var builds errgroup.Group
|
||||||
for _, a := range bi.archs {
|
for _, a := range bi.archs {
|
||||||
@@ -213,7 +210,7 @@ func compileAndroid(tmpDir string, tools *androidTools, bi *buildInfo) (err erro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
archDir := filepath.Join(tmpDir, "jni", arch.jniArch)
|
archDir := filepath.Join(tmpDir, "jni", arch.jniArch)
|
||||||
if err := os.MkdirAll(archDir, 0755); err != nil {
|
if err := os.MkdirAll(archDir, 0o755); err != nil {
|
||||||
return fmt.Errorf("failed to create %q: %v", archDir, err)
|
return fmt.Errorf("failed to create %q: %v", archDir, err)
|
||||||
}
|
}
|
||||||
libFile := filepath.Join(archDir, "libgio.so")
|
libFile := filepath.Join(archDir, "libgio.so")
|
||||||
@@ -252,7 +249,7 @@ func compileAndroid(tmpDir string, tools *androidTools, bi *buildInfo) (err erro
|
|||||||
}
|
}
|
||||||
if len(javaFiles) > 0 {
|
if len(javaFiles) > 0 {
|
||||||
classes := filepath.Join(tmpDir, "classes")
|
classes := filepath.Join(tmpDir, "classes")
|
||||||
if err := os.MkdirAll(classes, 0755); err != nil {
|
if err := os.MkdirAll(classes, 0o755); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
javac := exec.Command(
|
javac := exec.Command(
|
||||||
@@ -349,13 +346,10 @@ func exeAndroid(tmpDir string, tools *androidTools, bi *buildInfo, extraJars, pe
|
|||||||
})
|
})
|
||||||
classFiles = append(classFiles, extraJars...)
|
classFiles = append(classFiles, extraJars...)
|
||||||
dexDir := filepath.Join(tmpDir, "apk")
|
dexDir := filepath.Join(tmpDir, "apk")
|
||||||
if err := os.MkdirAll(dexDir, 0755); err != nil {
|
if err := os.MkdirAll(dexDir, 0o755); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
minSDK := 16
|
minSDK := max(bi.minsdk, 16)
|
||||||
if bi.minsdk > minSDK {
|
|
||||||
minSDK = bi.minsdk
|
|
||||||
}
|
|
||||||
// https://developer.android.com/distribute/best-practices/develop/target-sdk
|
// https://developer.android.com/distribute/best-practices/develop/target-sdk
|
||||||
targetSDK := 33
|
targetSDK := 33
|
||||||
if bi.targetsdk > 0 {
|
if bi.targetsdk > 0 {
|
||||||
@@ -387,7 +381,7 @@ func exeAndroid(tmpDir string, tools *androidTools, bi *buildInfo, extraJars, pe
|
|||||||
v21Dir := filepath.Join(resDir, "values-v21")
|
v21Dir := filepath.Join(resDir, "values-v21")
|
||||||
v26mipmapDir := filepath.Join(resDir, `mipmap-anydpi-v26`)
|
v26mipmapDir := filepath.Join(resDir, `mipmap-anydpi-v26`)
|
||||||
for _, dir := range []string{valDir, v21Dir, v26mipmapDir} {
|
for _, dir := range []string{valDir, v21Dir, v26mipmapDir} {
|
||||||
if err := os.MkdirAll(dir, 0755); err != nil {
|
if err := os.MkdirAll(dir, 0o755); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -411,17 +405,17 @@ func exeAndroid(tmpDir string, tools *androidTools, bi *buildInfo, extraJars, pe
|
|||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@mipmap/ic_launcher_adaptive" />
|
<background android:drawable="@mipmap/ic_launcher_adaptive" />
|
||||||
<foreground android:drawable="@mipmap/ic_launcher_adaptive" />
|
<foreground android:drawable="@mipmap/ic_launcher_adaptive" />
|
||||||
</adaptive-icon>`), 0660)
|
</adaptive-icon>`), 0o660)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
iconSnip = `android:icon="@mipmap/ic_launcher"`
|
iconSnip = `android:icon="@mipmap/ic_launcher"`
|
||||||
}
|
}
|
||||||
err = os.WriteFile(filepath.Join(valDir, "themes.xml"), []byte(themes), 0660)
|
err = os.WriteFile(filepath.Join(valDir, "themes.xml"), []byte(themes), 0o660)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = os.WriteFile(filepath.Join(v21Dir, "themes.xml"), []byte(themesV21), 0660)
|
err = os.WriteFile(filepath.Join(v21Dir, "themes.xml"), []byte(themesV21), 0o660)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -477,7 +471,7 @@ func exeAndroid(tmpDir string, tools *androidTools, bi *buildInfo, extraJars, pe
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
manifest := filepath.Join(tmpDir, "AndroidManifest.xml")
|
manifest := filepath.Join(tmpDir, "AndroidManifest.xml")
|
||||||
if err := os.WriteFile(manifest, manifestBuffer.Bytes(), 0660); err != nil {
|
if err := os.WriteFile(manifest, manifestBuffer.Bytes(), 0o660); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -679,7 +673,7 @@ func signAAB(tmpDir string, aabFile string, tools *androidTools, bi *buildInfo)
|
|||||||
}
|
}
|
||||||
|
|
||||||
var alias string
|
var alias string
|
||||||
for _, t := range strings.Split(keytoolList, "\n") {
|
for t := range strings.SplitSeq(keytoolList, "\n") {
|
||||||
if i, _ := fmt.Sscanf(t, "Alias name: %s", &alias); i > 0 {
|
if i, _ := fmt.Sscanf(t, "Alias name: %s", &alias); i > 0 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -180,7 +180,7 @@ func getAppID(pkgMetadata *packageMetadata) string {
|
|||||||
name = "." + domain[0]
|
name = "." + domain[0]
|
||||||
domain[0] = "localhost"
|
domain[0] = "localhost"
|
||||||
} else {
|
} else {
|
||||||
for i := 0; i < len(domain)/2; i++ {
|
for i := range len(domain) / 2 {
|
||||||
opp := len(domain) - 1 - i
|
opp := len(domain) - 1 - i
|
||||||
domain[i], domain[opp] = domain[opp], domain[i]
|
domain[i], domain[opp] = domain[opp], domain[i]
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-9
@@ -12,6 +12,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"slices"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@@ -56,7 +57,7 @@ func buildIOS(tmpDir, target string, bi *buildInfo) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bi.archs = append(bi.archs[:i], bi.archs[i+1:]...)
|
bi.archs = slices.Delete(bi.archs, i, i+1)
|
||||||
}
|
}
|
||||||
if !forDevice && !strings.HasSuffix(out, ".app") {
|
if !forDevice && !strings.HasSuffix(out, ".app") {
|
||||||
return fmt.Errorf("the specified output directory %q does not end in .app or .ipa", out)
|
return fmt.Errorf("the specified output directory %q does not end in .app or .ipa", out)
|
||||||
@@ -66,7 +67,7 @@ func buildIOS(tmpDir, target string, bi *buildInfo) error {
|
|||||||
}
|
}
|
||||||
payload := filepath.Join(tmpDir, "Payload")
|
payload := filepath.Join(tmpDir, "Payload")
|
||||||
appDir := filepath.Join(payload, appName+".app")
|
appDir := filepath.Join(payload, appName+".app")
|
||||||
if err := os.MkdirAll(appDir, 0755); err != nil {
|
if err := os.MkdirAll(appDir, 0o755); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := exeIOS(tmpDir, target, appDir, bi); err != nil {
|
if err := exeIOS(tmpDir, target, appDir, bi); err != nil {
|
||||||
@@ -139,7 +140,7 @@ func signIOS(bi *buildInfo, tmpDir, app string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
entFile := filepath.Join(tmpDir, "entitlements.plist")
|
entFile := filepath.Join(tmpDir, "entitlements.plist")
|
||||||
if err := os.WriteFile(entFile, []byte(entitlements), 0660); err != nil {
|
if err := os.WriteFile(entFile, []byte(entitlements), 0o660); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
identity := sha1.Sum(certDER)
|
identity := sha1.Sum(certDER)
|
||||||
@@ -157,7 +158,7 @@ func exeIOS(tmpDir, target, app string, bi *buildInfo) error {
|
|||||||
if err := os.RemoveAll(app); err != nil {
|
if err := os.RemoveAll(app); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := os.Mkdir(app, 0755); err != nil {
|
if err := os.Mkdir(app, 0o755); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
appName := UppercaseName(bi.name)
|
appName := UppercaseName(bi.name)
|
||||||
@@ -205,7 +206,7 @@ func exeIOS(tmpDir, target, app string, bi *buildInfo) error {
|
|||||||
}
|
}
|
||||||
infoPlist := buildInfoPlist(bi)
|
infoPlist := buildInfoPlist(bi)
|
||||||
plistFile := filepath.Join(app, "Info.plist")
|
plistFile := filepath.Join(app, "Info.plist")
|
||||||
if err := os.WriteFile(plistFile, []byte(infoPlist), 0660); err != nil {
|
if err := os.WriteFile(plistFile, []byte(infoPlist), 0o660); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := os.Stat(bi.iconPath); err == nil {
|
if _, err := os.Stat(bi.iconPath); err == nil {
|
||||||
@@ -233,7 +234,7 @@ func exeIOS(tmpDir, target, app string, bi *buildInfo) error {
|
|||||||
// iosIcons returns the asset plist file to be merged into Info.plist.
|
// iosIcons returns the asset plist file to be merged into Info.plist.
|
||||||
func iosIcons(bi *buildInfo, tmpDir, appDir, icon string) (string, error) {
|
func iosIcons(bi *buildInfo, tmpDir, appDir, icon string) (string, error) {
|
||||||
assets := filepath.Join(tmpDir, "Assets.xcassets")
|
assets := filepath.Join(tmpDir, "Assets.xcassets")
|
||||||
if err := os.Mkdir(assets, 0700); err != nil {
|
if err := os.Mkdir(assets, 0o700); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
appIcon := filepath.Join(assets, "AppIcon.appiconset")
|
appIcon := filepath.Join(assets, "AppIcon.appiconset")
|
||||||
@@ -270,7 +271,7 @@ func iosIcons(bi *buildInfo, tmpDir, appDir, icon string) (string, error) {
|
|||||||
]
|
]
|
||||||
}`
|
}`
|
||||||
contentFile := filepath.Join(appIcon, "Contents.json")
|
contentFile := filepath.Join(appIcon, "Contents.json")
|
||||||
if err := os.WriteFile(contentFile, []byte(contentJson), 0600); err != nil {
|
if err := os.WriteFile(contentFile, []byte(contentJson), 0o600); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
assetPlist := filepath.Join(tmpDir, "assets.plist")
|
assetPlist := filepath.Join(tmpDir, "assets.plist")
|
||||||
@@ -386,7 +387,7 @@ func archiveIOS(tmpDir, target, frameworkRoot string, bi *buildInfo) error {
|
|||||||
frameworkDir := filepath.Join(frameworkRoot, "Versions", "A")
|
frameworkDir := filepath.Join(frameworkRoot, "Versions", "A")
|
||||||
for _, dir := range []string{"Headers", "Modules"} {
|
for _, dir := range []string{"Headers", "Modules"} {
|
||||||
p := filepath.Join(frameworkDir, dir)
|
p := filepath.Join(frameworkDir, dir)
|
||||||
if err := os.MkdirAll(p, 0755); err != nil {
|
if err := os.MkdirAll(p, 0o755); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -457,7 +458,7 @@ func archiveIOS(tmpDir, target, frameworkRoot string, bi *buildInfo) error {
|
|||||||
export *
|
export *
|
||||||
}`, framework)
|
}`, framework)
|
||||||
moduleFile := filepath.Join(frameworkDir, "Modules", "module.modulemap")
|
moduleFile := filepath.Join(frameworkDir, "Modules", "module.modulemap")
|
||||||
return os.WriteFile(moduleFile, []byte(module), 0644)
|
return os.WriteFile(moduleFile, []byte(module), 0o644)
|
||||||
}
|
}
|
||||||
|
|
||||||
func iosCompilerFor(target, arch string, minsdk int) (string, []string, error) {
|
func iosCompilerFor(target, arch string, minsdk int) (string, []string, error) {
|
||||||
|
|||||||
+1
-1
@@ -61,7 +61,7 @@ func (d *JSTestDriver) Start(path string) {
|
|||||||
pr, pw := io.Pipe()
|
pr, pw := io.Pipe()
|
||||||
d.Cleanup(func() { pw.Close() })
|
d.Cleanup(func() { pw.Close() })
|
||||||
d.output = pr
|
d.output = pr
|
||||||
chromedp.ListenTarget(ctx, func(ev interface{}) {
|
chromedp.ListenTarget(ctx, func(ev any) {
|
||||||
switch ev := ev.(type) {
|
switch ev := ev.(type) {
|
||||||
case *runtime.EventConsoleAPICalled:
|
case *runtime.EventConsoleAPICalled:
|
||||||
switch ev.Type {
|
switch ev.Type {
|
||||||
|
|||||||
+3
-3
@@ -20,7 +20,7 @@ func buildJS(bi *buildInfo) error {
|
|||||||
if out == "" {
|
if out == "" {
|
||||||
out = bi.name
|
out = bi.name
|
||||||
}
|
}
|
||||||
if err := os.MkdirAll(out, 0700); err != nil {
|
if err := os.MkdirAll(out, 0o700); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cmd := exec.Command(
|
cmd := exec.Command(
|
||||||
@@ -48,7 +48,7 @@ func buildJS(bi *buildInfo) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := os.WriteFile(filepath.Join(out, filepath.Base(bi.iconPath)), icon, 0600); err != nil {
|
if err := os.WriteFile(filepath.Join(out, filepath.Base(bi.iconPath)), icon, 0o600); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
faviconPath = filepath.Base(bi.iconPath)
|
faviconPath = filepath.Base(bi.iconPath)
|
||||||
@@ -70,7 +70,7 @@ func buildJS(bi *buildInfo) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.WriteFile(filepath.Join(out, "index.html"), b.Bytes(), 0600); err != nil {
|
if err := os.WriteFile(filepath.Join(out, "index.html"), b.Bytes(), 0o600); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-6
@@ -89,7 +89,7 @@ func (b *macBuilder) setIcon(path string) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
out := filepath.Join(b.TempDir, "iconset.iconset")
|
out := filepath.Join(b.TempDir, "iconset.iconset")
|
||||||
if err := os.MkdirAll(out, 0777); err != nil {
|
if err := os.MkdirAll(out, 0o777); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,7 +107,6 @@ func (b *macBuilder) setIcon(path string) (err error) {
|
|||||||
{path: "icon_16x16@2x.png", size: 32},
|
{path: "icon_16x16@2x.png", size: 32},
|
||||||
{path: "icon_16x16.png", size: 16},
|
{path: "icon_16x16.png", size: 16},
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -171,18 +170,18 @@ func (b *macBuilder) setInfo(buildInfo *buildInfo, name string) error {
|
|||||||
|
|
||||||
func (b *macBuilder) buildProgram(buildInfo *buildInfo, binDest string, name string, arch string) error {
|
func (b *macBuilder) buildProgram(buildInfo *buildInfo, binDest string, name string, arch string) error {
|
||||||
for _, path := range []string{"/Contents/MacOS", "/Contents/Resources"} {
|
for _, path := range []string{"/Contents/MacOS", "/Contents/Resources"} {
|
||||||
if err := os.MkdirAll(filepath.Join(binDest, path), 0755); err != nil {
|
if err := os.MkdirAll(filepath.Join(binDest, path), 0o755); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(b.Icons) > 0 {
|
if len(b.Icons) > 0 {
|
||||||
if err := os.WriteFile(filepath.Join(binDest, "/Contents/Resources/icon.icns"), b.Icons, 0755); err != nil {
|
if err := os.WriteFile(filepath.Join(binDest, "/Contents/Resources/icon.icns"), b.Icons, 0o755); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.WriteFile(filepath.Join(binDest, "/Contents/Info.plist"), b.Manifest, 0755); err != nil {
|
if err := os.WriteFile(filepath.Join(binDest, "/Contents/Info.plist"), b.Manifest, 0o755); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,7 +205,7 @@ func (b *macBuilder) buildProgram(buildInfo *buildInfo, binDest string, name str
|
|||||||
|
|
||||||
func (b *macBuilder) signProgram(buildInfo *buildInfo, binDest string, name string, arch string) error {
|
func (b *macBuilder) signProgram(buildInfo *buildInfo, binDest string, name string, arch string) error {
|
||||||
options := filepath.Join(b.TempDir, "ent.ent")
|
options := filepath.Join(b.TempDir, "ent.ent")
|
||||||
if err := os.WriteFile(options, b.Entitlements, 0777); err != nil {
|
if err := os.WriteFile(options, b.Entitlements, 0o777); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -199,7 +199,7 @@ func buildIcons(baseDir, icon string, variants []iconVariant) error {
|
|||||||
v := v
|
v := v
|
||||||
resizes.Go(func() (err error) {
|
resizes.Go(func() (err error) {
|
||||||
path := filepath.Join(baseDir, v.path)
|
path := filepath.Join(baseDir, v.path)
|
||||||
if err := os.MkdirAll(filepath.Dir(path), 0700); err != nil {
|
if err := os.MkdirAll(filepath.Dir(path), 0o700); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
f, err := os.Create(path)
|
f, err := os.Create(path)
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ func (d *WaylandTestDriver) Screenshot() image.Image {
|
|||||||
return img
|
return img
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *WaylandTestDriver) swaymsg(args ...interface{}) {
|
func (d *WaylandTestDriver) swaymsg(args ...any) {
|
||||||
strs := []string{"--socket", d.socket}
|
strs := []string{"--socket", d.socket}
|
||||||
for _, arg := range args {
|
for _, arg := range args {
|
||||||
strs = append(strs, fmt.Sprint(arg))
|
strs = append(strs, fmt.Sprint(arg))
|
||||||
|
|||||||
@@ -358,7 +358,7 @@ const (
|
|||||||
valueText uint16 = 1
|
valueText uint16 = 1
|
||||||
)
|
)
|
||||||
|
|
||||||
func newValue(valueType uint16, key string, input interface{}) windowsInfoValue {
|
func newValue(valueType uint16, key string, input any) windowsInfoValue {
|
||||||
v := windowsInfoValue{
|
v := windowsInfoValue{
|
||||||
Type: valueType,
|
Type: valueType,
|
||||||
Length: 6,
|
Length: 6,
|
||||||
|
|||||||
+1
-1
@@ -145,7 +145,7 @@ func (d *X11TestDriver) Screenshot() image.Image {
|
|||||||
return img
|
return img
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *X11TestDriver) xdotool(args ...interface{}) string {
|
func (d *X11TestDriver) xdotool(args ...any) string {
|
||||||
d.Helper()
|
d.Helper()
|
||||||
strs := make([]string, len(args))
|
strs := make([]string, len(args))
|
||||||
for i, arg := range args {
|
for i, arg := range args {
|
||||||
|
|||||||
+1
-2
@@ -10,6 +10,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"go/format"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -17,8 +18,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
"go/format"
|
|
||||||
|
|
||||||
"gioui.org/f32"
|
"gioui.org/f32"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user