--- /dev/null
+def f(a):
+ if a is None:
+ <spot></spot>
\ No newline at end of file
--- /dev/null
+def f(a):
+ <spot>a</spot>.ifn
\ No newline at end of file
--- /dev/null
+<html>
+<body>
+Checks if the expression is None.
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+def f(a):
+ if a is not None:
+ <spot></spot>
\ No newline at end of file
--- /dev/null
+def f(a):
+ <spot>a</spot>.ifnn
\ No newline at end of file
--- /dev/null
+<html>
+<body>
+Checks if the expression if not None.
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.jetbrains.python.codeInsight.postfix;
+
+import com.jetbrains.python.psi.*;
+import org.jetbrains.annotations.Nullable;
+
+public class PyBinaryConditionSurrounder extends PyExpressionAsConditionSurrounder {
+
+ private String myTextToGenerate;
+ private String myTemplateDescription;
+
+ public PyBinaryConditionSurrounder(String textToGenerate, String templateDescription) {
+ myTextToGenerate = textToGenerate;
+ myTemplateDescription = templateDescription;
+ }
+
+ @Override
+ protected String getTextToGenerate() {
+ return myTextToGenerate;
+ }
+
+ @Nullable
+ @Override
+ protected PyExpression getCondition(PyStatement statement) {
+ if (statement instanceof PyIfStatement) {
+ PyIfStatement ifStatement = (PyIfStatement)statement;
+ PyExpression condition = ifStatement.getIfPart().getCondition();
+ if (condition == null) {
+ return null;
+ }
+ return ((PyBinaryExpression)condition).getLeftExpression();
+ }
+ return null;
+ }
+
+ @Nullable
+ @Override
+ protected PyStatementListContainer getStatementListContainer(PyStatement statement) {
+ if (statement instanceof PyIfStatement) {
+ return ((PyIfStatement)statement).getIfPart();
+ }
+ return null;
+ }
+
+ @Override
+ public String getTemplateDescription() {
+ return myTemplateDescription;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.jetbrains.python.codeInsight.postfix;
+
+import com.intellij.codeInsight.template.postfix.templates.SurroundPostfixTemplateBase;
+import com.intellij.lang.surroundWith.Surrounder;
+import org.jetbrains.annotations.NotNull;
+
+public class PyIsNonePostfixTemplate extends SurroundPostfixTemplateBase {
+
+ public static final String TEMPLATE_DESCRIPTION = "if expr is None";
+
+ public PyIsNonePostfixTemplate() {
+ super("ifn", TEMPLATE_DESCRIPTION, PyPostfixUtils.PY_PSI_INFO, PyPostfixUtils.selectorTopmost());
+ }
+
+ @NotNull
+ @Override
+ protected Surrounder getSurrounder() {
+ return new PyBinaryConditionSurrounder("if expr is None:\n pass", TEMPLATE_DESCRIPTION);
+ }
+}
--- /dev/null
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.jetbrains.python.codeInsight.postfix;
+
+import com.intellij.codeInsight.template.postfix.templates.SurroundPostfixTemplateBase;
+import com.intellij.lang.surroundWith.Surrounder;
+import org.jetbrains.annotations.NotNull;
+
+public class PyIsNotNonePostfixTemplate extends SurroundPostfixTemplateBase {
+
+ public static final String TEMPLATE_DESCRIPTION = "if expr is not None";
+
+ public PyIsNotNonePostfixTemplate() {
+ super("ifnn", TEMPLATE_DESCRIPTION, PyPostfixUtils.PY_PSI_INFO, PyPostfixUtils.selectorTopmost());
+ }
+
+ @NotNull
+ @Override
+ protected Surrounder getSurrounder() {
+ return new PyBinaryConditionSurrounder("if a is not None: \n pass", TEMPLATE_DESCRIPTION);
+ }
+}
new PyParenthesizedExpressionPostfixTemplate(),
new PyReturnPostfixTemplate(),
new PyIfPostfixTemplate(),
- new PyWhilePostfixTemplate());
+ new PyWhilePostfixTemplate(),
+ new PyIsNonePostfixTemplate(),
+ new PyIsNotNonePostfixTemplate());
}
@Override
--- /dev/null
+def f(a, b, c):
+ (a + b) * c.ifn<caret>
\ No newline at end of file
--- /dev/null
+def f(a, b, c):
+ if (a + b) * c is None:
+ <caret>
\ No newline at end of file
--- /dev/null
+def f(a):
+ a.ifn<caret>
\ No newline at end of file
--- /dev/null
+def f(a):
+ if a is None:
+ <caret>
\ No newline at end of file
--- /dev/null
+a = 1.ifn<caret>
\ No newline at end of file
--- /dev/null
+a = 1.ifn <caret>
\ No newline at end of file
--- /dev/null
+True.ifn<caret>
\ No newline at end of file
--- /dev/null
+if True is None:
+ <caret>
\ No newline at end of file
--- /dev/null
+def f(a, b, c):
+ (a + b) * c.ifnn<caret>
\ No newline at end of file
--- /dev/null
+def f(a, b, c):
+ if (a + b) * c is not None:
+ <caret>
\ No newline at end of file
--- /dev/null
+def f(a):
+ a.ifnn<caret>
\ No newline at end of file
--- /dev/null
+def f(a):
+ if a is not None:
+ <caret>
\ No newline at end of file
--- /dev/null
+a = 1.ifnn<caret>
\ No newline at end of file
--- /dev/null
+a = 1.ifnn <caret>
\ No newline at end of file
--- /dev/null
+True.ifnn<caret>
\ No newline at end of file
--- /dev/null
+if True is not None:
+ <caret>
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.jetbrains.python.postfix;
+
+public class PyIsNonePostfixTemplateTest extends PyPostfixTemplateTestCase {
+
+ public void testTopLevel() {
+ doTest();
+ }
+
+ public void testFunction() {
+ doTest();
+ }
+
+ public void testNonApplicable() {
+ doTest();
+ }
+
+ public void testComplexExpression() {
+ doTest();
+ }
+
+ @Override
+ protected String getTestDataDir() {
+ return "isNone/";
+ }
+}
--- /dev/null
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.jetbrains.python.postfix;
+
+public class PyIsNotNonePostfixTemplateTest extends PyPostfixTemplateTestCase{
+
+ public void testTopLevel() {
+ doTest();
+ }
+
+ public void testFunction() {
+ doTest();
+ }
+
+ public void testNonApplicable() {
+ doTest();
+ }
+
+ public void testComplexExpression() {
+ doTest();
+ }
+
+ @Override
+ protected String getTestDataDir() {
+ return "isNotNone/";
+ }
+}