Make camel,etc smart and add tests
parent
d5def01a9d
commit
116c0680a2
|
@ -181,9 +181,6 @@ const Categories = [
|
|||
"Parse UNIX file permissions",
|
||||
"Swap endianness",
|
||||
"Parse colour code",
|
||||
"To Snake case",
|
||||
"To Camel case",
|
||||
"To Kebab case",
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -274,6 +271,9 @@ const Categories = [
|
|||
"CSS selector",
|
||||
"Strip HTML tags",
|
||||
"Diff",
|
||||
"To Snake case",
|
||||
"To Camel case",
|
||||
"To Kebab case",
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
@ -3257,10 +3257,15 @@ const OperationConfig = {
|
|||
"<br><br>",
|
||||
"e.g. this_is_snake_case",
|
||||
].join("\n"),
|
||||
run: StrUtils.runToSnakeCase,
|
||||
run: Code.runToSnakeCase,
|
||||
inputType: "string",
|
||||
outputType: "string",
|
||||
args: [
|
||||
{
|
||||
name: "Attempt to be context aware",
|
||||
type: "boolean",
|
||||
value: false,
|
||||
},
|
||||
]
|
||||
},
|
||||
"To Camel case": {
|
||||
|
@ -3271,10 +3276,15 @@ const OperationConfig = {
|
|||
"<br><br>",
|
||||
"e.g. thisIsCamelCase",
|
||||
].join("\n"),
|
||||
run: StrUtils.runToCamelCase,
|
||||
run: Code.runToCamelCase,
|
||||
inputType: "string",
|
||||
outputType: "string",
|
||||
args: [
|
||||
{
|
||||
name: "Attempt to be context aware",
|
||||
type: "boolean",
|
||||
value: false,
|
||||
},
|
||||
]
|
||||
},
|
||||
"To Kebab case": {
|
||||
|
@ -3285,10 +3295,15 @@ const OperationConfig = {
|
|||
"<br><br>",
|
||||
"e.g. this-is-kebab-case",
|
||||
].join("\n"),
|
||||
run: StrUtils.runToKebabCase,
|
||||
run: Code.runToKebabCase,
|
||||
inputType: "string",
|
||||
outputType: "string",
|
||||
args: [
|
||||
{
|
||||
name: "Attempt to be context aware",
|
||||
type: "boolean",
|
||||
value: false,
|
||||
},
|
||||
]
|
||||
},
|
||||
};
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import {camelCase, kebabCase, snakeCase} from "lodash";
|
||||
|
||||
import Utils from "../Utils.js";
|
||||
import vkbeautify from "vkbeautify";
|
||||
import {DOMParser as dom} from "xmldom";
|
||||
|
@ -415,6 +417,84 @@ const Code = {
|
|||
.join(delimiter);
|
||||
},
|
||||
|
||||
/**
|
||||
* This tries to rename variable names in a code snippet according to a function.
|
||||
*
|
||||
* @param {string} input
|
||||
* @param {function} replacer - this function will be fed the token which should be renamed.
|
||||
* @returns {string}
|
||||
*/
|
||||
_replaceVariableNames(input, replacer) {
|
||||
let tokenRegex = /\\"|"(?:\\"|[^"])*"|(\b[a-z0-9\-_]+\b)/ig;
|
||||
|
||||
return input.replace(tokenRegex, (...args) => {
|
||||
let match = args[0],
|
||||
quotes = args[1];
|
||||
|
||||
if (!quotes) {
|
||||
return match;
|
||||
} else {
|
||||
return replacer(match);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Converts to snake_case.
|
||||
*
|
||||
* @param {string} input
|
||||
* @param {Object[]} args
|
||||
* @returns {string}
|
||||
*
|
||||
*/
|
||||
runToSnakeCase(input, args) {
|
||||
let smart = args[0];
|
||||
|
||||
if (smart) {
|
||||
return Code._replaceVariableNames(input, snakeCase);
|
||||
} else {
|
||||
return snakeCase(input);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Converts to camelCase.
|
||||
*
|
||||
* @param {string} input
|
||||
* @param {Object[]} args
|
||||
* @returns {string}
|
||||
*
|
||||
*/
|
||||
runToCamelCase(input, args) {
|
||||
let smart = args[0];
|
||||
|
||||
if (smart) {
|
||||
return Code._replaceVariableNames(input, camelCase);
|
||||
} else {
|
||||
return camelCase(input);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Converts to kebab-case.
|
||||
*
|
||||
* @param {string} input
|
||||
* @param {Object[]} args
|
||||
* @returns {string}
|
||||
*
|
||||
*/
|
||||
runToKebabCase(input, args) {
|
||||
let smart = args[0];
|
||||
|
||||
if (smart) {
|
||||
return Code._replaceVariableNames(input, kebabCase);
|
||||
} else {
|
||||
return kebabCase(input);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
export default Code;
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import {camelCase, kebabCase, snakeCase} from "lodash";
|
||||
|
||||
import Utils from "../Utils.js";
|
||||
import * as JsDiff from "diff";
|
||||
|
||||
|
@ -594,45 +592,6 @@ const StrUtils = {
|
|||
|
||||
return output;
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Converts to snake_case.
|
||||
*
|
||||
* @param {string} input
|
||||
* @param {Object[]} args
|
||||
* @returns {string}
|
||||
*
|
||||
*/
|
||||
runToSnakeCase(input, args) {
|
||||
return snakeCase(input);
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Converts to camelCase.
|
||||
*
|
||||
* @param {string} input
|
||||
* @param {Object[]} args
|
||||
* @returns {string}
|
||||
*
|
||||
*/
|
||||
runToCamelCase(input, args) {
|
||||
return camelCase(input);
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Converts to kebab-case.
|
||||
*
|
||||
* @param {string} input
|
||||
* @param {Object[]} args
|
||||
* @returns {string}
|
||||
*
|
||||
*/
|
||||
runToKebabCase(input, args) {
|
||||
return kebabCase(input);
|
||||
},
|
||||
};
|
||||
|
||||
export default StrUtils;
|
||||
|
|
|
@ -13,6 +13,7 @@ import "babel-polyfill";
|
|||
import TestRegister from "./TestRegister.js";
|
||||
import "./tests/operations/Base58.js";
|
||||
import "./tests/operations/ByteRepr.js";
|
||||
import "./tests/operations/Code.js";
|
||||
import "./tests/operations/Compress.js";
|
||||
import "./tests/operations/FlowControl.js";
|
||||
import "./tests/operations/MorseCode.js";
|
||||
|
|
|
@ -0,0 +1,132 @@
|
|||
/**
|
||||
* Code tests.
|
||||
*
|
||||
* @author tlwr [toby@toby.codes]
|
||||
*
|
||||
* @copyright Crown Copyright 2017
|
||||
* @license Apache-2.0
|
||||
*/
|
||||
import TestRegister from "../../TestRegister.js";
|
||||
|
||||
TestRegister.addTests([
|
||||
{
|
||||
name: "To Camel case (dumb)",
|
||||
input: "hello world",
|
||||
expectedOutput: "helloWorld",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "To Camel case",
|
||||
"args": [false]
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "To Snake case (dumb)",
|
||||
input: "hello world",
|
||||
expectedOutput: "hello_world",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "To Snake case",
|
||||
"args": [false]
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "To Kebab case (dumb)",
|
||||
input: "hello world",
|
||||
expectedOutput: "hello-world",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "To Kebab case",
|
||||
"args": [false]
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "To Camel case (smart)",
|
||||
input: [
|
||||
"test='hello'",
|
||||
"echo $test",
|
||||
"a_camel_case_function",
|
||||
"$a_camel_case_variable;",
|
||||
"function function_name() {",
|
||||
" console.log('things inside quotes do not get broken');",
|
||||
" console.log(\"things inside quotes do not get broken\");",
|
||||
"}",
|
||||
].join("\n"),
|
||||
expectedOutput: [
|
||||
"test='hello'",
|
||||
"echo $test",
|
||||
"aCamelCaseFunction",
|
||||
"$aCamelCaseVariable;",
|
||||
"function functionName() {",
|
||||
" console.log('things inside quotes do not get broken');",
|
||||
" console.log(\"things inside quotes do not get broken\");",
|
||||
"}",
|
||||
].join("\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "To Camel case",
|
||||
"args": [true]
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "To Snake case (smart)",
|
||||
input: [
|
||||
"test='hello'",
|
||||
"echo $test",
|
||||
"aSnakeCaseFunction",
|
||||
"$aSnakeCaseVariable;",
|
||||
"function functionName() {",
|
||||
" console.log('things inside quotes do not get broken');",
|
||||
" console.log(\"things inside quotes do not get broken\");",
|
||||
"}",
|
||||
].join("\n"),
|
||||
expectedOutput: [
|
||||
"test='hello'",
|
||||
"echo $test",
|
||||
"a_snake_case_function",
|
||||
"$a_snake_case_variable;",
|
||||
"function function_name() {",
|
||||
" console.log('things inside quotes do not get broken');",
|
||||
" console.log(\"things inside quotes do not get broken\");",
|
||||
"}",
|
||||
].join("\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "To Snake case",
|
||||
"args": [true]
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "To Kebab case (smart)",
|
||||
input: [
|
||||
"test='hello'",
|
||||
"echo $test",
|
||||
"aKebabCaseFunction",
|
||||
"$aKebabCaseVariable;",
|
||||
"function functionName() {",
|
||||
" console.log('things inside quotes do not get broken');",
|
||||
" console.log(\"things inside quotes do not get broken\");",
|
||||
"}",
|
||||
].join("\n"),
|
||||
expectedOutput: [
|
||||
"test='hello'",
|
||||
"echo $test",
|
||||
"a-kebab-case-function",
|
||||
"$a-kebab-case-variable;",
|
||||
"function function-name() {",
|
||||
" console.log('things inside quotes do not get broken');",
|
||||
" console.log(\"things inside quotes do not get broken\");",
|
||||
"}",
|
||||
].join("\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "To Kebab case",
|
||||
"args": [true]
|
||||
}
|
||||
],
|
||||
},
|
||||
]);
|
Loading…
Reference in New Issue