Browse Source

fix: First character of generated stdlib functions should be lower case.

Matthias Ladkau 3 years ago
parent
commit
0f25d80738
3 changed files with 25 additions and 10 deletions
  1. 17 2
      stdlib/generate/generate.go
  2. 2 2
      stdlib/generate/generate_test.go
  3. 6 6
      stdlib/stdlib_gen.go

+ 17 - 2
stdlib/generate/generate.go

@@ -277,7 +277,7 @@ var %vFuncDocMap = map[interface{}]interface{}{
 			case *types.Func:
 				outbuf.WriteString(
 					fmt.Sprintf(`	"%v": "Function: %v",
-`, name, name))
+`, lcFirst(name), lcFirst(name)))
 			}
 		}
 	}
@@ -306,7 +306,7 @@ var %vFuncMap = map[interface{}]interface{}{
 			if unicode.IsUpper([]rune(name)[0]) {
 				outbuf.WriteString(
 					fmt.Sprintf(`	%#v: &ECALFunctionAdapter{reflect.ValueOf(%v), fmt.Sprint(%vFuncDocMap[%#v])},
-`, name, obj.FullName(), pkgName, name))
+`, lcFirst(name), obj.FullName(), pkgName, lcFirst(name)))
 			}
 		}
 	}
@@ -355,7 +355,22 @@ func getPackageDocs(pkgName string) (string, *doc.Package, error) {
 	return synopsis, pkgDoc, err
 }
 
+/*
+containsSymbol checks if a list of strings contains a given item.
+*/
 func containsSymbol(symbols []string, item string) bool {
 	i := sort.SearchStrings(symbols, item)
 	return i < len(symbols) && symbols[i] == item
 }
+
+/*
+lcFirst lower cases the first rune of a given string
+*/
+func lcFirst(s string) string {
+	var ret = ""
+	for i, v := range s {
+		ret = string(unicode.ToLower(v)) + s[i+len(string(v)):]
+		break
+	}
+	return ret
+}

+ 2 - 2
stdlib/generate/generate_test.go

@@ -96,14 +96,14 @@ var fmtConstMap = map[interface{}]interface{}{
 fmtFuncDocMap contains the documentation of stdlib fmt functions.
 */
 var fmtFuncDocMap = map[interface{}]interface{}{
-	"Println": "Function: Println",
+	"println": "Function: println",
 }
 
 /*
 fmtFuncMap contains the mapping of stdlib fmt functions.
 */
 var fmtFuncMap = map[interface{}]interface{}{
-	"Println": &ECALFunctionAdapter{reflect.ValueOf(fmt.Println), fmt.Sprint(fmtFuncDocMap["Println"])},
+	"println": &ECALFunctionAdapter{reflect.ValueOf(fmt.Println), fmt.Sprint(fmtFuncDocMap["println"])},
 }
 
 /*

+ 6 - 6
stdlib/stdlib_gen.go

@@ -31,18 +31,18 @@ var mathConstMap = map[interface{}]interface{}{
 mathFuncDocMap contains the documentation of stdlib math functions.
 */
 var mathFuncDocMap = map[interface{}]interface{}{
-	"Inf":   "Function: Inf",
-	"IsInf": "Function: IsInf",
-	"IsNaN": "Function: IsNaN",
+	"inf":   "Function: inf",
+	"isInf": "Function: isInf",
+	"isNaN": "Function: isNaN",
 }
 
 /*
 mathFuncMap contains the mapping of stdlib math functions.
 */
 var mathFuncMap = map[interface{}]interface{}{
-	"Inf":   &ECALFunctionAdapter{reflect.ValueOf(math.Inf), fmt.Sprint(mathFuncDocMap["Inf"])},
-	"IsInf": &ECALFunctionAdapter{reflect.ValueOf(math.IsInf), fmt.Sprint(mathFuncDocMap["IsInf"])},
-	"IsNaN": &ECALFunctionAdapter{reflect.ValueOf(math.IsNaN), fmt.Sprint(mathFuncDocMap["IsNaN"])},
+	"inf":   &ECALFunctionAdapter{reflect.ValueOf(math.Inf), fmt.Sprint(mathFuncDocMap["inf"])},
+	"isInf": &ECALFunctionAdapter{reflect.ValueOf(math.IsInf), fmt.Sprint(mathFuncDocMap["isInf"])},
+	"isNaN": &ECALFunctionAdapter{reflect.ValueOf(math.IsNaN), fmt.Sprint(mathFuncDocMap["isNaN"])},
 }
 
 // Dummy statement to prevent declared and not used errors