diff --git a/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/extensions/contentmodel/participants/XMLSyntaxErrorCode.java b/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/extensions/contentmodel/participants/XMLSyntaxErrorCode.java index ccea5db4d4..0e2a07c5da 100644 --- a/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/extensions/contentmodel/participants/XMLSyntaxErrorCode.java +++ b/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/extensions/contentmodel/participants/XMLSyntaxErrorCode.java @@ -47,7 +47,7 @@ EqRequiredInAttribute, the_element_type_lmsg("the-element-type-lmsg"), EqRequire InvalidCommentStart, LessthanInAttValue, MarkupEntityMismatch, MarkupNotRecognizedInContent, NameRequiredInReference, OpenQuoteExpected, PITargetRequired, PseudoAttrNameExpected, QuoteRequiredInXMLDecl, SDDeclInvalid, SpaceRequiredBeforeEncodingInXMLDecl, SpaceRequiredBeforeStandalone, SpaceRequiredInPI, - VersionInfoRequired, VersionNotSupported, XMLDeclUnterminated, CustomETag; // https://wiki.xmldation.com/Support/Validator/EqRequiredInAttribute + VersionInfoRequired, VersionNotSupported, XMLDeclUnterminated, CustomETag, PrematureEOF; // https://wiki.xmldation.com/Support/Validator/EqRequiredInAttribute private final String code; @@ -173,6 +173,7 @@ public static Range toLSPRange(XMLLocator location, XMLSyntaxErrorCode code, Obj int start = selectCurrentTagOffset(offset, document) + 1; int end = offset + 1; return XMLPositionUtility.createRange(start, end, document); + case PrematureEOF: case XMLDeclUnterminated: break; default: diff --git a/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/extensions/diagnostics/AbstractLSPErrorReporter.java b/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/extensions/diagnostics/AbstractLSPErrorReporter.java index 00ed8360c5..18f1999e93 100644 --- a/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/extensions/diagnostics/AbstractLSPErrorReporter.java +++ b/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/extensions/diagnostics/AbstractLSPErrorReporter.java @@ -77,8 +77,13 @@ public String reportError(XMLLocator location, String domain, String key, Object message = str.toString(); } + Range adjustedRange = internalToLSPRange(location, key, arguments, xmlDocument); + + if(adjustedRange == null) { + return null; + } // Fill diagnostic - diagnostics.add(new Diagnostic(internalToLSPRange(location, key, arguments, xmlDocument), message, + diagnostics.add(new Diagnostic(adjustedRange, message, toLSPSeverity(severity), source, key)); if (severity == SEVERITY_FATAL_ERROR && !fContinueAfterFatalError) { @@ -127,6 +132,10 @@ private Range internalToLSPRange(XMLLocator location, String key, Object[] argum int startOffset = location.getCharacterOffset() - 1; int endOffset = location.getCharacterOffset() - 1; + if(startOffset < 0 || endOffset < 0) { + return null; + } + // Create LSP range Position start = toLSPPosition(startOffset, location, document.getTextDocument()); Position end = toLSPPosition(endOffset, location, document.getTextDocument()); diff --git a/org.eclipse.lsp4xml/src/test/java/org/eclipse/lsp4xml/XMLAssert.java b/org.eclipse.lsp4xml/src/test/java/org/eclipse/lsp4xml/XMLAssert.java index 03e59a4fc2..88aedfca26 100644 --- a/org.eclipse.lsp4xml/src/test/java/org/eclipse/lsp4xml/XMLAssert.java +++ b/org.eclipse.lsp4xml/src/test/java/org/eclipse/lsp4xml/XMLAssert.java @@ -10,6 +10,8 @@ */ package org.eclipse.lsp4xml; +import static org.junit.Assert.assertTrue; + import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; @@ -280,7 +282,10 @@ public static void testDiagnosticsFor(String xml, String catalogPath, Consumer actual = xmlLanguageService.doDiagnostics(xmlDocument, () -> { }, settings.getValidation()); - + if(expected == null) { + assertTrue(actual.isEmpty()); + return; + } assertDiagnostics(actual, Arrays.asList(expected), filter); } diff --git a/org.eclipse.lsp4xml/src/test/java/org/eclipse/lsp4xml/extensions/contentmodel/XMLSchemaDiagnosticsTest.java b/org.eclipse.lsp4xml/src/test/java/org/eclipse/lsp4xml/extensions/contentmodel/XMLSchemaDiagnosticsTest.java index 58f9045e3c..ef4c939e26 100644 --- a/org.eclipse.lsp4xml/src/test/java/org/eclipse/lsp4xml/extensions/contentmodel/XMLSchemaDiagnosticsTest.java +++ b/org.eclipse.lsp4xml/src/test/java/org/eclipse/lsp4xml/extensions/contentmodel/XMLSchemaDiagnosticsTest.java @@ -27,6 +27,18 @@ */ public class XMLSchemaDiagnosticsTest { + @Test + public void prematureEOFError() throws Exception { + String xml = " "; + testDiagnosticsFor(xml); + } + + @Test + public void prematureEOFErrorWithProlog() throws Exception { + String xml = " "; + testDiagnosticsFor(xml); + } + @Test public void cvc_complex_type_2_3() throws Exception { String xml = "\r\n" + //