Skip to content

Commit ae01bc4

Browse files
committed
Starting to move templates from pytemplate_defaults.py to java code.
1 parent d9bddb9 commit ae01bc4

File tree

4 files changed

+138
-19
lines changed

4 files changed

+138
-19
lines changed

plugins/org.python.pydev.jython/jysrc/pytemplate_defaults.py

+4-18
Original file line numberDiff line numberDiff line change
@@ -59,27 +59,18 @@ def _IsGrammar3(context):
5959
def GetISODate(context):
6060
return time.strftime("%Y-%m-%d")
6161

62-
template_helper.AddTemplateVariable(py_context_type, 'isodate', 'ISO-8601 Ymd date', GetISODate)
63-
6462
def GetISODateString1(context):
6563
return time.strftime("%Y-%m-%d %H:%M")
6664

67-
template_helper.AddTemplateVariable(py_context_type, 'isodatestr', 'ISO-8601 Ymd HM date', GetISODateString1)
68-
6965
def GetISODateString2(context):
7066
return time.strftime("%Y-%m-%d %H:%M:%S")
7167

72-
template_helper.AddTemplateVariable(py_context_type, 'isodatestr2', 'ISO-8601 Ymd HMS date', GetISODateString2)
73-
74-
7568
#===================================================================================================
7669
# GetModuleName
7770
#===================================================================================================
7871
def GetModuleName(context):
7972
return context.getModuleName()
8073

81-
template_helper.AddTemplateVariable(py_context_type, 'module', 'Current module', GetModuleName)
82-
8374

8475
#===================================================================================================
8576
# _GetCurrentASTPath
@@ -113,11 +104,6 @@ def GetQualifiedNameScope(context):
113104
return ret
114105

115106

116-
template_helper.AddTemplateVariable(
117-
py_context_type, 'current_qualified_scope', 'Current qualified scope.', GetQualifiedNameScope)
118-
119-
120-
121107
#===================================================================================================
122108
# _GetCurrentClassStmt
123109
#===================================================================================================
@@ -153,18 +139,18 @@ def GetCurrentClass(context):
153139
#===================================================================================================
154140
def GetSelfOrCls(context):
155141
FunctionDef = context.getFunctionDefClass() # from org.python.pydev.parser.jython.ast import ClassDef
156-
142+
157143
FastParser = context.getFastParserClass() # from org.python.pydev.parser.fastparser import FastParser
158144
selection = _CreateSelection(context)
159-
145+
160146
node = FastParser.firstClassOrFunction(context.getDocument(), selection.getStartLineIndex(), False, False)
161147
if isinstance(node, FunctionDef):
162148
firstToken = selection.getFirstInsideParentesisTok(node.beginLine-1)
163149
if firstToken == 'cls':
164150
return 'cls'
165-
151+
166152
return 'self'
167-
153+
168154
template_helper.AddTemplateVariable(py_context_type, 'self_or_cls', 'Get `self` or `cls`', GetSelfOrCls)
169155

170156

plugins/org.python.pydev/src/org/python/pydev/editor/templates/PyContextType.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class PyContextType extends TemplateContextType {
3636
private IPythonInterpreter interpreter;
3737

3838
/**
39-
* Creates a new XML context type.
39+
* Creates a new XML context type.
4040
*/
4141
public PyContextType() {
4242
//Note: created twice because we have 2 registries:
@@ -57,6 +57,11 @@ private void addGlobalResolvers() {
5757
addResolver(new GlobalTemplateVariables.Year());
5858
addResolver(new GlobalTemplateVariables.Time());
5959
addResolver(new GlobalTemplateVariables.User());
60+
addResolver(PyTemplatesDefault.IsoDate());
61+
addResolver(PyTemplatesDefault.IsoDate1());
62+
addResolver(PyTemplatesDefault.IsoDate2());
63+
addResolver(PyTemplatesDefault.ModuleName());
64+
addResolver(PyTemplatesDefault.QualifiedNameScope());
6065

6166
PyContextTypeVariables.addResolvers(this);
6267
HashMap<String, Object> locals = new HashMap<String, Object>();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package org.python.pydev.editor.templates;
2+
3+
import java.text.SimpleDateFormat;
4+
import java.util.Collections;
5+
import java.util.Date;
6+
import java.util.List;
7+
8+
import org.eclipse.jface.text.templates.TemplateContext;
9+
import org.python.pydev.core.docutils.PySelection;
10+
import org.python.pydev.editor.codecompletion.templates.PyDocumentTemplateContext;
11+
import org.python.pydev.parser.fastparser.FastParser;
12+
import org.python.pydev.parser.jython.ast.stmtType;
13+
import org.python.pydev.parser.visitors.NodeUtils;
14+
import org.python.pydev.shared_core.callbacks.ICallback;
15+
import org.python.pydev.shared_core.string.FastStringBuffer;
16+
17+
public class PyTemplatesDefault {
18+
19+
public static class CallableTemplateVariableResolver extends PyTemplateVariableResolver {
20+
21+
private ICallback<String, PyDocumentTemplateContext> callable;
22+
23+
public CallableTemplateVariableResolver(String type, String description,
24+
ICallback<String, PyDocumentTemplateContext> callable) {
25+
super(type, description);
26+
this.callable = callable;
27+
}
28+
29+
@Override
30+
public String[] resolveAll(TemplateContext context) {
31+
String ret = this.callable.call((PyDocumentTemplateContext) context);
32+
if (ret == null) {
33+
return new String[0];
34+
}
35+
return new String[] { ret };
36+
}
37+
}
38+
39+
public static CallableTemplateVariableResolver IsoDate() {
40+
return new PyTemplatesDefault.CallableTemplateVariableResolver("isodate", "ISO-8601 Ymd date", (context) -> {
41+
// in Python: time.strftime("%Y-%m-%d")
42+
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
43+
Date date = new Date();
44+
return formatter.format(date);
45+
});
46+
}
47+
48+
public static CallableTemplateVariableResolver IsoDate1() {
49+
return new PyTemplatesDefault.CallableTemplateVariableResolver("isodatestr", "ISO-8601 Ymd HM date",
50+
(context) -> {
51+
// in Python: time.strftime("%Y-%m-%d %H:%M")
52+
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
53+
Date date = new Date();
54+
return formatter.format(date);
55+
});
56+
}
57+
58+
public static CallableTemplateVariableResolver IsoDate2() {
59+
return new PyTemplatesDefault.CallableTemplateVariableResolver("isodatestr2", "ISO-8601 Ymd HM date",
60+
(context) -> {
61+
// in Python: time.strftime("%Y-%m-%d %H:%M:%S")
62+
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
63+
Date date = new Date();
64+
return formatter.format(date);
65+
});
66+
}
67+
68+
public static CallableTemplateVariableResolver ModuleName() {
69+
return new PyTemplatesDefault.CallableTemplateVariableResolver("module", "Current module",
70+
(context) -> {
71+
return context.getModuleName();
72+
});
73+
}
74+
75+
public static List<stmtType> getCurrentAstPath(PyDocumentTemplateContext context) {
76+
return getCurrentAstPath(context, false);
77+
}
78+
79+
public static List<stmtType> getCurrentAstPath(PyDocumentTemplateContext context, boolean reverse) {
80+
PySelection selection = context.createPySelection();
81+
List<stmtType> ret = FastParser.parseToKnowGloballyAccessiblePath(context.getDocument(),
82+
selection.getStartLineIndex());
83+
if (reverse) {
84+
Collections.reverse(ret);
85+
}
86+
return ret;
87+
}
88+
89+
public static CallableTemplateVariableResolver QualifiedNameScope() {
90+
return new PyTemplatesDefault.CallableTemplateVariableResolver("current_qualified_scope",
91+
"Current qualified scope",
92+
(context) -> {
93+
List<stmtType> stmts = getCurrentAstPath(context);
94+
FastStringBuffer buf = new FastStringBuffer();
95+
for (stmtType stmt : stmts) {
96+
if (!buf.isEmpty()) {
97+
buf.append('.');
98+
}
99+
buf.append(NodeUtils.getRepresentationString(stmt));
100+
}
101+
return "";
102+
});
103+
}
104+
105+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.python.pydev.ast.codecompletion.templates;
2+
3+
import org.python.pydev.editor.templates.PyTemplatesDefault;
4+
import org.python.pydev.shared_core.string.StringUtils;
5+
6+
import junit.framework.TestCase;
7+
8+
public class TemplatesTest extends TestCase {
9+
10+
public void testIsoDate() throws Exception {
11+
String found = PyTemplatesDefault.IsoDate().resolveAll(null)[0];
12+
assertEquals(StringUtils.count(found, '-'), 2);
13+
14+
found = PyTemplatesDefault.IsoDate1().resolveAll(null)[0];
15+
assertEquals(StringUtils.count(found, '-'), 2);
16+
assertEquals(StringUtils.count(found, ':'), 1);
17+
18+
found = PyTemplatesDefault.IsoDate2().resolveAll(null)[0];
19+
assertEquals(StringUtils.count(found, '-'), 2);
20+
assertEquals(StringUtils.count(found, ':'), 2);
21+
}
22+
23+
}

0 commit comments

Comments
 (0)