Get A Top Level List Of Selectors From A CSS File In Rust
This is still a work in progress
This is initial code to work on parsing CSS styles to combine the ones that come out of syntect. Note that it only works at the top level of the CSS file (i.e. it doesn't recurse into it)
```cargo
=
```
use ;
use Component;
use fs;
lightningcss
Output:
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".code"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".comment"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.documentation"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".string"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".string.regexp"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.character.escape"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.numeric"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".variable"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".variable.function"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".variable.language"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.asdfasdfasdf .meta.import"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.control.import"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.control.import.from"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.other.import"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.control.at-rule.include"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.control.at-rule.import"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.operator.comparison"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.operator.assignment"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.operator.arithmetic"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".storage"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".storage.modifier"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.control.class"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.name"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.name.class"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.name.type.class"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.other.inherited-class"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.other.attribute-name"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support.type"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support.class"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.name.function"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.variable"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.language"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.preprocessor"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.name.section"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support.function.construct"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.other.new"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.character"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.other"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.name.tag"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.tag.html"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.tag.begin"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.tag.end"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support.function"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.separator.continuation"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".storage.type"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support.type.exception"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.other.special-method"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".invalid"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".string.quoted.double"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".string.quoted.single"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.string"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.brace.square"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.section.brackets"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.brace.round"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.brace.curly"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.section"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.section.block"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.parameters"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.section.group"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support.constant.color"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".invalid.deprecated.color.w3c-non-standard-color-name.scss"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.selector.css"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.name.tag.css"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.name.tag.scss"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.control.html.elements .source.less"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.control.untitled .source.sass"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.other.attribute-name.class"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.other.attribute-name.id"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.other.attribute-name.pseudo-element"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.other.attribute-name.tag.pseudo-element"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.other.attribute-name.pseudo-class"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.other.attribute-name.tag.pseudo-class"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.tag.other.html .text.html.basic"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.tag.any.html .text.html.basic"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.tag.block.any .text.html.basic"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.tag.inline.any .text.html.basic"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.tag.structure.any.html .text.html.basic"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".source.js.embedded.html .text.html.basic"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.separator.key-value.html"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.other.attribute-name.html .text.html.basic"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.other.attribute-name .meta.tag.xml"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.other.special-method.ruby"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".variable.other.constant.ruby"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.other.symbol.ruby"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.other.special-method.ruby"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support.function.construct.php .meta.array"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.name.function.preprocessor.c"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.preprocessor.c.include"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.preprocessor.macro.c"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".string.quoted.other.lt-gt.include.c .meta.preprocessor.c.include"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.string.begin.c .meta.preprocessor.c.include"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.string.end.c .meta.preprocessor.c.include"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".other.package.exclude"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".other.remove"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".other.add"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.section.group.tex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.arguments.begin.latex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.arguments.end.latex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.arguments.latex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.group.braces.tex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".string.other.math.tex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".variable.parameter.function.latex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.constant.math.tex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.other.math.tex .text.tex.latex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.other.general.math.tex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.other.general.math.tex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.character.math.tex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".string.other.math.tex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.string.begin.tex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.string.end.tex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.control.label.latex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.other.general.math.tex .text.tex.latex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".variable.parameter.definition.label.latex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support.function.be.latex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support.function.section.latex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support.function.general.tex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".keyword.control.ref.latex"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".storage.type.class.python"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".storage.type.function.python"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".storage.modifier.global.python"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support.type.exception.python"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.scope.for-in-loop.shell"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".variable.other.loop.shell"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.scope.case-block.shell"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.scope.case-body.shell"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.logical-expression.shell"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".storage.modifier.c"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".support.function.perl"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.diff"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.diff.header"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.diff.range"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".markup.deleted"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".markup.changed"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".markup.inserted"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".markup.heading"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".punctuation.definition.heading.markdown"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".markup.quote"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".markup.italic"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".markup.bold"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".markup.underline.link.markdown"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.other.reference.link.markdown .meta.link.reference"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.other.reference.link.markdown"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".meta.dummy.line-break .meta.paragraph.markdown"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".sublimelinter.notes"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".sublimelinter.outline.illegal"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".sublimelinter.underline.illegal"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".sublimelinter.outline.warning"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".sublimelinter.underline.warning"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".sublimelinter.outline.violation"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".sublimelinter.underline.violation"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".sublimelinter.mark.warning"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".sublimelinter.mark.error"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".sublimelinter.gutter-mark"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".brackethighlighter.all"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".entity.name.filename.find-in-files"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".constant.numeric.line-number.find-in-files"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".markup.deleted.git_gutter"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".markup.inserted.git_gutter"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".markup.changed.git_gutter"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".variable.other.readwrite.js"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".variable.other.object.js"
[/Users/alan/.cargo/target/55/19854259915251/_active_nvim_run:44:11] t = ".variable.other.constant.js"
Output:
Notes
-
Started out trying to use the crate
parcel_css
but it didn't work. It looks like that was an earlier version oflightningcss
. Withparcel_css
I kept getting errors like:error[E0599]: no function or associated item named `from_vec2` found for struct `Selector` in the current scope
-- end of line --
References
syntect - rust syntax highlighter