From 6631c269a8931abdbeb366ce8c32f87b2b671f1c Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 27 Jun 2016 12:03:58 +0100 Subject: [PATCH] initial import --- CONTRIBUTING.md | 27 +++++ LICENSE | 202 +++++++++++++++++++++++++++++++++++ README.md | 28 +++++ main.go | 178 ++++++++++++++++++++++++++++++ main_test.go | 65 +++++++++++ testdata/expected/file | 2 + testdata/expected/file.c | 22 ++++ testdata/expected/file.cc | 21 ++++ testdata/expected/file.cpp | 21 ++++ testdata/expected/file.cs | 20 ++++ testdata/expected/file.css | 19 ++++ testdata/expected/file.dart | 17 +++ testdata/expected/file.el | 15 +++ testdata/expected/file.erl | 18 ++++ testdata/expected/file.go | 21 ++++ testdata/expected/file.h | 17 +++ testdata/expected/file.hh | 15 +++ testdata/expected/file.hpp | 15 +++ testdata/expected/file.hs | 17 +++ testdata/expected/file.html | 18 ++++ testdata/expected/file.java | 21 ++++ testdata/expected/file.js | 19 ++++ testdata/expected/file.lisp | 16 +++ testdata/expected/file.m | 23 ++++ testdata/expected/file.md | 3 + testdata/expected/file.mm | 23 ++++ testdata/expected/file.php | 17 +++ testdata/expected/file.proto | 31 ++++++ testdata/expected/file.py | 15 +++ testdata/expected/file.rs | 17 +++ testdata/expected/file.scala | 19 ++++ testdata/expected/file.swift | 15 +++ testdata/expected/file.txt | 1 + testdata/expected/file.xml | 20 ++++ testdata/expected/file1.sh | 16 +++ testdata/expected/file2.sh | 15 +++ testdata/initial/file | 2 + testdata/initial/file.c | 6 ++ testdata/initial/file.cc | 7 ++ testdata/initial/file.cpp | 7 ++ testdata/initial/file.cs | 6 ++ testdata/initial/file.css | 3 + testdata/initial/file.dart | 3 + testdata/initial/file.el | 1 + testdata/initial/file.erl | 4 + testdata/initial/file.go | 7 ++ testdata/initial/file.h | 1 + testdata/initial/file.hh | 1 + testdata/initial/file.hpp | 1 + testdata/initial/file.hs | 3 + testdata/initial/file.html | 2 + testdata/initial/file.java | 7 ++ testdata/initial/file.js | 3 + testdata/initial/file.lisp | 2 + testdata/initial/file.m | 9 ++ testdata/initial/file.md | 3 + testdata/initial/file.mm | 9 ++ testdata/initial/file.php | 1 + testdata/initial/file.proto | 17 +++ testdata/initial/file.py | 1 + testdata/initial/file.rs | 3 + testdata/initial/file.scala | 5 + testdata/initial/file.swift | 1 + testdata/initial/file.txt | 1 + testdata/initial/file.xml | 4 + testdata/initial/file1.sh | 2 + testdata/initial/file2.sh | 1 + tmpl.go | 98 +++++++++++++++++ 68 files changed, 1250 insertions(+) create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 main.go create mode 100644 main_test.go create mode 100644 testdata/expected/file create mode 100644 testdata/expected/file.c create mode 100644 testdata/expected/file.cc create mode 100644 testdata/expected/file.cpp create mode 100644 testdata/expected/file.cs create mode 100644 testdata/expected/file.css create mode 100644 testdata/expected/file.dart create mode 100644 testdata/expected/file.el create mode 100644 testdata/expected/file.erl create mode 100644 testdata/expected/file.go create mode 100644 testdata/expected/file.h create mode 100644 testdata/expected/file.hh create mode 100644 testdata/expected/file.hpp create mode 100644 testdata/expected/file.hs create mode 100644 testdata/expected/file.html create mode 100644 testdata/expected/file.java create mode 100644 testdata/expected/file.js create mode 100644 testdata/expected/file.lisp create mode 100644 testdata/expected/file.m create mode 100644 testdata/expected/file.md create mode 100644 testdata/expected/file.mm create mode 100644 testdata/expected/file.php create mode 100644 testdata/expected/file.proto create mode 100644 testdata/expected/file.py create mode 100644 testdata/expected/file.rs create mode 100644 testdata/expected/file.scala create mode 100644 testdata/expected/file.swift create mode 100644 testdata/expected/file.txt create mode 100644 testdata/expected/file.xml create mode 100644 testdata/expected/file1.sh create mode 100644 testdata/expected/file2.sh create mode 100644 testdata/initial/file create mode 100644 testdata/initial/file.c create mode 100644 testdata/initial/file.cc create mode 100644 testdata/initial/file.cpp create mode 100644 testdata/initial/file.cs create mode 100644 testdata/initial/file.css create mode 100644 testdata/initial/file.dart create mode 100644 testdata/initial/file.el create mode 100644 testdata/initial/file.erl create mode 100644 testdata/initial/file.go create mode 100644 testdata/initial/file.h create mode 100644 testdata/initial/file.hh create mode 100644 testdata/initial/file.hpp create mode 100644 testdata/initial/file.hs create mode 100644 testdata/initial/file.html create mode 100644 testdata/initial/file.java create mode 100644 testdata/initial/file.js create mode 100644 testdata/initial/file.lisp create mode 100644 testdata/initial/file.m create mode 100644 testdata/initial/file.md create mode 100644 testdata/initial/file.mm create mode 100644 testdata/initial/file.php create mode 100644 testdata/initial/file.proto create mode 100644 testdata/initial/file.py create mode 100644 testdata/initial/file.rs create mode 100644 testdata/initial/file.scala create mode 100644 testdata/initial/file.swift create mode 100644 testdata/initial/file.txt create mode 100644 testdata/initial/file.xml create mode 100644 testdata/initial/file1.sh create mode 100644 testdata/initial/file2.sh create mode 100644 tmpl.go diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..2827b7d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,27 @@ +Want to contribute? Great! First, read this page (including the small print at the end). + +### Before you contribute +Before we can use your code, you must sign the +[Google Individual Contributor License Agreement] +(https://cla.developers.google.com/about/google-individual) +(CLA), which you can do online. The CLA is necessary mainly because you own the +copyright to your changes, even after your contribution becomes part of our +codebase, so we need your permission to use and distribute your code. We also +need to be sure of various other things—for instance that you'll tell us if you +know that your code infringes on other people's patents. You don't have to sign +the CLA until after you've submitted your code for review and a member has +approved it, but you must do it before we can put your code into our codebase. +Before you start working on a larger contribution, you should get in touch with +us first through the issue tracker with your idea so that we can help out and +possibly guide you. Coordinating up front makes it much easier to avoid +frustration later on. + +### Code reviews +All submissions, including submissions by project members, require review. We +use Github pull requests for this purpose. + +### The small print +Contributions made by corporations are covered by a different agreement than +the one above, the +[Software Grant and Corporate Contributor License Agreement] +(https://cla.developers.google.com/about/google-corporate). diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..6f01a9a --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# addlicense + +The program ensures source code files have copyright license headers +by scanning directory patterns recursively. + +It modifies all source files in place and avoids adding a license header +to any file that already has one. + +## install + + go get -u github.com/google/addlicense + +## usage + + addlicense [flags] pattern [pattern ...] + + -c copyright holder (default "Google Inc.") + -l license type: apache, mit (default "apache") + -y year (default 2016) + +The pattern argument can be provided multiple times, and may also refer +to single files. + +## license + +Apache 2.0 + +This is not an official Google product. diff --git a/main.go b/main.go new file mode 100644 index 0000000..2fe6401 --- /dev/null +++ b/main.go @@ -0,0 +1,178 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This program ensures source code files have copyright license headers. +// See usage with "addlicence -h". +package main + +import ( + "bytes" + "flag" + "fmt" + "io/ioutil" + "log" + "os" + "path/filepath" + "sync" + "time" +) + +const helpText = `Usage: addlicense [flags] pattern [pattern ...] + +The program ensures source code files have copyright license headers +by scanning directory patterns recursively. + +It modifies all source files in place and avoids adding a license header +to any file that already has one. + +The pattern argument can be provided multiple times, and may also refer +to single files. + +Flags: +` + +var ( + holder = flag.String("c", "Google Inc.", "copyright holder") + license = flag.String("l", "apache", "license type: apache, mit") + year = flag.Int("y", time.Now().Year(), "year") +) + +func main() { + flag.Usage = func() { + fmt.Fprintln(os.Stderr, helpText) + flag.PrintDefaults() + } + flag.Parse() + if flag.NArg() == 0 { + flag.Usage() + os.Exit(1) + } + + data := ©rightData{ + Year: *year, + Holder: *holder, + } + + // process at most 1000 files in parallel + ch := make(chan *file, 1000) + done := make(chan struct{}) + go func() { + var wg sync.WaitGroup + for f := range ch { + wg.Add(1) + go func(f *file) { + err := addLicense(f.path, f.mode, *license, data) + if err != nil { + log.Printf("%s: %v", f.path, err) + } + wg.Done() + }(f) + } + wg.Wait() + close(done) + }() + + for _, d := range flag.Args() { + walk(ch, d) + } + close(ch) + <-done +} + +type file struct { + path string + mode os.FileMode +} + +func walk(ch chan<- *file, start string) { + filepath.Walk(start, func(path string, fi os.FileInfo, err error) error { + if err != nil { + log.Printf("%s error: %v", path, err) + return nil + } + if fi.IsDir() { + return nil + } + ch <- &file{path, fi.Mode()} + return nil + }) +} + +func addLicense(path string, fmode os.FileMode, typ string, data *copyrightData) error { + var lic []byte + var err error + switch filepath.Ext(path) { + default: + return nil + case ".c", ".h": + lic, err = prefix(typ, data, "/*", " * ", " */") + case ".js", ".css": + lic, err = prefix(typ, data, "/**", " * ", " */") + case ".cc", ".cpp", ".cs", ".go", ".hh", ".hpp", ".java", ".m", ".mm", ".proto", ".rs", ".scala", ".swift", ".dart": + lic, err = prefix(typ, data, "", "// ", "") + case ".py", ".sh": + lic, err = prefix(typ, data, "", "# ", "") + case ".el", ".lisp": + lic, err = prefix(typ, data, "", ";; ", "") + case ".erl": + lic, err = prefix(typ, data, "", "% ", "") + case ".hs": + lic, err = prefix(typ, data, "", "-- ", "") + case ".html", ".xml": + lic, err = prefix(typ, data, "") + case ".php": + lic, err = prefix(typ, data, "") + } + if err != nil || lic == nil { + return err + } + + b, err := ioutil.ReadFile(path) + if err != nil || hasLicense(b) { + return err + } + + line := hashBang(b) + if len(line) > 0 { + b = b[len(line):] + if line[len(line)-1] != '\n' { + line = append(line, '\n') + } + lic = append(line, lic...) + } + b = append(lic, b...) + return ioutil.WriteFile(path, b, fmode) +} + +func hashBang(b []byte) []byte { + var line []byte + for _, c := range b { + line = append(line, c) + if c == '\n' { + break + } + } + if bytes.HasPrefix(line, []byte("#!")) { + return line + } + return nil +} + +func hasLicense(b []byte) bool { + n := 1000 + if len(b) < 1000 { + n = len(b) + } + return bytes.Contains(bytes.ToLower(b[:n]), []byte("copyright")) +} diff --git a/main_test.go b/main_test.go new file mode 100644 index 0000000..c2c0a67 --- /dev/null +++ b/main_test.go @@ -0,0 +1,65 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "strings" + "testing" +) + +func run(t *testing.T, name string, args ...string) { + cmd := exec.Command(name, args...) + out, err := cmd.CombinedOutput() + if err != nil { + t.Fatalf("%s %s: %v\n%s", name, strings.Join(args, " "), err, out) + } +} + +func tempDir(t *testing.T) string { + dir, err := ioutil.TempDir("", "addlicense") + if err != nil { + t.Fatal(err) + } + return dir +} + +func TestInitial(t *testing.T) { + if os.Getenv("RUNME") != "" { + main() + return + } + + tmp := tempDir(t) + t.Logf("tmp dir: %s", tmp) + run(t, "cp", "-r", "testdata/initial", tmp) + + // run at least 2 times to ensure the program is idempotent + for i := 0; i < 2; i++ { + t.Logf("run #%d", i) + targs := []string{"-test.run=TestInitial"} + cargs := []string{"-l", "apache", "-c", "Google Inc.", "-y", "2016", tmp} + c := exec.Command(os.Args[0], append(targs, cargs...)...) + c.Env = []string{"RUNME=1"} + if out, err := c.CombinedOutput(); err != nil { + t.Fatalf("%v\n%s", err, out) + } + + run(t, "diff", "-r", filepath.Join(tmp, "initial"), "testdata/expected") + } +} diff --git a/testdata/expected/file b/testdata/expected/file new file mode 100644 index 0000000..2dfa06f --- /dev/null +++ b/testdata/expected/file @@ -0,0 +1,2 @@ +This is a file without extension +and should not be modified. diff --git a/testdata/expected/file.c b/testdata/expected/file.c new file mode 100644 index 0000000..ca2511c --- /dev/null +++ b/testdata/expected/file.c @@ -0,0 +1,22 @@ +/* + * Copyright 2016 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +int main() { + printf("Hello world\n"); + return 0; +} diff --git a/testdata/expected/file.cc b/testdata/expected/file.cc new file mode 100644 index 0000000..08f8e6f --- /dev/null +++ b/testdata/expected/file.cc @@ -0,0 +1,21 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +using namespace std; + +int main() { + cout << "Hello World!"; + return 0; +} diff --git a/testdata/expected/file.cpp b/testdata/expected/file.cpp new file mode 100644 index 0000000..08f8e6f --- /dev/null +++ b/testdata/expected/file.cpp @@ -0,0 +1,21 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +using namespace std; + +int main() { + cout << "Hello World!"; + return 0; +} diff --git a/testdata/expected/file.cs b/testdata/expected/file.cs new file mode 100644 index 0000000..3634bcf --- /dev/null +++ b/testdata/expected/file.cs @@ -0,0 +1,20 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +public class Hello +{ + public static void Main() { + System.Console.WriteLine("Hello, World!"); + } +} diff --git a/testdata/expected/file.css b/testdata/expected/file.css new file mode 100644 index 0000000..d028d74 --- /dev/null +++ b/testdata/expected/file.css @@ -0,0 +1,19 @@ +/** + * Copyright 2016 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +.div { + color: red; +} diff --git a/testdata/expected/file.dart b/testdata/expected/file.dart new file mode 100644 index 0000000..decb9ee --- /dev/null +++ b/testdata/expected/file.dart @@ -0,0 +1,17 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +void main() { + print('Hello World!'); +} diff --git a/testdata/expected/file.el b/testdata/expected/file.el new file mode 100644 index 0000000..1487198 --- /dev/null +++ b/testdata/expected/file.el @@ -0,0 +1,15 @@ +;; Copyright 2016 Google Inc. +;; +;; Licensed under the Apache License, Version 2.0 (the "License"); +;; you may not use this file except in compliance with the License. +;; You may obtain a copy of the License at +;; +;; http://www.apache.org/licenses/LICENSE-2.0 +;; +;; Unless required by applicable law or agreed to in writing, software +;; distributed under the License is distributed on an "AS IS" BASIS, +;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +;; See the License for the specific language governing permissions and +;; limitations under the License. + +(message "Hello world!") diff --git a/testdata/expected/file.erl b/testdata/expected/file.erl new file mode 100644 index 0000000..003d661 --- /dev/null +++ b/testdata/expected/file.erl @@ -0,0 +1,18 @@ +% Copyright 2016 Google Inc. +% +% Licensed under the Apache License, Version 2.0 (the "License"); +% you may not use this file except in compliance with the License. +% You may obtain a copy of the License at +% +% http://www.apache.org/licenses/LICENSE-2.0 +% +% Unless required by applicable law or agreed to in writing, software +% distributed under the License is distributed on an "AS IS" BASIS, +% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +% See the License for the specific language governing permissions and +% limitations under the License. + +-module(hello). +-export([hello_world/0]). + +hello_world() -> io:fwrite("hello, world\n"). diff --git a/testdata/expected/file.go b/testdata/expected/file.go new file mode 100644 index 0000000..864e0fc --- /dev/null +++ b/testdata/expected/file.go @@ -0,0 +1,21 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import "fmt" + +func main() { + fmt.Println("Hello, World!") +} diff --git a/testdata/expected/file.h b/testdata/expected/file.h new file mode 100644 index 0000000..6eef681 --- /dev/null +++ b/testdata/expected/file.h @@ -0,0 +1,17 @@ +/* + * Copyright 2016 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define SOMETHING diff --git a/testdata/expected/file.hh b/testdata/expected/file.hh new file mode 100644 index 0000000..406d417 --- /dev/null +++ b/testdata/expected/file.hh @@ -0,0 +1,15 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#define SOMETHING diff --git a/testdata/expected/file.hpp b/testdata/expected/file.hpp new file mode 100644 index 0000000..406d417 --- /dev/null +++ b/testdata/expected/file.hpp @@ -0,0 +1,15 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#define SOMETHING diff --git a/testdata/expected/file.hs b/testdata/expected/file.hs new file mode 100644 index 0000000..54876ef --- /dev/null +++ b/testdata/expected/file.hs @@ -0,0 +1,17 @@ +-- Copyright 2016 Google Inc. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. + +module Main where + +main = putStrLn "Hello, World!" diff --git a/testdata/expected/file.html b/testdata/expected/file.html new file mode 100644 index 0000000..108603b --- /dev/null +++ b/testdata/expected/file.html @@ -0,0 +1,18 @@ + + + +

