From 045e41768d4e1509b9eb3f6fa7f45e81742060b5 Mon Sep 17 00:00:00 2001 From: CrabKing <127689590+Crab-K1ng@users.noreply.github.com> Date: Sun, 30 Nov 2025 22:35:05 +0000 Subject: [PATCH 1/2] add toml config --- example/flint.toml | 13 +++++++ go.mod | 1 + go.sum | 2 ++ internal/toml/buildconfig.go | 17 +++++++++ internal/toml/config.go | 65 ++++++++++++++++++++++++++++++++++ internal/toml/packageconfig.go | 21 +++++++++++ scripts/build.sh | 0 7 files changed, 119 insertions(+) create mode 100644 example/flint.toml create mode 100644 internal/toml/buildconfig.go create mode 100644 internal/toml/config.go create mode 100644 internal/toml/packageconfig.go mode change 100644 => 100755 scripts/build.sh diff --git a/example/flint.toml b/example/flint.toml new file mode 100644 index 0000000..d36e943 --- /dev/null +++ b/example/flint.toml @@ -0,0 +1,13 @@ +[package] + name = "example-package" + version = "0.1.0" + authors = ["author1", "author2"] + description = "A example library for Flint programming language." + license = "MIT" + repository = "https://github.com/example/example-repo" + +[build] + type = "native" + language = "c" + entry = "example.c" + output = "example" diff --git a/go.mod b/go.mod index 25aea28..5349b7c 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module flint go 1.25.4 require ( + github.com/BurntSushi/toml v1.5.0 // indirect github.com/llir/llvm v0.3.6 // indirect github.com/mewmew/float v0.0.0-20201204173432-505706aa38fa // indirect github.com/pkg/errors v0.9.1 // indirect diff --git a/go.sum b/go.sum index 9ed4944..1003746 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= +github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= diff --git a/internal/toml/buildconfig.go b/internal/toml/buildconfig.go new file mode 100644 index 0000000..44ce897 --- /dev/null +++ b/internal/toml/buildconfig.go @@ -0,0 +1,17 @@ +package toml + +type BuildConfig struct { + Type string `toml:"type"` + Language string `toml:"language"` + Entry string `toml:"entry"` + Output string `toml:"output"` +} + +func newExampleBuildConfig() BuildConfig { + return BuildConfig{ + Type: "native", + Language: "c", + Entry: "example.c", + Output: "example", + } +} diff --git a/internal/toml/config.go b/internal/toml/config.go new file mode 100644 index 0000000..ce448d2 --- /dev/null +++ b/internal/toml/config.go @@ -0,0 +1,65 @@ +package toml + +import ( + "fmt" + "os" + + "github.com/BurntSushi/toml" +) + +type ( + ProjectConfig struct { + PackageConfig PackageConfig `toml:"package"` + BuildConfig BuildConfig `toml:"build"` + } +) + +var configFile = "flint.toml" + +func newExampleProjectConfig() ProjectConfig { + return ProjectConfig{ + PackageConfig: newExamplePackageConfig(), + BuildConfig: newExampleBuildConfig(), + } +} + +func NewExampleProjectConfigAt(path string) { + SaveProjectConfigAt(newExampleProjectConfig(), path) +} + +func LoadProjectConfig() (ProjectConfig, error) { + return LoadProjectConfigAt("") +} + +func LoadProjectConfigAt(path string) (ProjectConfig, error){ + var config ProjectConfig + _, err := toml.DecodeFile(path + "/" + configFile, &config) + return config, err +} + +func SaveProjectConfig(config ProjectConfig) { + SaveProjectConfigAt(config, "") +} + +func SaveProjectConfigAt(config ProjectConfig, path string) error { + os.MkdirAll(path, os.ModePerm) + + file, fileErr := os.Create(path + "/" + configFile) + + if fileErr != nil { + return fileErr + } + + err := toml.NewEncoder(file).Encode(config) + + if err != nil { + return err + } + return nil +} + +func PrintProjectConfig(config ProjectConfig) { + fmt.Printf("%+v", config) +} + + diff --git a/internal/toml/packageconfig.go b/internal/toml/packageconfig.go new file mode 100644 index 0000000..281ab03 --- /dev/null +++ b/internal/toml/packageconfig.go @@ -0,0 +1,21 @@ +package toml + +type PackageConfig struct { + Name string `toml:"name"` + Version string `toml:"version"` + Authors []string `toml:"authors"` + Description string `toml:"description"` + License string `toml:"license"` + Repository string `toml:"repository"` +} + +func newExamplePackageConfig() PackageConfig { + return PackageConfig{ + Name: "example-package", + Version: "0.1.0", + Authors: []string{"author1", "author2"}, + Description: "A example library for Flint programming language.", + License: "MIT", + Repository: "https://github.com/example/example-repo", + } +} diff --git a/scripts/build.sh b/scripts/build.sh old mode 100644 new mode 100755 From 44c6985e901d251eb2f62c70689161defebda3e3 Mon Sep 17 00:00:00 2001 From: CrabKing <127689590+Crab-K1ng@users.noreply.github.com> Date: Tue, 2 Dec 2025 23:28:44 +0000 Subject: [PATCH 2/2] make all functions internal --- internal/toml/buildconfig.go | 6 +++--- internal/toml/config.go | 22 +++++++++++----------- internal/toml/packageconfig.go | 6 +++--- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/internal/toml/buildconfig.go b/internal/toml/buildconfig.go index 44ce897..904d007 100644 --- a/internal/toml/buildconfig.go +++ b/internal/toml/buildconfig.go @@ -1,14 +1,14 @@ package toml -type BuildConfig struct { +type buildConfig struct { Type string `toml:"type"` Language string `toml:"language"` Entry string `toml:"entry"` Output string `toml:"output"` } -func newExampleBuildConfig() BuildConfig { - return BuildConfig{ +func newExampleBuildConfig() buildConfig { + return buildConfig{ Type: "native", Language: "c", Entry: "example.c", diff --git a/internal/toml/config.go b/internal/toml/config.go index ce448d2..474b045 100644 --- a/internal/toml/config.go +++ b/internal/toml/config.go @@ -9,8 +9,8 @@ import ( type ( ProjectConfig struct { - PackageConfig PackageConfig `toml:"package"` - BuildConfig BuildConfig `toml:"build"` + PackageConfig packageConfig `toml:"package"` + BuildConfig buildConfig `toml:"build"` } ) @@ -23,25 +23,25 @@ func newExampleProjectConfig() ProjectConfig { } } -func NewExampleProjectConfigAt(path string) { - SaveProjectConfigAt(newExampleProjectConfig(), path) +func newExampleProjectConfigAt(path string) { + saveProjectConfigAt(newExampleProjectConfig(), path) } -func LoadProjectConfig() (ProjectConfig, error) { - return LoadProjectConfigAt("") +func loadProjectConfig() (ProjectConfig, error) { + return loadProjectConfigAt("") } -func LoadProjectConfigAt(path string) (ProjectConfig, error){ +func loadProjectConfigAt(path string) (ProjectConfig, error){ var config ProjectConfig _, err := toml.DecodeFile(path + "/" + configFile, &config) return config, err } -func SaveProjectConfig(config ProjectConfig) { - SaveProjectConfigAt(config, "") +func saveProjectConfig(config ProjectConfig) { + saveProjectConfigAt(config, "") } -func SaveProjectConfigAt(config ProjectConfig, path string) error { +func saveProjectConfigAt(config ProjectConfig, path string) error { os.MkdirAll(path, os.ModePerm) file, fileErr := os.Create(path + "/" + configFile) @@ -58,7 +58,7 @@ func SaveProjectConfigAt(config ProjectConfig, path string) error { return nil } -func PrintProjectConfig(config ProjectConfig) { +func printProjectConfig(config ProjectConfig) { fmt.Printf("%+v", config) } diff --git a/internal/toml/packageconfig.go b/internal/toml/packageconfig.go index 281ab03..860854c 100644 --- a/internal/toml/packageconfig.go +++ b/internal/toml/packageconfig.go @@ -1,6 +1,6 @@ package toml -type PackageConfig struct { +type packageConfig struct { Name string `toml:"name"` Version string `toml:"version"` Authors []string `toml:"authors"` @@ -9,8 +9,8 @@ type PackageConfig struct { Repository string `toml:"repository"` } -func newExamplePackageConfig() PackageConfig { - return PackageConfig{ +func newExamplePackageConfig() packageConfig { + return packageConfig{ Name: "example-package", Version: "0.1.0", Authors: []string{"author1", "author2"},