retextjs / retext-spell

plugin to check spelling
https://unifiedjs.com
MIT License
71 stars 16 forks source link

Example in project README does not work #26

Closed cgwrench closed 7 months ago

cgwrench commented 8 months ago

Initial checklist

Affected packages and versions

6.0.0

Link to runnable example

No response

Steps to reproduce

I attempted to run the example in the project README using the following steps:

  1. Create a new Node project:

    npm init es6 -y
  2. Install dependencies:

    npm install --save-exact dictionary-en retext retext-spell vfile-reporter
  3. Copy example:

    echo "import dictionaryEn from 'dictionary-en'
    import {retext} from 'retext'
    import retextSpell from 'retext-spell'
    import {reporter} from 'vfile-reporter'
    
    const file = await retext()
     .use(retextSpell, {dictionary: dictionaryEn})
     .process('Some useles documeant.')
    
    console.error(reporter(file))" > index.js
  4. Run example:

    node index.js

This throw an error:

file:///some/path/retext-spell-repro/node_modules/retext-spell/lib/index.js:106
    throw new TypeError('Missing `dictionary` in options')
          ^

TypeError: Missing `dictionary` in options
    at Function.retextSpell (file:///some/path/retext-spell-repro/node_modules/retext-spell/lib/index.js:106:11)
    at Function.freeze (file:///some/path/retext-spell-repro/node_modules/unified/lib/index.js:636:36)
    at Function.process (file:///some/path/retext-spell-repro/node_modules/unified/lib/index.js:716:10)
    at file:///some/path/retext-spell-repro/index.js:8:4

Node.js v21.5.0

Expected behavior

I would expect the code to run, with the example output given in the project README produced.

Affected runtime and version

node@21.5.0

Affected package manager and version

npm@10.2.5

Affected OS and version

Arch Linux

Build and bundle tools

No response

ChristianMurphy commented 8 months ago

Welcome @cgwrench! 👋 Sorry you ran into a spot of trouble.

Have you read https://github.com/orgs/retextjs/discussions/96#discussioncomment-7995777 ? I think it is related to what you are seeing.

cgwrench commented 8 months ago

Thanks @ChristianMurphy for such a quick response. That's exactly the same issue I'm seeing, and changing the loading of the dictionary to follow what's suggested in that discussion has fixed my issue.

Does the README in this repro need to be updated?

ChristianMurphy commented 8 months ago

I'd lean yes, the documentation should be updated. PRs are welcome! @wooorm feel free to chime in if you feel otherwise.

wooorm commented 8 months ago

Well we could change docs of course. Or we can add support for the new, simpler, API? I think I’d prefer that: to support the old and the new interface?

Indeed, want to work on a PR?

cgwrench commented 8 months ago

Thanks @ChristianMurphy and @wooorm.

I'd love to try and contribute a fix. However, when looking into what might need to change, I found that there are tests that cover the various ways you can register a dictionary[^1]. So I was at a bit of a loss trying to explain why I was seeing the issue I first reported in this issue. I've tracked in down to the version of dictionary-en. With the repro steps I outlined, I ended up with version 4.0.0 of dictionary-en, downgrading to version 3.0.0 meant that everything worked as expected.

I'm not sure what the correct change to make is so that retext-spell can handle both versions. Do either of you have an insights you cna share on what the best approach might be?

[^1]: See https://github.com/retextjs/retext-spell/blob/main/test.js#L23-L27, https://github.com/retextjs/retext-spell/blob/main/test.js#L46, and https://github.com/retextjs/retext-spell/blob/main/test.js#L177 for example.

ChristianMurphy commented 8 months ago

@cgwrench one approach would be to check the typeof what is passed in. If it is a fuction use the existing/old logic, if it is object use the new logic.

cgwrench commented 7 months ago

Thanks @ChristianMurphy. I've had a go at implementing this in #27. Let me know if you've got any feedback, or if there are any changes you'd like to see to how I've done this.

wooorm commented 7 months ago

nice, thanks!