Hello World!

diff --git a/testdata/expected/file.java b/testdata/expected/file.java new file mode 100644 index 0000000..92cf1a9 --- /dev/null +++ b/testdata/expected/file.java @@ -0,0 +1,21 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +public class HelloWorld { + + public static void main(String[] args) { + System.out.println("Hello, World"); + } + +} diff --git a/testdata/expected/file.js b/testdata/expected/file.js new file mode 100644 index 0000000..7f035bd --- /dev/null +++ b/testdata/expected/file.js @@ -0,0 +1,19 @@ +/** + * Copyright 2016 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +function dummy() { + console.log('hello world!'); +} diff --git a/testdata/expected/file.lisp b/testdata/expected/file.lisp new file mode 100644 index 0000000..bd5673f --- /dev/null +++ b/testdata/expected/file.lisp @@ -0,0 +1,16 @@ +;; Copyright 2016 Google Inc. +;; +;; Licensed under the Apache License, Version 2.0 (the "License"); +;; you may not use this file except in compliance with the License. +;; You may obtain a copy of the License at +;; +;; http://www.apache.org/licenses/LICENSE-2.0 +;; +;; Unless required by applicable law or agreed to in writing, software +;; distributed under the License is distributed on an "AS IS" BASIS, +;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +;; See the License for the specific language governing permissions and +;; limitations under the License. + +; hello world lisp program. +(print "Hello World") diff --git a/testdata/expected/file.m b/testdata/expected/file.m new file mode 100644 index 0000000..4d6ac84 --- /dev/null +++ b/testdata/expected/file.m @@ -0,0 +1,23 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +int main (int argc, const char * argv[]) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSLog (@"Hello, World!"); + [pool drain]; + return 0; +} diff --git a/testdata/expected/file.md b/testdata/expected/file.md new file mode 100644 index 0000000..cff1fe5 --- /dev/null +++ b/testdata/expected/file.md @@ -0,0 +1,3 @@ +# Markdown + +This is a markdown file and should not be modified. diff --git a/testdata/expected/file.mm b/testdata/expected/file.mm new file mode 100644 index 0000000..4d6ac84 --- /dev/null +++ b/testdata/expected/file.mm @@ -0,0 +1,23 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +int main (int argc, const char * argv[]) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSLog (@"Hello, World!"); + [pool drain]; + return 0; +} diff --git a/testdata/expected/file.php b/testdata/expected/file.php new file mode 100644 index 0000000..beb6392 --- /dev/null +++ b/testdata/expected/file.php @@ -0,0 +1,17 @@ + + + diff --git a/testdata/expected/file.proto b/testdata/expected/file.proto new file mode 100644 index 0000000..7054ebc --- /dev/null +++ b/testdata/expected/file.proto @@ -0,0 +1,31 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package helloworld; + +service Greeter { + rpc SayHello (HelloRequest) returns (HelloReply) {} +} + +// The request message containing the user's name. +message HelloRequest { + string name = 1; +} + +// The response message containing the greetings +message HelloReply { + string message = 1; +} diff --git a/testdata/expected/file.py b/testdata/expected/file.py new file mode 100644 index 0000000..c3b728a --- /dev/null +++ b/testdata/expected/file.py @@ -0,0 +1,15 @@ +# Copyright 2016 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +print "Hello World!" diff --git a/testdata/expected/file.rs b/testdata/expected/file.rs new file mode 100644 index 0000000..c4d0dac --- /dev/null +++ b/testdata/expected/file.rs @@ -0,0 +1,17 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +fn main() { + println!("Hello World!"); +} diff --git a/testdata/expected/file.scala b/testdata/expected/file.scala new file mode 100644 index 0000000..4ccde5e --- /dev/null +++ b/testdata/expected/file.scala @@ -0,0 +1,19 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +object HelloWorld { + def main(args: Array[String]): Unit = { + println("Hello, world!") + } +} diff --git a/testdata/expected/file.swift b/testdata/expected/file.swift new file mode 100644 index 0000000..aba4fa9 --- /dev/null +++ b/testdata/expected/file.swift @@ -0,0 +1,15 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +print("Hello, world!") diff --git a/testdata/expected/file.txt b/testdata/expected/file.txt new file mode 100644 index 0000000..9df927d --- /dev/null +++ b/testdata/expected/file.txt @@ -0,0 +1 @@ +This is a text file and should not be modified. diff --git a/testdata/expected/file.xml b/testdata/expected/file.xml new file mode 100644 index 0000000..0f6c669 --- /dev/null +++ b/testdata/expected/file.xml @@ -0,0 +1,20 @@ + + + + one + + diff --git a/testdata/expected/file1.sh b/testdata/expected/file1.sh new file mode 100644 index 0000000..6be5639 --- /dev/null +++ b/testdata/expected/file1.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Copyright 2016 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +echo hello diff --git a/testdata/expected/file2.sh b/testdata/expected/file2.sh new file mode 100644 index 0000000..ba091c3 --- /dev/null +++ b/testdata/expected/file2.sh @@ -0,0 +1,15 @@ +#!/usr/bin/go run prog.go $* +# Copyright 2016 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + diff --git a/testdata/initial/file b/testdata/initial/file new file mode 100644 index 0000000..2dfa06f --- /dev/null +++ b/testdata/initial/file @@ -0,0 +1,2 @@ +This is a file without extension +and should not be modified. diff --git a/testdata/initial/file.c b/testdata/initial/file.c new file mode 100644 index 0000000..e6a5b85 --- /dev/null +++ b/testdata/initial/file.c @@ -0,0 +1,6 @@ +#include + +int main() { + printf("Hello world\n"); + return 0; +} diff --git a/testdata/initial/file.cc b/testdata/initial/file.cc new file mode 100644 index 0000000..f6fbab5 --- /dev/null +++ b/testdata/initial/file.cc @@ -0,0 +1,7 @@ +#include +using namespace std; + +int main() { + cout << "Hello World!"; + return 0; +} diff --git a/testdata/initial/file.cpp b/testdata/initial/file.cpp new file mode 100644 index 0000000..f6fbab5 --- /dev/null +++ b/testdata/initial/file.cpp @@ -0,0 +1,7 @@ +#include +using namespace std; + +int main() { + cout << "Hello World!"; + return 0; +} diff --git a/testdata/initial/file.cs b/testdata/initial/file.cs new file mode 100644 index 0000000..cf22fd0 --- /dev/null +++ b/testdata/initial/file.cs @@ -0,0 +1,6 @@ +public class Hello +{ + public static void Main() { + System.Console.WriteLine("Hello, World!"); + } +} diff --git a/testdata/initial/file.css b/testdata/initial/file.css new file mode 100644 index 0000000..c8aad18 --- /dev/null +++ b/testdata/initial/file.css @@ -0,0 +1,3 @@ +.div { + color: red; +} diff --git a/testdata/initial/file.dart b/testdata/initial/file.dart new file mode 100644 index 0000000..9ba20fa --- /dev/null +++ b/testdata/initial/file.dart @@ -0,0 +1,3 @@ +void main() { + print('Hello World!'); +} diff --git a/testdata/initial/file.el b/testdata/initial/file.el new file mode 100644 index 0000000..70b6521 --- /dev/null +++ b/testdata/initial/file.el @@ -0,0 +1 @@ +(message "Hello world!") diff --git a/testdata/initial/file.erl b/testdata/initial/file.erl new file mode 100644 index 0000000..cabba3b --- /dev/null +++ b/testdata/initial/file.erl @@ -0,0 +1,4 @@ +-module(hello). +-export([hello_world/0]). + +hello_world() -> io:fwrite("hello, world\n"). diff --git a/testdata/initial/file.go b/testdata/initial/file.go new file mode 100644 index 0000000..a3dd973 --- /dev/null +++ b/testdata/initial/file.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("Hello, World!") +} diff --git a/testdata/initial/file.h b/testdata/initial/file.h new file mode 100644 index 0000000..2882f32 --- /dev/null +++ b/testdata/initial/file.h @@ -0,0 +1 @@ +#define SOMETHING diff --git a/testdata/initial/file.hh b/testdata/initial/file.hh new file mode 100644 index 0000000..2882f32 --- /dev/null +++ b/testdata/initial/file.hh @@ -0,0 +1 @@ +#define SOMETHING diff --git a/testdata/initial/file.hpp b/testdata/initial/file.hpp new file mode 100644 index 0000000..2882f32 --- /dev/null +++ b/testdata/initial/file.hpp @@ -0,0 +1 @@ +#define SOMETHING diff --git a/testdata/initial/file.hs b/testdata/initial/file.hs new file mode 100644 index 0000000..4d0e764 --- /dev/null +++ b/testdata/initial/file.hs @@ -0,0 +1,3 @@ +module Main where + +main = putStrLn "Hello, World!" diff --git a/testdata/initial/file.html b/testdata/initial/file.html new file mode 100644 index 0000000..2e5030d --- /dev/null +++ b/testdata/initial/file.html @@ -0,0 +1,2 @@ + +

Hello World!

diff --git a/testdata/initial/file.java b/testdata/initial/file.java new file mode 100644 index 0000000..ab84753 --- /dev/null +++ b/testdata/initial/file.java @@ -0,0 +1,7 @@ +public class HelloWorld { + + public static void main(String[] args) { + System.out.println("Hello, World"); + } + +} diff --git a/testdata/initial/file.js b/testdata/initial/file.js new file mode 100644 index 0000000..5294732 --- /dev/null +++ b/testdata/initial/file.js @@ -0,0 +1,3 @@ +function dummy() { + console.log('hello world!'); +} diff --git a/testdata/initial/file.lisp b/testdata/initial/file.lisp new file mode 100644 index 0000000..000b254 --- /dev/null +++ b/testdata/initial/file.lisp @@ -0,0 +1,2 @@ +; hello world lisp program. +(print "Hello World") diff --git a/testdata/initial/file.m b/testdata/initial/file.m new file mode 100644 index 0000000..b49c4e6 --- /dev/null +++ b/testdata/initial/file.m @@ -0,0 +1,9 @@ +#import + +int main (int argc, const char * argv[]) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSLog (@"Hello, World!"); + [pool drain]; + return 0; +} diff --git a/testdata/initial/file.md b/testdata/initial/file.md new file mode 100644 index 0000000..cff1fe5 --- /dev/null +++ b/testdata/initial/file.md @@ -0,0 +1,3 @@ +# Markdown + +This is a markdown file and should not be modified. diff --git a/testdata/initial/file.mm b/testdata/initial/file.mm new file mode 100644 index 0000000..b49c4e6 --- /dev/null +++ b/testdata/initial/file.mm @@ -0,0 +1,9 @@ +#import + +int main (int argc, const char * argv[]) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSLog (@"Hello, World!"); + [pool drain]; + return 0; +} diff --git a/testdata/initial/file.php b/testdata/initial/file.php new file mode 100644 index 0000000..147cebc --- /dev/null +++ b/testdata/initial/file.php @@ -0,0 +1 @@ + diff --git a/testdata/initial/file.proto b/testdata/initial/file.proto new file mode 100644 index 0000000..a37d3c7 --- /dev/null +++ b/testdata/initial/file.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +package helloworld; + +service Greeter { + rpc SayHello (HelloRequest) returns (HelloReply) {} +} + +// The request message containing the user's name. +message HelloRequest { + string name = 1; +} + +// The response message containing the greetings +message HelloReply { + string message = 1; +} diff --git a/testdata/initial/file.py b/testdata/initial/file.py new file mode 100644 index 0000000..f4da9af --- /dev/null +++ b/testdata/initial/file.py @@ -0,0 +1 @@ +print "Hello World!" diff --git a/testdata/initial/file.rs b/testdata/initial/file.rs new file mode 100644 index 0000000..47ad8c6 --- /dev/null +++ b/testdata/initial/file.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello World!"); +} diff --git a/testdata/initial/file.scala b/testdata/initial/file.scala new file mode 100644 index 0000000..40aaec3 --- /dev/null +++ b/testdata/initial/file.scala @@ -0,0 +1,5 @@ +object HelloWorld { + def main(args: Array[String]): Unit = { + println("Hello, world!") + } +} diff --git a/testdata/initial/file.swift b/testdata/initial/file.swift new file mode 100644 index 0000000..f7cf60e --- /dev/null +++ b/testdata/initial/file.swift @@ -0,0 +1 @@ +print("Hello, world!") diff --git a/testdata/initial/file.txt b/testdata/initial/file.txt new file mode 100644 index 0000000..9df927d --- /dev/null +++ b/testdata/initial/file.txt @@ -0,0 +1 @@ +This is a text file and should not be modified. diff --git a/testdata/initial/file.xml b/testdata/initial/file.xml new file mode 100644 index 0000000..048df03 --- /dev/null +++ b/testdata/initial/file.xml @@ -0,0 +1,4 @@ + + one + + diff --git a/testdata/initial/file1.sh b/testdata/initial/file1.sh new file mode 100644 index 0000000..6481942 --- /dev/null +++ b/testdata/initial/file1.sh @@ -0,0 +1,2 @@ +#!/bin/bash +echo hello diff --git a/testdata/initial/file2.sh b/testdata/initial/file2.sh new file mode 100644 index 0000000..1e37680 --- /dev/null +++ b/testdata/initial/file2.sh @@ -0,0 +1 @@ +#!/usr/bin/go run prog.go $* \ No newline at end of file diff --git a/tmpl.go b/tmpl.go new file mode 100644 index 0000000..095a708 --- /dev/null +++ b/tmpl.go @@ -0,0 +1,98 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "bytes" + "fmt" + "html/template" +) + +var licenseTemplate = make(map[string]*template.Template) + +func init() { + licenseTemplate["apache"] = template.Must(template.New("").Parse(tmplApache)) + licenseTemplate["mit"] = template.Must(template.New("").Parse(tmplMIT)) +} + +type copyrightData struct { + Year int + Holder string +} + +// prefix will execute a license template l with data d +// and prefix the result with top, middle and bottom. +func prefix(l string, d *copyrightData, top, mid, bot string) ([]byte, error) { + t := licenseTemplate[l] + if t == nil { + return nil, fmt.Errorf("unknown license: %s", l) + } + + var buf bytes.Buffer + if err := t.Execute(&buf, d); err != nil { + return nil, err + } + var out bytes.Buffer + if top != "" { + out.WriteString(top) + out.WriteRune('\n') + } + out.WriteString(mid) + for _, c := range buf.Bytes() { + out.WriteByte(c) + if c == '\n' { + out.WriteString(mid) + } + } + if bot != "" { + out.WriteRune('\n') + out.WriteString(bot) + } + out.Write([]byte{'\n', '\n'}) + return out.Bytes(), nil +} + +const tmplApache = `Copyright {{.Year}} {{.Holder}} + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License.` + +const tmplMIT = `Copyright (c) {{.Year}} {{.Holder}} + +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.`