From 6750a912225493c8e5ab60cff17469af5110f7c7 Mon Sep 17 00:00:00 2001 From: Miguel Palhas Date: Mon, 7 Oct 2024 16:35:17 +0100 Subject: [PATCH 1/8] Adds support for solidity --- syntax.json | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/syntax.json b/syntax.json index 0de8d02..6b0e066 100644 --- a/syntax.json +++ b/syntax.json @@ -837,5 +837,21 @@ } } ] - } + }, + { + "language": "Solidity", + "markers": [ + { + "type": "line", + "pattern": "//" + }, + { + "type": "block", + "pattern": { + "start": "/\\*", + "end": "\\*/" + } + } + ] + }, ] From 3442688932d4d6f1d221ee16d746318e85b6fb6b Mon Sep 17 00:00:00 2001 From: Miguel Palhas Date: Mon, 7 Oct 2024 16:38:24 +0100 Subject: [PATCH 2/8] code review --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2fdbd0d..22a202f 100644 --- a/README.md +++ b/README.md @@ -172,6 +172,7 @@ Only a single milestone can be specified. If the milestone does not exist, it wi - Scala - SCSS - Shell +- Solidity - SQL - Starlark - Swift From 26ed78e3f4de621d970ccb3a8c68ca018cf3d640 Mon Sep 17 00:00:00 2001 From: Miguel Palhas Date: Tue, 8 Oct 2024 11:55:07 +0100 Subject: [PATCH 3/8] code review --- tests/test_new.diff | 22 ++++++++++++++++++++++ tests/test_todo_parser.py | 3 +++ 2 files changed, 25 insertions(+) diff --git a/tests/test_new.diff b/tests/test_new.diff index 8df409d..cf6c6b9 100644 --- a/tests/test_new.diff +++ b/tests/test_new.diff @@ -539,3 +539,25 @@ index 0000000..0ce9b1a +TODO: Create an issue for TODO +-} +sum a b = a + b +diff --git a/tests/Counter.sol b/tests/Counter.sol +new file mode 100644 +index 0000000..d340f6a +--- /dev/null ++++ b/src/Counter.sol +@@ -0,0 +1,18 @@ ++contract Counter { ++ // TODO: Test this ++ // Do it ++ // labels: urgent ++ ++ /* ++ TODO: Test this too ++ Do it ASAP ++ labels: urgent ++ */ + ++ /** ++ * TODO: And this too ++ * labels: urgent ++ */ ++} diff --git a/tests/test_todo_parser.py b/tests/test_todo_parser.py index 62c8622..cefe458 100644 --- a/tests/test_todo_parser.py +++ b/tests/test_todo_parser.py @@ -100,6 +100,9 @@ class NewIssueTests(unittest.TestCase): def test_liquid_issues(self): self.assertEqual(count_issues_for_file_type(self.raw_issues, 'liquid'), 3) + def test_liquid_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'solidity'), 3) + class ClosedIssueTests(unittest.TestCase): # Check for removed TODOs across the files specified. def setUp(self): From e88cba0c8233287a752c9ab414fcfa0da929ffc2 Mon Sep 17 00:00:00 2001 From: Miguel Palhas Date: Tue, 8 Oct 2024 11:57:17 +0100 Subject: [PATCH 4/8] code review --- syntax.json | 2 +- tests/test_todo_parser.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax.json b/syntax.json index 6b0e066..8b5e0cf 100644 --- a/syntax.json +++ b/syntax.json @@ -853,5 +853,5 @@ } } ] - }, + } ] diff --git a/tests/test_todo_parser.py b/tests/test_todo_parser.py index cefe458..8672d0b 100644 --- a/tests/test_todo_parser.py +++ b/tests/test_todo_parser.py @@ -100,7 +100,7 @@ class NewIssueTests(unittest.TestCase): def test_liquid_issues(self): self.assertEqual(count_issues_for_file_type(self.raw_issues, 'liquid'), 3) - def test_liquid_issues(self): + def test_solidity_issues(self): self.assertEqual(count_issues_for_file_type(self.raw_issues, 'solidity'), 3) class ClosedIssueTests(unittest.TestCase): From 4f3709febbadf568135ee5f03d4497923fed815e Mon Sep 17 00:00:00 2001 From: Miguel Palhas Date: Tue, 8 Oct 2024 12:32:18 +0100 Subject: [PATCH 5/8] code review --- main.py | 1 + syntax.json | 2 +- tests/test_closed.diff | 26 ++++++ tests/test_new.diff | 6 +- tests/test_todo_parser.py | 161 +++++++++++++++++++------------------- 5 files changed, 115 insertions(+), 81 deletions(-) diff --git a/main.py b/main.py index a9155eb..12dbab6 100644 --- a/main.py +++ b/main.py @@ -662,6 +662,7 @@ class TodoParser(object): if value.lower() in attributes: for syntax_details in self.syntax_dict: if syntax_details['language'] == language_name: + print(self.languages_dict[language_name]) return syntax_details['markers'], self.languages_dict[language_name]['ace_mode'] return None, None diff --git a/syntax.json b/syntax.json index 8b5e0cf..a870372 100644 --- a/syntax.json +++ b/syntax.json @@ -843,7 +843,7 @@ "markers": [ { "type": "line", - "pattern": "//" + "pattern": "///?" }, { "type": "block", diff --git a/tests/test_closed.diff b/tests/test_closed.diff index bd2a940..cfa5f79 100644 --- a/tests/test_closed.diff +++ b/tests/test_closed.diff @@ -483,3 +483,29 @@ index 525e25d..ba4e68d 100644 -TODO: Create an issue for TODO --} -sum a b = a + b +diff --git a/tests/Counter.sol b/tests/Counter.sol +new file mode 100644 +index 0000000..d340f6a +--- a/src/Counter.sol ++++ b/src/Counter.sol +@@ -0,0 +1,20 @@ +-contract Counter { +- // TODO: Test this +- // Do it +- // labels: urgent + +- /// TODO: Natspec comment +- /// Do it +- /// labels: urgent +- +- /* +- TODO: Test this too +- Do it ASAP +- labels: urgent +- */ + +- /** +- * TODO: And this too +- * labels: urgent +- */ +-} diff --git a/tests/test_new.diff b/tests/test_new.diff index cf6c6b9..4a8e1d7 100644 --- a/tests/test_new.diff +++ b/tests/test_new.diff @@ -544,11 +544,15 @@ new file mode 100644 index 0000000..d340f6a --- /dev/null +++ b/src/Counter.sol -@@ -0,0 +1,18 @@ +@@ -0,0 +1,20 @@ +contract Counter { + // TODO: Test this + // Do it + // labels: urgent + ++ /// TODO: Natspec comment ++ /// Do it ++ /// labels: urgent + + /* + TODO: Test this too diff --git a/tests/test_todo_parser.py b/tests/test_todo_parser.py index 8672d0b..c54ff1d 100644 --- a/tests/test_todo_parser.py +++ b/tests/test_todo_parser.py @@ -22,86 +22,86 @@ class NewIssueTests(unittest.TestCase): parser.syntax_dict = json.load(syntax_json) self.raw_issues = parser.parse(diff_file) - def test_python_issues(self): - # Includes 4 tests for Starlark. - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 8) - - def test_yaml_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'yaml'), 2) - - def test_php_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'php'), 4) - - def test_java_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'java'), 2) - - def test_javascript_issues(self): - # Includes 1 test for JSON with Comments, 1 test for JSON5, 3 tests for TSX. - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'javascript'), 5) - - def test_ruby_issues(self): - # Includes 2 tests for Crystal. - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'ruby'), 5) - - def test_abap_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'abap'), 2) - - def test_sql_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'sql'), 1) - - def test_tex_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'tex'), 2) - - def test_julia_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'julia'), 2) - - def test_starlark_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 8) - - def test_autohotkey_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'autohotkey'), 1) - - def test_handlebars_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'handlebars'), 2) - - def test_org_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'text'), 8) - - def test_scss_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'scss'), 2) - - def test_twig_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'twig'), 2) - - def test_makefile_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'makefile'), 3) - - def test_md_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'markdown'), 8) - - def test_r_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'r'), 2) - - def test_haskell_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'haskell'), 4) - - def test_clojure_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'clojure'), 2) - - def test_nix_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'nix'), 2) - - def test_xaml_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'xml'), 2) - - def test_c_cpp_like_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'c_cpp'), 2) - - def test_liquid_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'liquid'), 3) + # def test_python_issues(self): + # # Includes 4 tests for Starlark. + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 8) + # + # def test_yaml_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'yaml'), 2) + # + # def test_php_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'php'), 4) + # + # def test_java_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'java'), 2) + # + # def test_javascript_issues(self): + # # Includes 1 test for JSON with Comments, 1 test for JSON5, 3 tests for TSX. + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'javascript'), 5) + # + # def test_ruby_issues(self): + # # Includes 2 tests for Crystal. + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'ruby'), 5) + # + # def test_abap_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'abap'), 2) + # + # def test_sql_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'sql'), 1) + # + # def test_tex_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'tex'), 2) + # + # def test_julia_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'julia'), 2) + # + # def test_starlark_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 8) + # + # def test_autohotkey_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'autohotkey'), 1) + # + # def test_handlebars_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'handlebars'), 2) + # + # def test_org_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'text'), 8) + # + # def test_scss_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'scss'), 2) + # + # def test_twig_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'twig'), 2) + # + # def test_makefile_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'makefile'), 3) + # + # def test_md_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'markdown'), 8) + # + # def test_r_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'r'), 2) + # + # def test_haskell_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'haskell'), 4) + # + # def test_clojure_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'clojure'), 2) + # + # def test_nix_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'nix'), 2) + # + # def test_xaml_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'xml'), 2) + # + # def test_c_cpp_like_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'c_cpp'), 2) + # + # def test_liquid_issues(self): + # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'liquid'), 3) def test_solidity_issues(self): - self.assertEqual(count_issues_for_file_type(self.raw_issues, 'solidity'), 3) + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'solidity'), 4) class ClosedIssueTests(unittest.TestCase): # Check for removed TODOs across the files specified. @@ -183,13 +183,16 @@ class ClosedIssueTests(unittest.TestCase): def test_xaml_issues(self): self.assertEqual(count_issues_for_file_type(self.raw_issues, 'xml'), 2) - + def test_c_cpp_like_issues(self): self.assertEqual(count_issues_for_file_type(self.raw_issues, 'c_cpp'), 2) def test_liquid_issues(self): self.assertEqual(count_issues_for_file_type(self.raw_issues, 'liquid'), 3) + def test_solidity_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'solidity'), 4) + class IgnorePatternTests(unittest.TestCase): From d6f93f374885639af0c8b3e01a8e1665065c2cfb Mon Sep 17 00:00:00 2001 From: Miguel Palhas Date: Tue, 8 Oct 2024 15:57:45 +0100 Subject: [PATCH 6/8] code review --- tests/test_todo_parser.py | 154 +++++++++++++++++++------------------- 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/tests/test_todo_parser.py b/tests/test_todo_parser.py index c54ff1d..f6576ff 100644 --- a/tests/test_todo_parser.py +++ b/tests/test_todo_parser.py @@ -22,83 +22,83 @@ class NewIssueTests(unittest.TestCase): parser.syntax_dict = json.load(syntax_json) self.raw_issues = parser.parse(diff_file) - # def test_python_issues(self): - # # Includes 4 tests for Starlark. - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 8) - # - # def test_yaml_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'yaml'), 2) - # - # def test_php_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'php'), 4) - # - # def test_java_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'java'), 2) - # - # def test_javascript_issues(self): - # # Includes 1 test for JSON with Comments, 1 test for JSON5, 3 tests for TSX. - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'javascript'), 5) - # - # def test_ruby_issues(self): - # # Includes 2 tests for Crystal. - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'ruby'), 5) - # - # def test_abap_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'abap'), 2) - # - # def test_sql_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'sql'), 1) - # - # def test_tex_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'tex'), 2) - # - # def test_julia_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'julia'), 2) - # - # def test_starlark_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 8) - # - # def test_autohotkey_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'autohotkey'), 1) - # - # def test_handlebars_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'handlebars'), 2) - # - # def test_org_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'text'), 8) - # - # def test_scss_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'scss'), 2) - # - # def test_twig_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'twig'), 2) - # - # def test_makefile_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'makefile'), 3) - # - # def test_md_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'markdown'), 8) - # - # def test_r_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'r'), 2) - # - # def test_haskell_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'haskell'), 4) - # - # def test_clojure_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'clojure'), 2) - # - # def test_nix_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'nix'), 2) - # - # def test_xaml_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'xml'), 2) - # - # def test_c_cpp_like_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'c_cpp'), 2) - # - # def test_liquid_issues(self): - # self.assertEqual(count_issues_for_file_type(self.raw_issues, 'liquid'), 3) + def test_python_issues(self): + # Includes 4 tests for Starlark. + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 8) + + def test_yaml_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'yaml'), 2) + + def test_php_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'php'), 4) + + def test_java_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'java'), 2) + + def test_javascript_issues(self): + # Includes 1 test for JSON with Comments, 1 test for JSON5, 3 tests for TSX. + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'javascript'), 5) + + def test_ruby_issues(self): + # Includes 2 tests for Crystal. + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'ruby'), 5) + + def test_abap_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'abap'), 2) + + def test_sql_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'sql'), 1) + + def test_tex_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'tex'), 2) + + def test_julia_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'julia'), 2) + + def test_starlark_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 8) + + def test_autohotkey_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'autohotkey'), 1) + + def test_handlebars_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'handlebars'), 2) + + def test_org_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'text'), 8) + + def test_scss_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'scss'), 2) + + def test_twig_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'twig'), 2) + + def test_makefile_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'makefile'), 3) + + def test_md_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'markdown'), 8) + + def test_r_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'r'), 2) + + def test_haskell_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'haskell'), 4) + + def test_clojure_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'clojure'), 2) + + def test_nix_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'nix'), 2) + + def test_xaml_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'xml'), 2) + + def test_c_cpp_like_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'c_cpp'), 2) + + def test_liquid_issues(self): + self.assertEqual(count_issues_for_file_type(self.raw_issues, 'liquid'), 3) def test_solidity_issues(self): self.assertEqual(count_issues_for_file_type(self.raw_issues, 'solidity'), 4) From b2a9899083a53b556988d2eefb9d46ef3d71b864 Mon Sep 17 00:00:00 2001 From: Miguel Palhas Date: Tue, 8 Oct 2024 16:34:19 +0100 Subject: [PATCH 7/8] code review --- main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 12dbab6..f2d54c4 100644 --- a/main.py +++ b/main.py @@ -662,7 +662,9 @@ class TodoParser(object): if value.lower() in attributes: for syntax_details in self.syntax_dict: if syntax_details['language'] == language_name: - print(self.languages_dict[language_name]) + # TODO: this is a hotfix to make it temporarily work for solidity regardless of linguist's lack of support (ace_mode == 'text') + if language_name == "Solidity": + return syntax_details['markers'], "solidity" return syntax_details['markers'], self.languages_dict[language_name]['ace_mode'] return None, None From a33cb4190b80e94efe25c1d931780f08e956e2ef Mon Sep 17 00:00:00 2001 From: Miguel Palhas Date: Tue, 8 Oct 2024 16:34:53 +0100 Subject: [PATCH 8/8] code review --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index f2d54c4..5e08701 100644 --- a/main.py +++ b/main.py @@ -662,7 +662,7 @@ class TodoParser(object): if value.lower() in attributes: for syntax_details in self.syntax_dict: if syntax_details['language'] == language_name: - # TODO: this is a hotfix to make it temporarily work for solidity regardless of linguist's lack of support (ace_mode == 'text') + # TODO: this is a hotfix to make it temporarily work for solidity. Currently using it in my own project. happy to implement a proper solution if possible if language_name == "Solidity": return syntax_details['markers'], "solidity" return syntax_details['markers'], self.languages_dict[language_name]['ace_mode']