Nevermind. It happened that puppet 3 didn't introduce any change that 
breaks puppet-cleaner, except for an order of a requirement. puppet-cleaner 
0.2.0 is out with puppet 3 support.

El martes, 23 de abril de 2013 23:57:32 UTC-5, Gerardo Santana Gómez 
Garrido escribió:
>
> Hi Henrik!
>
> thanks for your detailed response. I'm aware of the issues you presented 
> and agree with you.
>
> That's the point of my previous message to this mailing list, actually. I 
> believe that we can have our cake and eat it too, with the help of puppet 
> developers.
>
> It is not difficult - as the monkey patches prove - to tweak the parser to 
> preserve white spaces. Why not then modify it in a way that it gets more 
> extensible in a sensible way? Then puppet-lint, Geppetto, puppet-cleaner 
> and anything else that anyone can come up with will be able to extend it 
> without monkey patching. No more worries about the new internal changes in 
> the lexer any more.
>
> I'm volunteering to make it happen, but obviously puppet developers' will 
> is essential for the success of this modification.
>
> P. S. as for the style guide and options to apply parts of them for the 
> user, I wonder if you have seen the options available in puppet-cleaner. 
> I'll take a look at Geppetto as well, thanks for the pointer!
>
> El lunes, 22 de abril de 2013 21:23:09 UTC-5, henrik lindberg escribió:
>>
>> This is quite difficult. The puppet lexer (with quite a lot of changes 
>> in the 3.x code stream, and with even more changes in the 3.2 --parser 
>> future lexer/parser which will the standard in puppet 4) is designed 
>> primarily for runtime lexing/parsing. Specifically it: 
>> - stops on several types of lexing errors 
>> - does not preserve whitepsace / linebreaks / formatting 
>>
>> This means that it is quite difficult to reuse it as a library function 
>> for transformation and formatting. Before the new lexer/parser, the 
>> lexer was also intimately tied to a specific puppet version. This means 
>> that you need a specific version of the lexer to lex the puppet 
>> manifests for that particular version of the language. Also not very 
>> good for a more general purpose lexer / transformer. 
>>
>> When doing cleaning/formatting there are issues that can not really be 
>> resolved at the lexical level - you really do need a parser in order to 
>> apply reasoning based on what the tokens mean (semantics) or may mean 
>> (if ambiguous / in error / not supported in a particular version). 
>>
>> The same issues (as for the lexer) applies to the puppet parser (this 
>> will get easier with the new parser --parser future in 3.2) but it is 
>> still focusing on parsing with the intent of evaluation. There is no 
>> reverse serialization (from AST to source text) or pretty printing, or 
>> "cleaner". Although starting with --parser future this would be possible 
>> (still lots and lots of work) to implement. 
>>
>> As the lexer/parser in puppet evolves it will not maintain backwards 
>> compatibility at the token / parser level - these are considered 
>> internal APIs. (i.e. Different and increasingly more complicated monkey 
>> patches will be required as support for features like heredoc and puppet 
>> templates are added - these are mostly about lexing). 
>>
>> There are other initiatives; puppet-lint, and Geppetto (IDE) that also 
>> deal with lexing/parsing/validation/formatting/cleanup. They both have 
>> their own puppet DSL lexers / parsers. Geppetto builds a model of the 
>> source and keeps track of all the source text, cross references between 
>> all the files as well, it does validation, pretty printing, provides 
>> quick fixes / clean up in an extensible way. Some of the functionality 
>> is also available from the command line, and some via jenkins, and 
>> travis-ci plugins. It handles Puppet 2.7, 3.x, PE (and in the next 
>> release 3.2 and the future parser as well (as soon as 3.2 is released by 
>> puppetlabs)). 
>>
>> Lastly, the style guide and reality are not always the same thing :) and 
>> people developing puppet manifests have their own set of styles and 
>> rules they want to follow - one size most certainly does not fit all 
>> here. Quite a lot of flexibility and options are required to 
>> cleanup/format the manifests as well as providing options to fix/resolve 
>> certain problems (hard or stylistic) in different ways that require user 
>> interaction. 
>>
>> Why not join forces with puppet-lint or Geppetto? As the principal 
>> developer on Geppetto I know I could sure use help :) 
>>
>> Best Regards 
>> - henrik 
>>
>> On 2013-22-04 20:50, Gerardo Santana G�mez Garrido wrote: 
>> > Hi there, 
>> > 
>> > I've recently made public puppet-cleaner, a tool that makes a manifest 
>> > comply with a subset of the style guide: 
>> > 
>> > https://github..com/santana/puppet-cleaner 
>> > 
>> > It monkey patches puppet 2.7.11, enabling COMMENT, MLCOMMENT and RETURN 
>> > tokens and adding the BLANK token: 
>> > 
>> > 
>> https://github.com/santana/puppet-cleaner/blob/master/lib/puppet-cleaner.rb 
>> > 
>> > Then it loops over the stream of tokens and apply a set of workers that 
>> > transform the input. It's not difficult to extend it to add more 
>> workers. 
>> > 
>> > I've received reports that puppet-cleaner doesn't work with Puppet 3.x, 
>> > which is expected, since I'm tapping puppet internals in a non-reusable 
>> way. 
>> > 
>> > Then I wondered, what if we can work together to make it easy to tap 
>> > puppet's lexer? Then puppet-cleaner and any other tool that anyone can 
>> > imagine may leverage it and create more interesting stuff. 
>> > 
>> > Then it occurred to me that it would be nice to have this cleaner 
>> > included in the set of puppet's face applications and maintained as 
>> part 
>> > of puppet's source code tree. Everybody would benefit from having an 
>> > integrated and up to date puppet manifest cleaner. 
>> > 
>> > What do you think? I'm of course volunteering to help to work on it. 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google 
>> > Groups "Puppet Developers" group. 
>> > To unsubscribe from this group and stop receiving emails from it, send 
>> > an email to [email protected]. 
>> > To post to this group, send email to [email protected]. 
>> > Visit this group at http://groups.google.com/group/puppet-dev?hl=en. 
>> > For more options, visit https://groups.google.com/groups/opt_out. 
>> > 
>> > 
>>
>>
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/puppet-dev?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to