From a8b06acff9fc27e6c03e6ad12dfc51240f773587 Mon Sep 17 00:00:00 2001 From: cheung Date: Sat, 23 Feb 2013 19:12:19 -0800 Subject: [PATCH 1/3] Create config file to implement feature request #27 Import selectors Import astTransforms --- java2python/config/snake_case.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 java2python/config/snake_case.py diff --git a/java2python/config/snake_case.py b/java2python/config/snake_case.py new file mode 100644 index 0000000..0ba56b8 --- /dev/null +++ b/java2python/config/snake_case.py @@ -0,0 +1,32 @@ +from java2python.lang.selector import * + +astTransforms = [ + (Type('NULL'), transform.null2None), + (Type('FALSE'), transform.false2False), + (Type('TRUE'), transform.true2True), +#(Type('IDENT'), transform.keywordSafeIdent), + (Type('IDENT'),camel_to_snake), + + (Type('FLOATING_POINT_LITERAL'), transform.syntaxSafeFloatLiteral), + + (Type('TYPE') > Type('BOOLEAN'), transform.typeSub), + (Type('TYPE') > Type('BYTE'), transform.typeSub), + (Type('TYPE') > Type('CHAR'), transform.typeSub), + (Type('TYPE') > Type('FLOAT'), transform.typeSub), + (Type('TYPE') > Type('INT'), transform.typeSub), + (Type('TYPE') > Type('SHORT'), transform.typeSub), + (Type('TYPE') > Type('LONG'), transform.typeSub), + (Type('TYPE') > Type('DOUBLE'), transform.typeSub), + + (Type('METHOD_CALL') > Type('DOT') > Type('IDENT', 'length'), + transform.lengthToLen), + + (Type('METHOD_CALL') > Type('DOT') > ( + Type('IDENT', 'String') + + Type('IDENT', 'format') + ), + transform.formatString), + + (Type('TYPE') > Type('QUALIFIED_TYPE_IDENT') > Type('IDENT'), + transform.typeSub) +] From 5b106cf15433e42f70418c432cd27536a298462b Mon Sep 17 00:00:00 2001 From: cheung Date: Sat, 23 Feb 2013 19:18:05 -0800 Subject: [PATCH 2/3] Add method transforms to astTransform list --- java2python/config/snake_case.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/java2python/config/snake_case.py b/java2python/config/snake_case.py index 0ba56b8..968b417 100644 --- a/java2python/config/snake_case.py +++ b/java2python/config/snake_case.py @@ -28,5 +28,8 @@ transform.formatString), (Type('TYPE') > Type('QUALIFIED_TYPE_IDENT') > Type('IDENT'), - transform.typeSub) + transform.typeSub), + + (Type('FUNCTIION_METHOD_DECL') > Type('IDENT'),camel_to_snake), + (Type('VOID_METHOD_DECL') > Type('IDENT'),camel_to_snake) ] From 5298dcb2c093a86c8dc9724c5273549c09e9b9d6 Mon Sep 17 00:00:00 2001 From: cheung Date: Sat, 23 Feb 2013 19:22:28 -0800 Subject: [PATCH 3/3] Define camel_to_snake function The function is supposed to change the identifiers format from camelCase to snake_case --- java2python/config/snake_case.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/java2python/config/snake_case.py b/java2python/config/snake_case.py index 968b417..f2e1219 100644 --- a/java2python/config/snake_case.py +++ b/java2python/config/snake_case.py @@ -33,3 +33,15 @@ (Type('FUNCTIION_METHOD_DECL') > Type('IDENT'),camel_to_snake), (Type('VOID_METHOD_DECL') > Type('IDENT'),camel_to_snake) ] + +def camel_to_snake(node,config): + rawstring = re.findall('[a-z]+|[A-Z][a-z]*',node.token.text) + snake_string = "" + index = 0 + for word in rawstring: + if index == 0: + snake_string += word + index = index + 1 + else: + snake_string += "_" + word + node.token.text = snake_string