From f2c2d84c4dbf8c258b0487bc5cec9bee567288e4 Mon Sep 17 00:00:00 2001 From: RodrigoDornelles Date: Wed, 28 Jun 2023 19:10:19 -0300 Subject: [PATCH 1/6] feat: add priority for main --- arduino/libraries/librariesresolver/cpp.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arduino/libraries/librariesresolver/cpp.go b/arduino/libraries/librariesresolver/cpp.go index 4afbd399169..d7a7253c697 100644 --- a/arduino/libraries/librariesresolver/cpp.go +++ b/arduino/libraries/librariesresolver/cpp.go @@ -192,6 +192,8 @@ func ComputePriority(lib *libraries.Library, header, arch string) int { priority += 600 } else if name == header || dirName == header { priority += 500 + } else if name == header+"-main" || dirName == header+"-main" { + priority += 410 } else if name == header+"-master" || dirName == header+"-master" { priority += 400 } else if strings.HasPrefix(name, header) || strings.HasPrefix(dirName, header) { From 00da88480d0d7eec510e9bdc469d672a47007de9 Mon Sep 17 00:00:00 2001 From: RodrigoDornelles Date: Wed, 28 Jun 2023 19:15:35 -0300 Subject: [PATCH 2/6] docs: Update sketch-build-process.md --- docs/sketch-build-process.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/sketch-build-process.md b/docs/sketch-build-process.md index 2f1486eff79..6fad171187e 100644 --- a/docs/sketch-build-process.md +++ b/docs/sketch-build-process.md @@ -101,6 +101,7 @@ The "library name priority" is determined as follows (in order of highest to low | Rule | Example for `Arduino_Low_Power.h` | | ------------------------------------------------------------------------- | --------------------------------- | | The library name matches the include 100% | `Arduino Low Power` | +| The library name matches the include 100%, except with a `-main` suffix | `Arduino Low Power-main` | | The library name matches the include 100%, except with a `-master` suffix | `Arduino Low Power-master` | | The library name has a matching prefix | `Arduino Low Power Whatever` | | The library name has a matching suffix | `Awesome Arduino Low Power` | @@ -113,6 +114,7 @@ The "folder name priority" is determined as follows (in order of highest to lowe | Rule | Example for `Servo.h` | | ------------------------------------------------------------------------ | --------------------------- | | The folder name matches the include 100% | `Servo` | +| The folder name matches the include 100%, except with a `-main` suffix | `Servo-main` | | The folder name matches the include 100%, except with a `-master` suffix | `Servo-master` | | The folder name has a matching prefix | `ServoWhatever` | | The folder name has a matching suffix | `AwesomeServo` | From d40e5182f385d87a9c904349d7be359cb30aba76 Mon Sep 17 00:00:00 2001 From: RodrigoDornelles Date: Mon, 3 Jul 2023 15:06:56 -0300 Subject: [PATCH 3/6] fix: suggestion @cmaglie of priorities libraries Co-authored-by: Cristian Maglie --- arduino/libraries/librariesresolver/cpp.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arduino/libraries/librariesresolver/cpp.go b/arduino/libraries/librariesresolver/cpp.go index d7a7253c697..f817a68f7eb 100644 --- a/arduino/libraries/librariesresolver/cpp.go +++ b/arduino/libraries/librariesresolver/cpp.go @@ -189,11 +189,11 @@ func ComputePriority(lib *libraries.Library, header, arch string) int { } if name == header && dirName == header { - priority += 600 + priority += 700 } else if name == header || dirName == header { - priority += 500 + priority += 600 } else if name == header+"-main" || dirName == header+"-main" { - priority += 410 + priority += 500 } else if name == header+"-master" || dirName == header+"-master" { priority += 400 } else if strings.HasPrefix(name, header) || strings.HasPrefix(dirName, header) { From 9767db1c53746195e538f81f58c8502cdf205758 Mon Sep 17 00:00:00 2001 From: RodrigoDornelles Date: Mon, 3 Jul 2023 15:20:18 -0300 Subject: [PATCH 4/6] tests: implement tests of new priority 'main' --- .../libraries/librariesresolver/cpp_test.go | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/arduino/libraries/librariesresolver/cpp_test.go b/arduino/libraries/librariesresolver/cpp_test.go index e89ac8305a7..614b3b27003 100644 --- a/arduino/libraries/librariesresolver/cpp_test.go +++ b/arduino/libraries/librariesresolver/cpp_test.go @@ -23,12 +23,13 @@ import ( ) var l1 = &libraries.Library{Name: "Calculus Lib", Location: libraries.User} -var l2 = &libraries.Library{Name: "Calculus Lib-master", Location: libraries.User} -var l3 = &libraries.Library{Name: "Calculus Lib Improved", Location: libraries.User} -var l4 = &libraries.Library{Name: "Another Calculus Lib", Location: libraries.User} -var l5 = &libraries.Library{Name: "Yet Another Calculus Lib Improved", Location: libraries.User} -var l6 = &libraries.Library{Name: "Calculus Unified Lib", Location: libraries.User} -var l7 = &libraries.Library{Name: "AnotherLib", Location: libraries.User} +var l2 = &libraries.Library{Name: "Calculus Lib-main", Location: libraries.User} +var l3 = &libraries.Library{Name: "Calculus Lib-master", Location: libraries.User} +var l4 = &libraries.Library{Name: "Calculus Lib Improved", Location: libraries.User} +var l5 = &libraries.Library{Name: "Another Calculus Lib", Location: libraries.User} +var l6 = &libraries.Library{Name: "Yet Another Calculus Lib Improved", Location: libraries.User} +var l7 = &libraries.Library{Name: "Calculus Unified Lib", Location: libraries.User} +var l8 = &libraries.Library{Name: "AnotherLib", Location: libraries.User} var bundleServo = &libraries.Library{Name: "Servo", Location: libraries.IDEBuiltIn, Architectures: []string{"avr", "sam", "samd"}} func runResolver(include string, arch string, libs ...*libraries.Library) *libraries.Library { @@ -114,7 +115,8 @@ func TestCppHeaderPriority(t *testing.T) { require.True(t, r3 > r4) require.True(t, r4 > r5) require.True(t, r5 > r6) - require.True(t, r6 == r7) + require.True(t, r6 > r7) + require.True(t, r7 == r8) } func TestCppHeaderResolverWithNilResult(t *testing.T) { @@ -135,13 +137,14 @@ func TestCppHeaderResolver(t *testing.T) { resolver.headers[header] = librarylist return resolver.ResolveFor(header, "avr").Name } - require.Equal(t, "Calculus Lib", resolve("calculus_lib.h", l1, l2, l3, l4, l5, l6, l7)) - require.Equal(t, "Calculus Lib-master", resolve("calculus_lib.h", l2, l3, l4, l5, l6, l7)) - require.Equal(t, "Calculus Lib Improved", resolve("calculus_lib.h", l3, l4, l5, l6, l7)) - require.Equal(t, "Another Calculus Lib", resolve("calculus_lib.h", l4, l5, l6, l7)) - require.Equal(t, "Yet Another Calculus Lib Improved", resolve("calculus_lib.h", l5, l6, l7)) - require.Equal(t, "Calculus Unified Lib", resolve("calculus_lib.h", l6, l7)) - require.Equal(t, "Calculus Unified Lib", resolve("calculus_lib.h", l7, l6)) + require.Equal(t, "Calculus Lib", resolve("calculus_lib.h", l1, l2, l3, l4, l5, l6, l7, l8)) + require.Equal(t, "Calculus Lib-main", resolve("calculus_lib.h", l2, l3, l4, l5, l6, l7, l8)) + require.Equal(t, "Calculus Lib-master", resolve("calculus_lib.h", l3, l4, l5, l6, l7, l8)) + require.Equal(t, "Calculus Lib Improved", resolve("calculus_lib.h", l4, l5, l6, l7, l8)) + require.Equal(t, "Another Calculus Lib", resolve("calculus_lib.h", l5, l6, l7, l8)) + require.Equal(t, "Yet Another Calculus Lib Improved", resolve("calculus_lib.h", l6, l7, l8)) + require.Equal(t, "Calculus Unified Lib", resolve("calculus_lib.h", l7, l8)) + require.Equal(t, "Calculus Unified Lib", resolve("calculus_lib.h", l8, l7)) } func TestCppHeaderResolverWithLibrariesInStrangeDirectoryNames(t *testing.T) { From 849c3b6afd8fe045d12a4092eef989521c98296d Mon Sep 17 00:00:00 2001 From: RodrigoDornelles Date: Mon, 3 Jul 2023 15:39:20 -0300 Subject: [PATCH 5/6] fix: build cpp_test.go --- arduino/libraries/librariesresolver/cpp_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/arduino/libraries/librariesresolver/cpp_test.go b/arduino/libraries/librariesresolver/cpp_test.go index 614b3b27003..b8b1cce2254 100644 --- a/arduino/libraries/librariesresolver/cpp_test.go +++ b/arduino/libraries/librariesresolver/cpp_test.go @@ -110,6 +110,7 @@ func TestCppHeaderPriority(t *testing.T) { r5 := ComputePriority(l5, "calculus_lib.h", "avr") r6 := ComputePriority(l6, "calculus_lib.h", "avr") r7 := ComputePriority(l7, "calculus_lib.h", "avr") + r8 := ComputePriority(l8, "calculus_lib.h", "avr") require.True(t, r1 > r2) require.True(t, r2 > r3) require.True(t, r3 > r4) From ac53f7743f5e80f8046e27c17d71f062d3d8a72a Mon Sep 17 00:00:00 2001 From: RodrigoDornelles Date: Mon, 3 Jul 2023 15:49:44 -0300 Subject: [PATCH 6/6] fix: TestClosestMatchWithTotallyDifferentNames in cpp_test.go --- arduino/libraries/librariesresolver/cpp_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arduino/libraries/librariesresolver/cpp_test.go b/arduino/libraries/librariesresolver/cpp_test.go index e89ac8305a7..6fb5c9f04ab 100644 --- a/arduino/libraries/librariesresolver/cpp_test.go +++ b/arduino/libraries/librariesresolver/cpp_test.go @@ -91,14 +91,14 @@ func TestArchitecturePriority(t *testing.T) { func TestClosestMatchWithTotallyDifferentNames(t *testing.T) { libraryList := libraries.List{} - libraryList.Add(l5) libraryList.Add(l6) libraryList.Add(l7) + libraryList.Add(l8) resolver := NewCppResolver() resolver.headers["XYZ.h"] = libraryList res := resolver.ResolveFor("XYZ.h", "xyz") require.NotNil(t, res) - require.Equal(t, l7, res, "selected library") + require.Equal(t, l8, res, "selected library") } func TestCppHeaderPriority(t *testing.T) {