-
-
Notifications
You must be signed in to change notification settings - Fork 22k
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
Add a keyword for abstract classes in GDScript #67777
base: master
Are you sure you want to change the base?
Conversation
845d75c
to
f7f27ce
Compare
8daace1
to
36a62f0
Compare
36a62f0
to
3071b44
Compare
3071b44
to
74670c0
Compare
74670c0
to
955143a
Compare
Are abstract methods supported with this PR? |
@ryanabx No, only abstract classes are supported with this PR. |
955143a
to
2d4113e
Compare
2d4113e
to
b0390a3
Compare
|
Talked about in the current GDScript meeting. The PR should implement the elements 1 and 2 stated by @dalexeev. For number 3, we're still discussing this in the meeting, so no decision has been made. |
Yeah, my thoughts on 3. are whether it makes sense to (for this PR or eventually) have the "granularity" of abstractness exist at the class or at the method level. For example, with it at the method level: class AbstractBecauseOfAbstractMethods:
func this_method_is_implemented():
pass
@abstract
func this_method_is_virtual_slash_abstract()
func this_is_also_implemented():
pass
# ----------------------
class StillAbstract extends AbstractBecauseOfAbstractMethods:
func some_new_implemented_func():
pass
# ----------------------
class FinallyNotAbstractClass extends StillAbstract:
func this_method_is_virtual_slash_abstract():
pass We could force the users to annotate a class to be marked as abstract if any of its functions are still abstract. This would give people more granularity in what precisely makes the class abstract. It doesn't make GDScript any more expressive, since you can always 1) tag a class as abstract, then 2) have methods implemented with Folks agreed during the meeting that this wouldn't be a blocking thing for this PR, and that it could be implemented later :) |
I will get to work on 1. For 2, this is trivial because it's just removing |
6896f1f
to
fbebf7a
Compare
fbebf7a
to
8490bc7
Compare
Have had this PR in my fork for over a month, had no issues with it. |
I don't think the name Could someone link me to the previous version were virtual was discarded? |
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.
Looking good to me, havent had issues with this PR at all inside my own fork.
8490bc7
to
84e20dc
Compare
84e20dc
to
b88bc95
Compare
b8e69b0
to
0b15ed4
Compare
0b15ed4
to
e5cc00c
Compare
e5cc00c
to
95bcbb3
Compare
95bcbb3
to
cfb30c7
Compare
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.
Overall looks good to me, but I guess such a feature needs to be approved at a GDScript team meeting, which hasn't happened in a long time.
modules/gdscript/tests/scripts/analyzer/errors/construct_abstract_script.gd
Outdated
Show resolved
Hide resolved
modules/gdscript/tests/scripts/analyzer/features/extend_abstract_class.gd
Outdated
Show resolved
Hide resolved
0c4b79a
to
1e2e52c
Compare
modules/gdscript/tests/scripts/analyzer/errors/duplicate_abstract.out
Outdated
Show resolved
Hide resolved
1e2e52c
to
ec7b8c2
Compare
ec7b8c2
to
67fe051
Compare
Co-authored-by: Danil Alexeev <danil@alexeev.xyz>
f37472f
to
2397a54
Compare
Implements and closes godotengine/godot-proposals#5641
This PR adds a keyword for marking a script class as abstract in GDScript.
I tested multiple combinations of abstract and non-abstract inheritance and they all work. As an example, in this image
MyAbstract
isabstract
, while the other is not. Note that ifExtendsMyAbstract
was made abstract then both would be hidden.And here's what happens if you try to instance with
.new()
:A previous version of the PR used
@virtual
, but the feedback has been overwhelming thatabstract
is better. After that, another previous version of this PR used an annotation@abstract
, but it was discussed that a keyword is preferred.Production edit: closes godotengine/godot-roadmap#66