/**
* Copyright (c) 2013-2016 Angelo ZERR.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
*/
package tern.server.protocol.lint;
import tern.TernException;
import tern.server.ITernPlugin;
import tern.server.protocol.JsonHelper;
import tern.server.protocol.TernQuery;
import tern.utils.TernModuleHelper;
/**
* Tern lint query used to validate JS files.
*
* @see https://github.com/angelozerr/tern-lint
* @see https://github.com/angelozerr/tern-jshint
* @see https://github.com/angelozerr/tern-eslint
* @see https://github.com/angelozerr/tern-jscs
*/
public class TernLintQuery extends TernQuery {
private static final long serialVersionUID = 1L;
private static final String FULL_EXTENSION = "-full";
private static final String GROUP_BY_FILES_NAME = "groupByFiles";
private static final String LINE_NUMBER_NAME = "lineNumber";
private static final String FIX_NAME = "fix";
private final ITernPlugin linter;
private boolean useLinterAsSuffix;
private TernLintQuery(String type, ITernPlugin linter, boolean full) {
super(full ? new StringBuilder(type).append(FULL_EXTENSION).toString()
: type);
if (full) {
setGroupByFiles(true);
}
this.linter = linter;
}
public static TernLintQuery create(ITernPlugin plugin, boolean full)
throws TernException {
if (!plugin.isLinter()) {
throw new TernException(plugin.getName() + " is not a linter");
}
TernLintQuery query = new TernLintQuery(plugin.getName(), plugin, full);
query.setUseLinterAsSuffix(true);
return query;
}
public void setGroupByFiles(boolean groupByFiles) {
super.set(GROUP_BY_FILES_NAME, groupByFiles);
}
public boolean isGroupByFiles() {
return JsonHelper.getBoolean(this, GROUP_BY_FILES_NAME, false);
}
public void setLineNumber(boolean lineNumber) {
super.set(LINE_NUMBER_NAME, lineNumber);
}
public boolean isLineNumber() {
return JsonHelper.getBoolean(this, LINE_NUMBER_NAME, false);
}
public void setFix(boolean fix) {
super.set(FIX_NAME, fix);
}
public boolean isFix() {
return JsonHelper.getBoolean(this, FIX_NAME, false);
}
/**
* Set true if the message returned by the linter must add the linter name
* as suffix and false otherwise.
*
* @param useLinterAsSuffix
*/
public void setUseLinterAsSuffix(boolean useLinterAsSuffix) {
this.useLinterAsSuffix = useLinterAsSuffix;
}
/**
* Returns true if the message returned by the linter must add the linter
* name as suffix and false otherwise.
*
* @return true if the message returned by the linter must add the linter
* name as suffix and false otherwise.
*/
public boolean isUseLinterAsSuffix() {
return useLinterAsSuffix;
}
/**
* Format the given message by using Linter name as suffix.
*
* @param message
* @return the given message by using Linter name as suffix.
*/
public String formatMessage(String message) {
if (useLinterAsSuffix) {
return new StringBuilder("[")
.append(TernModuleHelper.getLabel(linter)).append("]")
.append(": ").append(message).toString();
}
return message;
}
public ITernPlugin getLinter() {
return linter;
}
}