Skip to content

Commit

Permalink
standard_library (#9)
Browse files Browse the repository at this point in the history
* Added stdlib folder

* added for loops

* added if and block snippets

* add switch

* add empty snippets for several constructs. To be continued

* Stdlib integration tests added

* Change snippet definitions to reflect changes merged from master

* Add several snippet definitions

* Add several snippet tests
  • Loading branch information
Ahhhhmed committed Apr 12, 2018
1 parent 3cb88bf commit 2f66947
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 1 deletion.
4 changes: 3 additions & 1 deletion homotopy/snippet_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,6 @@ def __getitem__(self, item):
return item


snippetProvider = SnippetProvider()
stdlib_path = os.path.join(os.path.split(__file__)[0], 'stdlib')

snippetProvider = SnippetProvider(language='c++', path=[stdlib_path])
19 changes: 19 additions & 0 deletions homotopy/stdlib/cpp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[
{"name": "for","language": "C++","snippet": "for(### $$$; $$$<%%%; $$$++){\n{{inside_block}}\n}"},
{"name": "forr","language": "C++","snippet": "for(### $$$=%%%; $$$>=0; $$$--){\n{{inside_block}}\n}"},
{"name": "forin","language": "C++","snippet": "for(auto&& $$$: %%%){\n{{inside_block}}\n}"},
{"name": "if","language": "C++","snippet": "if(###){\n{{inside_block}}\n}"},
{"name": "inside_block","language": "C++","snippet": "\t>>>{{opt_inside_block}}"},
{"name": "opt_inside_block","language": "C++","snippet": "\n\t>>>{{opt_inside_block}}"},
{"name": "switch","language": "C++","snippet": "switch($$$){\n{{inside_block}}\n}"},
{"name": "case","language": "C++","snippet": "case $$$:\n{{inside_block}}\n\tbreak;{{opt_case}}"},
{"name": "opt_case","language": "C++","snippet": "\ncase $$$:\n{{inside_block}}\n\tbreak;{{opt_case}}"},
{"name": "struct","language": "C++","snippet": "struct ###{{pub_extend}} {\n{{inside_block}}\n};"},
{"name": "class","language": "C++","snippet": "class ###{{pub_extend}}{{priv_extend}}{{prot_extend}} {\n{{inside_block}}\n};"},
{"name": "pub_extend","language": "C++","snippet": ": public :::"},
{"name": "priv_extend","language": "C++","snippet": ": private ~~~"},
{"name": "prot_extend","language": "C++","snippet": ": protected %%%"},
{"name": "func","language": "C++","snippet": "### $$$({{params}}){\n{{inside_block}}\n}"},
{"name": "params","language": "C++","snippet": "### $$${{opt_params}}"},
{"name": "opt_params","language": "C++","snippet": ", ### $$${{opt_params}}"}
]
2 changes: 2 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
install_requires=[

],
include_package_data=True,
package_data={'homotopy': ['stdlib/*']},
entry_points={
'console_scripts': [
'homotopy = homotopy.__main__:main'
Expand Down
68 changes: 68 additions & 0 deletions test/testStdlib.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
from unittest import TestCase

from homotopy import parser, compiler


class TestStdlib(TestCase):
def singleSnippet(self, snippet, expected_output):
compiled_snippet = compiler.Compiler().compile(parser.parser.parse(snippet))

self.assertEqual(expected_output.strip(), compiled_snippet)

def testCpp(self):
self.singleSnippet("for#int$i%n", """
for(int i; i<n; i++){
}
""")

self.singleSnippet('for#int$i%n>printf("hello");', """
for(int i; i<n; i++){
\tprintf("hello");
}
""")

self.singleSnippet('if#i==3>return 5;', """
if(i==3){
\treturn 5;
}
""")
self.singleSnippet('forr#int$i%n>printf("hello");', """
for(int i=n; i>=0; i--){
\tprintf("hello");
}
""")
self.singleSnippet('forin$item%collection>printf("hello");', """
for(auto&& item: collection){
\tprintf("hello");
}
""")
self.singleSnippet('switch$i>case$1>asd<case$2>dsa', """
switch(i){
\tcase 1:
\tasd
\tbreak;
\tcase 2:
\tdsa
\tbreak;
}
""")
self.singleSnippet('struct#A:B', """
struct A: public B {
};
""")
self.singleSnippet('class#A%B>blah', """
class A: protected B {
\tblah
};
""")
self.singleSnippet('class#A~B>func#void$foo#int$a#int$b', """
class A: private B {
\tvoid foo(int a, int b){
}
};
""")

0 comments on commit 2f66947

Please sign in to comment.