If a Markdown extension immediately resolves the path inside its initialization (rather than just storing it for later as I was hoping) then it was failing the initial validation run that MkDocs does without populating an actual page yet.
This was aimed at user-facing "file not found" errors from "serve" but it can catch errors from plugins as well, and it only makes the errors very confusing.
* If source page and destination page is excluded, cap log level to DEBUG
* If source page is excluded, cap log level to INFO
Co-authored-by: Chris Mayfield <mayfiecs@jmu.edu>
For every plugin, the user can set `enabled: false` (or something based on an environment variable) and it will not kick in at all.
If the plugin has its own `enabled` config, there's no change for it in that case.
If one config option completely fails validation, that means its value remains "raw" from YAML, which can cause unpredictable errors when validating other options that might look at the value. Instead just decide one error is enough.
The livereload server connection is cancelled when the tab becomes inactive.
Once a tab becomes active, the livereload connection is immediately established again.
A doc can never have a `link` attribute so this branch never kicked in.
Actually even now, this branch will still not kick in, only mkdocs-section-index makes this state possible.
This happens because the `theme` option fails validation (being not installed) but then validation of `plugins` option fatally fails because that option is invalid. Maybe in the future it would be better to change validation so it stops after the first error, because there can be countless such combinations of interactions.
In 1.5.0 `extra_javascript` was changed to become a `list[ExtraScriptValue]`, but strings could sneak in anyway, although MkDocs would never put them there anymore.
Let's change it to officially be `list[ExtraScriptValue | str]` but typically these items will be strings once again, unless specified as a dictionary in the config in the first place. This will guard plugins that aren't updated yet from a breakages unless users actually use `mjs` files.