Web-ext y addons.mozilla.org utilizan Linter de complementos para eliminar WebExtensions.
También se puede utilizar como biblioteca y binario independiente.
Puede encontrar más información sobre linter y sus reglas implementadas en nuestra documentación.
Necesitas Node.js para usar el linter de complementos.
Para validar su complemento localmente, instale linter desde npm:
# Install globally so you can use the linter from any directory on
# your machine.
npm install -g addons-linter
Después de la instalación, ejecute el linter y diríjalo a su archivo complementario:
addons-linter my-addon.zip
Alternativamente, puedes apuntarlo a un directorio:
addons-linter my-addon/src/
Addons-linter verificará su complemento y le mostrará errores, advertencias y mensajes amigables para su complemento. Si desea obtener más información sobre las opciones que puede habilitar/deshabilitar para la aplicación de línea de comandos, use la opción --help
:
addons-linter --help
El addons-linter puede eliminar extensiones privilegiadas solo cuando se le pasa la opción --privileged
. Esta opción cambia el comportamiento del linter a:
Puede utilizar linter directamente como biblioteca para integrarlo mejor en su proceso de desarrollo.
import linter from 'addons-linter' ;
const sourceDir = process . cwd ( ) ;
const linter = linter . createInstance ( {
config : {
// This mimics the first command line argument from yargs,
// which should be the directory to the extension.
_ : [ sourceDir ] ,
logLevel : process . env . VERBOSE ? 'debug' : 'fatal' ,
stack : Boolean ( process . env . VERBOSE ) ,
pretty : false ,
warningsAsErrors : false ,
metadata : false ,
output : 'none' ,
boring : false ,
selfHosted : false ,
// Exclude files:
shouldScanFile : ( fileName ) => true ,
} ,
// This prevent the linter to exit the nodejs application
runAsBinary : false ,
} ) ;
linter . run ( )
. then ( ( linterResults ) => ... )
. catch ( ( err ) => console . error ( "addons-linter failure: " , err ) ) ;
linter.output
está compuesto por las siguientes propiedades (las mismas del tipo de informe 'json'):
{
metadata : { ... } ,
summary : {
error , notice , warning ,
} ,
count ,
error : [ {
type : "error" ,
code , message , description ,
column , file , line
} , ... ] ,
warning : [ ... ] ,
notice : [ ... ]
}
Si desea ayudarnos a desarrollar addons-linter, ¡genial! Es bastante fácil comenzar, solo necesita tener Node.js instalado en su máquina.
Si tiene Node.js instalado, aquí está el inicio rápido para instalar sus dependencias de desarrollo y ejecutar las pruebas.
git clone https://github.com/mozilla/addons-linter.git
cd addons-linter
npm install
# Build the project.
npm run build
# Run the test-suite and watch for changes. Use `npm run test-once` to
# just run it once.
npm run test
También puede crear el binario addons-linter para probar sus cambios.
npm run build
# Now run it against your add-on. Please note that for every change
# in the linter itself you'll have to re-build the linter.
bin/addons-linter my-addon.zip
addons-linter requiere Node.js v16 o superior. Eche un vistazo a nuestro archivo .circleci/config.yml
qué versiones de Node.js probamos oficialmente.
Usar nvm es probablemente la forma más sencilla de administrar múltiples versiones de Node en paralelo. Consulte nvm en GitHub para obtener más detalles.
Instale dependencias con npm:
npm install
Guion | Descripción |
---|---|
prueba de NPM | Ejecuta las pruebas (vigila los cambios) |
npm [ejecutar] construir | Construye la biblioteca (utilizada por CI) |
npm ejecuta cobertura de prueba | Ejecuta las pruebas con cobertura (vigila los cambios) |
npm ejecuta la prueba una vez | Ejecuta las pruebas una vez. |
npm ejecuta pelusa | Ejecuta ESLint |
npm ejecuta cobertura de prueba una vez | Ejecuta las pruebas una vez con cobertura. |
npm ejecuta prueba-integración-linter | Ejecuta nuestro conjunto de pruebas de integración |
npm se ejecuta más bonito | Formatee automáticamente todo el código base con Prettier |
npm ejecuta más bonito-ci | Ejecute Prettier y falle si se ha modificado algún código sin formatearlo |
npm ejecuta más bonito-dev | Compara y formatea automáticamente archivos fuente modificados con la rama maestra |
Puede ejecutar npm run build
para construir la biblioteca.
Una vez que cree la biblioteca, puede usar la CLI en bin/addons-linter
.
Ejecute npm test
. Esto buscará cambios en los archivos y volverá a ejecutar el conjunto de pruebas.
Buscamos mantener la cobertura al 100%. Utilice los datos de cobertura en el resultado de la prueba para determinar qué líneas no están cubiertas y asegurarse de que lo estén.
Estamos utilizando Sinon para afirmaciones, simulacros, resguardos y más. Consulte los documentos de Sinon para conocer la API disponible.
Jest se utiliza como ejecutor de pruebas pero también proporciona herramientas útiles. Asegúrese de leer su documentación para obtener más detalles.
Usamos pino para iniciar sesión:
LOG_LEVEL=debug jest test
--log-level [level]
. Usamos Prettier para formatear automáticamente nuestro código JavaScript y detener todos los debates en curso sobre estilos. Como desarrollador, debes ejecutarlo (con npm run prettier-dev
) antes de enviar una solicitud de extracción.
El proceso de localización es muy similar a cómo lo hacemos para la interfaz de complementos: las configuraciones regionales siempre se actualizan en la rama master
, cualquier PR que cambie o introduzca nuevas cadenas localizadas debe fusionarse primero en master
.
Para actualizar las configuraciones regionales (cuando se agregan nuevas cadenas localizadas al código base), ejecute el siguiente script desde la rama master
. Este script automatiza todos los pasos descritos en los documentos de la interfaz de complementos, sin ningún paso de confirmación.
./scripts/run-l10n-extraction
En pocas palabras, la forma en que funciona linter es tomar un paquete complementario, extraer los metadatos del formato xpi (zip) y luego procesar los archivos que encuentra a través de varios escáneres de contenido.
Dependemos en gran medida de ESLint para el análisis de JavaScript, cheerio para el análisis de HTML y fluent.js para el análisis de paquetes de idiomas.
Cada tipo de archivo tiene un escáner. Por ejemplo: los archivos JavaScript utilizan JavaScriptScanner
. Cada escáner analiza los archivos relevantes y pasa cada archivo a través de un analizador que luego los transfiere a un conjunto de reglas que buscan cosas específicas.
Las reglas se exportan mediante una única función en un solo archivo. Una regla puede tener funciones privadas que utiliza internamente, pero el código de regla no debe depender de otro archivo de reglas y cada archivo de reglas debe exportar una regla.
A cada función de regla se le pasan datos del escáner para llevar a cabo las comprobaciones específicas para esa regla; devuelve una lista de objetos que luego se convierten en objetos de mensaje y se pasan al recopilador.
El recopilador es un almacén en memoria para todos los objetos de mensajes de validación "recopilados" a medida que se procesa el contenido del paquete.
Cada mensaje tiene un código que es también su clave. Tiene un mensaje que es un breve resumen de lo que representa el mensaje y una descripción que explica con más detalle por qué se registró ese mensaje. El tipo de mensaje se establece a medida que se agregan mensajes para que, si es necesario, el mismo mensaje pueda ser un error o una advertencia, por ejemplo.
Por último, cuando se complete el procesamiento, linter generará los datos recopilados como texto o JSON.
Implementamos en npm automáticamente usando Circle CI. Para lanzar una nueva versión, incremente la versión en package.json
y cree un PR. Asegúrese de que su número de versión se ajuste al formato semver, por ejemplo: 0.2.1
.
Después de fusionar el PR, cree una nueva versión con el mismo nombre de etiqueta que su nueva versión. Una vez que pase la compilación, se implementará. ¡Magia!
A partir de noviembre de 2021, el dispensario se fusionó con este proyecto y hay una CLI disponible ejecutando ./scripts/dispensary
.
Este es el proceso (manual) para actualizar las bibliotecas del "dispensario":
src/dispensary/libraries.json
src/dispensary/libraries.json
. Tenga en cuenta que algunas bibliotecas, como reaccionar, admiten varias versiones, por lo que debemos verificar cada "rama".src/dispensary/libraries.json
npm run update-hashes
src/dispensary/libraries.json
y src/dispensary/hashes.txt
Nota: hashes.txt
se incrustará en el paquete addons-linter.
El comando scripts/update-dispensary-doc
actualiza la lista de páginas de lanzamiento anterior según el archivo src/dispensary/libraries.json
.
Este código fuente está disponible bajo la Licencia Pública de Mozilla 2.0.
Además, partes de los archivos de esquema se originaron a partir del código fuente de Chromium:
Copyright (c) 2012 Los autores de Chromium. Reservados todos los derechos. El uso de este código fuente se rige por una licencia estilo BSD que se puede encontrar en el archivo LICENSE-CHROMIUM.
No se le otorgan derechos ni licencias sobre las marcas comerciales de la Fundación Mozilla ni de ninguna parte, incluidos, entre otros, el nombre o el logotipo de Firefox.
Para obtener más información, consulte: https://www.mozilla.org/foundation/licensing.html