microsoft / monaco-editor

A browser based code editor
https://microsoft.github.io/monaco-editor/
MIT License
40.43k stars 3.6k forks source link

[Bug] HTML language does not recognize inline <script type="module"> as JavaScript #2962

Open Yoplitein opened 2 years ago

Yoplitein commented 2 years ago

Reproducible in vscode.dev or in VS Code Desktop?

Reproducible in the monaco editor playground?

Monaco Editor Playground Code

monaco.editor.create(document.getElementById('container'), {
    value: `<script type="module">\n\tconsole.log("hello");\n</script>`,
    language: 'html'
});

Actual Behavior

The contents of the script tag are marked as language vs.editor.nullLanguage, precluding highlighting and, upon editing or merely moving the cursor within the tag, causing various callbacks for editor features to throw Unexpected languageId when calling LanguageConfigurationRegistry.getLanguageConfiguration.

Expected Behavior

Inline code is recognized as JavaScript, is syntax highlighted, and editing/navigation does not raise exceptions.

Additional Context

This began causing exceptions in version 0.32.0, with 0.31.1 and prior nothing is raised but the inline code is still similarly marked as vs.editor.nullMode.

hediet commented 2 years ago

I can reproduce. It seems like type="module" tokenizes the content as language module, which does not exist - thus the error. type="html"or type="css" works as expected.

CetinSert commented 2 years ago

Interestingly, type=module (no quotes) works just fine!

image

hediet commented 2 years ago

We fixed this in vscode. The next monaco editor version will be released soon.

Prinzhorn commented 2 years ago

Seems fixed in 0.33.0, my app works again. You can also close #3090

Delagen commented 2 years ago

0.34.0 has this issue also

<script type="text/javascript">
var qd = {};
</script>

Any click inside script tag produce

image

jonatanklosko commented 2 years ago

Same with Markdown, when annotating a code code block with unknown language:

```mermaid
graph TD;
  A-->B;
  A-->C;
  B-->D;
  C-->D;

Error:

errors.ts:21 Uncaught Error: Language id "vs.editor.nullLanguage" is not configured nor known

Error: Language id "vs.editor.nullLanguage" is not configured nor known at f (languageConfigurationRegistry.ts:130:10) at c.getLanguageConfiguration (languageConfigurationRegistry.ts:113:13) at u.getLanguageConfiguration (tokenizationTextModelPart.ts:329:45) at u.getWordAtPosition (tokenizationTextModelPart.ts:350:9) at Ot.getWordAtPosition (textModel.ts:1860:42) at F._getWord (wordHighlighter.ts:355:21) at F._run (wordHighlighter.ts:373:21) at F._onPositionChanged (wordHighlighter.ts:347:8) at wordHighlighter.ts:224:9 at t.invoke (event.ts:607:17) at errors.ts:26:12



(reproduced on the https://microsoft.github.io/monaco-editor playground).

Note that this worked fine on 0.33.0 and broke on 0.34.0.
pansinm commented 2 years ago
  1. reproducible in the monaco editor playground
    monaco.editor.create(document.getElementById('container'), {
    value: "```notsupport\nerror when press enter\n```",
    language: 'markdown'
    });
  2. solve this problem
    
    + monaco.languages.register({id: 'vs.editor.nullLanguage'})
    + monaco.languages.setLanguageConfiguration('vs.editor.nullLanguage', {})

monaco.editor.create(document.getElementById('container'), { value: "notsupport\nerror when press enter\n", language: 'markdown' });

hediet commented 1 year ago

Error: Language id "vs.editor.nullLanguage" is not configured nor known

This will be fixed with the next release of the monaco editor.

Inline code is recognized as JavaScript, is syntax highlighted,

This is the remaining feature request of this issue.

silverwind commented 6 months ago

This will be fixed with the next release of the monaco editor.

Was this fix released?

silverwind commented 6 months ago

Tested https://github.com/microsoft/monaco-editor/issues/2962#issuecomment-1301587105 in playground, the error is present in 0.34.1 and gone in 0.35.0 so this issue should be closed.

CetinSert commented 6 months ago

I have just tested this again: