Skip to content

Commit

Permalink
Suppress validation kinds based on file pattern
Browse files Browse the repository at this point in the history
Fixes eclipse#1275

Signed-off-by: azerr <[email protected]>
  • Loading branch information
angelozerr committed Sep 10, 2022
1 parent 1fb2a20 commit 7f80577
Show file tree
Hide file tree
Showing 14 changed files with 130 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
import org.eclipse.lemminx.customservice.XMLLanguageServerAPI;
import org.eclipse.lemminx.dom.DOMDocument;
import org.eclipse.lemminx.extensions.contentmodel.settings.ContentModelSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationRootSettings;
import org.eclipse.lemminx.logs.LogHelper;
import org.eclipse.lemminx.services.IXMLDocumentProvider;
import org.eclipse.lemminx.services.IXMLNotificationService;
Expand Down Expand Up @@ -222,7 +222,7 @@ private synchronized void updateSettings(Object initOptions, boolean initLogs) {
}
ContentModelSettings cmSettings = ContentModelSettings.getContentModelXMLSettings(initSettings);
if (cmSettings != null) {
XMLValidationSettings validationSettings = cmSettings.getValidation();
XMLValidationRootSettings validationSettings = cmSettings.getValidation();
xmlTextDocumentService.getValidationSettings().merge(validationSettings);

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
import org.eclipse.lemminx.commons.TextDocument;
import org.eclipse.lemminx.dom.DOMDocument;
import org.eclipse.lemminx.dom.DOMParser;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationRootSettings;
import org.eclipse.lemminx.services.DocumentSymbolsResult;
import org.eclipse.lemminx.services.SymbolInformationResult;
import org.eclipse.lemminx.services.XMLLanguageService;
Expand Down Expand Up @@ -250,7 +250,8 @@ public CompletableFuture<Either<List<CompletionItem>, CompletionList>> completio
@Override
public CompletableFuture<CompletionItem> resolveCompletionItem(CompletionItem unresolved) {
return computeDOMAsync(unresolved.getData(), (xmlDocument, cancelChecker) -> {
return getXMLLanguageService().resolveCompletionItem(unresolved, xmlDocument, sharedSettings, cancelChecker);
return getXMLLanguageService().resolveCompletionItem(unresolved, xmlDocument, sharedSettings,
cancelChecker);
});
}

Expand Down Expand Up @@ -660,7 +661,8 @@ void validate(DOMDocument xmlDocument, Map<String, Object> validationArgs) throw
cancelChecker.checkCanceled();
getXMLLanguageService().publishDiagnostics(xmlDocument,
params -> xmlLanguageServer.getLanguageClient().publishDiagnostics(params),
(doc) -> triggerValidationFor(doc, TriggeredBy.Other), sharedSettings.getValidationSettings(),
(doc) -> triggerValidationFor(doc, TriggeredBy.Other),
sharedSettings.getValidationSettings().getValidationSettings(xmlDocument.getDocumentURI()),
validationArgs, cancelChecker);
}

Expand Down Expand Up @@ -704,7 +706,7 @@ public XMLFormattingOptions getSharedFormattingSettings() {
return sharedSettings.getFormattingSettings();
}

