diff --git a/README.md b/README.md index 36ba0212c..fba4ba53b 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,9 @@ Or use the interactive shell: To start contributing, there are a lot of things that need to be done. Most tasks are listed in the [issue tracker](https://github.com/RustPython/RustPython/issues). Another approach is to checkout the sourcecode, and try out rustpython until -you hit a limitation, and try to fix that. +you hit a limitation, and try to fix that. You can also simply run +`cargo run tests/snippets/whats_left_to_implement.py` and pickup any +unimplemented method. # Testing diff --git a/tests/snippets/whats_left_to_implement.py b/tests/snippets/whats_left_to_implement.py new file mode 100644 index 000000000..d357282d8 --- /dev/null +++ b/tests/snippets/whats_left_to_implement.py @@ -0,0 +1,965 @@ +bool_expected_methods = [ + '__abs__', + '__add__', + '__and__', + '__bool__', + '__ceil__', + '__class__', + '__delattr__', + '__dir__', + '__divmod__', + '__doc__', + '__eq__', + '__float__', + '__floor__', + '__floordiv__', + '__format__', + '__ge__', + '__getattribute__', + '__getnewargs__', + '__gt__', + '__hash__', + '__index__', + '__init__', + '__init_subclass__', + '__int__', + '__invert__', + '__le__', + '__lshift__', + '__lt__', + '__mod__', + '__mul__', + '__ne__', + '__neg__', + '__new__', + '__or__', + '__pos__', + '__pow__', + '__radd__', + '__rand__', + '__rdivmod__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__rfloordiv__', + '__rlshift__', + '__rmod__', + '__rmul__', + '__ror__', + '__round__', + '__rpow__', + '__rrshift__', + '__rshift__', + '__rsub__', + '__rtruediv__', + '__rxor__', + '__setattr__', + '__sizeof__', + '__str__', + '__sub__', + '__subclasshook__', + '__truediv__', + '__trunc__', + '__xor__', + 'bit_length', + 'conjugate', + 'denominator', + 'from_bytes', + 'imag', + 'numerator', + 'real', + 'to_bytes', +] + +bytearray_expected_methods = [ + '__add__', + '__alloc__', + '__class__', + '__contains__', + '__delattr__', + '__delitem__', + '__dir__', + '__doc__', + '__eq__', + '__format__', + '__ge__', + '__getattribute__', + '__getitem__', + '__gt__', + '__hash__', + '__iadd__', + '__imul__', + '__init__', + '__init_subclass__', + '__iter__', + '__le__', + '__len__', + '__lt__', + '__mod__', + '__mul__', + '__ne__', + '__new__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__rmod__', + '__rmul__', + '__setattr__', + '__setitem__', + '__sizeof__', + '__str__', + '__subclasshook__', + 'append', + 'capitalize', + 'center', + 'clear', + 'copy', + 'count', + 'decode', + 'endswith', + 'expandtabs', + 'extend', + 'find', + 'fromhex', + 'hex', + 'index', + 'insert', + 'isalnum', + 'isalpha', + 'isascii', + 'isdigit', + 'islower', + 'isspace', + 'istitle', + 'isupper', + 'join', + 'ljust', + 'lower', + 'lstrip', + 'maketrans', + 'partition', + 'pop', + 'remove', + 'replace', + 'reverse', + 'rfind', + 'rindex', + 'rjust', + 'rpartition', + 'rsplit', + 'rstrip', + 'split', + 'splitlines', + 'startswith', + 'strip', + 'swapcase', + 'title', + 'translate', + 'upper', + 'zfill', +] + +bytes_expected_methods = [ + '__add__', + '__class__', + '__contains__', + '__delattr__', + '__dir__', + '__doc__', + '__eq__', + '__format__', + '__ge__', + '__getattribute__', + '__getitem__', + '__getnewargs__', + '__gt__', + '__hash__', + '__init__', + '__init_subclass__', + '__iter__', + '__le__', + '__len__', + '__lt__', + '__mod__', + '__mul__', + '__ne__', + '__new__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__rmod__', + '__rmul__', + '__setattr__', + '__sizeof__', + '__str__', + '__subclasshook__', + 'capitalize', + 'center', + 'count', + 'decode', + 'endswith', + 'expandtabs', + 'find', + 'fromhex', + 'hex', + 'index', + 'isalnum', + 'isalpha', + 'isascii', + 'isdigit', + 'islower', + 'isspace', + 'istitle', + 'isupper', + 'join', + 'ljust', + 'lower', + 'lstrip', + 'maketrans', + 'partition', + 'replace', + 'rfind', + 'rindex', + 'rjust', + 'rpartition', + 'rsplit', + 'rstrip', + 'split', + 'splitlines', + 'startswith', + 'strip', + 'swapcase', + 'title', + 'translate', + 'upper', + 'zfill', +] + +complex_expected_methods = [ + '__abs__', + '__add__', + '__bool__', + '__class__', + '__delattr__', + '__dir__', + '__divmod__', + '__doc__', + '__eq__', + '__float__', + '__floordiv__', + '__format__', + '__ge__', + '__getattribute__', + '__getnewargs__', + '__gt__', + '__hash__', + '__init__', + '__init_subclass__', + '__int__', + '__le__', + '__lt__', + '__mod__', + '__mul__', + '__ne__', + '__neg__', + '__new__', + '__pos__', + '__pow__', + '__radd__', + '__rdivmod__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__rfloordiv__', + '__rmod__', + '__rmul__', + '__rpow__', + '__rsub__', + '__rtruediv__', + '__setattr__', + '__sizeof__', + '__str__', + '__sub__', + '__subclasshook__', + '__truediv__', + 'conjugate', + 'imag', + 'real', +] + +dict_expected_methods = [ + '__class__', + '__contains__', + '__delattr__', + '__delitem__', + '__dir__', + '__doc__', + '__eq__', + '__format__', + '__ge__', + '__getattribute__', + '__getitem__', + '__gt__', + '__hash__', + '__init__', + '__init_subclass__', + '__iter__', + '__le__', + '__len__', + '__lt__', + '__ne__', + '__new__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__setattr__', + '__setitem__', + '__sizeof__', + '__str__', + '__subclasshook__', + 'clear', + 'copy', + 'fromkeys', + 'get', + 'items', + 'keys', + 'pop', + 'popitem', + 'setdefault', + 'update', + 'values', +] + +float_expected_methods = [ + '__abs__', + '__add__', + '__bool__', + '__class__', + '__delattr__', + '__dir__', + '__divmod__', + '__doc__', + '__eq__', + '__float__', + '__floordiv__', + '__format__', + '__ge__', + '__getattribute__', + '__getformat__', + '__getnewargs__', + '__gt__', + '__hash__', + '__init__', + '__init_subclass__', + '__int__', + '__le__', + '__lt__', + '__mod__', + '__mul__', + '__ne__', + '__neg__', + '__new__', + '__pos__', + '__pow__', + '__radd__', + '__rdivmod__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__rfloordiv__', + '__rmod__', + '__rmul__', + '__round__', + '__rpow__', + '__rsub__', + '__rtruediv__', + '__set_format__', + '__setattr__', + '__sizeof__', + '__str__', + '__sub__', + '__subclasshook__', + '__truediv__', + '__trunc__', + 'as_integer_ratio', + 'conjugate', + 'fromhex', + 'hex', + 'imag', + 'is_integer', + 'real', +] + +frozenset_expected_methods = [ + '__and__', + '__class__', + '__contains__', + '__delattr__', + '__dir__', + '__doc__', + '__eq__', + '__format__', + '__ge__', + '__getattribute__', + '__gt__', + '__hash__', + '__init__', + '__init_subclass__', + '__iter__', + '__le__', + '__len__', + '__lt__', + '__ne__', + '__new__', + '__or__', + '__rand__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__ror__', + '__rsub__', + '__rxor__', + '__setattr__', + '__sizeof__', + '__str__', + '__sub__', + '__subclasshook__', + '__xor__', + 'copy', + 'difference', + 'intersection', + 'isdisjoint', + 'issubset', + 'issuperset', + 'symmetric_difference', + 'union', +] + +int_expected_methods = [ + '__abs__', + '__add__', + '__and__', + '__bool__', + '__ceil__', + '__class__', + '__delattr__', + '__dir__', + '__divmod__', + '__doc__', + '__eq__', + '__float__', + '__floor__', + '__floordiv__', + '__format__', + '__ge__', + '__getattribute__', + '__getnewargs__', + '__gt__', + '__hash__', + '__index__', + '__init__', + '__init_subclass__', + '__int__', + '__invert__', + '__le__', + '__lshift__', + '__lt__', + '__mod__', + '__mul__', + '__ne__', + '__neg__', + '__new__', + '__or__', + '__pos__', + '__pow__', + '__radd__', + '__rand__', + '__rdivmod__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__rfloordiv__', + '__rlshift__', + '__rmod__', + '__rmul__', + '__ror__', + '__round__', + '__rpow__', + '__rrshift__', + '__rshift__', + '__rsub__', + '__rtruediv__', + '__rxor__', + '__setattr__', + '__sizeof__', + '__str__', + '__sub__', + '__subclasshook__', + '__truediv__', + '__trunc__', + '__xor__', + 'bit_length', + 'conjugate', + 'denominator', + 'from_bytes', + 'imag', + 'numerator', + 'real', + 'to_bytes', +] + +iter_expected_methods = [ + '__class__', + '__delattr__', + '__dir__', + '__doc__', + '__eq__', + '__format__', + '__ge__', + '__getattribute__', + '__gt__', + '__hash__', + '__init__', + '__init_subclass__', + '__iter__', + '__le__', + '__length_hint__', + '__lt__', + '__ne__', + '__new__', + '__next__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__setattr__', + '__setstate__', + '__sizeof__', + '__str__', + '__subclasshook__', +] + +list_expected_methods = [ + '__add__', + '__class__', + '__contains__', + '__delattr__', + '__delitem__', + '__dir__', + '__doc__', + '__eq__', + '__format__', + '__ge__', + '__getattribute__', + '__getitem__', + '__gt__', + '__hash__', + '__iadd__', + '__imul__', + '__init__', + '__init_subclass__', + '__iter__', + '__le__', + '__len__', + '__lt__', + '__mul__', + '__ne__', + '__new__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__reversed__', + '__rmul__', + '__setattr__', + '__setitem__', + '__sizeof__', + '__str__', + '__subclasshook__', + 'append', + 'clear', + 'copy', + 'count', + 'extend', + 'index', + 'insert', + 'pop', + 'remove', + 'reverse', + 'sort', +] + +memoryview_expected_methods = [ + '__class__', + '__delattr__', + '__delitem__', + '__dir__', + '__doc__', + '__enter__', + '__eq__', + '__exit__', + '__format__', + '__ge__', + '__getattribute__', + '__getitem__', + '__gt__', + '__hash__', + '__init__', + '__init_subclass__', + '__le__', + '__len__', + '__lt__', + '__ne__', + '__new__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__setattr__', + '__setitem__', + '__sizeof__', + '__str__', + '__subclasshook__', + 'c_contiguous', + 'cast', + 'contiguous', + 'f_contiguous', + 'format', + 'hex', + 'itemsize', + 'nbytes', + 'ndim', + 'obj', + 'readonly', + 'release', + 'shape', + 'strides', + 'suboffsets', + 'tobytes', + 'tolist', +] + +range_expected_methods = [ + '__bool__', + '__class__', + '__contains__', + '__delattr__', + '__dir__', + '__doc__', + '__eq__', + '__format__', + '__ge__', + '__getattribute__', + '__getitem__', + '__gt__', + '__hash__', + '__init__', + '__init_subclass__', + '__iter__', + '__le__', + '__len__', + '__lt__', + '__ne__', + '__new__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__reversed__', + '__setattr__', + '__sizeof__', + '__str__', + '__subclasshook__', + 'count', + 'index', + 'start', + 'step', + 'stop', +] + +set_expected_methods = [ + '__and__', + '__class__', + '__contains__', + '__delattr__', + '__dir__', + '__doc__', + '__eq__', + '__format__', + '__ge__', + '__getattribute__', + '__gt__', + '__hash__', + '__iand__', + '__init__', + '__init_subclass__', + '__ior__', + '__isub__', + '__iter__', + '__ixor__', + '__le__', + '__len__', + '__lt__', + '__ne__', + '__new__', + '__or__', + '__rand__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__ror__', + '__rsub__', + '__rxor__', + '__setattr__', + '__sizeof__', + '__str__', + '__sub__', + '__subclasshook__', + '__xor__', + 'add', + 'clear', + 'copy', + 'difference', + 'difference_update', + 'discard', + 'intersection', + 'intersection_update', + 'isdisjoint', + 'issubset', + 'issuperset', + 'pop', + 'remove', + 'symmetric_difference', + 'symmetric_difference_update', + 'union', + 'update', +] + +string_expected_methods = [ + '__add__', + '__class__', + '__contains__', + '__delattr__', + '__dir__', + '__doc__', + '__eq__', + '__format__', + '__ge__', + '__getattribute__', + '__getitem__', + '__getnewargs__', + '__gt__', + '__hash__', + '__init__', + '__init_subclass__', + '__iter__', + '__le__', + '__len__', + '__lt__', + '__mod__', + '__mul__', + '__ne__', + '__new__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__rmod__', + '__rmul__', + '__setattr__', + '__sizeof__', + '__str__', + '__subclasshook__', + 'capitalize', + 'casefold', + 'center', + 'count', + 'encode', + 'endswith', + 'expandtabs', + 'find', + 'format', + 'format_map', + 'index', + 'isalnum', + 'isalpha', + 'isascii', + 'isdecimal', + 'isdigit', + 'isidentifier', + 'islower', + 'isnumeric', + 'isprintable', + 'isspace', + 'istitle', + 'isupper', + 'join', + 'ljust', + 'lower', + 'lstrip', + 'maketrans', + 'partition', + 'replace', + 'rfind', + 'rindex', + 'rjust', + 'rpartition', + 'rsplit', + 'rstrip', + 'split', + 'splitlines', + 'startswith', + 'strip', + 'swapcase', + 'title', + 'translate', + 'upper', + 'zfill' +] + +tuple_expected_methods = [ + '__add__', + '__class__', + '__contains__', + '__delattr__', + '__dir__', + '__doc__', + '__eq__', + '__format__', + '__ge__', + '__getattribute__', + '__getitem__', + '__getnewargs__', + '__gt__', + '__hash__', + '__init__', + '__init_subclass__', + '__iter__', + '__le__', + '__len__', + '__lt__', + '__mul__', + '__ne__', + '__new__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__rmul__', + '__setattr__', + '__sizeof__', + '__str__', + '__subclasshook__', + 'count', + 'index', +] + +not_implemented = [] + +for method in bool_expected_methods: + try: + if not hasattr(bool, method): + not_implemented.append(("bool", method)) + except NameError: + not_implemented.append(("bool", method)) + +for method in bytearray_expected_methods: +# TODO: uncomment this when bytearray is implemented +# try: +# if not hasattr(bytearray(), method): +# not_implemented.append(("bytearray", method)) +# except NameError: + not_implemented.append(("bytearray", method)) + +for method in bytes_expected_methods: + try: + if not hasattr(bytes, method): + not_implemented.append(("bytes", method)) + except NameError: + not_implemented.append(("bytes", method)) + +for method in complex_expected_methods: +# TODO: uncomment this when complex is implemented +# try: +# if not hasattr(complex, method): +# not_implemented.append(("complex", method)) +# except NameError: + not_implemented.append(("complex", method)) + +for method in dict_expected_methods: + try: + if not hasattr(dict, method): + not_implemented.append(("dict", method)) + except NameError: + not_implemented.append(("dict", method)) + +for method in float_expected_methods: + try: + if not hasattr(float, method): + not_implemented.append(("float", method)) + except NameError: + not_implemented.append(("float", method)) + +for method in frozenset_expected_methods: +# TODO: uncomment this when frozenset is implemented +# try: +# if not hasattr(frozenset, method): +# not_implemented.append(("frozenset", method)) +# except NameError: + not_implemented.append(("frozenset", method)) + +for method in int_expected_methods: + try: + if not hasattr(int, method): + not_implemented.append(("int", method)) + except NameError: + not_implemented.append(("int", method)) + +for method in iter_expected_methods: + try: + if not hasattr(iter([]), method): + not_implemented.append(("iter", method)) + except NameError: + not_implemented.append(("iter", method)) + +for method in list_expected_methods: + try: + if not hasattr(list, method): + not_implemented.append(("list", method)) + except NameError: + not_implemented.append(("list", method)) + +for method in memoryview_expected_methods: +# TODO: uncomment this when memoryview is implemented +# try: +# if not hasattr(memoryview, method): +# not_implemented.append(("memoryview", method)) +# except NameError: + not_implemented.append(("memoryview", method)) + +for method in range_expected_methods: + try: + if not hasattr(range, method): + not_implemented.append(("range", method)) + except NameError: + not_implemented.append(("range", method)) + +for method in set_expected_methods: + try: + if not hasattr(set, method): + not_implemented.append(("set", method)) + except NameError: + not_implemented.append(("set", method)) + +for method in string_expected_methods: + try: + if not hasattr(str, method): + not_implemented.append(("string", method)) + except NameError: + not_implemented.append(("string", method)) + +for method in tuple_expected_methods: + try: + if not hasattr(tuple, method): + not_implemented.append(("tuple", method)) + except NameError: + not_implemented.append(("tuple", method)) + +for r in not_implemented: + print(r[0], ".", r[1]) +else: + print("Not much \\o/")