diff --git a/src/rule-unused-fields.js b/src/rule-unused-fields.js index 71b0cc0..e228e88 100644 --- a/src/rule-unused-fields.js +++ b/src/rule-unused-fields.js @@ -11,6 +11,19 @@ const utils = require('./utils'); const getGraphQLAST = utils.getGraphQLAST; +const DEFAULT_OPTIONS = { + ignoreFields: [] +}; + +function getOptions(optionValue) { + if (optionValue) { + return { + ignoreFields: optionValue.ignoreFields || DEFAULT_OPTIONS.ignoreFields + }; + } + return DEFAULT_OPTIONS; +} + function getGraphQLFieldNames(graphQLAst) { const fieldNames = {}; @@ -82,6 +95,8 @@ function isPageInfoField(field) { } function rule(context) { + const options = getOptions(context.options[0]); + let currentMethod = []; let foundMemberAccesses = {}; let templateLiterals = []; @@ -138,7 +153,8 @@ function rule(context) { !isPageInfoField(field) && // Do not warn for unused __typename which can be a workaround // when only interested in existence of an object. - field !== '__typename' + field !== '__typename' && + !options.ignoreFields.includes(field) ) { context.report({ node: templateLiteral, diff --git a/test/unused-fields.js b/test/unused-fields.js index 23207f8..ba51b74 100644 --- a/test/unused-fields.js +++ b/test/unused-fields.js @@ -83,7 +83,13 @@ ruleTester.run('unused-fields', rules['unused-fields'], { } } \`; - ` + `, + { + code: ` + graphql\`fragment Test on Page { id }\`; + `, + options: [{ignoreFields: ['id']}] + } ], invalid: [ { @@ -109,6 +115,13 @@ ruleTester.run('unused-fields', rules['unused-fields'], { `, errors: [unusedFieldsWarning('unused1'), unusedFieldsWarning('unused2')] }, + { + code: ` + graphql\`fragment Test on Page { unused1, unused2 }\`; + `, + options: [{ignoreFields: ['unused1']}], + errors: [unusedFieldsWarning('unused2')] + }, { code: ` const getByPath = require('getByPath');