Re: Implement additional Hints for existing Language

Alex Muthmann <[email protected]>
Newsgroups gmane.comp.java.netbeans.modules.openide.devel
Message-ID <[email protected]>
Can you give me an example for this approach? I already had a look into 
this, but I was only able to find the possiblity to implement a "Java 
Hint".
Also the Wizard for Module Development does not provide anything that 
looks even vaguely correct.



Am 2016-10-09 13:38, schrieb geertjan wielenga:
> Why not extend the existing HTML editor instead of creating a Sightly
> editor? I.e., maybe don't create SightlyLanguage at all and use the
> HTML extension points in NetBeans? You can embed one language in
> another, if needed.
> 
> Gj
> 
> On 9-10-2016 13:27, Alex Muthmann wrote:
>> Ok :)
>> 
>> Some time ago, Adobe published a new Templating Language (Sightly) 
>> which is afaik currently only used in Adobe's Experience Manager 
>> (AEM). Most of the work is done in html files which may contain 
>> special tags evaluated by the Sightly-Compiler (e.g. <div 
>> data-sly-test='${foobar}>)
>> 
>> To simplify work, I implemented a Plugin for Netbeans that provides 
>> Autocompletion for those tags 
>> (http://wcm.io/tooling/netbeans/sightly/). But as I've got some spare 
>> time now, I'd like to extend the plugin to provide additional Hints 
>> for wrong tags, invalid code etc.
>> 
>> Netbeans uses a combination of the interface GsfLanguage and 
>> HintProvider to supply hints. The Language has to be annotated with 
>> LanguageRegistration and a matching mimeType:
>> 
>> @LanguageRegistration(mimeType="text/html", useMultiview = true)
>> 
>> As Sightly is a mere extension of the featureset of the Html-Language 
>> (implemented in org.netbeans.modules.html.editor.gsf.HtmlLanguage), I 
>> need to register my Language "SightlyLanguage" on the mimeType 
>> "text/html". At this point I'd expect Netbeans to use both 
>> HintProviders provided by HtmlLanguage AND SightlyLanguage but somehow 
>> only the later one is used.
>> I did some research here and found the "getLanguageByMimeType" method 
>> in org.netbeans.modules.csl.core.LanguageRegistry which only returns a 
>> single Language for a given mimetype. Based on this finding, my 
>> assumption is, that Netbeans does not allow multiple Language 
>> registered on the same mimetype.
>> 
>> So now I'm looking for a way to either bypass this limitation or get 
>> Netbeans to use my Hints in another way.
>> 
>> I hope this is a better description of my problem?
>> 
>> 
>> 
>> Am 2016-10-09 12:30, schrieb geertjan wielenga:
>>> On 9-10-2016 12:28, Alex Muthmann wrote:
>>>> I'm sorry to repeat myself but my problem is not, that I'm unable to 
>>>> implement and register a hint but that it does seem to be 
>>>> impossible, to add hints to an existing Language.
>>> 
>>> I don't understand. JavaScript is an existing language. If you want 
>>> to
>>> add hints to an existing language, e.g., JavaScript, then you create
>>> rules and register them in the layer.
>>> 
>>>> If I would like to implement a new language with a new mimetype etc, 
>>>> I would not have to ask those questions.
>>>> 
>>>> All I need is an advice, how multiple Languages can be registered on 
>>>> the same mimetype OR if there is another way to add hints.
>>> 
>>> No, I don't understand at all.
>>> 
>>> This is the first I'm hearing in this thread about multiple 
>>> languages.
>>> 
>>> Can you explain in a lot more detail the context of what you're 
>>> trying to do.
>>> 
>>> Gj
>>> 
>>> 
>>>> 
>>>> 
>>>> Am 2016-10-09 12:24, schrieb geertjan wielenga:
>>>>> Now that you have a HintsProvider, you need to implement Rules 
>>>>> (pic-1)
>>>>> and register them in the layer (pic-2).
>>>>> 
>>>>> Gj
>>>>> 
>>>>> On 9-10-2016 12:18, Alex Muthmann wrote:
>>>>>> Please have a look at the github links I provided, you'll see, 
>>>>>> that I already have both Language and HintsProvider implemented.
>>>>>> 
>>>>>> Also both classes you mention do NOT cover my use case as they are 
>>>>>> mere Hints used in JsHintsProvider, which is used in JsLanguage 
>>>>>> (registered on text/javascript). So this does not add a new HTML 
>>>>>> hint in a module but implements a completely new Language :(
>>>>>> 
>>>>>> Am 2016-10-09 12:10, schrieb geertjan wielenga:
>>>>>>> Look at org.netbeans.modules.javascript2.editor.hints.JsAstRule 
>>>>>>> or
>>>>>>> JsConventionHint. Also you have to implement HintsProvider.
>>>>>>> 
>>>>>>> Gj
>>>>>>> 
>>>>>>> On 9-10-2016 11:50, Alex Muthmann wrote:
>>>>>>>> yes, exactly, that would be awesome!
>>>>>>>> 
>>>>>>>> Am 2016-10-09 11:42, schrieb geertjan wielenga:
>>>>>>>>> So, to be clear, if I show an example of how to create a new 
>>>>>>>>> plugin
>>>>>>>>> that adds a new HTML hint in NetBeans IDE, that's what you're 
>>>>>>>>> looking
>>>>>>>>> for?
>>>>>>>>> 
>>>>>>>>> Gj
>>>>>>>>> 
>>>>>>>>> On 9-10-2016 11:39, Alex Muthmann wrote:
>>>>>>>>>> Yes, this is what I (of course) did first, I also had a deeper 
>>>>>>>>>> look into the Netbeans sources but there was no implementation 
>>>>>>>>>> covering my requirement (extend an existing language). It 
>>>>>>>>>> looks easy to implement a new one, but if you need to use an 
>>>>>>>>>> already registered mimeType it gets fuzzy :(
>>>>>>>>>> 
>>>>>>>>>> Am 2016-10-09 01:13, schrieb geertjan wielenga:
>>>>>>>>>>> I'll try to take a look but if I were you I'd go to Google 
>>>>>>>>>>> and search
>>>>>>>>>>> for 'getHintsProvider' to see how others have implemented 
>>>>>>>>>>> that -- I
>>>>>>>>>>> can see many implementations when I do that.
>>>>>>>>>>> 
>>>>>>>>>>> Gj
>>>>>>>>>>> 
>>>>>>>>>>> On 8-10-2016 20:57, Alex Muthmann wrote:
>>>>>>>>>>>> Hi,
>>>>>>>>>>>> 
>>>>>>>>>>>> thanks for your reply.
>>>>>>>>>>>> 
>>>>>>>>>>>> You can find the code here:
>>>>>>>>>>>> https://github.com/wcm-io/wcm-io-tooling/tree/netbeans-sightly-hints 
>>>>>>>>>>>> SightlyLanguage.java: 
>>>>>>>>>>>> https://github.com/wcm-io/wcm-io-tooling/blob/netbeans-sightly-hints/netbeans/sightly/src/main/java/io/wcm/tooling/netbeans/sightly/editor/SightlyLanguage.java
>>>>>>>>>>>> SightylHintsProvider: 
>>>>>>>>>>>> https://github.com/wcm-io/wcm-io-tooling/blob/netbeans-sightly-hints/netbeans/sightly/src/main/java/io/wcm/tooling/netbeans/sightly/editor/hints/SightlyHintsProvider.java
>>>>>>>>>>>> 
>>>>>>>>>>>> I added some exceptions, so I would expect to see those as 
>>>>>>>>>>>> soon, as the language is called successfully.
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Am 2016-10-08 12:21, schrieb geertjan wielenga:
>>>>>>>>>>>>> On 7-10-2016 0:26, Alex Muthmann wrote:
>>>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> there has already be a discussion with Geertjan and Petr 
>>>>>>>>>>>>>> regarding the options to implement additional Hints for an 
>>>>>>>>>>>>>> existing language. I need to add additional Hints for HTML 
>>>>>>>>>>>>>> files and the consensus was, that I should use the CSL API 
>>>>>>>>>>>>>> to implement a Language and add a HintProvider.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I did some basic tests
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Put your code on GitHub and send a link to it here so we 
>>>>>>>>>>>>> can all see
>>>>>>>>>>>>> the code rather than text.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Gj
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> but ran into the following situation:
>>>>>>>>>>>>>> As soon as I register a new Language XYZ which uses the 
>>>>>>>>>>>>>> mimeType text/html, the build-in HTML Language does not 
>>>>>>>>>>>>>> work anymore (no hints, no code-completion etc). I'd 
>>>>>>>>>>>>>> expect that all languages registered on a mimeType are 
>>>>>>>>>>>>>> used and not only one of those.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I was not able to find this use-case in the netbeans 
>>>>>>>>>>>>>> source-code and I'm currently lost :(
>>>>>>>>>>>>>> Could somebody probably provide an example of a working 
>>>>>>>>>>>>>> extension of an existing language or an alternative to the 
>>>>>>>>>>>>>> implementation of a complete new language?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Thank you very much,
>>>>>>>>>>>>>> Alex Muthmann
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.