Re: Implement additional Hints for existing Language
Alex Muthmann <[email protected]>
| Newsgroups | gmane.comp.java.netbeans.modules.openide.devel |
|---|---|
| Message-ID | <[email protected]> |
> But that's my question. Do you really need your own Language at all?
No, I'd be happy to skip the complete "implement a Language foobar"
step.
> ...and even embed one
> Language into another.
No I can't cause I have no clue, how this would be possible and neither
the Netbeans Sources nor Google provides any concrete example here :(
Am 2016-10-09 14:11, schrieb geertjan wielenga:
> 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