From: "tenderlovemaking (Aaron Patterson) via ruby-core" <ruby-core@...>
Date: 2023-10-13T18:27:56+00:00
Subject: [ruby-core:115048] [Ruby master Feature#18915] New error class: NotImplementedYetError or scope change for NotImplementedError

Issue #18915 has been updated by tenderlovemaking (Aaron Patterson).





byroot (Jean Boussier) wrote in #note-10:

> > since NotImplementedError doesn't inherit from StandardError I kind of wish there was a new exception class

> 

> Could you elaborate? For this use case I think not inheriting from `StandardError` is better, as it's not something you'd want to be rescued broadly.



It is something I would like rescued broadly.  For example if I'm test driving a concrete implementation, the test framework needs to specifically rescue `NotImplementedError` in order to report the error.  I wouldn't expect a test framework to rescue OutOfMemoryError for example, but definitely rescue NotImplementedError.



----------------------------------------

Feature #18915: New error class: NotImplementedYetError or scope change for NotImplementedError

https://bugs.ruby-lang.org/issues/18915#change-104922



* Author: Quintasan (Micha�� Zaj��c)

* Status: Open

* Priority: Normal

----------------------------------------

# Abstract



Introduce `NotImplementedYetError` exception that should be used in case when the codepath has not been implemented by the developer for some reason (maybe they're designing an abstract class or are designing some sort of interface to reuse later on) OR extend the meaning of `NotImplementedError` to cover those usecases so we don't have to introduce another exception



# Background



`NotImplementedError` is supposed to be raised `if the underlying operating system or Ruby runtime does not support them` (https://ruby-doc.org/core-3.1.2/NotImplementedError.html)



However it appears that many people are misusing this exception by raising this in a superclass from which they later inherit from. I do realize that Ruby promotes duck-typing (the default RuboCop style guide has a cop for this ��� https://github.com/rubocop/ruby-style-guide#duck-typing). However I have seen this being discussed numerous times:



* https://github.com/rubocop/ruby-style-guide/issues/458

* http://chrisstump.online/2016/03/23/stop-abusing-notimplementederror/

* https://oleg0potapov.medium.com/ruby-notimplementederror-dont-use-it-dff1fd7228e5

* https://gitlab.com/gitlab-org/gitlab/-/issues/354314 (which I'm the author of)

* https://github.com/rmosolgo/graphql-ruby/issues/2067 (here the author actually confused it with Python's `NotImplementedError`)

* https://stackoverflow.com/questions/13668068/how-to-signal-not-implemented-yet



# Proposal



Create `NotImplementedYetError` exception



OR



Allow raising `NotImplementedError` in cases other than OS or Ruby runtime incompatibilities



# Evaluation



### Add `NotImplementedYetError`



I think a new exception is a better idea than changing the usage of an existing one just because "everyone is using it". That said it would require people to refactor their code which might prevent wider adoption of the new exception.



### Change scope of `NotImplementedError`



This would require the least amount of changes possible (only a documentation change) and I believe there would be no compatibility problems whatsoever.



---Files--------------------------------

not-implemented-error-docs.patch (1.57 KB)





-- 

https://bugs.ruby-lang.org/

 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/