add emmet-style completions
parent
3b50a445a3
commit
32dca9259b
|
@ -0,0 +1,799 @@
|
||||||
|
{
|
||||||
|
"name": "emmet-helper",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"requires": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@emmetio/extract-abbreviation": {
|
||||||
|
"version": "0.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/@emmetio/extract-abbreviation/-/extract-abbreviation-0.1.6.tgz",
|
||||||
|
"integrity": "sha512-Ce3xE2JvTSEbASFbRbA1gAIcMcZWdS2yUYRaQbeM0nbOzaZrUYfa3ePtcriYRZOZmr+CkKA+zbjhvTpIOAYVcw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@nodelib/fs.scandir": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@nodelib/fs.stat": "2.0.3",
|
||||||
|
"run-parallel": "^1.1.9"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@nodelib/fs.stat": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@nodelib/fs.walk": {
|
||||||
|
"version": "1.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
|
||||||
|
"integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@nodelib/fs.scandir": "2.1.3",
|
||||||
|
"fastq": "^1.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@types/events": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@types/glob": {
|
||||||
|
"version": "7.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
|
||||||
|
"integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/events": "*",
|
||||||
|
"@types/minimatch": "*",
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@types/minimatch": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
|
||||||
|
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@types/node": {
|
||||||
|
"version": "13.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.1.tgz",
|
||||||
|
"integrity": "sha512-eWQGP3qtxwL8FGneRrC5DwrJLGN4/dH1clNTuLfN81HCrxVtxRjygDTUoZJ5ASlDEeo0ppYFQjQIlXhtXpOn6g==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@zeit/ncc": {
|
||||||
|
"version": "0.22.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@zeit/ncc/-/ncc-0.22.1.tgz",
|
||||||
|
"integrity": "sha512-Qq3bMuonkcnV/96jhy9SQYdh39NXHxNMJ1O31ZFzWG9n52fR2DLtgrNzhj/ahlEjnBziMLGVWDbaS9sf03/fEw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"array-find-index": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"array-union": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"arrify": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"balanced-match": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"brace-expansion": {
|
||||||
|
"version": "1.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||||
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"balanced-match": "^1.0.0",
|
||||||
|
"concat-map": "0.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"braces": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"fill-range": "^7.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"camelcase": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
|
||||||
|
"integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"camelcase-keys": {
|
||||||
|
"version": "4.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
|
||||||
|
"integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"camelcase": "^4.1.0",
|
||||||
|
"map-obj": "^2.0.0",
|
||||||
|
"quick-lru": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"concat-map": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"currently-unhandled": {
|
||||||
|
"version": "0.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
|
||||||
|
"integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"array-find-index": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"decamelize": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"decamelize-keys": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"decamelize": "^1.1.0",
|
||||||
|
"map-obj": "^1.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"map-obj": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dir-glob": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"path-type": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error-ex": {
|
||||||
|
"version": "1.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
||||||
|
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-arrayish": "^0.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"escape-string-regexp": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"fast-glob": {
|
||||||
|
"version": "3.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz",
|
||||||
|
"integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@nodelib/fs.stat": "^2.0.2",
|
||||||
|
"@nodelib/fs.walk": "^1.2.3",
|
||||||
|
"glob-parent": "^5.1.0",
|
||||||
|
"merge2": "^1.3.0",
|
||||||
|
"micromatch": "^4.0.2",
|
||||||
|
"picomatch": "^2.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fastq": {
|
||||||
|
"version": "1.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz",
|
||||||
|
"integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"reusify": "^1.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fill-range": {
|
||||||
|
"version": "7.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||||
|
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"to-regex-range": "^5.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"find-up": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
|
||||||
|
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"locate-path": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fs.realpath": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"glob": {
|
||||||
|
"version": "7.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
||||||
|
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"fs.realpath": "^1.0.0",
|
||||||
|
"inflight": "^1.0.4",
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "^3.0.4",
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"path-is-absolute": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"glob-parent": {
|
||||||
|
"version": "5.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
|
||||||
|
"integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-glob": "^4.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"globby": {
|
||||||
|
"version": "10.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz",
|
||||||
|
"integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/glob": "^7.1.1",
|
||||||
|
"array-union": "^2.1.0",
|
||||||
|
"dir-glob": "^3.0.1",
|
||||||
|
"fast-glob": "^3.0.3",
|
||||||
|
"glob": "^7.1.3",
|
||||||
|
"ignore": "^5.1.1",
|
||||||
|
"merge2": "^1.2.3",
|
||||||
|
"slash": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"graceful-fs": {
|
||||||
|
"version": "4.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||||
|
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"hosted-git-info": {
|
||||||
|
"version": "2.8.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
|
||||||
|
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"ignore": {
|
||||||
|
"version": "5.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
|
||||||
|
"integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"imurmurhash": {
|
||||||
|
"version": "0.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
|
||||||
|
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"indent-string": {
|
||||||
|
"version": "3.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
|
||||||
|
"integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"inflight": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inherits": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-arrayish": {
|
||||||
|
"version": "0.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
||||||
|
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-extglob": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
||||||
|
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-glob": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-extglob": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-number": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-plain-obj": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-typedarray": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"json-parse-better-errors": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"jsonc-parser": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-hk/69oAeaIzchq/v3lS50PXuzn5O2ynldopMC+SWBql7J2WtdptfB9dy8Y7+Og5rPkTCpn83zTiO8FMcqlXJ/g==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"load-json-file": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
|
||||||
|
"integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"graceful-fs": "^4.1.2",
|
||||||
|
"parse-json": "^4.0.0",
|
||||||
|
"pify": "^3.0.0",
|
||||||
|
"strip-bom": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"locate-path": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-locate": "^2.0.0",
|
||||||
|
"path-exists": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"loud-rejection": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
|
||||||
|
"integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"currently-unhandled": "^0.4.1",
|
||||||
|
"signal-exit": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"map-obj": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"meow": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"camelcase-keys": "^4.0.0",
|
||||||
|
"decamelize-keys": "^1.0.0",
|
||||||
|
"loud-rejection": "^1.0.0",
|
||||||
|
"minimist-options": "^3.0.1",
|
||||||
|
"normalize-package-data": "^2.3.4",
|
||||||
|
"read-pkg-up": "^3.0.0",
|
||||||
|
"redent": "^2.0.0",
|
||||||
|
"trim-newlines": "^2.0.0",
|
||||||
|
"yargs-parser": "^10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"merge2": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"micromatch": {
|
||||||
|
"version": "4.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
|
||||||
|
"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"braces": "^3.0.1",
|
||||||
|
"picomatch": "^2.0.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimatch": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"brace-expansion": "^1.1.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimist-options": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"arrify": "^1.0.1",
|
||||||
|
"is-plain-obj": "^1.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"arrify": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"normalize-package-data": {
|
||||||
|
"version": "2.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
|
||||||
|
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"hosted-git-info": "^2.1.4",
|
||||||
|
"resolve": "^1.10.0",
|
||||||
|
"semver": "2 || 3 || 4 || 5",
|
||||||
|
"validate-npm-package-license": "^3.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"normalize-path": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"once": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-limit": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-try": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-locate": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-limit": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-try": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"parse-json": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
|
||||||
|
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"error-ex": "^1.3.1",
|
||||||
|
"json-parse-better-errors": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path-exists": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"path-is-absolute": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"path-parse": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"path-type": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"picomatch": {
|
||||||
|
"version": "2.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
|
||||||
|
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"pify": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"quick-lru": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"read-pkg": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"load-json-file": "^4.0.0",
|
||||||
|
"normalize-package-data": "^2.3.2",
|
||||||
|
"path-type": "^3.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"path-type": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"pify": "^3.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"read-pkg-up": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"find-up": "^2.0.0",
|
||||||
|
"read-pkg": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"redent": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"indent-string": "^3.0.0",
|
||||||
|
"strip-indent": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"replace-in-files-cli": {
|
||||||
|
"version": "0.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/replace-in-files-cli/-/replace-in-files-cli-0.3.1.tgz",
|
||||||
|
"integrity": "sha512-3D/aZ2OBsFGn8wE8x1CPxryA6QpNCRZrGIjHUZqgKKSMwcVZVcqYuXTbhmzBsjnYXXCZDIYKfHpealx+5m6y0g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"arrify": "^2.0.1",
|
||||||
|
"escape-string-regexp": "^2.0.0",
|
||||||
|
"globby": "^10.0.1",
|
||||||
|
"meow": "^5.0.0",
|
||||||
|
"normalize-path": "^3.0.0",
|
||||||
|
"write-file-atomic": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"resolve": {
|
||||||
|
"version": "1.15.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
|
||||||
|
"integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"path-parse": "^1.0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"reusify": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"run-parallel": {
|
||||||
|
"version": "1.1.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
|
||||||
|
"integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"version": "5.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||||
|
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"signal-exit": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
|
||||||
|
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"slash": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"spdx-correct": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"spdx-expression-parse": "^3.0.0",
|
||||||
|
"spdx-license-ids": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spdx-exceptions": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"spdx-expression-parse": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"spdx-exceptions": "^2.1.0",
|
||||||
|
"spdx-license-ids": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spdx-license-ids": {
|
||||||
|
"version": "3.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
|
||||||
|
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"strip-bom": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"strip-indent": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"to-regex-range": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-number": "^7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"trim-newlines": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"typedarray-to-buffer": {
|
||||||
|
"version": "3.1.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
|
||||||
|
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-typedarray": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"validate-npm-package-license": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"spdx-correct": "^3.0.0",
|
||||||
|
"spdx-expression-parse": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vscode-emmet-helper": {
|
||||||
|
"version": "1.2.17",
|
||||||
|
"resolved": "https://registry.npmjs.org/vscode-emmet-helper/-/vscode-emmet-helper-1.2.17.tgz",
|
||||||
|
"integrity": "sha512-X4pzcrJ8dE7M3ArFuySF5fgipKDd/EauXkiJwtjBIVRWpVNq0tF9+lNCyuC7iDUwP3Oq7ow/TGssD3GdG96Jow==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@emmetio/extract-abbreviation": "0.1.6",
|
||||||
|
"jsonc-parser": "^1.0.0",
|
||||||
|
"vscode-languageserver-types": "^3.6.0-next.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vscode-languageserver-types": {
|
||||||
|
"version": "3.15.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz",
|
||||||
|
"integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"wrappy": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"write-file-atomic": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
|
||||||
|
"integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"imurmurhash": "^0.1.4",
|
||||||
|
"is-typedarray": "^1.0.0",
|
||||||
|
"signal-exit": "^3.0.2",
|
||||||
|
"typedarray-to-buffer": "^3.1.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"yargs-parser": {
|
||||||
|
"version": "10.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
|
||||||
|
"integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"camelcase": "^4.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"name": "emmet-helper",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"scripts": {
|
||||||
|
"build": "ncc build src/index.js -o dist --minify && replace-in-files --string='e(\"./format\")' --string='e(\"./edit\")' --replacement='undefined' dist/index.js"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@zeit/ncc": "^0.22.1",
|
||||||
|
"replace-in-files-cli": "^0.3.1",
|
||||||
|
"vscode-emmet-helper": "^1.2.17"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
export * from 'vscode-emmet-helper'
|
|
@ -21,6 +21,7 @@
|
||||||
"@zeit/ncc": "^0.22.0",
|
"@zeit/ncc": "^0.22.0",
|
||||||
"css.escape": "^1.5.1",
|
"css.escape": "^1.5.1",
|
||||||
"dlv": "^1.1.3",
|
"dlv": "^1.1.3",
|
||||||
|
"emmet-helper": "0.0.1",
|
||||||
"glob-exec": "^0.1.1",
|
"glob-exec": "^0.1.1",
|
||||||
"tailwindcss-class-names": "0.0.1",
|
"tailwindcss-class-names": "0.0.1",
|
||||||
"typescript": "^3.8.3",
|
"typescript": "^3.8.3",
|
||||||
|
|
|
@ -15,6 +15,10 @@ import { isCssContext } from '../util/css'
|
||||||
import { findLast, findJsxStrings, arrFindLast } from '../util/find'
|
import { findLast, findJsxStrings, arrFindLast } from '../util/find'
|
||||||
import { stringifyConfigValue, stringifyCss } from '../util/stringify'
|
import { stringifyConfigValue, stringifyCss } from '../util/stringify'
|
||||||
import isObject from '../util/isObject'
|
import isObject from '../util/isObject'
|
||||||
|
import * as emmetHelper from 'emmet-helper'
|
||||||
|
import { isValidLocationForEmmetAbbreviation } from '../util/isValidLocationForEmmetAbbreviation'
|
||||||
|
import { getDocumentSettings } from '../util/getDocumentSettings'
|
||||||
|
import { isJsContext } from '../util/js'
|
||||||
|
|
||||||
function completionsFromClassList(
|
function completionsFromClassList(
|
||||||
state: State,
|
state: State,
|
||||||
|
@ -174,7 +178,10 @@ function provideClassNameCompletions(
|
||||||
): CompletionList {
|
): CompletionList {
|
||||||
let doc = state.editor.documents.get(params.textDocument.uri)
|
let doc = state.editor.documents.get(params.textDocument.uri)
|
||||||
|
|
||||||
if (isHtmlContext(doc, params.position)) {
|
if (
|
||||||
|
isHtmlContext(doc, params.position) ||
|
||||||
|
isJsContext(doc, params.position)
|
||||||
|
) {
|
||||||
return provideClassAttributeCompletions(state, params)
|
return provideClassAttributeCompletions(state, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -490,19 +497,88 @@ function provideCssDirectiveCompletions(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function provideCompletions(
|
async function provideEmmetCompletions(
|
||||||
|
state: State,
|
||||||
|
{ position, textDocument }: CompletionParams
|
||||||
|
): Promise<CompletionList> {
|
||||||
|
let settings = await getDocumentSettings(state, textDocument.uri)
|
||||||
|
if (settings.emmetCompletions !== true) return null
|
||||||
|
|
||||||
|
let doc = state.editor.documents.get(textDocument.uri)
|
||||||
|
|
||||||
|
const syntax = isHtmlContext(doc, position)
|
||||||
|
? 'html'
|
||||||
|
: isJsContext(doc, position)
|
||||||
|
? 'jsx'
|
||||||
|
: null
|
||||||
|
|
||||||
|
if (syntax === null) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
const extractAbbreviationResults = emmetHelper.extractAbbreviation(
|
||||||
|
doc,
|
||||||
|
position,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
if (
|
||||||
|
!extractAbbreviationResults ||
|
||||||
|
!emmetHelper.isAbbreviationValid(
|
||||||
|
syntax,
|
||||||
|
extractAbbreviationResults.abbreviation
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
!isValidLocationForEmmetAbbreviation(
|
||||||
|
doc,
|
||||||
|
extractAbbreviationResults.abbreviationRange
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
const emmetItems = emmetHelper.doComplete(doc, position, syntax, {})
|
||||||
|
|
||||||
|
if (!emmetItems || !emmetItems.items || emmetItems.items.length !== 1) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/microsoft/vscode/issues/86941
|
||||||
|
if (emmetItems.items[0].label === 'widows: ;') {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
const parts = emmetItems.items[0].label.split('.')
|
||||||
|
if (parts.length < 2) return null
|
||||||
|
|
||||||
|
return completionsFromClassList(state, parts[parts.length - 1], {
|
||||||
|
start: {
|
||||||
|
line: position.line,
|
||||||
|
character: position.character - parts[parts.length - 1].length,
|
||||||
|
},
|
||||||
|
end: position,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function provideCompletions(
|
||||||
state: State,
|
state: State,
|
||||||
params: CompletionParams
|
params: CompletionParams
|
||||||
): CompletionList {
|
): Promise<CompletionList> {
|
||||||
if (state === null) return { items: [], isIncomplete: false }
|
if (state === null) return { items: [], isIncomplete: false }
|
||||||
|
|
||||||
return (
|
const result =
|
||||||
provideClassNameCompletions(state, params) ||
|
provideClassNameCompletions(state, params) ||
|
||||||
provideCssHelperCompletions(state, params) ||
|
provideCssHelperCompletions(state, params) ||
|
||||||
provideCssDirectiveCompletions(state, params) ||
|
provideCssDirectiveCompletions(state, params) ||
|
||||||
provideScreenDirectiveCompletions(state, params) ||
|
provideScreenDirectiveCompletions(state, params) ||
|
||||||
provideVariantsDirectiveCompletions(state, params)
|
provideVariantsDirectiveCompletions(state, params)
|
||||||
)
|
|
||||||
|
if (result) return result
|
||||||
|
|
||||||
|
return provideEmmetCompletions(state, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function resolveCompletionItem(
|
export function resolveCompletionItem(
|
||||||
|
|
|
@ -8,6 +8,7 @@ import { stringifyCss, stringifyConfigValue } from '../util/stringify'
|
||||||
const dlv = require('dlv')
|
const dlv = require('dlv')
|
||||||
import { isHtmlContext } from '../util/html'
|
import { isHtmlContext } from '../util/html'
|
||||||
import { isCssContext } from '../util/css'
|
import { isCssContext } from '../util/css'
|
||||||
|
import { isJsContext } from '../util/js'
|
||||||
|
|
||||||
export function provideHover(
|
export function provideHover(
|
||||||
state: State,
|
state: State,
|
||||||
|
@ -78,7 +79,7 @@ function provideClassNameHover(
|
||||||
): Hover {
|
): Hover {
|
||||||
let doc = state.editor.documents.get(textDocument.uri)
|
let doc = state.editor.documents.get(textDocument.uri)
|
||||||
|
|
||||||
if (!isHtmlContext(doc, position)) return null
|
if (!isHtmlContext(doc, position) && !isJsContext(doc, position)) return null
|
||||||
|
|
||||||
let hovered = getClassNameAtPosition(doc, position)
|
let hovered = getClassNameAtPosition(doc, position)
|
||||||
if (!hovered) return null
|
if (!hovered) return null
|
||||||
|
|
|
@ -15,25 +15,32 @@ import {
|
||||||
CompletionList,
|
CompletionList,
|
||||||
Hover,
|
Hover,
|
||||||
TextDocumentPositionParams,
|
TextDocumentPositionParams,
|
||||||
|
DidChangeConfigurationNotification,
|
||||||
} from 'vscode-languageserver'
|
} from 'vscode-languageserver'
|
||||||
import getTailwindState from 'tailwindcss-class-names'
|
import getTailwindState from 'tailwindcss-class-names'
|
||||||
import { State } from './util/state'
|
import { State, Settings } from './util/state'
|
||||||
import {
|
import {
|
||||||
provideCompletions,
|
provideCompletions,
|
||||||
resolveCompletionItem,
|
resolveCompletionItem,
|
||||||
} from './providers/completionProvider'
|
} from './providers/completionProvider'
|
||||||
import { provideHover } from './providers/hoverProvider'
|
import { provideHover } from './providers/hoverProvider'
|
||||||
import { URI } from 'vscode-uri'
|
import { URI } from 'vscode-uri'
|
||||||
|
import { getDocumentSettings } from './util/getDocumentSettings'
|
||||||
|
|
||||||
let state: State = null
|
let state: State = null
|
||||||
let connection = createConnection(ProposedFeatures.all)
|
let connection = createConnection(ProposedFeatures.all)
|
||||||
let documents = new TextDocuments()
|
let documents = new TextDocuments()
|
||||||
let workspaceFolder: string | null
|
let workspaceFolder: string | null
|
||||||
|
|
||||||
|
const defaultSettings: Settings = { emmetCompletions: false }
|
||||||
|
let globalSettings: Settings = defaultSettings
|
||||||
|
let documentSettings: Map<string, Settings> = new Map()
|
||||||
|
|
||||||
documents.onDidOpen((event) => {
|
documents.onDidOpen((event) => {
|
||||||
connection.console.log(
|
getDocumentSettings(state, event.document.uri)
|
||||||
`[Server(${process.pid}) ${workspaceFolder}] Document opened: ${event.document.uri}`
|
})
|
||||||
)
|
documents.onDidClose((event) => {
|
||||||
|
documentSettings.delete(event.document.uri)
|
||||||
})
|
})
|
||||||
documents.listen(connection)
|
documents.listen(connection)
|
||||||
|
|
||||||
|
@ -52,7 +59,16 @@ connection.onInitialize(
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
state.editor = { connection, documents }
|
|
||||||
|
const capabilities = params.capabilities
|
||||||
|
|
||||||
|
state.editor = {
|
||||||
|
connection,
|
||||||
|
documents,
|
||||||
|
documentSettings,
|
||||||
|
globalSettings,
|
||||||
|
capabilities: { configuration: capabilities.workspace && !!capabilities.workspace.configuration },
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
capabilities: {
|
capabilities: {
|
||||||
|
@ -73,6 +89,13 @@ connection.onInitialize(
|
||||||
|
|
||||||
connection.onInitialized &&
|
connection.onInitialized &&
|
||||||
connection.onInitialized(async () => {
|
connection.onInitialized(async () => {
|
||||||
|
if (state.editor.capabilities.configuration) {
|
||||||
|
connection.client.register(
|
||||||
|
DidChangeConfigurationNotification.type,
|
||||||
|
undefined
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
connection.sendNotification('tailwindcss/configUpdated', [
|
connection.sendNotification('tailwindcss/configUpdated', [
|
||||||
state.dependencies[0],
|
state.dependencies[0],
|
||||||
state.config,
|
state.config,
|
||||||
|
@ -80,8 +103,23 @@ connection.onInitialized &&
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
connection.onDidChangeConfiguration((change) => {
|
||||||
|
if (state.editor.capabilities.configuration) {
|
||||||
|
// Reset all cached document settings
|
||||||
|
state.editor.documentSettings.clear()
|
||||||
|
} else {
|
||||||
|
state.editor.globalSettings = <Settings>(
|
||||||
|
(change.settings.tailwindCSS || defaultSettings)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
state.editor.documents
|
||||||
|
.all()
|
||||||
|
.forEach((doc) => getDocumentSettings(state, doc.uri))
|
||||||
|
})
|
||||||
|
|
||||||
connection.onCompletion(
|
connection.onCompletion(
|
||||||
(params: CompletionParams): CompletionList => {
|
(params: CompletionParams): Promise<CompletionList> => {
|
||||||
return provideCompletions(state, params)
|
return provideCompletions(state, params)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { TextDocument, Position } from 'vscode-languageserver'
|
import { TextDocument, Position } from 'vscode-languageserver'
|
||||||
import { isMixedDoc, isInsideTag } from './html'
|
import { isInsideTag, isVueDoc, isSvelteDoc } from './html'
|
||||||
|
|
||||||
export const CSS_LANGUAGES = [
|
export const CSS_LANGUAGES = [
|
||||||
'css',
|
'css',
|
||||||
|
@ -19,7 +19,7 @@ export function isCssContext(doc: TextDocument, position: Position): boolean {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isMixedDoc(doc)) {
|
if (isVueDoc(doc) || isSvelteDoc(doc)) {
|
||||||
let str = doc.getText({
|
let str = doc.getText({
|
||||||
start: { line: 0, character: 0 },
|
start: { line: 0, character: 0 },
|
||||||
end: position,
|
end: position,
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
import { State, Settings } from './state'
|
||||||
|
|
||||||
|
export async function getDocumentSettings(
|
||||||
|
state: State,
|
||||||
|
resource: string
|
||||||
|
): Promise<Settings> {
|
||||||
|
if (!state.editor.capabilities.configuration) {
|
||||||
|
return Promise.resolve(state.editor.globalSettings)
|
||||||
|
}
|
||||||
|
let result = state.editor.documentSettings.get(resource)
|
||||||
|
if (!result) {
|
||||||
|
result = await state.editor.connection.workspace.getConfiguration({
|
||||||
|
scopeUri: resource,
|
||||||
|
section: 'tailwindCSS',
|
||||||
|
})
|
||||||
|
state.editor.documentSettings.set(resource, result)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
|
@ -1,5 +1,4 @@
|
||||||
import { TextDocument, Position } from 'vscode-languageserver'
|
import { TextDocument, Position } from 'vscode-languageserver'
|
||||||
import { JS_LANGUAGES } from './js'
|
|
||||||
|
|
||||||
export const HTML_LANGUAGES = [
|
export const HTML_LANGUAGES = [
|
||||||
'blade',
|
'blade',
|
||||||
|
@ -20,43 +19,36 @@ export const HTML_LANGUAGES = [
|
||||||
'razor',
|
'razor',
|
||||||
'slim',
|
'slim',
|
||||||
'twig',
|
'twig',
|
||||||
...JS_LANGUAGES,
|
|
||||||
]
|
]
|
||||||
|
|
||||||
function isHtmlDoc(doc: TextDocument): boolean {
|
export function isHtmlDoc(doc: TextDocument): boolean {
|
||||||
return HTML_LANGUAGES.indexOf(doc.languageId) !== -1
|
return HTML_LANGUAGES.indexOf(doc.languageId) !== -1
|
||||||
}
|
}
|
||||||
|
|
||||||
function isVueDoc(doc: TextDocument): boolean {
|
export function isVueDoc(doc: TextDocument): boolean {
|
||||||
return doc.languageId === 'vue'
|
return doc.languageId === 'vue'
|
||||||
}
|
}
|
||||||
|
|
||||||
function isSvelteDoc(doc: TextDocument): boolean {
|
export function isSvelteDoc(doc: TextDocument): boolean {
|
||||||
return doc.languageId === 'svelte'
|
return doc.languageId === 'svelte'
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isMixedDoc(doc: TextDocument): boolean {
|
|
||||||
return isVueDoc(doc) || isSvelteDoc(doc)
|
|
||||||
}
|
|
||||||
|
|
||||||
export function isHtmlContext(doc: TextDocument, position: Position): boolean {
|
export function isHtmlContext(doc: TextDocument, position: Position): boolean {
|
||||||
if (isHtmlDoc(doc)) {
|
let str = doc.getText({
|
||||||
|
start: { line: 0, character: 0 },
|
||||||
|
end: position,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (isHtmlDoc(doc) && !isInsideTag(str, ['script', 'style'])) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isMixedDoc(doc)) {
|
if (isVueDoc(doc)) {
|
||||||
let str = doc.getText({
|
return isInsideTag(str, ['template'])
|
||||||
start: { line: 0, character: 0 },
|
}
|
||||||
end: position,
|
|
||||||
})
|
|
||||||
|
|
||||||
if (isVueDoc(doc)) {
|
if (isSvelteDoc(doc)) {
|
||||||
return isInsideTag(str, ['template', 'script'])
|
return !isInsideTag(str, ['script', 'style'])
|
||||||
}
|
|
||||||
|
|
||||||
if (isSvelteDoc(doc)) {
|
|
||||||
return !isInsideTag(str, ['style'])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
import { TextDocument, Range, Position } from 'vscode-languageserver'
|
||||||
|
|
||||||
|
export function isValidLocationForEmmetAbbreviation(
|
||||||
|
document: TextDocument,
|
||||||
|
abbreviationRange: Range
|
||||||
|
): boolean {
|
||||||
|
const startAngle = '<'
|
||||||
|
const endAngle = '>'
|
||||||
|
const escape = '\\'
|
||||||
|
const question = '?'
|
||||||
|
let start: Position = { line: 0, character: 0 }
|
||||||
|
|
||||||
|
let textToBackTrack = document.getText({
|
||||||
|
start: {
|
||||||
|
line: start.line,
|
||||||
|
character: start.character,
|
||||||
|
},
|
||||||
|
end: {
|
||||||
|
line: abbreviationRange.start.line,
|
||||||
|
character: abbreviationRange.start.character,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
// Worse case scenario is when cursor is inside a big chunk of text which needs to backtracked
|
||||||
|
// Backtrack only 500 offsets to ensure we dont waste time doing this
|
||||||
|
if (textToBackTrack.length > 500) {
|
||||||
|
textToBackTrack = textToBackTrack.substr(textToBackTrack.length - 500)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!textToBackTrack.trim()) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
let valid = true
|
||||||
|
let foundSpace = false // If < is found before finding whitespace, then its valid abbreviation. E.g.: <div|
|
||||||
|
let i = textToBackTrack.length - 1
|
||||||
|
if (textToBackTrack[i] === startAngle) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
while (i >= 0) {
|
||||||
|
const char = textToBackTrack[i]
|
||||||
|
i--
|
||||||
|
if (!foundSpace && /\s/.test(char)) {
|
||||||
|
foundSpace = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if (char === question && textToBackTrack[i] === startAngle) {
|
||||||
|
i--
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// Fix for https://github.com/Microsoft/vscode/issues/55411
|
||||||
|
// A space is not a valid character right after < in a tag name.
|
||||||
|
if (/\s/.test(char) && textToBackTrack[i] === startAngle) {
|
||||||
|
i--
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if (char !== startAngle && char !== endAngle) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if (i >= 0 && textToBackTrack[i] === escape) {
|
||||||
|
i--
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if (char === endAngle) {
|
||||||
|
if (i >= 0 && textToBackTrack[i] === '=') {
|
||||||
|
continue // False alarm of cases like =>
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (char === startAngle) {
|
||||||
|
valid = !foundSpace
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return valid
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
import { TextDocument } from 'vscode-languageserver'
|
import { TextDocument, Position } from 'vscode-languageserver'
|
||||||
|
import { isHtmlDoc, isInsideTag, isVueDoc, isSvelteDoc } from './html'
|
||||||
|
|
||||||
export const JS_LANGUAGES = [
|
export const JS_LANGUAGES = [
|
||||||
'javascript',
|
'javascript',
|
||||||
|
@ -10,3 +11,24 @@ export const JS_LANGUAGES = [
|
||||||
export function isJsDoc(doc: TextDocument): boolean {
|
export function isJsDoc(doc: TextDocument): boolean {
|
||||||
return JS_LANGUAGES.indexOf(doc.languageId) !== -1
|
return JS_LANGUAGES.indexOf(doc.languageId) !== -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isJsContext(doc: TextDocument, position: Position): boolean {
|
||||||
|
if (isJsDoc(doc)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
let str = doc.getText({
|
||||||
|
start: { line: 0, character: 0 },
|
||||||
|
end: position,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (isHtmlDoc(doc) && isInsideTag(str, ['script'])) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isVueDoc(doc) || isSvelteDoc(doc)) {
|
||||||
|
return isInsideTag(str, ['script'])
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -16,6 +16,15 @@ export type ClassNames = {
|
||||||
export type EditorState = {
|
export type EditorState = {
|
||||||
connection: Connection
|
connection: Connection
|
||||||
documents: TextDocuments
|
documents: TextDocuments
|
||||||
|
documentSettings: Map<string, Settings>
|
||||||
|
globalSettings: Settings
|
||||||
|
capabilities: {
|
||||||
|
configuration: boolean
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export type Settings = {
|
||||||
|
emmetCompletions: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export type State = null | {
|
export type State = null | {
|
||||||
|
|
|
@ -34,7 +34,17 @@
|
||||||
"source.svelte"
|
"source.svelte"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"configuration": {
|
||||||
|
"title": "Tailwind CSS IntelliSense",
|
||||||
|
"properties": {
|
||||||
|
"tailwindCSS.emmetCompletions": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false,
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"vscode:prepublish": "npm run build",
|
"vscode:prepublish": "npm run build",
|
||||||
|
|
Loading…
Reference in New Issue