diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e5b60a2062..efa10a39e3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,7 +42,7 @@ jobs: uses: orhun/git-cliff-action@v3 id: git-cliff with: - args: -vv --latest --strip header + args: -vv --current --strip header env: OUTPUT: CHANGES.md - name: Release diff --git a/CHANGELOG.md b/CHANGELOG.md index 56c26d5253..5949067a00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,21 @@ All notable changes to this project will be documented in this file. -## [unreleased] +## [0.0.1-alpha.15] - 2024-03-13 ### ๐Ÿš€ Features - Module file declarations, fixes +### ๐Ÿ› Bug Fixes + +- Fix + +- Fix multi file function resolution + +- Fix scope + + ## [0.0.1-alpha.14] - 2024-03-11 ### ๐Ÿ› Bug Fixes @@ -28,6 +37,8 @@ All notable changes to this project will be documented in this file. - Fix span in lalrpop - Fix on type qualifier lowering +- Fix ci2 + ### โš™๏ธ Miscellaneous Tasks @@ -97,6 +108,11 @@ All notable changes to this project will be documented in this file. - Struct support +### ๐Ÿงช Testing + +- Test + + ## [0.0.1-alpha.7] - 2024-02-17 ### ๐Ÿš€ Features @@ -114,6 +130,8 @@ All notable changes to this project will be documented in this file. ### ๐Ÿ› Bug Fixes - Fix a miscompilation +- Fixes + ## [0.0.1-alpha.5] - 2024-02-14 @@ -121,6 +139,8 @@ All notable changes to this project will be documented in this file. - *(linker)* Fix linker on distros like ubuntu - *(ci)* Ci improvements +- Fix ci + ## [0.0.1-alpha.4] - 2024-02-14 @@ -156,6 +176,11 @@ All notable changes to this project will be documented in this file. - Compile ifs +### ๐Ÿ› Bug Fixes + +- Fix + + ### ๐ŸŽจ Styling - Format @@ -166,4 +191,29 @@ All notable changes to this project will be documented in this file. - Update deps - Update version +## [0.0.1-alpha.1] - 2024-02-09 + +### ๐Ÿ› Bug Fixes + +- Fix double return + +- Fixes + +- Fix + +- Fix + + +### ๐ŸŽจ Styling + +- Style + + +### โš™๏ธ Miscellaneous Tasks + +- Ci + +- Ci + + diff --git a/cliff.toml b/cliff.toml new file mode 100644 index 0000000000..f7e03a3a55 --- /dev/null +++ b/cliff.toml @@ -0,0 +1,89 @@ +# git-cliff ~ default configuration file +# https://git-cliff.org/docs/configuration +# +# Lines starting with "#" are comments. +# Configuration options are organized into tables and keys. +# See documentation for more information on available options. + +[changelog] +# changelog header +header = """ +# Changelog\n +All notable changes to this project will be documented in this file.\n +""" +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | striptags | trim | upper_first }} + {% for commit in commits %} + - {% if commit.scope %}*({{ commit.scope }})* {% endif %}\ + {% if commit.breaking %}[**breaking**] {% endif %}\ + {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" +# template for the changelog footer +footer = """ + +""" +# remove the leading and trailing s +trim = true +# postprocessors +postprocessors = [ + # { pattern = '', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL +] + +[git] +# parse the commits based on https://www.conventionalcommits.org +conventional_commits = true +# filter out the commits that are not conventional +filter_unconventional = false +# process each line of a commit as an individual commit +split_commits = false +# regex for preprocessing the commit messages +commit_preprocessors = [ + # Replace issue numbers + #{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](/issues/${2}))"}, + # Check spelling of the commit with https://github.com/crate-ci/typos + # If the spelling is incorrect, it will be automatically fixed. + #{ pattern = '.*', replace_command = 'typos --write-changes -' }, +] +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^feat", group = "๐Ÿš€ Features" }, + { message = "^fix", group = "๐Ÿ› Bug Fixes" }, + { message = "^doc", group = "๐Ÿ“š Documentation" }, + { message = "^perf", group = "โšก Performance" }, + { message = "^refactor", group = "๐Ÿšœ Refactor" }, + { message = "^style", group = "๐ŸŽจ Styling" }, + { message = "^test", group = "๐Ÿงช Testing" }, + { message = "^chore\\(release\\): prepare for", skip = true }, + { message = "^chore\\(deps.*\\)", skip = true }, + { message = "^chore\\(pr\\)", skip = true }, + { message = "^chore\\(pull\\)", skip = true }, + { message = "^chore|^ci", group = "โš™๏ธ Miscellaneous Tasks" }, + { body = ".*security", group = "๐Ÿ›ก๏ธ Security" }, + { message = "^revert", group = "โ—€๏ธ Revert" }, +] +# protect breaking changes from being skipped due to matching a skipping commit_parser +protect_breaking_commits = false +# filter out the commits that are not matched by commit parsers +filter_commits = false +# regex for matching git tags +# tag_pattern = "v[0-9].*" +# regex for skipping tags +# skip_tags = "" +# regex for ignoring tags +# ignore_tags = "" +# sort the tags topologically +topo_order = false +# sort the commits inside sections by oldest/newest order +sort_commits = "oldest" +# limit the number of commits included in the changelog. +# limit_commits = 42 diff --git a/lib/edlang_driver/tests/programs.rs b/lib/edlang_driver/tests/programs.rs index f31998e289..f96e55d5ba 100644 --- a/lib/edlang_driver/tests/programs.rs +++ b/lib/edlang_driver/tests/programs.rs @@ -11,18 +11,19 @@ mod common; #[test_case(include_str!("programs/refs.ed"), "refs", false, 2, &[] ; "refs")] #[test_case(include_str!("programs/struct.ed"), "struct", false, 5, &[] ; "r#struct")] #[test_case(include_str!("programs/casts.ed"), "casts", false, 2, &[] ; "casts")] -#[test_case(TEST_ADD, "TEST_ADD", false, 2, &[] ; "TEST_ADD")] -#[test_case(TEST_SUB, "TEST_SUB", false, 1, &[] ; "TEST_SUB")] -#[test_case(TEST_MUL, "TEST_MUL", false, 4, &[] ; "TEST_MUL")] -#[test_case(TEST_DIV, "TEST_DIV", false, 2, &[] ; "TEST_DIV")] -#[test_case(TEST_REM, "TEST_REM", false, 0, &[] ; "TEST_REM")] -#[test_case(TEST_IF_BOTH, "TEST_IF_BOTH", false, 1, &[] ; "TEST_IF_BOTH")] -#[test_case(TEST_IF_BOTH, "TEST_IF_BOTH", false, 2, &["a"] ; "TEST_IF_BOTH args")] -#[test_case(TEST_IF_NO_ELSE, "TEST_IF_NO_ELSE", false, 1, &[] ; "TEST_IF_NO_ELSE")] -#[test_case(TEST_IF_NO_ELSE, "TEST_IF_NO_ELSE", false, 2, &["a"] ; "TEST_IF_NO_ELSE args")] +#[test_case(TEST_ADD, "test_add", false, 2, &[] ; "test_add")] +#[test_case(TEST_SUB, "test_sub", false, 1, &[] ; "test_sub")] +#[test_case(TEST_MUL, "test_mul", false, 4, &[] ; "TEST_MUL")] +#[test_case(TEST_DIV, "test_div", false, 2, &[] ; "TEST_DIV")] +#[test_case(TEST_REM, "test_rem", false, 0, &[] ; "TEST_REM")] +#[test_case(TEST_IF_BOTH, "test_if_both", false, 1, &[] ; "test_if_both")] +#[test_case(TEST_IF_BOTH, "test_if_both", false, 2, &["a"] ; "test_if_both_args")] +#[test_case(TEST_IF_NO_ELSE, "test_if_no_else", false, 1, &[] ; "test_if_no_else")] +#[test_case(TEST_IF_NO_ELSE, "test_if_no_else", false, 2, &["a"] ; "test_if_no_else_args")] fn example_tests(source: &str, name: &str, is_library: bool, status_code: i32, args: &[&str]) { let program = compile_program(source, name, is_library).unwrap(); + dbg!(&program); assert!(program.binary_file.exists(), "program not compiled"); let mut result = run_program(&program.binary_file, args).unwrap(); let status = result.wait().unwrap(); @@ -35,47 +36,47 @@ fn example_tests(source: &str, name: &str, is_library: bool, status_code: i32, a } const TEST_ADD: &str = r#" -mod Main { + pub fn main() -> i32 { let b: i32 = 1 + 1; return b; } -} + "#; const TEST_SUB: &str = r#" -mod Main { + pub fn main() -> i32 { let b: i32 = 2 - 1; return b; } -} + "#; const TEST_MUL: &str = r#" -mod Main { + pub fn main() -> i32 { let b: i32 = 2 * 2; return b; } -} + "#; const TEST_DIV: &str = r#" -mod Main { + pub fn main() -> i32 { let b: i32 = 4 / 2; return b; } -} + "#; const TEST_REM: &str = r#" -mod Main { + pub fn main() -> i32 { let b: i32 = 4 % 2; return b; } -} + "#; const TEST_IF_BOTH: &str = r#" -mod Main { + pub fn main(argc: i32) -> i32 { if argc == 1 { return 1; @@ -83,15 +84,15 @@ mod Main { return 2; } } -} + "#; const TEST_IF_NO_ELSE: &str = r#" -mod Main { + pub fn main(argc: i32) -> i32 { if argc == 1 { return 1; } return 2; } -} + "#; diff --git a/lib/edlang_driver/tests/programs/basic_ifs.ed b/lib/edlang_driver/tests/programs/basic_ifs.ed index 897de2d64f..15dda0ead8 100644 --- a/lib/edlang_driver/tests/programs/basic_ifs.ed +++ b/lib/edlang_driver/tests/programs/basic_ifs.ed @@ -1,19 +1,18 @@ -mod Main { - fn add(a: i32, b: i32) -> i32 { - return a + b; - } - fn check(a: i32) -> i32 { - if a == 2 { - return a; - } else { - return 0; - } - } +fn add(a: i32, b: i32) -> i32 { + return a + b; +} - pub fn main() -> i32 { - let x: i32 = 2 + 3; - let y: i32 = add(x, 4); - return y; +fn check(a: i32) -> i32 { + if a == 2 { + return a; + } else { + return 0; } } + +pub fn main() -> i32 { + let x: i32 = 2 + 3; + let y: i32 = add(x, 4); + return y; +} diff --git a/lib/edlang_driver/tests/programs/casts.ed b/lib/edlang_driver/tests/programs/casts.ed index 032b1ff5a2..494c8d96e6 100644 --- a/lib/edlang_driver/tests/programs/casts.ed +++ b/lib/edlang_driver/tests/programs/casts.ed @@ -1,8 +1,5 @@ -mod Main { - - pub fn main(argc: i32, argv: *const *const u8) -> i64 { - let a: i32 = 2; - let b: i64 = a as i64; - return b; - } +pub fn main(argc: i32, argv: *const *const u8) -> i64 { + let a: i32 = 2; + let b: i64 = a as i64; + return b; } diff --git a/lib/edlang_driver/tests/programs/factorial.ed b/lib/edlang_driver/tests/programs/factorial.ed index 7123369fb5..707b287fd2 100644 --- a/lib/edlang_driver/tests/programs/factorial.ed +++ b/lib/edlang_driver/tests/programs/factorial.ed @@ -1,14 +1,13 @@ -mod Main { - pub fn main() -> i32 { - let b: i32 = factorial(4); - return b; - } - fn factorial(n: i32) -> i32 { - if n == 1 { - return n; - } else { - return n * factorial(n - 1); - } +pub fn main() -> i32 { + let b: i32 = factorial(4); + return b; +} + +fn factorial(n: i32) -> i32 { + if n == 1 { + return n; + } else { + return n * factorial(n - 1); } } diff --git a/lib/edlang_driver/tests/programs/refs.ed b/lib/edlang_driver/tests/programs/refs.ed index b7b3762119..3163560719 100644 --- a/lib/edlang_driver/tests/programs/refs.ed +++ b/lib/edlang_driver/tests/programs/refs.ed @@ -1,13 +1,12 @@ -mod Main { - pub fn main() -> i64 { - let mut a: i64 = 0; - hello(&mut a); +pub fn main() -> i64 { + let mut a: i64 = 0; - return a; - } + hello(&mut a); - pub fn hello(a: &mut i32) { - *a = 2; - } + return a; +} + +pub fn hello(a: &mut i32) { + *a = 2; } diff --git a/lib/edlang_driver/tests/programs/simple.ed b/lib/edlang_driver/tests/programs/simple.ed index 0734438deb..7bd0eede3d 100644 --- a/lib/edlang_driver/tests/programs/simple.ed +++ b/lib/edlang_driver/tests/programs/simple.ed @@ -1,11 +1,9 @@ -mod Main { - pub fn main(argc: i64) -> i64 { - let mut a: i64 = 0; +pub fn main(argc: i64) -> i64 { + let mut a: i64 = 0; - if argc > 2 { - a = 1; - } - - return a; + if argc > 2 { + a = 1; } + + return a; } diff --git a/lib/edlang_driver/tests/programs/struct.ed b/lib/edlang_driver/tests/programs/struct.ed index ee3a9f1878..5c0b7e78d7 100644 --- a/lib/edlang_driver/tests/programs/struct.ed +++ b/lib/edlang_driver/tests/programs/struct.ed @@ -1,20 +1,18 @@ -mod Main { - struct Hello { - a: i32, - b: i64, - } +struct Hello { + a: i32, + b: i64, +} - pub fn main() -> i64 { - let x: Hello = Hello { - a: 2, - b: 3, - }; - hello(&mut x); - return x.b; - } +pub fn main() -> i64 { + let x: Hello = Hello { + a: 2, + b: 3, + }; + hello(&mut x); + return x.b; +} - pub fn hello(a: &mut Hello) { - a.b = 5; - } +pub fn hello(a: &mut Hello) { + a.b = 5; } diff --git a/lib/edlang_driver/tests/programs/while.ed b/lib/edlang_driver/tests/programs/while.ed index 825b4d310d..f44bd899de 100644 --- a/lib/edlang_driver/tests/programs/while.ed +++ b/lib/edlang_driver/tests/programs/while.ed @@ -1,11 +1,9 @@ -mod Main { - pub fn main(argc: i64) -> i64 { - let mut a: i64 = 0; +pub fn main(argc: i64) -> i64 { + let mut a: i64 = 0; - while a < 10 { - a = a + 1; - } - - return a; + while a < 10 { + a = a + 1; } + + return a; }