-
Notifications
You must be signed in to change notification settings - Fork 24
Restrict init file gen to package directories and fix docstring blank lines #596
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -6,6 +6,7 @@ | |
|
|
||
| import java.nio.file.Path; | ||
| import java.nio.file.Paths; | ||
| import java.util.Set; | ||
| import java.util.stream.Collectors; | ||
| import software.amazon.smithy.python.codegen.GenerationContext; | ||
| import software.amazon.smithy.utils.SmithyInternalApi; | ||
|
|
@@ -15,6 +16,8 @@ | |
| */ | ||
| @SmithyInternalApi | ||
| public final class InitGenerator implements Runnable { | ||
| // Set of directories that need __init__.py files | ||
| private static final Set<String> PACKAGE_DIRECTORIES = Set.of("src", "tests"); | ||
|
|
||
| private final GenerationContext context; | ||
|
|
||
|
|
@@ -31,6 +34,7 @@ public void run() { | |
| .stream() | ||
| .map(Paths::get) | ||
| .filter(path -> !path.getParent().equals(context.fileManifest().getBaseDir())) | ||
| .filter(path -> PACKAGE_DIRECTORIES.contains(path.getName(0).toString())) | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This only iterates through the file paths we provide when creating file writers. According to Smithy's However, I did notice that we use either
|
||
| .collect(Collectors.groupingBy(Path::getParent, Collectors.toSet())); | ||
| for (var entry : directories.entrySet()) { | ||
| var initPath = entry.getKey().resolve("__init__.py"); | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems a little strange for the fix. Is it because this adds the newline we need but our actual writer is also always appending a newline so we get two? I think this issue was affecting multiple places. I wonder if we should be doing something more like trimming extra newlines from the end of the final docstring (or not appending them to the end).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes there are a couple places where we add two newlines on accident by using
writeinstead ofwriteInlineand then passing in a text block which adds its own newline.I pushed up a commit that adds a helper method to
PythonWriterthat removes all trailing whitespaces. We'll call it and then add a single newline before writing the closing"""inwriteDocs(). This normalizes all docstrings and prevents a trailing blank line.This fixed all of the issues I've seen in
models.pyandclient.py. I also made theConfigGeneratorusewriteDocs()(it didn't previously) and it resolved the blank line issue for its constructor as well.I still fixed the source of the double newlines but the helper method will help prevent this issue from reoccurring in the future.
This is the diff for the Transcribe client with these codegen changes.