Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

postcss-styl

Package Overview
Dependencies
Maintainers
2
Versions
43
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

postcss-styl - npm Package Compare versions

Comparing version 0.10.0 to 0.11.0

lib/parser/util.js

51

lib/parser/parse-raw-after.js
"use strict"
const { tokensToRaws, isSkipToken } = require("./token-utils")
const { findLastIndex, findIndex } = require("./util")
module.exports = (sourceCode, end, opt = {}) => {
const options = Object.assign({ blockCommentIsRaw: true }, opt)
const options = Object.assign({ blockCommentAsRaw: true }, opt)
const cursor = sourceCode.createBackwardTokenCursor(end)

@@ -18,3 +19,3 @@

const afterTokens =
let afterTokens =
token &&

@@ -26,2 +27,26 @@ token.value !== ";" &&

: after
if (options.bodyStartIndex != null || options.maxIndent != null) {
// Process for
// | .a
// | // comment
// | // comment
let maxIndent = options.maxIndent
if (maxIndent == null) {
const firstTokenIndex = findIndex(
sourceCode.text,
(c) => c.trim(),
options.bodyStartIndex,
)
if (firstTokenIndex >= 0) {
// Comments beyond the indentation of the first token are child node comments.
maxIndent = sourceCode.getIndentFromIndex(firstTokenIndex)
}
}
if (maxIndent != null) {
afterTokens = processComment(sourceCode, afterTokens, maxIndent)
}
}
startIndex = afterTokens.length ? afterTokens[0].range[0] : startIndex

@@ -56,3 +81,3 @@

/**
* Chechs if raw target token
* Checks if raw target token
* @param {*} token token

@@ -63,3 +88,3 @@ * @param {*} options options

if (isSkipToken(token)) {
if (options.blockCommentIsRaw) {
if (options.blockCommentAsRaw) {
return true

@@ -73,2 +98,20 @@ }

/**
* Process for comments
* Comments beyond the indentation of the first token are child node comments.
*/
function processComment(sourceCode, tokens, maxIndent) {
const nonTargetCommentIndex = findLastIndex(tokens, (token) => {
if (token.type !== "inline-comment" && token.type !== "comment") {
return false
}
const tokenIndent = sourceCode.getIndentFromIndex(token.range[0])
return maxIndent < tokenIndent
})
if (nonTargetCommentIndex >= 0) {
return tokens.slice(nonTargetCommentIndex + 1)
}
return tokens
}
/**
* Get the first-line comments

@@ -75,0 +118,0 @@ */

@@ -10,2 +10,3 @@ "use strict"

const { getName } = require("./stylus-nodes")
const { findLastIndex } = require("./util")

@@ -129,2 +130,19 @@ /**

/**
* Calc indent for given index
* @param {string} text text
* @param {number} index find start index
* @returns {number} indent
*/
function calcIndent(text, index) {
const match = findLastIndex(text, (c) => c === "\n", index)
const lineStartIndex = match > -1 ? match + 1 : 0
for (let i = lineStartIndex; i < text.length; i++) {
if (text[i].trim()) {
return i - lineStartIndex
}
}
return text.length - lineStartIndex
}
class LocationMap {

@@ -354,2 +372,6 @@ constructor() {

getIndentFromIndex(index) {
return calcIndent(this.text, index)
}
_storeHackLocations(original, hacked) {

@@ -356,0 +378,0 @@ const locationMap = (this.locationMap = new LocationMap())

6

lib/parser/token-utils.js

@@ -69,3 +69,3 @@ "use strict"

/**
* Chechs if skip target token
* Checks if skip target token
* @param {*} token token

@@ -81,3 +81,3 @@ */

/**
* Chechs if whitespace token
* Checks if whitespace token
* @param {*} token token

@@ -90,3 +90,3 @@ */

/**
* Chechs if end of line token
* Checks if end of line token
* @param {*} token token

@@ -93,0 +93,0 @@ */

@@ -23,6 +23,3 @@ "use strict"

}
if (
!node.nodes ||
!node.nodes.some((n) => n.type !== "comment" || !n.raws.inline)
) {
if (!node.nodes || !node.nodes.length) {
// empty

@@ -111,5 +108,19 @@ return false

function isNeedAdjustIndent(node) {
if (node.postfix || node.type === "comment") {
if (node.postfix) {
return false
}
if (node.type === "comment") {
const { parent } = node
if (!parent || !parent.nodes) {
return true
}
if (
isPythonic(parent) &&
parent.nodes.every((sibling) => sibling.type === "comment")
) {
// All comments
return parent.nodes[parent.nodes.length - 1] === node // The last comment requires indentation.
}
return false
}
let { parent } = node

@@ -141,3 +152,3 @@ if (parent && parent.postfix) {

*/
function adjustIndent(indent, targetBefore) {
function adjustIndentBefore(indent, targetBefore) {
const targetBeforeLines = toLines(targetBefore)

@@ -155,3 +166,3 @@

/**
* Remove commnets on selector
* Remove comments on selector
* @param {string} selector

@@ -176,4 +187,4 @@ * @returns {string} removed comments

.map((line, index) => {
const trimed = line.trim()
if (!trimed) {
const trimmed = line.trim()
if (!trimmed) {
// ignore blank line

@@ -185,3 +196,3 @@ return line

// If it is not pythonic, adjust the indentation other than comma delimiter.
if (/^,/u.test(trimed)) {
if (/^,/u.test(trimmed)) {
return line

@@ -197,6 +208,38 @@ }

}
if (index === 0) {
// first line
return line.replace(/^\s*/u, "")
}
return line.replace(/^\s*/u, indent)
})
.join("")
}
return index === 0
? line.replace(/^\s*/u, "")
: line.replace(/^\s*/u, indent)
/**
* Adjust params indent
* @param {node} _node
* @param {string} selectors
* @param {string} indent
* @returns {string} indented selectors
*/
function adjustParamsIndent(_node, selectors, indent) {
const lines = toLines(selectors)
return lines
.map((line, index) => {
const trimmed = line.trim()
if (!trimmed) {
// ignore blank line
return line
}
if (index === 0) {
// first line
return line.replace(/^\s*/u, "")
}
if (index + 1 < lines.length && line.startsWith(indent)) {
// not last line and have the required indentation.
return line
}
return line.replace(/^\s*/u, indent)
})

@@ -209,6 +252,11 @@ .join("")

const value = this.rawValuePlain(node, prop)
if (prop === "selector" && /\r\n|\r|\n/u.test(value)) {
if (
(prop === "selector" || prop === "params") &&
/\r\n|\r|\n/u.test(value)
) {
const indent = this.getIndent(node)
return adjustSelectorsIndent(node, value, indent)
return prop === "selector"
? adjustSelectorsIndent(node, value, indent)
: adjustParamsIndent(node, value, indent)
}

@@ -223,3 +271,3 @@ return value

if (isNeedAdjustIndent(node)) {
return adjustIndent(this.getIndent(node), raw)
return adjustIndentBefore(this.getIndent(node), raw)
}

@@ -232,6 +280,28 @@ }

block(node, start) {
if (!isPythonic(node) && !node.postfix) {
super.block(node, start)
if (isPythonic(node) || node.postfix) {
this._pythonicBlock(node, start)
return
}
if (
node.nodes &&
node.last &&
node.last.type === "comment" &&
node.last.raws.inline
) {
let after = this.raw(node, "after")
if (!after.includes("\n")) {
after += `\n${this.getIndent(node)}`
let between = this.raw(node, "between", "beforeOpen")
this.builder(`${start + between}{`, node, "start")
this.body(node)
this.builder(after)
this.builder("}", node, "end")
return
}
}
super.block(node, start)
}
_pythonicBlock(node, start) {
const between = !node.postfix

@@ -409,5 +479,6 @@ ? this.raw(node, "between", "beforeOpen")

if (isNeedAdjustIndent(node)) {
const firstSibling = parentTarget.nodes.find(
(n) => n.type !== "comment",
)
const firstSibling =
parentTarget.nodes.find((n) => n.type !== "comment") ||
// all comments
parentTarget.nodes[0]
if (firstSibling !== childTarget) {

@@ -414,0 +485,0 @@ return this.getIndent(firstSibling)

{
"name": "postcss-styl",
"version": "0.10.0",
"version": "0.11.0",
"description": "PostCSS parser plugin for converting Stylus syntax to PostCSS AST.",

@@ -5,0 +5,0 @@ "main": "lib/index.js",

@@ -26,3 +26,3 @@ # postcss-styl

You can use this [PostCSS] plugin to apply [Stylus] syntax to [stylelint].
**You can use it more easily by using it with [stylelint-plugin-stylus](https://github.com/stylus/stylelint-stylus).**
**You can use it more easily by using it with [stylelint-plugin-stylus](https://github.com/stylus/stylelint-plugin-stylus).**

@@ -29,0 +29,0 @@ For example, this [PostCSS] plugin is used as follows:

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc