PY-17002 Suggest types inside unclosed parentheses in Google docstrings

This commit is contained in:
Mikhail Golubev
2015-09-28 15:30:37 +03:00
parent 5a8fcf488a
commit 56ada7d547
5 changed files with 34 additions and 1 deletions
@@ -31,7 +31,7 @@ import java.util.regex.Pattern;
*/
public class GoogleCodeStyleDocString extends SectionBasedDocString {
public static final Pattern SECTION_HEADER = Pattern.compile("^[ \t]*([\\w \t]+):[ \t]*$", Pattern.MULTILINE);
private static final Pattern FIELD_NAME_AND_TYPE = Pattern.compile("^[ \t]*(.+?)[ \t]*\\([ \t]*(.*?)[ \t]*\\)[ \t]*$", Pattern.MULTILINE);
private static final Pattern FIELD_NAME_AND_TYPE = Pattern.compile("^[ \t]*(.+?)[ \t]*\\([ \t]*(.*?)[ \t]*\\)?[ \t]*$", Pattern.MULTILINE);
public GoogleCodeStyleDocString(@NotNull Substring text) {
super(text);
@@ -0,0 +1,5 @@
def f():
"""
Args:
x (str<caret>
"""
@@ -0,0 +1,6 @@
def f(x, y):
"""
Args:
x (Foo
y (Bar : description
"""
@@ -378,6 +378,16 @@ public class PySectionBasedDocStringTest extends PyTestCase {
"second line", firstExample.getDescription());
}
// PY-17002
public void testGoogleNoClosingParenthesisAfterParamType() {
final GoogleCodeStyleDocString docString = findAndParseGoogleStyleDocString();
assertSize(1, docString.getSections());
final List<SectionField> params = docString.getSections().get(0).getFields();
assertSize(2, params);
assertEquals("Foo", params.get(0).getType());
assertEquals("Bar", params.get(1).getType());
}
@Override
protected String getTestDataPath() {
return super.getTestDataPath() + "/docstrings";
@@ -484,6 +484,18 @@ public class PythonCompletionTest extends PyTestCase {
});
}
// PY-17002
public void testParamTypeInGoogleDocstringWithoutClosingParenthesis() {
runWithDocStringFormat(DocStringFormat.GOOGLE, new Runnable() {
@Override
public void run() {
final List<String> variants = doTestByFile();
assertNotNull(variants);
assertSameElements(variants, "str", "basestring");
}
});
}
public void testPep328Completion() { // PY-3409
myFixture.copyDirectoryToProject("pep328", "pep328");
myFixture.configureByFile("pep328/package/subpackage1/moduleX.py");