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]> |
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