feat: better class generation.

This commit is contained in:
mpaulson 2022-06-30 20:02:22 -06:00
parent 593a8d6a7f
commit 3be55dc53e
7 changed files with 63 additions and 20 deletions

View file

@ -2,7 +2,7 @@
"clearMocks": true, "clearMocks": true,
"moduleNameMapper": { "moduleNameMapper": {
"@code/(.*)": [ "@code/(.*)": [
"<rootDir>/src/day5/$1" "<rootDir>/src/day9/$1"
] ]
}, },
"preset": "ts-jest" "preset": "ts-jest"

View file

@ -1,11 +1,6 @@
module.exports = { module.exports = {
dsa: [ dsa: [
"InsertionSort", "ArrayList",
"MergeSort",
"Queue",
"Stack",
"QuickSort",
"DijkstraList",
], ],
} }

View file

@ -14,19 +14,20 @@
"typescript": "^4.7.4" "typescript": "^4.7.4"
}, },
"scripts": { "scripts": {
"test": "jest InsertionSort MergeSort Queue Stack QuickSort DijkstraList", "test": "jest ArrayList",
"clear": "./scripts/clear", "clear": "./scripts/clear",
"prettier": "prettier --write ./src", "prettier": "prettier --write ./src",
"generate": "./scripts/generate", "generate": "./scripts/generate",
"day": "echo /home/mpaulson/personal/kata/src/day5" "day": "echo /home/mpaulson/personal/kata/src/day9"
}, },
"kata_stats": { "kata_stats": {
"ArrayList": 0, "ArrayList": 3,
"DijkstraList": 4, "DijkstraList": 5,
"InsertionSort": 3, "InsertionSort": 4,
"MergeSort": 3, "MergeSort": 4,
"Queue": 3, "Queue": 4,
"Stack": 3, "Stack": 4,
"QuickSort": 3 "QuickSort": 4,
"PrimsList": 1
} }
} }

View file

@ -2,6 +2,29 @@
module.exports = { module.exports = {
ArrayList: { ArrayList: {
type: "class", type: "class",
methods: [{
name: "add",
args: "item: T",
return: "void",
}, {
name: "remove",
args: "item: T",
return: "T | undefined",
}, {
name: "removeAt",
args: "idx: number",
return: "T | undefined",
}],
getters: [{
name: "length",
return: "number",
prop_name: "_length",
}],
properties: [{
name: "_length",
type: "number",
scope: "private",
}]
}, },
SinglyLinkedList: { SinglyLinkedList: {
type: "class", type: "class",

View file

@ -29,11 +29,32 @@ const day_path = path.join(src_path, day_name);
try { fs.unlinkSync(day_path); } catch (e) { } try { fs.unlinkSync(day_path); } catch (e) { }
try { fs.mkdirSync(day_path); } catch (e) { } try { fs.mkdirSync(day_path); } catch (e) { }
function generate_method(method) {
return `${method.name}(${method.args}): ${method.return || "void"} {
}`;
}
function generate_property(prop) {
return `${prop.scope} ${prop.name}: ${prop.type};`
}
function generate_getter(getter) {
return `${getter.name}(): ${getter.return} {
return this.${getter.prop_name};
}`
}
function create_class(name, item) { function create_class(name, item) {
fs.writeFileSync(path.join(day_path, `${name}.ts`), `export default class ${name}<T> { fs.writeFileSync(path.join(day_path, `${name}.ts`), `export default class ${name}<T> {
constructor() { ${(item.properties || []).map(generate_property).join("\n ")}
${(item.getters || []).map(generate_getter).join("\n ")}
constructor() {
} }
${(item.methods || []).map(generate_method).join("\n ")}
}`); }`);
} }

View file

@ -0,0 +1,3 @@

View file

@ -12,7 +12,7 @@
"baseUrl": "src", "baseUrl": "src",
"paths": { "paths": {
"@code/*": [ "@code/*": [
"day5/*" "day9/*"
] ]
} }
}, },
@ -22,4 +22,4 @@
"exclude": [ "exclude": [
"node_modules" "node_modules"
] ]
} }