use of com.jetbrains.python.inspections.PyNewStyleStringFormatParser.Field in project intellij-community by JetBrains.
the class NewStyleConvertToFStringProcessor method convertSubstitutionChunk.
@Override
protected boolean convertSubstitutionChunk(@NotNull Field field, @NotNull StringBuilder fStringText) {
final String stringText = myPyString.getText();
// Actual format field
fStringText.append("{");
final PySubstitutionChunkReference reference = createReference(field);
final PyExpression resolveResult = adjustResolveResult(reference.resolve());
if (resolveResult == null)
return false;
final PsiElement adjusted = prepareExpressionToInject(resolveResult, field);
if (adjusted == null)
return false;
fStringText.append(adjusted.getText());
final String quotedAttrsAndItems = quoteItemsInFragments(field);
if (quotedAttrsAndItems == null)
return false;
fStringText.append(quotedAttrsAndItems);
// Conversion is copied as is if it's present
final String conversion = field.getConversion();
if (conversion != null) {
fStringText.append(conversion);
}
// Format spec is copied if present handling nested fields
final TextRange specRange = field.getFormatSpecRange();
if (specRange != null) {
int specOffset = specRange.getStartOffset();
// Do not proceed too nested fields
if (field.getDepth() == 1) {
for (Field nestedField : field.getNestedFields()) {
// Copy text of the format spec between nested fragments
fStringText.append(stringText, specOffset, nestedField.getLeftBraceOffset());
specOffset = nestedField.getFieldEnd();
// recursively format nested field
if (!convertSubstitutionChunk(nestedField, fStringText)) {
return false;
}
}
}
if (specOffset < specRange.getEndOffset()) {
fStringText.append(stringText, specOffset, specRange.getEndOffset());
}
}
fStringText.append("}");
return true;
}
use of com.jetbrains.python.inspections.PyNewStyleStringFormatParser.Field in project intellij-community by JetBrains.
the class PyStringFormatParserTest method testNewStyleIncompleteAttrAndLookups.
public void testNewStyleIncompleteAttrAndLookups() {
Field field;
field = doParseAndGetFirstField("'{foo}'");
assertEquals("foo", field.getFirstName());
assertEmpty(field.getAttributesAndLookups());
// recover the first name
field = doParseAndGetFirstField("'{foo'");
assertEquals("foo", field.getFirstName());
assertEmpty(field.getAttributesAndLookups());
field = doParseAndGetFirstField("'{foo");
assertEquals("foo", field.getFirstName());
assertEmpty(field.getAttributesAndLookups());
field = doParseAndGetFirstField("'{0[foo].bar[baz]}'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar", "[baz]");
field = doParseAndGetFirstField("'{0[foo].bar[baz]'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar", "[baz]");
field = doParseAndGetFirstField("'{0[foo].bar[baz]");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar", "[baz]");
// do not recover unfinished lookups
field = doParseAndGetFirstField("'{0[foo].bar[ba}'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar");
field = doParseAndGetFirstField("'{0[foo].bar[ba!}'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar");
field = doParseAndGetFirstField("'{0[foo].bar[ba:}'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar");
field = doParseAndGetFirstField("'{0[foo].bar[ba'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar");
field = doParseAndGetFirstField("'{0[foo].bar[ba");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar");
// do not recover illegal attributes
field = doParseAndGetFirstField("'{0[foo].bar[baz]quux}'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar", "[baz]");
field = doParseAndGetFirstField("'{0[foo].bar[baz]quux!}'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar", "[baz]");
field = doParseAndGetFirstField("'{0[foo].bar[baz]quux:}'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar", "[baz]");
field = doParseAndGetFirstField("'{0[foo].bar[baz]quux'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar", "[baz]");
field = doParseAndGetFirstField("'{0[foo].bar[baz]quux");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar", "[baz]");
field = doParseAndGetFirstField("'{0..}'");
assertEquals("0", field.getFirstName());
assertOrderedEquals(field.getAttributesAndLookups(), ".", ".");
// recover attributes
field = doParseAndGetFirstField("'{0[foo].}'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".");
field = doParseAndGetFirstField("'{0[foo].'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".");
field = doParseAndGetFirstField("'{0[foo].");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".");
field = doParseAndGetFirstField("'{0[foo].bar}'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar");
field = doParseAndGetFirstField("'{0[foo].bar'");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar");
field = doParseAndGetFirstField("'{0[foo].bar");
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", ".bar");
}
use of com.jetbrains.python.inspections.PyNewStyleStringFormatParser.Field in project intellij-community by JetBrains.
the class PyStringFormatParserTest method testNewStyleNestedFields.
public void testNewStyleNestedFields() {
final Field field = doParseAndGetFirstField("u'{foo:{bar} {baz}}'");
assertEquals("foo", field.getFirstName());
final List<Field> nestedFields = field.getNestedFields();
assertSize(2, nestedFields);
assertEquals("bar", nestedFields.get(0).getFirstName());
assertEquals("baz", nestedFields.get(1).getFirstName());
}
use of com.jetbrains.python.inspections.PyNewStyleStringFormatParser.Field in project intellij-community by JetBrains.
the class PyStringFormatParserTest method testNewStyleUnclosedLookupEndsWithRightBrace.
public void testNewStyleUnclosedLookupEndsWithRightBrace() {
final Field field = doParseAndGetFirstField("u'{0[}'");
assertEquals(-1, field.getRightBraceOffset());
assertEquals(6, field.getFieldEnd());
assertEmpty(field.getAttributesAndLookups());
}
use of com.jetbrains.python.inspections.PyNewStyleStringFormatParser.Field in project intellij-community by JetBrains.
the class PyStringFormatParserTest method testNewStyleAttrAndLookups.
public void testNewStyleAttrAndLookups() {
Field field;
field = doParseAndGetFirstField("u'{foo'");
assertEquals("foo", field.getFirstName());
assertEmpty(field.getAttributesAndLookups());
field = doParseAndGetFirstField("u'{foo}'");
assertEquals("foo", field.getFirstName());
assertEmpty(field.getAttributesAndLookups());
field = doParseAndGetFirstField("u'{foo.bar.baz}'");
assertEquals("foo", field.getFirstName());
assertOrderedEquals(field.getAttributesAndLookups(), ".bar", ".baz");
field = doParseAndGetFirstField("u'{foo[bar][baz]}'");
assertEquals("foo", field.getFirstName());
assertOrderedEquals(field.getAttributesAndLookups(), "[bar]", "[baz]");
field = doParseAndGetFirstField("u'{foo.bar[baz]}'");
assertEquals("foo", field.getFirstName());
assertOrderedEquals(field.getAttributesAndLookups(), ".bar", "[baz]");
field = doParseAndGetFirstField("u'{foo.bar[baz}'");
assertEquals("foo", field.getFirstName());
assertOrderedEquals(field.getAttributesAndLookups(), ".bar");
field = doParseAndGetFirstField("u'{foo[{bar[baz]}'");
assertEquals("foo", field.getFirstName());
assertOrderedEquals(field.getAttributesAndLookups(), "[{bar[baz]");
field = doParseAndGetFirstField("u'{foo[{} {0} {bar.baz}]'");
assertEquals("foo", field.getFirstName());
assertOrderedEquals(field.getAttributesAndLookups(), "[{} {0} {bar.baz}]");
field = doParseAndGetFirstField("u'{foo[bar]baz'");
assertEquals("foo", field.getFirstName());
assertOrderedEquals(field.getAttributesAndLookups(), "[bar]");
field = doParseAndGetFirstField("'{0[foo][.!:][}]}'");
assertEquals("0", field.getFirstName());
assertOrderedEquals(field.getAttributesAndLookups(), "[foo]", "[.!:]", "[}]");
field = doParseAndGetFirstField("'{.foo.bar}'");
assertEmpty(field.getFirstName());
assertEquals(TextRange.create(2, 2), field.getFirstNameRange());
assertOrderedEquals(field.getAttributesAndLookups(), ".foo", ".bar");
field = doParseAndGetFirstField("'{}'");
assertEmpty(field.getFirstName());
assertEquals(TextRange.create(2, 2), field.getFirstNameRange());
field = doParseAndGetFirstField("'{:foo}'");
assertEmpty(field.getFirstName());
assertEquals(TextRange.create(2, 2), field.getFirstNameRange());
field = doParseAndGetFirstField("'{!r:foo}'");
assertEmpty(field.getFirstName());
assertEquals(TextRange.create(2, 2), field.getFirstNameRange());
}
Aggregations