[yu-sutong] iP#644
Open
yu-sutong wants to merge 45 commits intonus-cs2103-AY2425S1:masterfrom
Open
Conversation
In build.gradle, the dependencies on distZip and/or distTar causes
the shadowJar task to generate a second JAR file for which the
mainClass.set("seedu.duke.Duke") does not take effect.
Hence, this additional JAR file cannot be run.
For this product, there is no need to generate a second JAR file
to begin with.
Let's remove this dependency from the build.gradle to prevent the
shadowJar task from generating the extra JAR file.
kevin-pek
reviewed
Sep 6, 2024
kevin-pek
left a comment
There was a problem hiding this comment.
LGTM, just have some nitpicks with regards to the coding standards. Have highlighted them for your consideration. Thanks!
Comment on lines
+15
to
+87
| switch (command) { | ||
| case "bye": | ||
| ui.showGoodbye(); | ||
| System.exit(0); | ||
| break; | ||
|
|
||
| case "list": | ||
| ui.showTaskList(tasks); | ||
| break; | ||
|
|
||
| case "mark": | ||
| int markIndex = Integer.parseInt(inputs[1]) - 1; | ||
| tasks.getTask(markIndex).markAsDone(); | ||
| ui.showLine(); | ||
| ui.showMessage("Nice! I've marked this task as done:"); | ||
| ui.showMessage(tasks.getTask(markIndex).toString()); | ||
| ui.showLine(); | ||
| storage.save(tasks); | ||
| break; | ||
|
|
||
| case "unmark": | ||
| int unmarkIndex = Integer.parseInt(inputs[1]) - 1; | ||
| tasks.getTask(unmarkIndex).unmark(); | ||
| ui.showLine(); | ||
| ui.showMessage("OK, I've marked this task as not done yet:"); | ||
| ui.showMessage(tasks.getTask(unmarkIndex).toString()); | ||
| ui.showLine(); | ||
| storage.save(tasks); | ||
| break; | ||
|
|
||
| case "todo": | ||
| tasks.addTask(new Todo(inputs[1])); | ||
| ui.showLine(); | ||
| ui.showMessage("Got it. I've added this task:"); | ||
| ui.showMessage(tasks.getTask(tasks.getTasks().size() - 1).toString()); | ||
| ui.showLine(); | ||
| storage.save(tasks); | ||
| break; | ||
|
|
||
| case "deadline": | ||
| String[] deadlineDetails = inputs[1].split("/by"); | ||
| tasks.addTask(new Deadline(deadlineDetails[0].trim(), LocalDateTime.parse(deadlineDetails[1].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")))); | ||
| ui.showLine(); | ||
| ui.showMessage("Got it. I've added this task:"); | ||
| ui.showMessage(tasks.getTask(tasks.getTasks().size() - 1).toString()); | ||
| ui.showLine(); | ||
| storage.save(tasks); | ||
| break; | ||
|
|
||
| case "event": | ||
| String[] eventDetails = inputs[1].split("/from|/to"); | ||
| tasks.addTask(new Event(eventDetails[0].trim(), LocalDateTime.parse(eventDetails[1].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")), LocalDateTime.parse(eventDetails[2].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")))); | ||
| ui.showLine(); | ||
| ui.showMessage("Got it. I've added this task:"); | ||
| ui.showMessage(tasks.getTask(tasks.getTasks().size() - 1).toString()); | ||
| ui.showLine(); | ||
| storage.save(tasks); | ||
| break; | ||
|
|
||
| case "delete": | ||
| int deleteIndex = Integer.parseInt(inputs[1]) - 1; | ||
| Task removedTask = tasks.getTask(deleteIndex); | ||
| tasks.removeTask(deleteIndex); | ||
| ui.showLine(); | ||
| ui.showMessage("Noted. I've removed this task:"); | ||
| ui.showMessage(removedTask.toString()); | ||
| ui.showLine(); | ||
| storage.save(tasks); | ||
| break; | ||
|
|
||
| default: | ||
| throw new UnknownCommandException("I'm sorry, but I don't know what that means."); | ||
| } |
There was a problem hiding this comment.
Suggested change
| switch (command) { | |
| case "bye": | |
| ui.showGoodbye(); | |
| System.exit(0); | |
| break; | |
| case "list": | |
| ui.showTaskList(tasks); | |
| break; | |
| case "mark": | |
| int markIndex = Integer.parseInt(inputs[1]) - 1; | |
| tasks.getTask(markIndex).markAsDone(); | |
| ui.showLine(); | |
| ui.showMessage("Nice! I've marked this task as done:"); | |
| ui.showMessage(tasks.getTask(markIndex).toString()); | |
| ui.showLine(); | |
| storage.save(tasks); | |
| break; | |
| case "unmark": | |
| int unmarkIndex = Integer.parseInt(inputs[1]) - 1; | |
| tasks.getTask(unmarkIndex).unmark(); | |
| ui.showLine(); | |
| ui.showMessage("OK, I've marked this task as not done yet:"); | |
| ui.showMessage(tasks.getTask(unmarkIndex).toString()); | |
| ui.showLine(); | |
| storage.save(tasks); | |
| break; | |
| case "todo": | |
| tasks.addTask(new Todo(inputs[1])); | |
| ui.showLine(); | |
| ui.showMessage("Got it. I've added this task:"); | |
| ui.showMessage(tasks.getTask(tasks.getTasks().size() - 1).toString()); | |
| ui.showLine(); | |
| storage.save(tasks); | |
| break; | |
| case "deadline": | |
| String[] deadlineDetails = inputs[1].split("/by"); | |
| tasks.addTask(new Deadline(deadlineDetails[0].trim(), LocalDateTime.parse(deadlineDetails[1].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")))); | |
| ui.showLine(); | |
| ui.showMessage("Got it. I've added this task:"); | |
| ui.showMessage(tasks.getTask(tasks.getTasks().size() - 1).toString()); | |
| ui.showLine(); | |
| storage.save(tasks); | |
| break; | |
| case "event": | |
| String[] eventDetails = inputs[1].split("/from|/to"); | |
| tasks.addTask(new Event(eventDetails[0].trim(), LocalDateTime.parse(eventDetails[1].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")), LocalDateTime.parse(eventDetails[2].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")))); | |
| ui.showLine(); | |
| ui.showMessage("Got it. I've added this task:"); | |
| ui.showMessage(tasks.getTask(tasks.getTasks().size() - 1).toString()); | |
| ui.showLine(); | |
| storage.save(tasks); | |
| break; | |
| case "delete": | |
| int deleteIndex = Integer.parseInt(inputs[1]) - 1; | |
| Task removedTask = tasks.getTask(deleteIndex); | |
| tasks.removeTask(deleteIndex); | |
| ui.showLine(); | |
| ui.showMessage("Noted. I've removed this task:"); | |
| ui.showMessage(removedTask.toString()); | |
| ui.showLine(); | |
| storage.save(tasks); | |
| break; | |
| default: | |
| throw new UnknownCommandException("I'm sorry, but I don't know what that means."); | |
| } | |
| switch (command) { | |
| case "bye": | |
| ui.showGoodbye(); | |
| System.exit(0); | |
| break; | |
| case "list": | |
| ui.showTaskList(tasks); | |
| break; | |
| case "mark": | |
| int markIndex = Integer.parseInt(inputs[1]) - 1; | |
| tasks.getTask(markIndex).markAsDone(); | |
| ui.showLine(); | |
| ui.showMessage("Nice! I've marked this task as done:"); | |
| ui.showMessage(tasks.getTask(markIndex).toString()); | |
| ui.showLine(); | |
| storage.save(tasks); | |
| break; | |
| case "unmark": | |
| int unmarkIndex = Integer.parseInt(inputs[1]) - 1; | |
| tasks.getTask(unmarkIndex).unmark(); | |
| ui.showLine(); | |
| ui.showMessage("OK, I've marked this task as not done yet:"); | |
| ui.showMessage(tasks.getTask(unmarkIndex).toString()); | |
| ui.showLine(); | |
| storage.save(tasks); | |
| break; | |
| case "todo": | |
| tasks.addTask(new Todo(inputs[1])); | |
| ui.showLine(); | |
| ui.showMessage("Got it. I've added this task:"); | |
| ui.showMessage(tasks.getTask(tasks.getTasks().size() - 1).toString()); | |
| ui.showLine(); | |
| storage.save(tasks); | |
| break; | |
| case "deadline": | |
| String[] deadlineDetails = inputs[1].split("/by"); | |
| tasks.addTask(new Deadline(deadlineDetails[0].trim(), LocalDateTime.parse(deadlineDetails[1].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")))); | |
| ui.showLine(); | |
| ui.showMessage("Got it. I've added this task:"); | |
| ui.showMessage(tasks.getTask(tasks.getTasks().size() - 1).toString()); | |
| ui.showLine(); | |
| storage.save(tasks); | |
| break; | |
| case "event": | |
| String[] eventDetails = inputs[1].split("/from|/to"); | |
| tasks.addTask(new Event(eventDetails[0].trim(), LocalDateTime.parse(eventDetails[1].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")), LocalDateTime.parse(eventDetails[2].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")))); | |
| ui.showLine(); | |
| ui.showMessage("Got it. I've added this task:"); | |
| ui.showMessage(tasks.getTask(tasks.getTasks().size() - 1).toString()); | |
| ui.showLine(); | |
| storage.save(tasks); | |
| break; | |
| case "delete": | |
| int deleteIndex = Integer.parseInt(inputs[1]) - 1; | |
| Task removedTask = tasks.getTask(deleteIndex); | |
| tasks.removeTask(deleteIndex); | |
| ui.showLine(); | |
| ui.showMessage("Noted. I've removed this task:"); | |
| ui.showMessage(removedTask.toString()); | |
| ui.showLine(); | |
| storage.save(tasks); | |
| break; | |
| default: | |
| throw new UnknownCommandException("I'm sorry, but I don't know what that means."); | |
| } |
The coding standard mentions that switch statements should not have indentation for case clauses. Default formatting for your IDE may have conflicted with this.
Comment on lines
+32
to
+47
| switch (taskType) { | ||
| case "T": | ||
| task = new Todo(description); | ||
| break; | ||
| case "D": | ||
| LocalDateTime deadlineDate = LocalDateTime.parse(parts[3], DateTimeFormatter.ofPattern("d/M/yyyy HHmm")); | ||
| task = new Deadline(description, deadlineDate); | ||
| break; | ||
| case "E": | ||
| LocalDateTime eventStart = LocalDateTime.parse(parts[3], DateTimeFormatter.ofPattern("d/M/yyyy HHmm")); | ||
| LocalDateTime eventEnd = LocalDateTime.parse(parts[4], DateTimeFormatter.ofPattern("d/M/yyyy HHmm")); | ||
| task = new Event(description, eventStart, eventEnd); | ||
| break; | ||
| default: | ||
| throw new IllegalStateException("Unknown task type: " + taskType); | ||
| } |
| import mysutong.Deadline; | ||
| import mysutong.Event; | ||
|
|
||
| import java.io.*; |
There was a problem hiding this comment.
Imports should be made explicit according to the coding standard.
Suggested change
| import java.io.*; | |
| import java.io.File; | |
| import java.io.FileNotFoundException; | |
| import java.io.BufferedWriter; | |
| import java.io.IOException; |
|
|
||
| case "event": | ||
| String[] eventDetails = inputs[1].split("/from|/to"); | ||
| tasks.addTask(new Event(eventDetails[0].trim(), LocalDateTime.parse(eventDetails[1].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")), LocalDateTime.parse(eventDetails[2].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")))); |
There was a problem hiding this comment.
This line is past the 120 character line limit for the coding standards. It would be good to consider doing line wrapping. Alternatively you might want to separate the logic into multiple lines instead.
Suggested change
| tasks.addTask(new Event(eventDetails[0].trim(), LocalDateTime.parse(eventDetails[1].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")), LocalDateTime.parse(eventDetails[2].trim(), DateTimeFormatter.ofPattern("d/M/yyyy HHmm")))); | |
| tasks.addTask(new Event(eventDetails[0].trim(), | |
| LocalDateTime.parse(eventDetails[1].trim(), | |
| DateTimeFormatter.ofPattern("d/M/yyyy HHmm")), | |
| LocalDateTime.parse(eventDetails[2].trim(), | |
| DateTimeFormatter.ofPattern("d/M/yyyy HHmm")))); |
# Conflicts: # src/main/java/mysutong/Storage.java
# Conflicts: # src/main/java/mysutong/Parser.java # src/main/java/mysutong/Ui.java
The executeCommand method in Parser handles user commands by splitting the input string into two parts: the command itself and any additional arguments. Currently, the split operation does not validate that the input string contains at least one element, which could potentially lead to unexpected behaviour or bugs if empty input is passed. To mitigate this, let's add an assert statement to ensure that the inputs array has at least one element. This ensures that the code always receives a valid command to process. In situations where assertions are enabled, this will help catch empty or invalid commands during development and testing. While this doesn't address user input validation directly (since assert can be disabled in production), it adds an extra layer of safety during development. This change also avoids unnecessary array access errors and improves the stability of the command handling logic.
This commit refactors the code to conform to the Checkstyle configuration, ensuring consistency and compliance with coding standards. Changes made: - Replaced wildcard imports (e.g., import static org.junit.jupiter.api.Assertions.*) with explicit imports for better clarity and to avoid unnecessary imports. - Corrected import order to follow the standard conventions, ensuring that java.* imports are grouped together and listed alphabetically. - Fixed spacing issues, such as ensuring a single space between comments and code, and after operators (e.g., =, +). - Improved overall code readability and conformance to Checkstyle rules by addressing minor formatting inconsistencies. These changes are intended to improve the maintainability of the codebase by ensuring that it follows consistent styling rules as enforced by Checkstyle. By doing this, we minimize the chances of formatting-related errors and enhance code readability across the project. All changes are purely stylistic and do not alter the functionality of the code.
Add assertion to ensure valid command input
Refactor code style to adhere to Checkstyle guidelines
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
MySutong frees your mind of having to remember things you need to do. It's,
All you need to do is,
And it is FREE!
Features: