lib/foodcritic/rules/fc069.rb
rule "FC069", "Ensure standardized license defined in metadata" do tags %w{metadata supermarket license} metadata do |ast, filename| begin license = field_value(ast, "license") # list of valid SPDX.org license strings. To build an array run this: # require 'json' # require 'net/http' # json_data = JSON.parse(Net::HTTP.get(URI('https://raw.githubusercontent.com/spdx/license-list-data/master/json/licenses.json'))) # licenses = json_data['licenses'].map {|l| l['licenseId'] }.sort # valid = %w{ 0BSD AAL Abstyles Adobe-2006 Adobe-Glyph ADSL AFL-1.1 AFL-1.2 AFL-2.0 AFL-2.1 AFL-3.0 Afmparse AGPL-1.0 AGPL-1.0-only AGPL-1.0-or-later AGPL-3.0 AGPL-3.0-only AGPL-3.0-or-later Aladdin AMDPLPA AML AMPAS ANTLR-PD Apache-1.0 Apache-1.1 Apache-2.0 APAFML APL-1.0 APSL-1.0 APSL-1.1 APSL-1.2 APSL-2.0 Artistic-1.0 Artistic-1.0-cl8 Artistic-1.0-Perl Artistic-2.0 Bahyph Barr Beerware BitTorrent-1.0 BitTorrent-1.1 Borceux BSD-1-Clause BSD-2-Clause BSD-2-Clause-FreeBSD BSD-2-Clause-NetBSD BSD-2-Clause-Patent BSD-3-Clause BSD-3-Clause-Attribution BSD-3-Clause-Clear BSD-3-Clause-LBNL BSD-3-Clause-No-Nuclear-License BSD-3-Clause-No-Nuclear-License-2014 BSD-3-Clause-No-Nuclear-Warranty BSD-4-Clause BSD-4-Clause-UC BSD-Protection BSD-Source-Code BSL-1.0 bzip2-1.0.5 bzip2-1.0.6 Caldera CATOSL-1.1 CC-BY-1.0 CC-BY-2.0 CC-BY-2.5 CC-BY-3.0 CC-BY-4.0 CC-BY-NC-1.0 CC-BY-NC-2.0 CC-BY-NC-2.5 CC-BY-NC-3.0 CC-BY-NC-4.0 CC-BY-NC-ND-1.0 CC-BY-NC-ND-2.0 CC-BY-NC-ND-2.5 CC-BY-NC-ND-3.0 CC-BY-NC-ND-4.0 CC-BY-NC-SA-1.0 CC-BY-NC-SA-2.0 CC-BY-NC-SA-2.5 CC-BY-NC-SA-3.0 CC-BY-NC-SA-4.0 CC-BY-ND-1.0 CC-BY-ND-2.0 CC-BY-ND-2.5 CC-BY-ND-3.0 CC-BY-ND-4.0 CC-BY-SA-1.0 CC-BY-SA-2.0 CC-BY-SA-2.5 CC-BY-SA-3.0 CC-BY-SA-4.0 CC0-1.0 CDDL-1.0 CDDL-1.1 CDLA-Permissive-1.0 CDLA-Sharing-1.0 CECILL-1.0 CECILL-1.1 CECILL-2.0 CECILL-2.1 CECILL-B CECILL-C ClArtistic CNRI-Jython CNRI-Python CNRI-Python-GPL-Compatible Condor-1.1 CPAL-1.0 CPL-1.0 CPOL-1.02 Crossword CrystalStacker CUA-OPL-1.0 Cube curl D-FSL-1.0 diffmark DOC Dotseqn DSDP dvipdfm ECL-1.0 ECL-2.0 eCos-2.0 EFL-1.0 EFL-2.0 eGenix Entessa EPL-1.0 EPL-2.0 ErlPL-1.1 EUDatagrid EUPL-1.0 EUPL-1.1 EUPL-1.2 Eurosym Fair Frameworx-1.0 FreeImage FSFAP FSFUL FSFULLR FTL GFDL-1.1 GFDL-1.1-only GFDL-1.1-or-later GFDL-1.2 GFDL-1.2-only GFDL-1.2-or-later GFDL-1.3 GFDL-1.3-only GFDL-1.3-or-later Giftware GL2PS Glide Glulxe gnuplot GPL-1.0 GPL-1.0-only GPL-1.0-or-later GPL-1.0+ GPL-2.0 GPL-2.0-only GPL-2.0-or-later GPL-2.0-with-autoconf-exception GPL-2.0-with-bison-exception GPL-2.0-with-classpath-exception GPL-2.0-with-font-exception GPL-2.0-with-GCC-exception GPL-2.0+ GPL-3.0 GPL-3.0-only GPL-3.0-or-later GPL-3.0-with-autoconf-exception GPL-3.0-with-GCC-exception GPL-3.0+ gSOAP-1.3b HaskellReport HPND IBM-pibs ICU IJG ImageMagick iMatix Imlib2 Info-ZIP Intel Intel-ACPI Interbase-1.0 IPA IPL-1.0 ISC JasPer-2.0 JSON LAL-1.2 LAL-1.3 Latex2e Leptonica LGPL-2.0 LGPL-2.0-only LGPL-2.0-or-later LGPL-2.0+ LGPL-2.1 LGPL-2.1-only LGPL-2.1-or-later LGPL-2.1+ LGPL-3.0 LGPL-3.0-only LGPL-3.0-or-later LGPL-3.0+ LGPLLR Libpng libtiff LiLiQ-P-1.1 LiLiQ-R-1.1 LiLiQ-Rplus-1.1 Linux-OpenIB LPL-1.0 LPL-1.02 LPPL-1.0 LPPL-1.1 LPPL-1.2 LPPL-1.3a LPPL-1.3c MakeIndex MirOS MIT MIT-0 MIT-advertising MIT-CMU MIT-enna MIT-feh MITNFA Motosoto mpich2 MPL-1.0 MPL-1.1 MPL-2.0 MPL-2.0-no-copyleft-exception MS-PL MS-RL MTLL Multics Mup NASA-1.3 Naumen NBPL-1.0 NCSA Net-SNMP NetCDF Newsletr NGPL NLOD-1.0 NLPL Nokia NOSL Noweb NPL-1.0 NPL-1.1 NPOSL-3.0 NRL NTP Nunit OCCT-PL OCLC-2.0 ODbL-1.0 OFL-1.0 OFL-1.1 OGTSL OLDAP-1.1 OLDAP-1.2 OLDAP-1.3 OLDAP-1.4 OLDAP-2.0 OLDAP-2.0.1 OLDAP-2.1 OLDAP-2.2 OLDAP-2.2.1 OLDAP-2.2.2 OLDAP-2.3 OLDAP-2.4 OLDAP-2.5 OLDAP-2.6 OLDAP-2.7 OLDAP-2.8 OML OpenSSL OPL-1.0 OSET-PL-2.1 OSL-1.0 OSL-1.1 OSL-2.0 OSL-2.1 OSL-3.0 PDDL-1.0 PHP-3.0 PHP-3.01 Plexus PostgreSQL psfrag psutils Python-2.0 Qhull QPL-1.0 Rdisc RHeCos-1.1 RPL-1.1 RPL-1.5 RPSL-1.0 RSA-MD RSCPL Ruby SAX-PD Saxpath SCEA Sendmail SGI-B-1.0 SGI-B-1.1 SGI-B-2.0 SimPL-2.0 SISSL SISSL-1.2 Sleepycat SMLNJ SMPPL SNIA Spencer-86 Spencer-94 Spencer-99 SPL-1.0 StandardML-NJ SugarCRM-1.1.3 SWL TCL TCP-wrappers TMate TORQUE-1.1 TOSL Unicode-DFS-2015 Unicode-DFS-2016 Unicode-TOU Unlicense UPL-1.0 Vim VOSTROM VSL-1.0 W3C W3C-19980720 W3C-20150513 Watcom-1.0 Wsuipa WTFPL wxWindows X11 Xerox XFree86-1.1 xinetd Xnet xpp XSkat YPL-1.0 YPL-1.1 Zed Zend-2.0 Zimbra-1.3 Zimbra-1.4 Zlib zlib-acknowledgement ZPL-1.1 ZPL-2.0 ZPL-2.1 } [file_match(filename)] unless valid.include?(license) || license =~ /all rights reserved/i rescue NoMethodError # no license in the metadata [file_match(filename)] end end end