[SM64] Smarter and standardized includes#449
Conversation
Added new functions, write_includes and update_actor_includes. write_includes is a smarter version of writeIfNotFound specifically for includes and externs, it removes comments prior to searching (but doesn't remove comments from the actual file of course) and allows whitespace (where possible, a path including whitespace won´t be found when searching for a file with no whitespace), futhermore it adds a trailing newline to the file instead of adding a leading newline for each include, the logic that finds the `#endif` of .h files is also improved like the logic to find includes and externs (whitespace is tolerated, comments are ignored) but it also allows no endif for files that use the GCC `#pragma once` macro update_actor_includes standardizes group and level includes into one place for ease of editing, one of the major differences is that level exports no longer use the full path (levels/actor/my_file.c would instead be /actor/my_file.c) this should allow level header type actors to actually update headers on custom non decomp levels but that is not done here
|
While I like my current idea, I think I can iron out some stuff and actually update writeIfNotFound, looking into that right now |
bb78cad to
82f7e22
Compare
df8b312 to
2d76dce
Compare
|
I'm actually done this time, just needed to change stuff for animations rework |
|
can you add function descriptions to the more complex funcs, it is something we should probably do more often |
Verbose documentation like docstrings is.. not my strong suite
jesusyoshi54
left a comment
There was a problem hiding this comment.
I did a light code review of sm64_utility.py and the other files and some testing. I think overall it is good and it seems to work though I didn't test everything as this seems to sort of touch everything.
I think it would be good if this could get someone else to do some stress testing with their own levels and then I would be good with this :)
|
Tested on a few levels. Does not seem to cause any issues. |
I'd really like some opinions on write_or_delete_if_found's complexity.
Added new functions, write_or_delete_if_found, write_includes and update_actor_includes. Remove writeIfNotFound and deleteIfFound
write_or_delete_if_found is a smarter version of writeIfNotFound and deleteIfFound, it optionally removes comments prior to searching (but doesn't remove comments from the actual file of course) and lets you pass in regex patterns (without worrying about comments!) which allows much smarter searchs that can tolerate whitespace, it adds a trailing newline to the file instead of each include having to include a newline (broke stuff before), the footer can now be optional (allows no endif which is great for files that use the GCC
#pragma oncemacro)update_actor_includes standardizes group and level includes into one place for ease of editing, one of the major differences is that level exports no longer use the full path (levels/actor/my_file.c would instead be /actor/my_file.c) this should allow level header type actors to actually update headers on custom non decomp levels but that is not done in this PR (existing includes are unaffected!).
Benifts from this pr: