mirror of
https://github.com/ditkrg/todo-to-issue-action.git
synced 2026-01-22 22:06:43 +00:00
fix: Clean up TeX syntax and add tests
1. Swap `\` for `\\` for TeX block comments to avoid issues with parsing 2. Add tests for TeX, Julia, AutoHotKey, Org mode, and Handlebars 3. Ensure tests can be run with 1 line command 4. Change logic in test framework so that tests run off of local version of `syntax.json` rather than remote version 5. Add details for running tests + adding tests for your syntax PR to readme 6. Add .gitignore file for python (to avoid compiles form tests winding up in commits)
This commit is contained in:
parent
283da1a7cc
commit
4dca8a215f
142
.gitignore
vendored
Normal file
142
.gitignore
vendored
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
### https://raw.github.com/github/gitignore/218a941be92679ce67d0484547e3e142b2f5f6f0/Python.gitignore
|
||||||
|
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
share/python-wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
MANIFEST
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.nox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*.cover
|
||||||
|
*.py,cover
|
||||||
|
.hypothesis/
|
||||||
|
.pytest_cache/
|
||||||
|
cover/
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
local_settings.py
|
||||||
|
db.sqlite3
|
||||||
|
db.sqlite3-journal
|
||||||
|
|
||||||
|
# Flask stuff:
|
||||||
|
instance/
|
||||||
|
.webassets-cache
|
||||||
|
|
||||||
|
# Scrapy stuff:
|
||||||
|
.scrapy
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
.pybuilder/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# Jupyter Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
||||||
|
# IPython
|
||||||
|
profile_default/
|
||||||
|
ipython_config.py
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
# For a library or package, you might want to ignore these files since the code is
|
||||||
|
# intended to run in multiple environments; otherwise, check them in:
|
||||||
|
# .python-version
|
||||||
|
|
||||||
|
# pipenv
|
||||||
|
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||||
|
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||||
|
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||||
|
# install all needed dependencies.
|
||||||
|
#Pipfile.lock
|
||||||
|
|
||||||
|
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
||||||
|
__pypackages__/
|
||||||
|
|
||||||
|
# Celery stuff
|
||||||
|
celerybeat-schedule
|
||||||
|
celerybeat.pid
|
||||||
|
|
||||||
|
# SageMath parsed files
|
||||||
|
*.sage.py
|
||||||
|
|
||||||
|
# Environments
|
||||||
|
.env
|
||||||
|
.venv
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
env.bak/
|
||||||
|
venv.bak/
|
||||||
|
|
||||||
|
# Spyder project settings
|
||||||
|
.spyderproject
|
||||||
|
.spyproject
|
||||||
|
|
||||||
|
# Rope project settings
|
||||||
|
.ropeproject
|
||||||
|
|
||||||
|
# mkdocs documentation
|
||||||
|
/site
|
||||||
|
|
||||||
|
# mypy
|
||||||
|
.mypy_cache/
|
||||||
|
.dmypy.json
|
||||||
|
dmypy.json
|
||||||
|
|
||||||
|
# Pyre type checker
|
||||||
|
.pyre/
|
||||||
|
|
||||||
|
# pytype static type analyzer
|
||||||
|
.pytype/
|
||||||
|
|
||||||
|
# Cython debug symbols
|
||||||
|
cython_debug/
|
||||||
|
|
||||||
|
|
||||||
10
README.md
10
README.md
@ -102,7 +102,7 @@ There are additional inputs if you want to be able to assign issues to projects.
|
|||||||
* Vue
|
* Vue
|
||||||
* YAML
|
* YAML
|
||||||
|
|
||||||
New languages can easily be added to the `syntax.json` file used by the action to identify TODO comments. When adding languages, follow the structure of existing entries, and use the language name defined by GitHub in [`languages.yml`](https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml). PRs adding new languages are welcome and appreciated.
|
New languages can easily be added to the `syntax.json` file used by the action to identify TODO comments. When adding languages, follow the structure of existing entries, and use the language name defined by GitHub in [`languages.yml`](https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml). PRs adding new languages are welcome and appreciated. Please add a test for your language in order for your PR to be accepted.
|
||||||
|
|
||||||
## TODO Options
|
## TODO Options
|
||||||
|
|
||||||
@ -173,6 +173,14 @@ Issues are created whenever the action runs and finds a newly added TODO in the
|
|||||||
|
|
||||||
If you do encounter any problems, please file an issue or submit a PR. Everyone is welcome and encouraged to contribute.
|
If you do encounter any problems, please file an issue or submit a PR. Everyone is welcome and encouraged to contribute.
|
||||||
|
|
||||||
|
|
||||||
|
## Running tests locally
|
||||||
|
|
||||||
|
To run the tests locally, simply run the following in the main repo:
|
||||||
|
```shell
|
||||||
|
python -m unittest
|
||||||
|
```
|
||||||
|
|
||||||
## Thanks
|
## Thanks
|
||||||
|
|
||||||
The action was developed for the GitHub Hackathon. Whilst every effort is made to ensure it works, it comes with no guarantee.
|
The action was developed for the GitHub Hackathon. Whilst every effort is made to ensure it works, it comes with no guarantee.
|
||||||
|
|||||||
@ -408,8 +408,8 @@
|
|||||||
{
|
{
|
||||||
"type": "block",
|
"type": "block",
|
||||||
"pattern": {
|
"pattern": {
|
||||||
"start": "\\begin{comment}",
|
"start": "\\\\begin{comment}",
|
||||||
"end": "\\end{comment}"
|
"end": "\\\\end{comment}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
0
tests/__init__.py
Normal file
0
tests/__init__.py
Normal file
@ -106,4 +106,65 @@ index 6397789..494d42f 100644
|
|||||||
+++ b/src/tests/example_file.sql
|
+++ b/src/tests/example_file.sql
|
||||||
@@ -1,2 +0,0 @@
|
@@ -1,2 +0,0 @@
|
||||||
--- TODO Select all:
|
--- TODO Select all:
|
||||||
-SELECT * FROM Products;
|
-SELECT * FROM Products;
|
||||||
|
diff --git a/tests/example_file.tex b/src/tests/example_file.tex
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7cccc5b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/tests/example_file.tex
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
-% TODO Add in preamble details
|
||||||
|
-\begin{document}
|
||||||
|
- \begin{comment}
|
||||||
|
- TODO This document needs content
|
||||||
|
- label: urgent
|
||||||
|
- \end{comment}
|
||||||
|
-\end{document}
|
||||||
|
diff --git a/tests/example_file.jl b/src/tests/example_file.jl
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7cccc5b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/tests/example_file.jl
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
- # TODO: Hopefully this comment turns into an issue
|
||||||
|
- print("Hello World")
|
||||||
|
- #= TODO: Multiline comments
|
||||||
|
- also need to be turned into task, and hopefully
|
||||||
|
- kept together as one.
|
||||||
|
- =#
|
||||||
|
diff --git a/tests/example_file.ahk b/src/tests/example_file.ahk
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7cccc5b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/tests/example_file.ahk
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
- ; TODO: Find a better way to manage hotkeys
|
||||||
|
- ; Maybe just switch to vim??
|
||||||
|
- #h::
|
||||||
|
- RegRead, HiddenFiles_Status, HKEY_CURRENT_USER, Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced, Hidden
|
||||||
|
diff --git a/tests/example_file.hbs b/src/tests/example_file.hbs
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7cccc5b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/tests/example_file.hbs
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
- <!-- TODO: Hopefully this comment turns into a todo issue -->
|
||||||
|
- {{!
|
||||||
|
- TODO: Make a handlebar templtate
|
||||||
|
- This is really just a test, but hopefully this works~!
|
||||||
|
- }}
|
||||||
|
diff --git a/tests/example_file.org b/src/tests/example_file.org
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7cccc5b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/tests/example_file.org
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
- # TODO: Hopefully this comment turns into a todo issue
|
||||||
|
- #+begin_src python
|
||||||
|
- print("Hello World")
|
||||||
|
- #+end_src
|
||||||
|
- + #+begin_comment
|
||||||
|
- TODO: Multiline comments
|
||||||
|
- also need to be turned into todos, and hopefully
|
||||||
|
- kept together as one todo
|
||||||
|
- #+end_comment
|
||||||
|
|||||||
@ -112,4 +112,67 @@ index 0000000..7cccc5b
|
|||||||
+++ b/src/tests/example_file.sql
|
+++ b/src/tests/example_file.sql
|
||||||
@@ -0,0 +1,2 @@
|
@@ -0,0 +1,2 @@
|
||||||
+-- TODO Select all:
|
+-- TODO Select all:
|
||||||
+SELECT * FROM Products;
|
+SELECT * FROM Products;
|
||||||
|
diff --git a/tests/example_file.tex b/src/tests/example_file.tex
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7cccc5b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/tests/example_file.tex
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
+% TODO Add in preamble details
|
||||||
|
+\begin{document}
|
||||||
|
+ \begin{comment}
|
||||||
|
+ TODO This document needs content
|
||||||
|
+ label: urgent
|
||||||
|
+ \end{comment}
|
||||||
|
+\end{document}
|
||||||
|
diff --git a/tests/example_file.jl b/src/tests/example_file.jl
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7cccc5b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/tests/example_file.jl
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
+ # TODO: Hopefully this comment turns into an issue
|
||||||
|
+ print("Hello World")
|
||||||
|
+ #= TODO: Multiline comments
|
||||||
|
+ also need to be turned into task, and hopefully
|
||||||
|
+ kept together as one.
|
||||||
|
+ =#
|
||||||
|
diff --git a/tests/example_file.ahk b/src/tests/example_file.ahk
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7cccc5b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/tests/example_file.ahk
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
+ ; TODO: Find a better way to manage hotkeys
|
||||||
|
+ ; Maybe just switch to vim??
|
||||||
|
+ #h::
|
||||||
|
+ RegRead, HiddenFiles_Status, HKEY_CURRENT_USER, Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced, Hidden
|
||||||
|
diff --git a/tests/example_file.hbs b/src/tests/example_file.hbs
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7cccc5b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/tests/example_file.hbs
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
+ <!-- TODO: Hopefully this comment turns into a todo issue -->
|
||||||
|
+ {{!
|
||||||
|
+ TODO: Make a handlebar templtate
|
||||||
|
+ This is really just a test, but hopefully this works~!
|
||||||
|
+ }}
|
||||||
|
diff --git a/tests/example_file.org b/src/tests/example_file.org
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7cccc5b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/tests/example_file.org
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
+ # TODO: Hopefully this comment turns into a todo issue
|
||||||
|
+ #+begin_src python
|
||||||
|
+ print("Hello World")
|
||||||
|
+ #+end_src
|
||||||
|
+ #+begin_comment
|
||||||
|
+ TODO: Multiline comments
|
||||||
|
+ also need to be turned into todos, and hopefully
|
||||||
|
+ kept together as one todo
|
||||||
|
+ #+end_comment
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
|
import json
|
||||||
from main import TodoParser
|
from main import TodoParser
|
||||||
|
|
||||||
|
|
||||||
@ -15,7 +16,10 @@ class NewIssueTests(unittest.TestCase):
|
|||||||
# Check for newly added TODOs across the files specified.
|
# Check for newly added TODOs across the files specified.
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
diff_file = open('tests/test_new.diff', 'r')
|
diff_file = open('tests/test_new.diff', 'r')
|
||||||
self.raw_issues = TodoParser().parse(diff_file)
|
parser = TodoParser()
|
||||||
|
with open('syntax.json', 'r') as syntax_json:
|
||||||
|
parser.syntax_dict = json.load(syntax_json)
|
||||||
|
self.raw_issues = parser.parse(diff_file)
|
||||||
|
|
||||||
def test_python_issues(self):
|
def test_python_issues(self):
|
||||||
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 2)
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 2)
|
||||||
@ -38,15 +42,29 @@ class NewIssueTests(unittest.TestCase):
|
|||||||
def test_sql_issues(self):
|
def test_sql_issues(self):
|
||||||
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'sql'), 1)
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'sql'), 1)
|
||||||
|
|
||||||
# TODO: Update tests
|
def test_tex_issues(self):
|
||||||
# Need tests for Julia, AutoHotKey, Handlebars, Org and TeX, as these markers are not currently covered.
|
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_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'), 2)
|
||||||
|
|
||||||
class ClosedIssueTests(unittest.TestCase):
|
class ClosedIssueTests(unittest.TestCase):
|
||||||
# Check for removed TODOs across the files specified.
|
# Check for removed TODOs across the files specified.
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
diff_file = open('tests/test_closed.diff', 'r')
|
diff_file = open('tests/test_closed.diff', 'r')
|
||||||
self.raw_issues = TodoParser().parse(diff_file)
|
parser = TodoParser()
|
||||||
|
with open('syntax.json', 'r') as syntax_json:
|
||||||
|
parser.syntax_dict = json.load(syntax_json)
|
||||||
|
self.raw_issues = parser.parse(diff_file)
|
||||||
|
|
||||||
def test_python_issues(self):
|
def test_python_issues(self):
|
||||||
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 2)
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 2)
|
||||||
@ -69,13 +87,31 @@ class ClosedIssueTests(unittest.TestCase):
|
|||||||
def test_sql_issues(self):
|
def test_sql_issues(self):
|
||||||
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'sql'), 1)
|
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_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'), 2)
|
||||||
|
|
||||||
|
|
||||||
class IgnorePatternTests(unittest.TestCase):
|
class IgnorePatternTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_single_ignore(self):
|
def test_single_ignore(self):
|
||||||
os.environ['INPUT_IGNORE'] = '.*\\.java'
|
os.environ['INPUT_IGNORE'] = '.*\\.java'
|
||||||
diff_file = open('tests/test_new.diff', 'r')
|
parser = TodoParser()
|
||||||
self.raw_issues = TodoParser().parse(diff_file)
|
with open('syntax.json', 'r') as syntax_json:
|
||||||
|
parser.syntax_dict = json.load(syntax_json)
|
||||||
|
diff_file = open('tests/test_closed.diff', 'r')
|
||||||
|
self.raw_issues = parser.parse(diff_file)
|
||||||
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 2)
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 2)
|
||||||
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'yaml'), 2)
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'yaml'), 2)
|
||||||
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'php'), 4)
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'php'), 4)
|
||||||
@ -85,8 +121,11 @@ class IgnorePatternTests(unittest.TestCase):
|
|||||||
|
|
||||||
def test_multiple_ignores(self):
|
def test_multiple_ignores(self):
|
||||||
os.environ['INPUT_IGNORE'] = '.*\\.java, tests/example-file\\.php'
|
os.environ['INPUT_IGNORE'] = '.*\\.java, tests/example-file\\.php'
|
||||||
diff_file = open('tests/test_new.diff', 'r')
|
parser = TodoParser()
|
||||||
self.raw_issues = TodoParser().parse(diff_file)
|
with open('syntax.json', 'r') as syntax_json:
|
||||||
|
parser.syntax_dict = json.load(syntax_json)
|
||||||
|
diff_file = open('tests/test_closed.diff', 'r')
|
||||||
|
self.raw_issues = parser.parse(diff_file)
|
||||||
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 2)
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 2)
|
||||||
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'yaml'), 2)
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'yaml'), 2)
|
||||||
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'php'), 0)
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'php'), 0)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user