public XMLValidationSettings getValidationSettings() {
public XMLValidationRootSettings getValidationSettings() {
return sharedSettings.getValidationSettings();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public class ContentModelSettings {

private XMLFileAssociation[] fileAssociations;

private XMLValidationSettings validation;
private XMLValidationRootSettings validation;

private XMLSymbolsSettings symbols;

Expand Down Expand Up @@ -90,11 +90,11 @@ public static ContentModelSettings getContentModelXMLSettings(Object initializat
return JSONUtility.toModel(initializationOptionsSettings, ContentModelSettings.class);
}

public void setValidation(XMLValidationSettings validation) {
public void setValidation(XMLValidationRootSettings validation) {
this.validation = validation;
}

public XMLValidationSettings getValidation() {
public XMLValidationRootSettings getValidation() {
return validation;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.eclipse.lemminx.extensions.contentmodel.settings;

import org.eclipse.lemminx.settings.PathPatternMatcher;

public class XMLValidationFilter extends XMLValidationSettings {

private String pattern;

private transient PathPatternMatcher matcher;

public boolean matches(String uri) {
if (matcher == null) {
matcher = new PathPatternMatcher();
matcher.setPattern(pattern);
}
return matcher.matches(uri);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/**
* Copyright (c) 2019 Red Hat Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Red Hat Inc. - initial API and implementation
*/
package org.eclipse.lemminx.extensions.contentmodel.settings;

import java.util.Arrays;

/**
* XMLValidationSettings
*/
public class XMLValidationRootSettings extends XMLValidationSettings {

private XMLValidationFilter[] filters;

public XMLValidationFilter[] getFilters() {
return filters;
}

public void setFilters(XMLValidationFilter[] filters) {
this.filters = filters;
}

public XMLValidationSettings getValidationSettings(String uri) {
if (filters != null) {
for (XMLValidationFilter filter : filters) {
if (filter.matches(uri)) {
return filter;
}
}
}
return this;
}

public XMLValidationRootSettings merge(XMLValidationRootSettings settings) {
if (settings != null) {
this.filters = settings.getFilters();
}
super.merge(settings);
return this;
}

@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + Arrays.hashCode(filters);
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
XMLValidationRootSettings other = (XMLValidationRootSettings) obj;
return Arrays.equals(filters, other.filters);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
*******************************************************************************/
package org.eclipse.lemminx.settings;

import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationRootSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationSettings;

/**
Expand All @@ -21,7 +22,7 @@ public class SharedSettings {
private final XMLCompletionSettings completionSettings;
private final XMLFoldingSettings foldingSettings;
private final XMLFormattingOptions formattingSettings;
private final XMLValidationSettings validationSettings;
private final XMLValidationRootSettings validationSettings;
private final XMLSymbolSettings symbolSettings;

private final XMLCodeActionSettings codeActionSettings;
Expand All @@ -37,7 +38,7 @@ public SharedSettings() {
this.completionSettings = new XMLCompletionSettings();
this.foldingSettings = new XMLFoldingSettings();
this.formattingSettings = new XMLFormattingOptions(true);
this.validationSettings = new XMLValidationSettings();
this.validationSettings = new XMLValidationRootSettings();
this.symbolSettings = new XMLSymbolSettings();
this.codeActionSettings = new XMLCodeActionSettings();
this.codeLensSettings = new XMLCodeLensSettings();
Expand Down Expand Up @@ -75,7 +76,7 @@ public XMLFormattingOptions getFormattingSettings() {
return formattingSettings;
}

public XMLValidationSettings getValidationSettings() {
public XMLValidationRootSettings getValidationSettings() {
return validationSettings;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import org.eclipse.lemminx.extensions.contentmodel.settings.ContentModelSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.SchemaEnabled;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLSchemaSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationRootSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationSettings;
import org.eclipse.lemminx.extensions.generators.FileContentGeneratorManager;
import org.eclipse.lemminx.extensions.generators.FileContentGeneratorSettings;
Expand Down Expand Up @@ -612,7 +613,7 @@ public static void testDiagnosticsFor(String xml, String catalogPath, Consumer<X
String fileURI, boolean filter, Diagnostic... expected) {
ContentModelSettings settings = new ContentModelSettings();
settings.setUseCache(false);
XMLValidationSettings problems = new XMLValidationSettings();
XMLValidationRootSettings problems = new XMLValidationRootSettings();
problems.setNoGrammar("ignore");
settings.setValidation(problems);
if (catalogPath != null) {
Expand Down Expand Up @@ -717,10 +718,10 @@ public static Range r(int startLine, int startCharacter, int endLine, int endCha
public static ContentModelSettings getContentModelSettings(boolean isEnabled, SchemaEnabled schemaEnabled) {
ContentModelSettings settings = new ContentModelSettings();
settings.setUseCache(false);
XMLValidationSettings problems = new XMLValidationSettings();
XMLValidationRootSettings problems = new XMLValidationRootSettings();
problems.setNoGrammar("ignore");
settings.setValidation(problems);
XMLValidationSettings diagnostics = new XMLValidationSettings();
XMLValidationRootSettings diagnostics = new XMLValidationRootSettings();
diagnostics.setEnabled(isEnabled);
XMLSchemaSettings schemaSettings = new XMLSchemaSettings();
schemaSettings.setEnabled(schemaEnabled);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import org.eclipse.lemminx.extensions.contentmodel.participants.DTDErrorCode;
import org.eclipse.lemminx.extensions.contentmodel.participants.XMLSyntaxErrorCode;
import org.eclipse.lemminx.extensions.contentmodel.settings.ContentModelSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationRootSettings;
import org.eclipse.lemminx.services.XMLLanguageService;
import org.eclipse.lsp4j.Diagnostic;
import org.eclipse.lsp4j.DiagnosticRelatedInformation;
Expand Down Expand Up @@ -395,7 +395,7 @@ public void testDTDNotFoundWithEntitySYSTEMAndResolve() throws Exception {
" <\r\n" + // [2]
"</root-element>";
ContentModelSettings settings = new ContentModelSettings();
XMLValidationSettings validation = new XMLValidationSettings();
XMLValidationRootSettings validation = new XMLValidationRootSettings();
validation.setResolveExternalEntities(true);
settings.setValidation(validation);

Expand Down Expand Up @@ -471,7 +471,7 @@ public void MSG_SPACE_REQUIRED_BEFORE_ENTITY_NAME_IN_ENTITYDECL() throws Excepti
public void diagnosticRelatedInformationWithDOCTYPE() throws Exception {
ContentModelSettings settings = new ContentModelSettings();
settings.setUseCache(true);
XMLValidationSettings validationSettings = new XMLValidationSettings();
XMLValidationRootSettings validationSettings = new XMLValidationRootSettings();
validationSettings.setCapabilities(new PublishDiagnosticsCapabilities(true)); // with related information
settings.setValidation(validationSettings);

Expand Down Expand Up @@ -505,7 +505,7 @@ public void diagnosticRelatedInformationWithDOCTYPE() throws Exception {
public void diagnosticRelatedInformationWithXMLModel() throws Exception {
ContentModelSettings settings = new ContentModelSettings();
settings.setUseCache(true);
XMLValidationSettings validationSettings = new XMLValidationSettings();
XMLValidationRootSettings validationSettings = new XMLValidationRootSettings();
validationSettings.setCapabilities(new PublishDiagnosticsCapabilities(true)); // with related information
settings.setValidation(validationSettings);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import org.eclipse.lemminx.extensions.contentmodel.participants.DTDErrorCode;
import org.eclipse.lemminx.extensions.contentmodel.participants.XMLSyntaxErrorCode;
import org.eclipse.lemminx.extensions.contentmodel.settings.ContentModelSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationRootSettings;
import org.eclipse.lsp4j.Diagnostic;
import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -111,7 +111,7 @@ public void doctypeNotAllowed() throws Exception {
private static void testDiagnosticsDisallowDocTypeDecl(String xml, Diagnostic diagnostic) {
ContentModelSettings settings = new ContentModelSettings();
settings.setUseCache(false);
XMLValidationSettings validationSettings = new XMLValidationSettings();
XMLValidationRootSettings validationSettings = new XMLValidationRootSettings();
validationSettings.setDisallowDocTypeDecl(true);
settings.setValidation(validationSettings);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.eclipse.lemminx.XMLAssert;
import org.eclipse.lemminx.extensions.contentmodel.participants.DTDErrorCode;
import org.eclipse.lemminx.extensions.contentmodel.settings.ContentModelSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationRootSettings;
import org.eclipse.lemminx.services.XMLLanguageService;
import org.eclipse.lemminx.settings.EnforceQuoteStyle;
import org.eclipse.lemminx.settings.QuoteStyle;
Expand Down Expand Up @@ -307,7 +307,7 @@ public void EntityNotDeclaredRespectsIndentSettings2() throws Exception {
public void defaultEntityExpansionLimit() {
ContentModelSettings settings = new ContentModelSettings();
settings.setUseCache(true);
XMLValidationSettings validationSettings = new XMLValidationSettings();
XMLValidationRootSettings validationSettings = new XMLValidationRootSettings();
validationSettings.setResolveExternalEntities(true);
settings.setValidation(validationSettings);

Expand Down Expand Up @@ -346,7 +346,7 @@ public void defaultEntityExpansionLimit() {
public void customEntityExpansionLimit() {
ContentModelSettings settings = new ContentModelSettings();
settings.setUseCache(true);
XMLValidationSettings validationSettings = new XMLValidationSettings();
XMLValidationRootSettings validationSettings = new XMLValidationRootSettings();
validationSettings.setResolveExternalEntities(true);
settings.setValidation(validationSettings);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import org.eclipse.lemminx.extensions.contentmodel.participants.codeactions.nogrammarconstraints.GenerateXMLModelWithXSDCodeActionResolver;
import org.eclipse.lemminx.extensions.contentmodel.participants.codeactions.nogrammarconstraints.GenerateXSINoNamespaceSchemaCodeActionResolver;
import org.eclipse.lemminx.extensions.contentmodel.settings.ContentModelSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationRootSettings;
import org.eclipse.lemminx.services.XMLLanguageService;
import org.eclipse.lemminx.services.data.DataEntryField;
import org.eclipse.lemminx.settings.SharedSettings;
Expand Down Expand Up @@ -78,7 +78,7 @@ private static void noGrammarHint(boolean selfClose) throws BadLocationException
DiagnosticSeverity.Hint, "test.xml", XMLSyntaxErrorCode.NoGrammarConstraints.name());
// Set noGrammar has 'hint'
ContentModelSettings contentModelSettings = new ContentModelSettings();
XMLValidationSettings problems = new XMLValidationSettings();
XMLValidationRootSettings problems = new XMLValidationRootSettings();
problems.setNoGrammar("hint");
contentModelSettings.setValidation(problems);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.eclipse.lemminx.extensions.contentmodel.participants.XMLSchemaErrorCode;
import org.eclipse.lemminx.extensions.contentmodel.settings.ContentModelSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.SchemaEnabled;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationRootSettings;
import org.eclipse.lemminx.extensions.contentmodel.settings.XMLValidationSettings;
import org.eclipse.lemminx.services.XMLLanguageService;
import org.eclipse.lemminx.settings.EnforceQuoteStyle;
Expand Down Expand Up @@ -1141,7 +1142,7 @@ public void cvc_complex_type_2_3_elementBeforeText() throws BadLocationException
public void diagnosticRelatedInformationWithXMLModelSchemaProblem() throws Exception {
ContentModelSettings settings = new ContentModelSettings();
settings.setUseCache(true);
XMLValidationSettings validationSettings = new XMLValidationSettings();
XMLValidationRootSettings validationSettings = new XMLValidationRootSettings();
validationSettings.setCapabilities(new PublishDiagnosticsCapabilities(true)); // with related information
settings.setValidation(validationSettings);

Expand Down Expand Up @@ -1173,7 +1174,7 @@ public void diagnosticRelatedInformationWithXMLModelSchemaProblem() throws Excep
public void diagnosticRelatedInformationWithNoNamespaceSchemaLocationSchemaProblem() throws Exception {
ContentModelSettings settings = new ContentModelSettings();
settings.setUseCache(true);
XMLValidationSettings validationSettings = new XMLValidationSettings();
XMLValidationRootSettings validationSettings = new XMLValidationRootSettings();
validationSettings.setCapabilities(new PublishDiagnosticsCapabilities(true)); // with related information
settings.setValidation(validationSettings);

Expand Down Expand Up @@ -1205,7 +1206,7 @@ public void diagnosticRelatedInformationWithNoNamespaceSchemaLocationSchemaProbl
public void diagnosticRelatedInformationWithNoNamespaceSchemaLocationSyntaxProblem() throws Exception {
ContentModelSettings settings = new ContentModelSettings();
settings.setUseCache(true);
XMLValidationSettings validationSettings = new XMLValidationSettings();
XMLValidationRootSettings validationSettings = new XMLValidationRootSettings();
validationSettings.setCapabilities(new PublishDiagnosticsCapabilities(true)); // with related information
settings.setValidation(validationSettings);

Expand Down Expand Up @@ -1237,7 +1238,7 @@ public void diagnosticRelatedInformationWithNoNamespaceSchemaLocationSyntaxProbl
public void diagnosticRelatedInformationWithSchemaLocationSyntaxProblem() throws Exception {
ContentModelSettings settings = new ContentModelSettings();
settings.setUseCache(true);
XMLValidationSettings validationSettings = new XMLValidationSettings();
XMLValidationRootSettings validationSettings = new XMLValidationRootSettings();
validationSettings.setCapabilities(new PublishDiagnosticsCapabilities(true)); // with related information
settings.setValidation(validationSettings);

Expand Down
Loading

0 comments on commit 7f80577

Please sign in to comment.