This file is indexed.

/usr/lib/python3/dist-packages/slimit-0.8.1.egg-info/PKG-INFO is in python3-slimit 0.8.1-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
Metadata-Version: 1.1
Name: slimit
Version: 0.8.1
Summary: SlimIt - JavaScript minifier
Home-page: http://slimit.readthedocs.org
Author: Ruslan Spivak
Author-email: ruslan.spivak@gmail.com
License: MIT
Description: ::
        
              _____ _      _____ __  __ _____ _______
             / ____| |    |_   _|  \/  |_   _|__   __|
            | (___ | |      | | | \  / | | |    | |
             \___ \| |      | | | |\/| | | |    | |
             ____) | |____ _| |_| |  | |_| |_   | |
            |_____/|______|_____|_|  |_|_____|  |_|
        
        
        Welcome to SlimIt
        ==================================
        
        `SlimIt` is a JavaScript minifier written in Python.
        It compiles JavaScript into more compact code so that it downloads
        and runs faster.
        
        `SlimIt` also provides a library that includes a JavaScript parser,
        lexer, pretty printer and a tree visitor.
        
        `http://slimit.readthedocs.org/ <http://slimit.readthedocs.org/>`_
        
        Installation
        ------------
        
        ::
        
            $ [sudo] pip install slimit
        
        Or the bleeding edge version from the git master branch:
        
        ::
        
            $ [sudo] pip install git+https://github.com/rspivak/slimit.git#egg=slimit
        
        
        There is also an official DEB package available at
        `http://packages.debian.org/sid/slimit <http://packages.debian.org/sid/slimit>`_
        
        
        Let's minify some code
        ----------------------
        
        From the command line:
        
        ::
        
            $ slimit -h
            Usage: slimit [options] [input file]
        
            If no input file is provided STDIN is used by default.
            Minified JavaScript code is printed to STDOUT.
        
            Options:
              -h, --help            show this help message and exit
              -m, --mangle          mangle names
              -t, --mangle-toplevel
                                    mangle top level scope (defaults to False)
        
            $ cat test.js
            var foo = function( obj ) {
                    for ( var name in obj ) {
                            return false;
                    }
                    return true;
            };
            $
            $ slimit --mangle < test.js
            var foo=function(a){for(var b in a)return false;return true;};
        
        Or using library API:
        
        >>> from slimit import minify
        >>> text = """
        ... var foo = function( obj ) {
        ...         for ( var name in obj ) {
        ...                 return false;
        ...         }
        ...         return true;
        ... };
        ... """
        >>> print minify(text, mangle=True, mangle_toplevel=True)
        var a=function(a){for(var b in a)return false;return true;};
        
        
        Iterate over, modify a JavaScript AST and pretty print it
        ---------------------------------------------------------
        
        >>> from slimit.parser import Parser
        >>> from slimit.visitors import nodevisitor
        >>> from slimit import ast
        >>>
        >>> parser = Parser()
        >>> tree = parser.parse('for(var i=0; i<10; i++) {var x=5+i;}')
        >>> for node in nodevisitor.visit(tree):
        ...     if isinstance(node, ast.Identifier) and node.value == 'i':
        ...         node.value = 'hello'
        ...
        >>> print tree.to_ecma() # print awesome javascript :)
        for (var hello = 0; hello < 10; hello++) {
          var x = 5 + hello;
        }
        >>>
        
        Writing custom node visitor
        ---------------------------
        
        >>> from slimit.parser import Parser
        >>> from slimit.visitors.nodevisitor import ASTVisitor
        >>>
        >>> text = """
        ... var x = {
        ...     "key1": "value1",
        ...     "key2": "value2"
        ... };
        ... """
        >>>
        >>> class MyVisitor(ASTVisitor):
        ...     def visit_Object(self, node):
        ...         """Visit object literal."""
        ...         for prop in node:
        ...             left, right = prop.left, prop.right
        ...             print 'Property key=%s, value=%s' % (left.value, right.value)
        ...             # visit all children in turn
        ...             self.visit(prop)
        ...
        >>>
        >>> parser = Parser()
        >>> tree = parser.parse(text)
        >>> visitor = MyVisitor()
        >>> visitor.visit(tree)
        Property key="key1", value="value1"
        Property key="key2", value="value2"
        
        Using lexer in your project
        ---------------------------
        
        >>> from slimit.lexer import Lexer
        >>> lexer = Lexer()
        >>> lexer.input('a = 1;')
        >>> for token in lexer:
        ...     print token
        ...
        LexToken(ID,'a',1,0)
        LexToken(EQ,'=',1,2)
        LexToken(NUMBER,'1',1,4)
        LexToken(SEMI,';',1,5)
        
        You can get one token at a time using ``token`` method:
        
        >>> lexer.input('a = 1;')
        >>> while True:
        ...     token = lexer.token()
        ...     if not token:
        ...         break
        ...     print token
        ...
        LexToken(ID,'a',1,0)
        LexToken(EQ,'=',1,2)
        LexToken(NUMBER,'1',1,4)
        LexToken(SEMI,';',1,5)
        
        `LexToken` instance has different attributes:
        
        >>> lexer.input('a = 1;')
        >>> token = lexer.token()
        >>> token.type, token.value, token.lineno, token.lexpos
        ('ID', 'a', 1, 0)
        
        Benchmarks
        ----------
        
        **SAM** - JQuery size after minification in bytes (the smaller number the better)
        
        +-------------------------------+------------+------------+------------+
        | Original jQuery 1.6.1 (bytes) | SlimIt SAM | rJSmin SAM | jsmin SAM  |
        +===============================+============+============+============+
        | 234,995                       | 94,290     | 134,215    | 134,819    |
        +-------------------------------+------------+------------+------------+
        
        Roadmap
        -------
        - when doing name mangling handle cases with 'eval' and 'with'
        - foo["bar"] ==> foo.bar
        - consecutive declarations: var a = 10; var b = 20; ==> var a=10,b=20;
        - reduce simple constant expressions if the result takes less space:
          1 +2 * 3 ==> 7
        - IF statement optimizations
        
          1. if (foo) bar(); else baz(); ==> foo?bar():baz();
          2. if (!foo) bar(); else baz(); ==> foo?baz():bar();
          3. if (foo) bar(); ==> foo&&bar();
          4. if (!foo) bar(); ==> foo||bar();
          5. if (foo) return bar(); else return baz(); ==> return foo?bar():baz();
          6. if (foo) return bar(); else something(); ==> {if(foo)return bar();something()}
        
        - remove unreachable code that follows a return, throw, break or
          continue statement, except function/variable declarations
        - parsing speed improvements
        
        Acknowledgments
        ---------------
        - The lexer and parser are built with `PLY <http://www.dabeaz.com/ply/>`_
        - Several test cases and regexes from `jslex <https://bitbucket.org/ned/jslex>`_
        - Some visitor ideas - `pycparser <http://code.google.com/p/pycparser/>`_
        - Many grammar rules are taken from `rkelly <https://github.com/tenderlove/rkelly>`_
        - Name mangling and different optimization ideas - `UglifyJS <https://github.com/mishoo/UglifyJS>`_
        - ASI implementation was inspired by `pyjsparser <http://bitbucket.org/mvantellingen/pyjsparser>`_
        
        License
        -------
        The MIT License (MIT)
        
        Change History
        ==============
        0.8.1 (2013-03-26)
        ------------------
        - Bug fix: https://github.com/rspivak/slimit/pull/45
          Fix syntax error in the output of for statement with some form of expressions
        
        0.8.0 (2013-03-23)
        ------------------
        - Python 3.x support
        - Bug fix: https://github.com/rspivak/slimit/issues/42
          slimit removes parentheses from ternary expression, causes syntax error in jQuery
        - Bug fix: https://github.com/rspivak/slimit/issues/37
          simple identifier in FOR init
        - Bug fix: https://github.com/rspivak/slimit/issues/36
          using $ for mangled function names conflicts with jQuery
        
        0.7.4 (2012-06-5)
        ------------------
        - Bug fix: https://github.com/rspivak/slimit/issues/34
          'class' is reserved keyword now
        
        0.7.3 (2012-05-21)
        ------------------
        - Bug fix (unary op in FOR init): https://github.com/rspivak/slimit/pull/33
        
        0.7.2 (2012-05-17)
        ------------------
        - Added support for get/set properties:
          https://github.com/rspivak/slimit/issues/32
        
        0.7.1 (2012-05-10)
        ------------------
        - Function call support in FOR init section:
          https://github.com/rspivak/slimit/pull/31
        
        0.7 (2012-04-16)
        ----------------
        - Multiline string support: https://github.com/rspivak/slimit/issues/24
        
        0.6.2 (2012-04-07)
        ------------------
        - Bug fix: https://github.com/rspivak/slimit/issues/29
        - Bug fix: https://github.com/rspivak/slimit/issues/28
        
        0.6.1 (2012-03-15)
        ------------------
        - Added command-line option *-t/--mangle-toplevel* to turn on
          global scope name mangling. As of this version it's off by
          default: https://github.com/rspivak/slimit/issues/27
        - Removed dependency on a 'distribute' package
        - Bug fix: https://github.com/rspivak/slimit/issues/26
        - Bug fix: https://github.com/rspivak/slimit/issues/25
        
        0.6 (2012-02-04)
        ----------------
        - Added optimization: foo["bar"] ==> foo.bar
        - Added base class for custom AST node visitors
        - Documentation updates
        - Bug fix: https://github.com/rspivak/slimit/issues/22
        - Bug fix: https://github.com/rspivak/slimit/issues/21
        
        0.5.5 (2011-10-05)
        ------------------
        - Bugfix: https://github.com/rspivak/slimit/issues/7
        
        0.5.4 (2011-10-01)
        ------------------
        - Bugfix: https://github.com/rspivak/slimit/issues/6
          Division with "this" fails
        
        0.5.3 (2011-06-29)
        ------------------
        - Bugfix: https://github.com/rspivak/slimit/issues/5
        
        0.5.2 (2011-06-14)
        ------------------
        - Bugfix: https://github.com/rspivak/slimit/issues/4
        - Bugfix: https://github.com/rspivak/slimit/issues/3
        
        0.5.1 (2011-06-06)
        ------------------
        - Bugfix: https://github.com/rspivak/slimit/issues/2
        
        0.5 (2011-06-06)
        ----------------
        - Added name mangling
        
        0.4 (2011-05-12)
        ----------------
        - Minify more by removing block braces { }
        - More tests
        
        0.3.2 (2011-05-09)
        ------------------
        - More hacks to use pre-generated lex and yacc tables when called from
          the command line
        
        0.3.1 (2011-05-09)
        ------------------
        - Use pre-generated lex and yacc tables when called from the command line
        
        0.3 (2011-05-09)
        ----------------
        - Added minifier
        
        0.2 (2011-05-07)
        ----------------
        - Added a JavaScript parser
        - Added pretty printer
        - Added node visitor
        
        0.1 (2011-05-02)
        ----------------
        - Initial public version. It contains only a JavaScript lexer
        
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Topic :: Software Development :: Compilers
Classifier: Operating System :: Unix