Skip to content

Commit 5fba957

Browse files
committed
Accept numeric values in JSHint options
Values with illegal syntax are silently ignored. Fixes #25
1 parent 99bf535 commit 5fba957

File tree

3 files changed

+47
-23
lines changed

3 files changed

+47
-23
lines changed

bundles/com.eclipsesource.jshint.ui/META-INF/MANIFEST.MF

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ Require-Bundle: org.eclipse.ui;bundle-version="3.6.0",
1010
org.eclipse.core.resources;bundle-version="3.6.0"
1111
Bundle-RequiredExecutionEnvironment: J2SE-1.5
1212
Bundle-ActivationPolicy: lazy
13-
Import-Package: com.eclipsesource.jshint;version="[0.9.5,1.0.0)"
13+
Import-Package: com.eclipsesource.jshint;version="[0.9.5,1.0.0)",
14+
com.eclipsesource.json;version="0.9.0"
1415
Export-Package: com.eclipsesource.jshint.ui.internal;version="0.9.5";x-internal:=true,
1516
com.eclipsesource.jshint.ui.internal.builder;version="0.9.5";x-internal:=true,
1617
com.eclipsesource.jshint.ui.internal.preferences;version="0.9.5";x-internal:=true,

bundles/com.eclipsesource.jshint.ui/src/com/eclipsesource/jshint/ui/internal/preferences/OptionParserUtil.java

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import java.util.List;
1515

1616
import com.eclipsesource.jshint.Configuration;
17+
import com.eclipsesource.json.JsonValue;
18+
import com.eclipsesource.json.ParseException;
1719

1820

1921
public class OptionParserUtil {
@@ -25,7 +27,7 @@ private OptionParserUtil() {
2527
public static Configuration createConfiguration( String options, String globals ) {
2628
Configuration configuration = new Configuration();
2729
for( Entry entry : parseOptionString( globals ) ) {
28-
configuration.addPredefined( entry.name, entry.value );
30+
configuration.addPredefined( entry.name, entry.value == JsonValue.TRUE );
2931
}
3032
for( Entry entry : parseOptionString( options ) ) {
3133
configuration.addOption( entry.name, entry.value );
@@ -37,23 +39,35 @@ static List<Entry> parseOptionString( String input ) {
3739
List<Entry> result = new ArrayList<Entry>();
3840
String[] elements = input.split( "," );
3941
for( String element : elements ) {
40-
element = element.trim();
41-
if( element.length() > 0 ) {
42-
String[] parts = element.split( ":", 2 );
43-
String key = parts[ 0 ].trim();
44-
if( key.length() > 0 ) {
45-
boolean value = parts.length > 1 ? Boolean.parseBoolean( parts[ 1 ].trim() ) : false;
46-
result.add( new Entry( key, value ) );
42+
element = parseOptionElement( result, element.trim() );
43+
}
44+
return result;
45+
}
46+
47+
private static String parseOptionElement( List<Entry> result, String element ) {
48+
if( element.length() > 0 ) {
49+
String[] parts = element.split( ":", 2 );
50+
String key = parts[ 0 ].trim();
51+
if( key.length() > 0 ) {
52+
if( parts.length != 2 ) {
53+
// TODO handle error
54+
} else {
55+
try {
56+
JsonValue value = JsonValue.readFrom( parts[ 1 ].trim() );
57+
result.add( new Entry( key, value ) );
58+
} catch( ParseException exception ) {
59+
// TODO handle error
60+
}
4761
}
4862
}
4963
}
50-
return result;
64+
return element;
5165
}
5266

5367
static class Entry {
5468
public final String name;
55-
public final boolean value;
56-
public Entry( String name, boolean value ) {
69+
public final JsonValue value;
70+
public Entry( String name, JsonValue value ) {
5771
this.name = name;
5872
this.value = value;
5973
}

tests/com.eclipsesource.jshint.ui.test/src/com/eclipsesource/jshint/ui/internal/preferences/OptionParserUtil_Test.java

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616

1717
import com.eclipsesource.jshint.Configuration;
1818
import com.eclipsesource.jshint.ui.internal.preferences.OptionParserUtil.Entry;
19+
import com.eclipsesource.json.JsonValue;
1920

20-
import static org.junit.Assert.*;
21+
import static org.junit.Assert.assertEquals;
22+
import static org.junit.Assert.assertTrue;
2123

2224

2325
public class OptionParserUtil_Test {
@@ -26,7 +28,7 @@ public class OptionParserUtil_Test {
2628
public void createConfiguration() {
2729
Configuration result = OptionParserUtil.createConfiguration( "opt1: true", "predef1: false" );
2830

29-
assertEquals( "{\"predef\": {\"predef1\": false}, \"opt1\": true}", result.toJson() );
31+
assertEquals( "{\"opt1\":true,\"predef\":{\"predef1\":false}}",result.toJson() );
3032
}
3133

3234
@Test
@@ -64,7 +66,7 @@ public void parseSingle() {
6466

6567
assertEquals( 1, result.size() );
6668
assertEquals( "foo", result.get( 0 ).name );
67-
assertTrue( result.get( 0 ).value );
69+
assertEquals( JsonValue.TRUE, result.get( 0 ).value );
6870
}
6971

7072
@Test
@@ -73,9 +75,9 @@ public void parseTwoOptions() {
7375

7476
assertEquals( 2, result.size() );
7577
assertEquals( "foo", result.get( 0 ).name );
76-
assertTrue( result.get( 0 ).value );
78+
assertEquals( JsonValue.TRUE, result.get( 0 ).value );
7779
assertEquals( "bar", result.get( 1 ).name );
78-
assertFalse( result.get( 1 ).value );
80+
assertEquals( JsonValue.FALSE, result.get( 1 ).value );
7981
}
8082

8183
@Test
@@ -84,9 +86,9 @@ public void parseAdditionalWhitespace() {
8486

8587
assertEquals( 2, result.size() );
8688
assertEquals( "foo", result.get( 0 ).name );
87-
assertTrue( result.get( 0 ).value );
89+
assertEquals( JsonValue.TRUE, result.get( 0 ).value );
8890
assertEquals( "bar", result.get( 1 ).name );
89-
assertFalse( result.get( 1 ).value );
91+
assertEquals( JsonValue.FALSE, result.get( 1 ).value );
9092
}
9193

9294
// TODO check for illegal names
@@ -96,16 +98,23 @@ public void parseWhitespaceInName() {
9698

9799
assertEquals( 1, result.size() );
98100
assertEquals( "foo bar", result.get( 0 ).name );
99-
assertTrue( result.get( 0 ).value );
101+
assertEquals( JsonValue.TRUE, result.get( 0 ).value );
100102
}
101103

102104
@Test
103-
public void parseNonBooleanValue() {
104-
List<Entry> result = OptionParserUtil.parseOptionString( "foo: bar" );
105+
public void parseNumericValue() {
106+
List<Entry> result = OptionParserUtil.parseOptionString( "foo: 23" );
105107

106108
assertEquals( 1, result.size() );
107109
assertEquals( "foo", result.get( 0 ).name );
108-
assertFalse( result.get( 0 ).value );
110+
assertEquals( JsonValue.valueOf( 23 ), result.get( 0 ).value );
111+
}
112+
113+
@Test
114+
public void parseIllegalValue() {
115+
List<Entry> result = OptionParserUtil.parseOptionString( "foo: (invalidJSON)" );
116+
117+
assertEquals( 0, result.size() );
109118
}
110119

111120
}

0 commit comments

Comments
 (0)