Re: Implement additional Hints for existing Language

geertjan wielenga <[email protected]>
Newsgroups gmane.comp.java.netbeans.modules.openide.devel
Organization Oracle Corporation
Message-ID <[email protected]>
On 9-10-2016 14:08, Alex Muthmann wrote:
>> Really look in the source code, see the
>> 'html.editor\src\org\netbeans\modules\html\editor\hints' package for
>> example, i.e., in the 'html.editor' module.
> Sorry, no offense but this does not help me :( I already had a deeper 
> look into the source code, otherwise I'd not ask here.
>
> All Rules/Hints in 
> html.editor\src\org\netbeans\modules\html\editor\hints are used in the 
> HTMLLanguage and NOT in an extension of it. I really can't see any 
> option to implement a Rule without a matching Language providing it.

But that's my question. Do you really need your own Language at all?

Or do you have additional elements etc to add to the existing HTML 
Editor in NetBeans? I.e., you can add elements etc and even embed one 
Language into another.

Gj



>
> Am 2016-10-09 13:51, schrieb geertjan wielenga:
>> On 9-10-2016 13:49, Alex Muthmann wrote:
>>> 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".
>>
>> Really look in the source code, see the
>> 'html.editor\src\org\netbeans\modules\html\editor\hints' package for
>> example, i.e., in the 'html.editor' module.
>>
>>> Also the Wizard for Module Development does not provide anything 
>>> that looks even vaguely correct.
>>
>> There are hundreds of things that can be done with NetBeans APIs that
>> are not supported by the wizards...
>>
>> Gj
>>
>>>
>>> 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.