zmoazeni / csscss

A CSS redundancy analyzer that analyzes redundancy.
http://zmoazeni.github.io/csscss/
MIT License
2.92k stars 151 forks source link

undefined method `downcase' #87

Closed jackmcpickle closed 10 years ago

jackmcpickle commented 10 years ago

Not sure why I'm getting this.

Same issue with ruby-1.9.3-p547 and ruby-2.1.2

$ csscss Sites/kio/css/master.css

/Users/user/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/types.rb:11:in `from_parser': undefined method `downcase' for 1027:Fixnum (NoMethodError)
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/parser/css.rb:118:in `block in <class:Transformer>'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:195:in `instance_eval'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:195:in `call_on_match'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:213:in `block in transform_elt'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:210:in `each'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:210:in `transform_elt'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:163:in `apply'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `block in recurse_array'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `map'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `recurse_array'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:168:in `apply'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:225:in `block in recurse_hash'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `each'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `inject'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `recurse_hash'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:166:in `apply'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:225:in `block in recurse_hash'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `each'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `inject'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `recurse_hash'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:166:in `apply'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `block in recurse_array'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `map'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `recurse_array'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:168:in `apply'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:225:in `block in recurse_hash'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `each'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `inject'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `recurse_hash'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:166:in `apply'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/parser/css.rb:8:in `parse'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/redundancy_analyzer.rb:14:in `redundancies'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/cli.rb:40:in `execute'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/cli.rb:17:in `run'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/cli.rb:200:in `run'
  from /Users/user/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/bin/csscss:4:in `<top (required)>'
  from /Users/user/.rvm/gems/ruby-2.1.2/bin/csscss:23:in `load'
  from /Users/user/.rvm/gems/ruby-2.1.2/bin/csscss:23:in `<main>'
  from /Users/user/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `eval'
  from /Users/user/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `<main>'
riddla commented 10 years ago

Same happens to me (using csscss 1.3.2 on ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin13.0.0]):

vendor-bundler/ruby/1.9.1/gems/csscss-1.3.2/lib/csscss/types.rb:11:in `from_parser': undefined method `downcase' for 3817:Fixnum (NoMethodError)
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/csscss-1.3.2/lib/csscss/parser/css.rb:118:in `block in <class:Transformer>'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:195:in `instance_eval'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:195:in `call_on_match'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:213:in `block in transform_elt'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:210:in `each'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:210:in `transform_elt'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:171:in `apply'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `block in recurse_array'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `map'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `recurse_array'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:168:in `apply'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:225:in `block in recurse_hash'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `each'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `inject'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `recurse_hash'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:166:in `apply'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:225:in `block in recurse_hash'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `each'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `inject'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `recurse_hash'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:166:in `apply'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `block in recurse_array'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `map'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `recurse_array'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:168:in `apply'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:225:in `block in recurse_hash'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `each'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `inject'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `recurse_hash'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/parslet-1.6.1/lib/parslet/transform.rb:166:in `apply'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/csscss-1.3.2/lib/csscss/parser/css.rb:8:in `parse'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/csscss-1.3.2/lib/csscss/redundancy_analyzer.rb:14:in `redundancies'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/csscss-1.3.2/lib/csscss/cli.rb:40:in `execute'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/csscss-1.3.2/lib/csscss/cli.rb:17:in `run'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/csscss-1.3.2/lib/csscss/cli.rb:200:in `run'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/gems/csscss-1.3.2/bin/csscss:4:in `<top (required)>'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/bin/csscss:23:in `load'
    from /Volumes/Macintosh_HD/vrose/Sites/bst_wlpd_frontend/vendor-bundler/ruby/1.9.1/bin/csscss:23:in `<main>'
zmoazeni commented 10 years ago

Can either of you paste me the smallest snippet that causes this failure?

jackmcpickle commented 10 years ago

Tried the most basic css file i could find. File viewable here: http://www.kangarooislandbc.com/css/kibc-style.css

output below. $ csscss Sites/kibookingcentre/public/css/kibc-style.css

/Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/types.rb:11:in `from_parser': undefined method `downcase' for 15:Fixnum (NoMethodError)
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/parser/css.rb:118:in `block in <class:Transformer>'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:195:in `instance_eval'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:195:in `call_on_match'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:213:in `block in transform_elt'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:210:in `each'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:210:in `transform_elt'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:163:in `apply'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `block in recurse_array'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `map'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `recurse_array'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:168:in `apply'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:225:in `block in recurse_hash'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `each'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `inject'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `recurse_hash'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:166:in `apply'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:225:in `block in recurse_hash'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `each'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `inject'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `recurse_hash'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:166:in `apply'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `block in recurse_array'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `map'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:232:in `recurse_array'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:168:in `apply'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:225:in `block in recurse_hash'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `each'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `inject'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:224:in `recurse_hash'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/parslet-1.6.1/lib/parslet/transform.rb:166:in `apply'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/parser/css.rb:8:in `parse'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/redundancy_analyzer.rb:14:in `redundancies'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/cli.rb:40:in `execute'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/cli.rb:17:in `run'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/lib/csscss/cli.rb:200:in `run'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/gems/csscss-1.3.2/bin/csscss:4:in `<top (required)>'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/bin/csscss:23:in `load'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/bin/csscss:23:in `<main>'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `eval'
    from /Users/jack.mcnicol/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `<main>'

Same output for ruby 1.9

zmoazeni commented 10 years ago

Interesting. That fails for 1.9 and not 2.1. I'm pasting the css here in case that link goes away.

body{
  margin:0;
  padding:0;
}

h3 {
font-size: 16px;
font-family: Arial, Helvetica, sans-serif;
color: #009933;
font-weight: bold;
}

.container {
  margin: 0 auto;
  width: 997px;
}

.text-center {
  text-align: center;
}

.right {
  float: right;
}

.left {
  float: left;
}

.main {
  background-color: white;
  border-radius: 10px;
  margin-left: 210px;
  padding: 5px 20px 10px;
}

.side {
  width: 190px
  margin-right: 20px;
}

.clearfix {
  clear: both;
}
Anahkiasen commented 10 years ago

Having the same issue here, Ruby 2.1.1

davegreenwp commented 10 years ago

Exactly the same issue parsing some fairly bog standard Foundation 4 SCSS. Running Ruby 2.0.0.

zmoazeni commented 10 years ago

Interesting, the snippet above passes for me in v2.1.1 but fails with that error on v2.1.2. I'll try and carve out some time this weekend to release a fix.

zmoazeni commented 10 years ago

Fixed in e838aafa8aceb608bc48865363f7f94b49be4da8 and released with v1.3.3.