aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java24
-rw-r--r--src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java11
2 files changed, 34 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
index ef958d356f..996ae41bbe 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
@@ -541,6 +541,28 @@ public class MethodLibrary {
}
};
+ @SkylarkSignature(name = "isalpha", objectType = StringModule.class, returnType = Boolean.class,
+ doc = "Returns True if all characters in the string are alphabetic ([a-zA-Z]) and it "
+ + "contains at least one character.",
+ mandatoryPositionals = {
+ @Param(name = "self", type = String.class, doc = "This string.")})
+ private static BuiltinFunction isalpha = new BuiltinFunction("isalpha") {
+ public Boolean invoke(String self) throws EvalException {
+ int length = self.length();
+ if (length < 1) {
+ return false;
+ }
+ for (int index = 0; index < length; index++) {
+ char character = self.charAt(index);
+ if (!((character >= 'A' && character <= 'Z')
+ || (character >= 'a' && character <= 'z'))) {
+ return false;
+ }
+ }
+ return true;
+ }
+ };
+
@SkylarkSignature(name = "count", objectType = StringModule.class, returnType = Integer.class,
doc = "Returns the number of (non-overlapping) occurrences of substring <code>sub</code> in "
+ "string, optionally restricting to [<code>start</code>:<code>end</code>], "
@@ -1091,7 +1113,7 @@ public class MethodLibrary {
}
}
};
-
+
@SkylarkSignature(name = "dict", returnType = Map.class,
doc =
"Creates a <a href=\"#modules.dict\">dictionary</a> from an optional positional "
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
index 309b97b9fb..60536e36f5 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
@@ -1035,4 +1035,15 @@ public class MethodLibraryTest extends EvaluationTestCase {
new SkylarkTest() // because of set
.testStatement("str(zip([1], set([2])))", "[(1, 2)]");
}
+
+ @Test
+ public void testIsAlphaFunction() throws Exception {
+ new BothModesTest()
+ .testStatement("''.isalpha()", false)
+ .testStatement("'abz'.isalpha()", true)
+ .testStatement("'a1'.isalpha()", false)
+ .testStatement("'a '.isalpha()", false)
+ .testStatement("'A'.isalpha()", true)
+ .testStatement("'AbZ'.isalpha()", true);
+ }
}