Git Product home page Git Product logo

Comments (4)

irbull avatar irbull commented on September 27, 2024 1

I actually did the following:

find . -type f -not -path "./coverage/*" -exec grep "throw" -H '{}' \; > ~/thrown.txt

If you just use grep, I had problems with some of the test files that include a named pipe and grep just got hungup.

I then removed all the lines with throw new:
grep -v "throw new" thrown.txt > throw_no_new.txt

From here I scanned through the list and removed .md, .mjs /testdata/. It left a few hundred that didn't take too long to filter. There were a few common patters:

  • One that were in comments. This was easy to spot because the line starts with a *
  • return this.throwError(
  • Text like "should not throw error"
  • _test.ts files

I'm pretty quick with multi-cursors in VSCode, so I just filtered those common cases by hand. It left me with things you'd expect throw Error and stuff like throw err. There were maybe 10 files, and I just went through them and checked that the throw err was really just a re-throw and not some variable that was constructed earlier. If we assume that all Errors start with a capital, then grep "throw [A-Z]" now produces:

./crypto/_wasm/lib/deno_std_wasm_crypto.generated.mjs:      throw Error("TextDecoder not available");
./crypto/_wasm/lib/deno_std_wasm_crypto.generated.mjs:      throw Error("TextEncoder not available");
./Releases.md:- fix(encoding/base64url): throw TypeError in case of invalid base64url string
./fs/move.ts:      throw EXISTS_ERROR;

The first 2 are in a generated file. 3rd one is in a README, and the last one throws a constant which is defined as:

const EXISTS_ERROR = new Deno.errors.AlreadyExists("dest already exists.");

I'm sure I missed something, but I think we can close this and if someone sees one I missed they can file an issue and I'll see if there is a pattern.

from deno_std.

irbull avatar irbull commented on September 27, 2024 1

I'll close this. Thanks @iuioiua for the quick review.

from deno_std.

irbull avatar irbull commented on September 27, 2024

Here is a quick and dirty analysis of where throw doesn't include new. Many of these are re-throws, so they don't need it.

./toml/parse_test.ts:          throw "Custom parser";
./net/get_available_port.ts:        throw e;
./dotenv/mod.ts:    throw e;
./dotenv/mod.ts:    throw e;
./cache/memoize.ts:        throw reason;
./datetime/_date_time_formatter.ts:              throw Error(
./datetime/_date_time_formatter.ts:              throw Error(
./datetime/_date_time_formatter.ts:              throw Error(
./datetime/_date_time_formatter.ts:              throw Error(
./datetime/_date_time_formatter.ts:              throw Error(
./datetime/_date_time_formatter.ts:              throw Error(
./datetime/_date_time_formatter.ts:          throw Error(`FormatterError: { ${part.type} ${part.value} }`);
./datetime/_date_time_formatter.ts:              throw Error(
./datetime/_date_time_formatter.ts:              throw Error(
./datetime/_date_time_formatter.ts:              throw Error(
./datetime/_date_time_formatter.ts:              throw Error(
./datetime/_date_time_formatter.ts:              throw Error(
./datetime/_date_time_formatter.ts:              throw Error(
./datetime/_date_time_formatter.ts:            throw Error(
./datetime/_date_time_formatter.ts:          throw Error(
./datetime/_date_time_formatter.ts:        throw Error(
./datetime/_date_time_formatter.ts:      throw Error(
./fmt/printf.ts:          throw Error(
./streams/buffer.ts:      throw Error(
./streams/buffer.ts:      throw Error(
./async/delay.ts:          throw error;
./async/abortable.ts:    throw e;
./async/mux_async_iterator.ts:          throw e;
./io/buf_reader_test.ts:      throw Error("Expected Uint8Array");
./io/buf_reader_test.ts:      throw Error("Expected Uint8Array");
./io/buf_writer.ts:      throw e;
./io/buf_writer.ts:          throw e;
./io/buf_writer.ts:      throw e;
./io/buf_writer.ts:          throw e;
./io/buf_reader.ts:      throw Error("Buffer full while filling");
./io/buf_reader.ts:        throw err;
./io/buf_reader.ts:      throw Error("Peek count cannot be negative");` is
./io/buffer.ts:      throw Error("Buffer truncation out of range");
./io/buffer.ts:      throw Error("Buffer growth cannot be negative");
./encoding/hex.ts:  throw errInvalidByte(byte);
./encoding/hex.ts:    throw errLength(u8.length);
./assert/rejects_test.ts:        throw { wrong: "true" };
./assert/rejects.ts:      throw Error();
./assert/throws_test.ts:          throw "Panic!";
./assert/throws_test.ts:      throw "Panic!";
./assert/throws_test.ts:      throw null;
./assert/throws_test.ts:      throw undefined;
./assert/throws_test.ts:      throw "Panic!";
./assert/throws_test.ts:      throw 1;
./assert/throws_test.ts:      throw null;
./assert/throws_test.ts:      throw undefined;
./testing/mock.ts:      throw error;
./testing/mock.ts:      throw error;
./testing/mock.ts:        throw error;
./testing/mock.ts:      throw error;
./testing/mock.ts:    if (value instanceof Error) throw value;
./testing/mock.ts:    if (value instanceof Error) throw value;
./testing/snapshot.ts:      throw error;
./http/file_server.ts:      throw error;
./http/file_server.ts:        throw error;
./log/rotating_file_handler.ts:            throw error;
./fs/empty_dir.ts:      throw err;
./fs/empty_dir.ts:      throw err;
./fs/ensure_file.ts:    throw err;
./fs/ensure_file.ts:    throw err;
./fs/ensure_dir.ts:      throw err;
./fs/ensure_dir.ts:      throw err;
./fs/ensure_dir.ts:      throw err;
./fs/ensure_dir.ts:      throw err;
./fs/expand_glob.ts:    throw error;
./fs/move.ts:        throw error;
./fs/move.ts:        throw error;
./fs/move.ts:        throw error;
./fs/walk_test.ts:    throw err;
./fs/copy.ts:    throw err;
./fs/copy.ts:    throw err;
./fs/empty_dir_test.ts:        throw err;
./fs/exists.ts:    throw error;
./fs/exists.ts:    throw error;
./expect/_matchers.ts:        throw e;
./expect/_matchers.ts:        throw e;
./expect/fn.ts:      throw err;

from deno_std.

iuioiua avatar iuioiua commented on September 27, 2024

Just checking that the search parameters are correct here. I think we should be searching for the regex throw (?!new). This should also include cases such as throw SyntaxError(), etc.

from deno_std.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.