diff --git a/.gitmodules b/.gitmodules index 75264262..2d9bffcd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -31,9 +31,6 @@ [submodule "cmd/micro/vendor/github.com/zyedidia/glob"] path = cmd/micro/vendor/github.com/zyedidia/glob url = https://github.com/zyedidia/glob -[submodule "cmd/micro/vendor/github.com/zyedidia/json5"] - path = cmd/micro/vendor/github.com/zyedidia/json5 - url = https://github.com/zyedidia/json5 [submodule "cmd/micro/vendor/github.com/zyedidia/tcell"] path = cmd/micro/vendor/github.com/zyedidia/tcell url = https://github.com/zyedidia/tcell @@ -55,3 +52,6 @@ [submodule "cmd/micro/vendor/github.com/zyedidia/poller"] path = cmd/micro/vendor/github.com/zyedidia/poller url = https://github.com/zyedidia/poller +[submodule "cmd/micro/vendor/github.com/flynn/json5"] + path = cmd/micro/vendor/github.com/flynn/json5 + url = https://github.com/flynn/json5 diff --git a/LICENSE-THIRD-PARTY b/LICENSE-THIRD-PARTY index 11e9a6f0..679ed82a 100644 --- a/LICENSE-THIRD-PARTY +++ b/LICENSE-THIRD-PARTY @@ -1106,3 +1106,61 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0. + +github.com/flynn/json5/LICENSE +================ + +Decoder code based on package encoding/json from the Go language. + +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +Test data based on the parse cases from https://github.com/json5/json5 + +Copyright (c) 2012-2016 Aseem Kishore, and others. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/cmd/micro/bindings.go b/cmd/micro/bindings.go index c860e69d..b62be8b3 100644 --- a/cmd/micro/bindings.go +++ b/cmd/micro/bindings.go @@ -5,7 +5,7 @@ import ( "os" "strings" - "github.com/zyedidia/json5/encoding/json5" + "github.com/flynn/json5" "github.com/zyedidia/tcell" ) diff --git a/cmd/micro/pluginmanager.go b/cmd/micro/pluginmanager.go index 0703a62f..7fe46334 100644 --- a/cmd/micro/pluginmanager.go +++ b/cmd/micro/pluginmanager.go @@ -14,8 +14,8 @@ import ( "sync" "github.com/blang/semver" + "github.com/flynn/json5" "github.com/yuin/gopher-lua" - "github.com/zyedidia/json5/encoding/json5" ) var ( diff --git a/cmd/micro/pluginmanager_test.go b/cmd/micro/pluginmanager_test.go index 25e2203f..de12fc45 100644 --- a/cmd/micro/pluginmanager_test.go +++ b/cmd/micro/pluginmanager_test.go @@ -1,10 +1,11 @@ package main import ( - "github.com/blang/semver" "testing" - "github.com/zyedidia/json5/encoding/json5" + "github.com/blang/semver" + + "github.com/flynn/json5" ) func TestDependencyResolving(t *testing.T) { diff --git a/cmd/micro/settings.go b/cmd/micro/settings.go index c0ed53b3..03321b36 100644 --- a/cmd/micro/settings.go +++ b/cmd/micro/settings.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "errors" "io/ioutil" "os" @@ -8,8 +9,8 @@ import ( "strconv" "strings" + "github.com/flynn/json5" "github.com/zyedidia/glob" - "github.com/zyedidia/json5/encoding/json5" ) type optionValidator func(string, interface{}) error @@ -17,6 +18,8 @@ type optionValidator func(string, interface{}) error // The options that the user can set var globalSettings map[string]interface{} +var invalidSettings bool + // Options with validators var optionValidators = map[string]optionValidator{ "tabsize": validatePositiveValue, @@ -28,6 +31,7 @@ var optionValidators = map[string]optionValidator{ // InitGlobalSettings initializes the options map and sets all options to their default values func InitGlobalSettings() { + invalidSettings = false defaults := DefaultGlobalSettings() var parsed map[string]interface{} @@ -38,12 +42,14 @@ func InitGlobalSettings() { if !strings.HasPrefix(string(input), "null") { if err != nil { TermMessage("Error reading settings.json file: " + err.Error()) + invalidSettings = true return } err = json5.Unmarshal(input, &parsed) if err != nil { TermMessage("Error reading settings.json:", err.Error()) + invalidSettings = true } } else { writeSettings = true @@ -71,6 +77,7 @@ func InitGlobalSettings() { // InitLocalSettings scans the json in settings.json and sets the options locally based // on whether the buffer matches the glob func InitLocalSettings(buf *Buffer) { + invalidSettings = false var parsed map[string]interface{} filename := configDir + "/settings.json" @@ -78,12 +85,14 @@ func InitLocalSettings(buf *Buffer) { input, err := ioutil.ReadFile(filename) if err != nil { TermMessage("Error reading settings.json file: " + err.Error()) + invalidSettings = true return } err = json5.Unmarshal(input, &parsed) if err != nil { TermMessage("Error reading settings.json:", err.Error()) + invalidSettings = true } } @@ -106,6 +115,11 @@ func InitLocalSettings(buf *Buffer) { // WriteSettings writes the settings to the specified filename as JSON func WriteSettings(filename string) error { + if invalidSettings { + // Do not write the settings if there was an error when reading them + return nil + } + var err error if _, e := os.Stat(configDir); e == nil { parsed := make(map[string]interface{}) @@ -124,6 +138,7 @@ func WriteSettings(filename string) error { err = json5.Unmarshal(input, &parsed) if err != nil { TermMessage("Error reading settings.json:", err.Error()) + invalidSettings = true } for k, v := range parsed { @@ -136,7 +151,7 @@ func WriteSettings(filename string) error { } } - txt, _ := json5.MarshalIndent(parsed, "", " ") + txt, _ := json.MarshalIndent(parsed, "", " ") err = ioutil.WriteFile(filename, append(txt, '\n'), 0644) } return err diff --git a/cmd/micro/vendor/github.com/flynn/json5 b/cmd/micro/vendor/github.com/flynn/json5 new file mode 160000 index 00000000..7620272e --- /dev/null +++ b/cmd/micro/vendor/github.com/flynn/json5 @@ -0,0 +1 @@ +Subproject commit 7620272ed63390e979cf5882d2fa0506fe2a8db5 diff --git a/cmd/micro/vendor/github.com/zyedidia/json5 b/cmd/micro/vendor/github.com/zyedidia/json5 deleted file mode 160000 index 2518f8be..00000000 --- a/cmd/micro/vendor/github.com/zyedidia/json5 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2518f8beebde6814f2d30d566260480d2ded2f76