From 3be55dc53e6516506f2de1ef1ca03d3c29d67782 Mon Sep 17 00:00:00 2001 From: mpaulson Date: Thu, 30 Jun 2022 20:02:22 -0600 Subject: [PATCH] feat: better class generation. --- .jest.config.json | 2 +- ligma.config.js | 7 +------ package.json | 21 +++++++++++---------- scripts/dsa.js | 23 +++++++++++++++++++++++ scripts/generate | 23 ++++++++++++++++++++++- src/__tests__/RingBuffer.ts | 3 +++ tsconfig.json | 4 ++-- 7 files changed, 63 insertions(+), 20 deletions(-) create mode 100644 src/__tests__/RingBuffer.ts diff --git a/.jest.config.json b/.jest.config.json index 14b7c3c..a81ee2c 100644 --- a/.jest.config.json +++ b/.jest.config.json @@ -2,7 +2,7 @@ "clearMocks": true, "moduleNameMapper": { "@code/(.*)": [ - "/src/day5/$1" + "/src/day9/$1" ] }, "preset": "ts-jest" diff --git a/ligma.config.js b/ligma.config.js index 85010ad..f9624f0 100644 --- a/ligma.config.js +++ b/ligma.config.js @@ -1,11 +1,6 @@ module.exports = { dsa: [ - "InsertionSort", - "MergeSort", - "Queue", - "Stack", - "QuickSort", - "DijkstraList", + "ArrayList", ], } diff --git a/package.json b/package.json index a7685a9..919d9f2 100644 --- a/package.json +++ b/package.json @@ -14,19 +14,20 @@ "typescript": "^4.7.4" }, "scripts": { - "test": "jest InsertionSort MergeSort Queue Stack QuickSort DijkstraList", + "test": "jest ArrayList", "clear": "./scripts/clear", "prettier": "prettier --write ./src", "generate": "./scripts/generate", - "day": "echo /home/mpaulson/personal/kata/src/day5" + "day": "echo /home/mpaulson/personal/kata/src/day9" }, "kata_stats": { - "ArrayList": 0, - "DijkstraList": 4, - "InsertionSort": 3, - "MergeSort": 3, - "Queue": 3, - "Stack": 3, - "QuickSort": 3 + "ArrayList": 3, + "DijkstraList": 5, + "InsertionSort": 4, + "MergeSort": 4, + "Queue": 4, + "Stack": 4, + "QuickSort": 4, + "PrimsList": 1 } -} +} \ No newline at end of file diff --git a/scripts/dsa.js b/scripts/dsa.js index b2e1df2..ae55f27 100644 --- a/scripts/dsa.js +++ b/scripts/dsa.js @@ -2,6 +2,29 @@ module.exports = { ArrayList: { 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: { type: "class", diff --git a/scripts/generate b/scripts/generate index 9a2a39b..10ecf4c 100755 --- a/scripts/generate +++ b/scripts/generate @@ -29,11 +29,32 @@ const day_path = path.join(src_path, day_name); try { fs.unlinkSync(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) { fs.writeFileSync(path.join(day_path, `${name}.ts`), `export default class ${name} { - constructor() { + ${(item.properties || []).map(generate_property).join("\n ")} + ${(item.getters || []).map(generate_getter).join("\n ")} + + constructor() { } + + ${(item.methods || []).map(generate_method).join("\n ")} }`); } diff --git a/src/__tests__/RingBuffer.ts b/src/__tests__/RingBuffer.ts new file mode 100644 index 0000000..b28b04f --- /dev/null +++ b/src/__tests__/RingBuffer.ts @@ -0,0 +1,3 @@ + + + diff --git a/tsconfig.json b/tsconfig.json index b689ceb..6021687 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,7 @@ "baseUrl": "src", "paths": { "@code/*": [ - "day5/*" + "day9/*" ] } }, @@ -22,4 +22,4 @@ "exclude": [ "node_modules" ] -} +} \ No newline at end of file