eslint-plugin-mdx
Version:
ESLint Plugin for MDX
2 lines (1 loc) • 7.86 kB
JavaScript
import{__assign as e,__spreadArray as r}from"tslib";import{version as t}from"eslint/package.json";import{isJsxNode as n,arrayify as s,DEFAULT_EXTENSIONS as o,MARKDOWN_EXTENSIONS as i,last as a}from"eslint-mdx";import c from"eslint/lib/rules/no-unused-expressions";import l from"path";import u from"vfile";import{cosmiconfigSync as m}from"cosmiconfig";import f from"remark-mdx";import p from"remark-parse";import d from"remark-stringify";import g from"unified";var v,x={parser:"eslint-mdx",plugins:["mdx"],processor:"mdx/remark"},h={parserOptions:{ecmaFeatures:{impliedStrict:!0}},rules:{"eol-last":"off","no-undef":"off","no-unused-expressions":"off","no-unused-vars":"off","padded-blocks":"off",strict:"off","unicode-bom":"off"}},y=function(e,r){return void 0===r&&(r={}),(Array.isArray(e)?e:Object.keys(e)).reduce((function(e,r){var t;return Object.assign(e,((t={})[r]=!1,t))}),r)};try{v=require("rebass")}catch(e){v=["Box","Flex","Text","Heading","Link","Button","Image","Card"]}var k=e(e({},x),{globals:y(v,{React:!1}),rules:{"lines-between-class-members":0,"react/jsx-no-undef":[2,{allowGlobals:!0}],"react/react-in-jsx-scope":0}}),b=+t.split(".").slice(0,2).join("."),j=e(e({},x),{rules:{"mdx/no-jsx-html-comments":2,"mdx/no-unused-expressions":2,"mdx/remark":1,"no-unused-expressions":0}});if(b>=6.4){var S=[{files:"*.mdx",extends:"plugin:mdx/overrides"},{files:"**/*.{md,mdx}/**",extends:"plugin:mdx/code-blocks"}];try{require.resolve("prettier"),require.resolve("eslint-plugin-prettier"),S.push({files:"*.md",rules:{"prettier/prettier":[2,{parser:"markdown"}]}})}catch(e){}Object.assign(j,{overrides:S})}var w,C={base:x,"code-blocks":h,codeBlocks:h,overrides:k,recommended:j},I={meta:{type:"problem",docs:{description:"Forbid invalid html style comments in jsx block",category:"SyntaxError",recommended:!0},messages:{jsxHtmlComments:"html style comments are invalid in jsx: {{ origin }}"},fixable:"code"},create:function(e){return{ExpressionStatement:function(r){var t=e.parserServices.JSXElementsWithHTMLComments;if(n(r.expression)&&"Program"===r.parent.type&&t&&0!==t.length){var s=t.shift();if(!s.data.inline)for(var o=function(t,n,s){e.report({messageId:"jsxHtmlComments",data:{origin:s},loc:n,node:r,fix:function(e){return e.replaceTextRange([n.start.offset,n.end.offset],t)}})},i=0,a=s.data.comments;i<a.length;i++){var c=a[i];o(c.fixed,c.loc,c.origin)}}}}}},E=e(e({},c),{create:function(e){var r=c.create(e);return{ExpressionStatement:function(e){n(e.expression)&&"Program"===e.parent.type||r.ExpressionStatement(e)}}}}),L=function(e,r,t){t&&/^\.\.?([/\\]|$)/.test(e)&&(e=l.resolve(l.dirname(t),e)),r=r.endsWith("-")?r:r+"-";for(var n,s=0,o=[e,e.startsWith("@")?e.replace("/","/"+r):r+e];s<o.length;s++){var i=o[s];try{return require(i)}catch(e){n||(n=e)}}throw n},O=g().use(p).freeze(),q=function(e,t){var n;w||(w=m("remark",{packageProp:"remarkConfig"}).search);try{n=w(e)}catch(r){if("ENOTDIR"!==r.code||!/\d+_?\.[a-z]+$/.test(e))throw r;try{n=w(l.dirname(e))}catch(e){throw r}}var o=(null==n?void 0:n.config)||{},i=o.plugins,a=void 0===i?[]:i,c=o.settings;try{a.push([require.resolve("remark-lint-file-extension"),!1])}catch(e){}var u=O().use({settings:c}).use(d);return t&&u.use(f),a.reduce((function(e,t){var o=s(t),i=o[0],a=o.slice(1);return e.use.apply(e,r(["string"==typeof i?L(i,"remark",n.filepath):i],a))}),u).freeze()},T={meta:{type:"layout",docs:{description:"Linter integration with remark plugins",category:"Stylistic Issues",recommended:!0},fixable:"code"},create:function(r){var t=r.getFilename(),n=l.extname(t),s=r.getSourceCode(),a=r.parserOptions,c=o.concat(a.extensions||[]).includes(n),m=i.concat(a.markdownExtensions||[]).includes(n);return{Program:function(n){if(c||m){var o=s.getText(n),i=q(t,c),a=u({path:t,contents:o});try{i.processSync(a)}catch(e){a.messages.includes(e)||(a.message(e).fatal=!0)}for(var l=function(t,s,a,c,l,u){var m=c?2:null==c?0:1;if(!m)return"continue";var f={reason:s,source:t,ruleId:a,severity:m};r.report({message:JSON.stringify(f),loc:{start:e(e({},l),{column:l.column-1}),end:e(e({},u),{column:u.column-1})},node:n,fix:function(e){if(null==l.offset)return null;var r=[l.offset,null==u.offset?l.offset+1:u.offset],t=o.slice.apply(o,r),n=i.processSync(t).toString();return e.replaceTextRange(r,t.endsWith("\n")?n:n.slice(0,-1))}})},f=0,p=a.messages;f<p.length;f++){var d=p[f],g=d.source,v=d.reason,x=d.ruleId,h=d.fatal,y=d.location;l(g,v,x,h,y.start,y.end)}}}}}},M={"no-jsx-html-comments":I,"no-unused-expressions":E,noJsxHtmlComments:I,noUnusedExpressions:E,remark:T},B=new Set(["eol-last","unicode-bom"]),H={};function A(e,r,t){if(r[e.type]&&r[e.type](e,t),void 0!==e.children)for(var n=e,s=0,o=n.children;s<o.length;s++){A(o[s],r,n)}}function F(e){var r="\x3c!--",t="--\x3e";if(e.slice(0,r.length)!==r||e.slice(-t.length)!==t)return"";var n=e.slice(r.length,-t.length);return/^(eslint\b|global\s)/u.test(n.trim())?n:""}var J=/^[>\s]*/u;function N(e){return e.position.start.offset-e.position.start.column+1}function P(e,r){return J.exec(e.slice(N(r)))[0]}function R(e,r,t){for(var n=N(r),s=e.slice(n,r.position.end.offset).split("\n"),o=P(e,r).length,i=[{js:0,md:0}],a=t.reduce((function(e,r){return e+r.length+1}),0),c=n+s[0].length+1,l=0;l+1<s.length;l++){var u=s[l+1],m=J.exec(u)[0].length,f=Math.min(o,m);i.push({js:a,md:c+f-a}),c+=u.length+1,a+=u.length-f+1}return i}var W={javascript:"js",javascriptreact:"jsx",typescript:"ts",typescriptreact:"tsx",markdown:"md",mdown:"md",mkdn:"md"};function z(e){return e&&!B.has(e.ruleId)}var $={preprocess:function(t,n){var s=O.parse(t),o=[];return H[n]=o,A(s,{code:function(r,n){var s=[];if(r.lang){for(var i=n.children.indexOf(r)-1,a=n.children[i];a&&"html"===a.type;){var c=F(a.value);if(!c)break;if("eslint-skip"===c.trim())return;s.unshift("/*"+c+"*/"),i--,a=n.children[i]}o.push(e(e({},r),{baseIndentText:P(t,r),comments:s,rangeMap:R(t,r,s)}))}}}),o.map((function(e,t){return{filename:t+"."+(n=e.lang,s=a(n.split(/\s/u)[0].split(".")).toLowerCase(),W[s]||s),text:r(r([],e.comments),[e.value,""]).join("\n")};var n,s}))},postprocess:function(r,t){var n,s=H[t]||[];return(n=[]).concat.apply(n,r.map((function(r,t){var n=s[t];if(!n)return r;var o=function(r){var t=r.comments.reduce((function(e,r){return e+r.split("\n").length}),0),n=r.position.start.line;return function(s){var o=s.line-t;if(o<1)return null;var i={line:o+n,column:s.column+r.position.indent[o-1]-1};Number.isInteger(s.endLine)&&(i.endLine=s.endLine-t+n);var a={};return s.fix&&(a.fix={range:s.fix.range.map((function(e){for(var t=1;t<r.rangeMap.length&&r.rangeMap[t].js<=e;)t++;return e+r.rangeMap[t-1].md})),text:s.fix.text.replace(/\n/gu,"\n"+r.baseIndentText)}),e(e(e({},s),i),a)}}(n);return r.map(o).filter(z)})))},supportsAutofix:!0},D={},G=Object.keys(require.cache).find((function(e){return/([/\\])eslint\1lib(?:\1linter){2}\.js$/.test(e)}));if(!G)throw new Error("Could not find ESLint Linter in require cache");var U=require(G).Linter,X=U.prototype.verify;U.prototype.verify=function(e,r,t){var n=r&&("function"==typeof r.extractConfig?r.extractConfig(void 0===t||"string"==typeof t?t:t.filename):r).settings||{};return D.lintCodeBlocks=!0===n["mdx/code-blocks"],X.call(this,e,r,t)};var _={supportsAutofix:!0,preprocess:function(e,t){return D.lintCodeBlocks?r(r([],$.preprocess(e,t)),[e]):[e]},postprocess:function(r,t){return $.postprocess(r,t).map((function(r){var t=r.message,n=r.ruleId,s=r.severity;if("mdx/remark"!==n)return r;var o=JSON.parse(t),i=o.source,a=o.ruleId,c=o.reason,l=o.severity;return e(e({},r),{ruleId:i+"-"+a,message:c,severity:Math.max(s,l)})}))}},K={markdown:$,remark:_};export{x as base,h as codeBlocks,C as configs,y as getGlobals,q as getRemarkProcessor,I as noJsxHtmlComments,E as noUnusedExpressions,k as overrides,D as processorOptions,K as processors,j as recommended,T as remark,O as remarkProcessor,L as requirePkg,M as rules};